LaTeX:数学外可伸缩花括号

18

我正在制作一些LaTeX Beamer幻灯片(但我认为这不是一个特定于Beamer的问题)。

我有以下内容:

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

现在,我想要在覆盖issue1和issue2的项目后面添加一个右花括号(即“}”),并且当然我希望能够在这个花括号后面写点东西。

在完美的世界里,我会这样写:

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

由于我不在数学环境中,因此这并不起作用。如果将整个代码段放入数学环境中,那么itemize也将无法工作。

有没有一种简洁的解决方案或技巧可以实现我的期望结果?

问候, Bastian。


这不是只有 } 而不是 \} 吗? - Paul
你是对的。(在此之前,代码片段没有被格式化,所以我不得不写 '\}' 来让 '}' 出现。编辑后,我忘记删除反斜杠了。) - cknoll
6个回答

21

我会使用tikz并创建一个覆盖层。

首先包含正确的包(如果您使用的是beamer,可能不需要包含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值向上移了半行,也许再多一些会更好。)

因为我们使用了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”选项,并添加以下内容以自动将remember添加到所有图片中。
\tikzstyle{every picture}+=[remember picture]

太棒了!我在下面发布了一个修改后的示例。非常感谢。 - cknoll
我以前从未使用过这个,当项目长度不相同时,它可能不太美观。在这种情况下,您可能需要为\node设置一些硬性的x值,或者使用一些橡胶宽度,例如\hspace{2in}。我相信还有一些聪明的tikz方法可以计算两个节点的最大x值。 - Geoff
更新以处理具有不同宽度的项目,使用 ESultanik 的答案。 - Geoff
第一个对我有用的建议!太好了!n3是花括号“中间的点”吗? - Verena Haunschmid
我认为N3是第二个圆点右侧的点,直接位于第一个圆点右侧的下方。 - Geoff

11
你可以(滥用)使用一个表格来代替:

你可以(滥用)使用一个表格来代替:

\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链接


@Mark,谢谢,尽管当在3行或更多行上生成}时,它可能会变得太宽。但这将是basweber应该/会自己尝试并看到的事情。 - Bart Kiers
是的,生成3个或更多项在我的愿望清单上。 ;) 还有另一个问题:$\bullet$ 看起来与itemize环境的默认符号不同(在beamer文档中)。 - cknoll
2
使用\textbullet代替$\bullet$ - Geoff

6
这是Geoff的代码,稍作修改(仅适用于其他beamer用户)
\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}

结果(该帧的第二张幻灯片):

beamer result

适应性调整如下:

  • 添加了visible命令(因为我认为它对于稍后混合括号很有用)
  • 使项目更加复杂,因此需要使用xshift(我通过尝试和错误来确定xshift值,所以这是一丝苦涩)编辑2018-12-23:手动尝试和错误的移位可以通过使用方法克服:(n1 -| n2) -- (n2)而不是(n1) -- (n2)

是的,“xshift”这个东西也让我很苦恼。我知道有一种方法来计算两个节点的最大x值,但我不太熟悉tikz。 - Geoff
我开了一个新的问题:https://dev59.com/KE3Sa4cB1Zd3GeqPwp6E让我们看看是否有人能提出一个好的解决方案。 - cknoll
好的。我正考虑这样做。我已经浪费了很多时间试图自己解决它。有很多不错的Tikz示例,但它非常灵活,很难找到确切的需要(或认为需要)的东西。 - Geoff

3

解决这个问题的一种方法是使用数学环境,如align,手动添加圆点(使用\bullet),然后利用数学环境的资源来制作大括号等。


我曾考虑过这个问题(但不知道 $\bullet$ 具体是什么)。 在 beamer 文档中,是否有办法生成类似于 itemize 环境中默认符号的符号?如果有的话,这个解决方案似乎非常适用。 - cknoll

0

我曾经做过类似的事情。我让列表在左侧列出,在右侧列中,我使用了$\right\}$这个东西,使它与一些\mbox或其他东西一样高(我用\vphantom或类似的东西决定)。不幸的是,我现在没有时间去找出来...实际上,我现在根本没有时间来到SO ;)


2
@aioobe,这和其他解决方案一样丑陋。 - aioobe
1
你现在是在自言自语吗? :) - Bart Kiers
想在别人之前放置那个注释 ;) - aioobe

0

我尝试了我的想法,如下。它不起作用:不幸的是,由项目环境产生的vboxes都具有\textwidth的宽度。

我的建议的UI很好,通过重新定义\item,应该可以使项目vboxes具有合理的宽度。或者计算包含项目的vboxes的合理宽度。但是,由于已经有功能性解决方案,我不会再花时间在这上面了。

\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 第1行 \begin{groupeditems}{第2行和第3行在一起!} \item 第2行 \item 第3行 \end{groupeditems} \item 第4行 \end{itemize}
\end{document}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接