将括号放在逐项列表中

将括号放在逐项列表中

我正在尝试创建两个用括号分成不同类别的项目符号列表。如下所示:

在此处输入图片描述

我在 Google 上搜索了一下,发现了一些相关的问题,例如:如何在项目列表的右侧创建跨越多行的括号?如何将花括号放在偶数个项目符号前面?

这是我编写的代码:

\documentclass[notoc,numbers]{tufte-book}
\usepackage{amsmath}

\begin{document}

\begin{itemize}
    \item DTP 
    \item HIB 
    \item MMR $\smash{\left.\rule{0pt}{.4\dimexpr5\baselineskip+5\itemsep+4\parskip}\right\}
        \text{1981-2017}}$
    \item POL 
    \item HEP B $\smash{\left.\rule{0pt}{.1\dimexpr1\baselineskip+0\itemsep+0\parskip}\right\}
        \text{1992-2017}}$
\end{itemize}

and:

\begin{itemize}
    \item Diphteria 
    \item Measles 
    \item Mumps
    \item Pertussis \smash{\raisebox{.8\dimexpr\baselineskip+\itemsep+\parskip}{%
            $\left.\rule{0pt}{.8\dimexpr4\baselineskip+3\itemsep+3\parskip}\right\}$
            1981-2016}}
    \item Polio
    \item Rubella
    \item Tetanus
\end{itemize}

\end{document}

结果:

在此处输入图片描述

有一些错误,但我不知道如何解决。

谢谢

答案1

我真的建议您使用 Tikz 解决方案之一来解决您链接的问题。但是,按照您当前的方法,您应该这样做:

\documentclass{article}
\usepackage{amsmath}

\begin{document}
\begin{itemize}
    \item DTP 
    \item HIB 
    \item MMR \smash{\raisebox{.5\dimexpr\baselineskip+\itemsep+\parskip}{$\left.\rule{0pt}{.5\dimexpr4\baselineskip+3\itemsep+3\parskip}\right\}\text{1981-2017}$}}
    \item POL
    \item HEP B \} 1992-2017
\end{itemize}

 and:

\begin{itemize}
    \item Diphteria 
    \item Measles 
    \item Mumps
    \item Pertussis \smash{$\left.\rule{0pt}{.5\dimexpr7\baselineskip+6\itemsep+6\parskip}\right\}$ 1981-2016}
    \item Polio
    \item Rubella
    \item Tetanus
\end{itemize}
\end{document}

在此处输入图片描述

让我们思考一下为什么这样做有效:

  • \smash:“顾名思义,\smash获取其内容并将其打印出来,就好像它的高度和深度为零一样”(来源)。这里的意思是,你可以使用非常大的括号,而不会影响周围的文本。
  • \left. ... \right\}:使用\left和 ,\right您可以打印足够大的分隔符来容纳它们之间打印的任何内容。对于第一个分隔符,我们选择.表示“无分隔符”(因此我们仅使用它来定义用于定义高度的区域),对于第二个分隔符,选择括号。因此,我们需要在它们之间放置足够大的东西,以强制括号具有所需的高度。
  • \rule{0pt}{...}:这将打印零宽度的规则,即,它不会打印可见规则,但仍保留第二个参数指定的规则的高度。
  • .5\dimexpr4\baselineskip+3\itemsep+3\parskip\baselineskip:这并不像看起来那么复杂。我们只需将(常规文本行的高度)的四倍、 \itemsep(两个项目之间的额外距离)的三倍和(两个段落之间的通常间距)的三倍相加\parskip即可。总和给出了四行项目的总高度。此总和的一半取为不可见的高度\rule。为什么是一半?因为规则没有深度即不低于基线,但括号在基线上方和下方占用相同的空间。因此,要获得与四行项目一样高的括号,您需要遵循该高度一半的规则。(试着\rule{1pt}想象一下)
  • \raisebox{...}{...}: 这升降机第二个参数给出的文本与第一个参数给出的高度之比。为什么我们需要这样做?在第二个列表中,您希望跨越奇数个项目,因此将括号放在中间项目上会直接为您提供正确的位置。然而,在第一个列表中,您希望跨越偶数个项目。因此,如果您将其放在第三个\item,它将低半行。
  • .5\dimexpr\baselineskip+\itemsep+\parskip:因此,这是您希望提升第一个括号的高度:常规行的高度 + 两个段落之间的间距 + 两个项目之间的额外间距的一半。

现在,当您转到具有不同数量的\items 的其他示例时,您必须考虑以下几点:

  • 要跨越单个项目,您实际上不需要执行任何操作。只需使用 打印括号即可\}
  • 要跨越奇数个项目,只需取\smash\rule{0pt}部分,并将作为高度,.5\dimexprX\baselineskip+Y\itemsep+Y\parskip其中X是项目数,并且Y比项目数少一个。切勿更改.5前面的!
  • 要跨越偶数个项目,您必须另外拥有该\raisebox{.5\dimexpr\baselineskip+\itemsep+\parskip}部分,但您不需要触及这里的高度!

相关内容