Латекс: растягиваемые фигурные скобки вне математики - PullRequest
17 голосов
/ 05 мая 2010

Я делаю несколько слайдов из латексного проектора (но я думаю, что это не вопрос для конкретного проектора как таковой).

У меня есть следующее:

\begin{itemize}
\item Issue1
\item Issue2
\item Issue3
\end{itemize}

Теперь я хочу иметь правильную фигурную скобку (т. Е. '}') За элементами, расположенными над выпуском 1 и выпуском 2. И, конечно, я хочу написать кое-что за этой фигурной скобкой.

В идеальном мире я бы написал что-то вроде:

\begin{itemize}
\left .
\item Issue1
\item Issue2
\right \} One and Two are cool
\item Issue3
\end{itemize}

Это не работает, потому что я не нахожусь в математической среде, и я не могу поместить весь фрагмент в математическую среду, потому что itemize не будет работать в этом случае.

Есть ли чистый раствор или взлом, чтобы получить желаемый результат?

С уважением, Бастиан.

Ответы [ 6 ]

21 голосов
/ 05 мая 2010

Я бы использовал tikz и сделал бы наложение.

Сначала включите правильные пакеты (вам может не понадобиться включать tikz, так как это вопрос проектора):

\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}

Затем, когда вы составляете свой список, присваивайте названия местам после каждого элемента:

\begin{itemize}
    \item Issue 1     
        \tikz[remember picture] \node[coordinate,yshift=0.5em] (n1) {}; 
    \item Issue 2
        \tikz[remember picture] \node[coordinate] (n2) {};
    \item Issue 3
\end{itemize}

( Примечание: Я сдвинул значение y на 1/2 строки, может быть, больше будет лучше.)

Поскольку мы использовали remember picture, мы можем ссылаться на эти места в наложении:

  \begin{tikzpicture}[overlay,remember picture]
      \path (n2) -| node[coordinate] (n3) {} (n1);
      \draw[thick,decorate,decoration={brace,amplitude=3pt}]
            (n1) -- (n3) node[midway, right=4pt] {One and two are cool};
  \end{tikzpicture}

Путь для работы с предметами, которые не имеют одинаковую ширину. Это изменение взято из ответа ESultanik .

Результат:

alt text

Примечание : Вы можете удалить все опции remember picture и добавить следующее, чтобы автоматически добавить запомнить все фотографии:

\tikzstyle{every picture}+=[remember picture]
11 голосов
/ 05 мая 2010

Вы можете (ab) использовать таблицу вместо:

\documentclass{article}
\usepackage{multirow}

\begin{document}

\begin{tabular}{ll}

\textbullet Issue 1 & \multirow{2}{*}{{\LARGE \}} One and Two are cool} \\
\textbullet Issue 2                                                     \\
\textbullet Issue 3                                                     \\

\end{tabular}

\end{document}

производит:

удалена мертвая ссылка Imageshack

6 голосов
/ 05 мая 2010

Вот код Джеффса с некоторыми небольшими изменениями (только для других пользователей проекторов)

\begin{frame}{Example}

\begin{itemize}
\item The long Issue 1
\tikz[remember picture] \node[coordinate,yshift=0.7em] (n1) {}; \\
spanning 2 lines


\item Issue 2
  \tikz[remember picture] \node[coordinate, xshift=1.597cm] (n2) {};
\item Issue 3

\end{itemize}

\visible<2->{
\begin{tikzpicture}[overlay,remember picture]
  \draw[thick,decorate,decoration={brace,amplitude=5pt}]
        (n1) -- (n2) node[midway, right=4pt] {One and two are cool};
\end{tikzpicture}
 } % end visible

\end{frame}

Ressult (2-й слайд этого кадра):

beamer result

Адаптации:

  • добавлена ​​команда visible (потому что я думаю, что полезно добавить в скобку позже)
  • сделал элементы более сложными, поэтому использование xshift стало необходимым (я выяснил значение xshift просто методом проб и ошибок, так что это капля горечи) Edit 2018-12-23: Ручное переключение методом проб и ошибок можно преодолеть, используя этот метод: (n1 -| n2) -- (n2) вместо (n1) -- (n2).
3 голосов
/ 05 мая 2010

Один из способов обойти это - использовать математическую среду, такую ​​как выравнивание, поместить маркеры вручную (с помощью \ bullet), а затем использовать ресурсы математической среды для больших фигурных скобок и тому подобного.

0 голосов
/ 06 мая 2010

Я попробовал свою идею ниже. Это не работает: к сожалению, все vbox, созданные средой itemize, имеют ширину \textwidth.

Пользовательский интерфейс моего предложения хорош, и переопределив \item, можно получить разумные значения ширины vbox-ов. Или рассчитайте разумную ширину для ящиков, содержащих элементы. Но поскольку уже есть функциональные решения, я не буду больше тратить на это время.

\documentclass{article}

\def\setgrouptext#1{\gdef\grouptext{#1}}
\newenvironment{groupeditems}{\begin{displaymath}\left.\vbox\bgroup\setgrouptext}{%
  \egroup\right\rbrace\hbox{\grouptext}\end{displaymath}}

\begin{document}

\begin{itemize}
\item Line 1
\begin{groupeditems}{Lines 2 and 3 together!}
\item Line 2
\item Line 3
\end{groupeditems}
\item Line 4
\end{itemize}

\end{document}
0 голосов
/ 05 мая 2010

Я однажды сделал нечто подобное. Я оставил список в столбце слева, а в правом столбце я сделал $\right\}$ - что-то такое же высокое, как у некоторых \mbox или что-то подобное (что я решил с помощью \vphantom или что-то подобное ). К сожалению, у меня нет времени, чтобы выкопать это ... У меня вообще нет времени, чтобы быть в SO прямо сейчас;)

...