列表两边的括号

列表两边的括号

我想要创建这个:

文本两侧带有括号的表格

以下代码可以实现这一点,但在日志中会产生大量溢出的 hbox 和 vbox 语句 - 我该如何摆脱它们?另一方面,如果有更好的方法,我也想知道。

\documentclass[12pt]{article}

\usepackage{array,multirow}

\renewcommand{\arraystretch}{1}

\newlength{\tblboxvsize}

%% Adjust for a redefined \arraystretch
\makeatletter
\def\getcellvsize{% 
    \setlength{\tblboxvsize}{\ht\@arstrutbox}%
    \addtolength{\tblboxvsize}{\dp\@arstrutbox}%
}
\makeatother

\newcommand{\bracenote}[4][8em]{%[width of \vcenter]; l/r; n-rows; text
    \getcellvsize
    \multirow{#3}{#1}{%
        \(
            \ifx#2l%
                \vcenter{%
                    \hsize#1%
                    \raggedright
                    \noindent
                    #4
                }%
                \left\{
            \else
                \left.
            \fi
            \vcenter to #3\tblboxvsize{}%
            \ifx#2r%
                \right\}%
                \vcenter{%
                    \hsize#1%
                    \raggedright
                    \noindent
                    #4%
                }%
            \else
                \right.
            \fi
        \)
    }%
}

\parindent0pt%

\begin{document}

\begin{tabular}{@{}ll@{}ll@{}}
\bracenote[6em]{l}{6}{Some text about all six}& First&\bracenote{r}{4}{Some text about the first four}\\
& Second is rather long& \\
& Third& \\
& Fourth&&\bracenote[10em]{r}{3}{Something about the last three}\\
& Fifth& \\
& Sixth& 
\end{tabular}

\end{document}

答案1

这是一个产生类似输出的构造,但不需要任何包:

在此处输入图片描述

上面的显示是您原来的构造,而下面的显示由以下代码提供:

\documentclass[12pt]{article}

\begin{document}
\[
  \parbox{5em}{\small\raggedright%
    Some text about all six}
  \left\{\begin{array}{@{}l@{}}
    \left.\kern-\nulldelimiterspace\begin{tabular}{@{}l@{}}
      First \\
      Second is rather long \\
      Third \\
      Fourth
    \end{tabular}\hspace*{2\tabcolsep}\right\}\parbox{15em}{\small\raggedright%
      Some text about the first four} \\[-\normalbaselineskip]
    \left.\kern-\nulldelimiterspace\begin{tabular}{@{}l@{}}
      \phantom{Fourth} \\
      Fifth \\
      Sixth
    \end{tabular}\hspace*{2\tabcolsep}\right\}\parbox{15em}{\small\raggedright%
      Something about the last three}
  \end{array}\right.\kern-\nulldelimiterspace
\]

\end{document}

\parbox每个描述文本都使用较小的字体 ( ) 以固定宽度设置\small。您可以根据需要添加水平间距或调整框宽度,具体取决于所需的结果。

答案2

尽管我仍不确定为什么尽管如此,这仍是一个解决方案。解决方案是使用 * 参数表示多行中的宽度。这还需要对 的参数进行一些更改\begin{tabular}。为什么这可以解决水平框和垂直框过满的问题仍然是个谜。

\documentclass[10pt]{article}

\usepackage{multirow}

\renewcommand{\arraystretch}{1}

\newlength{\tblboxvsize}

%% Adjust for a redefined \arraystretch
\makeatletter
\def\getcellvsize{% 
    \setlength{\tblboxvsize}{\ht\@arstrutbox}%
    \addtolength{\tblboxvsize}{\dp\@arstrutbox}%
}
\makeatother

\newcommand{\bracenote}[4][8em]{%[width of \vcenter]; l/r; n-rows; text
    \getcellvsize
    \multirow{#3}{*}{%
        \(
            \ifx#2l%
                \vcenter{%
                    \baselineskip1.2em
                    \hsize#1%
                    \raggedright
                    \noindent
                    #4
                }%
                \left\{
            \else
                \left.
            \fi
            \vcenter to #3\tblboxvsize{}%
            \ifx#2r%
                \right\}%
                \vcenter{%
                    \hsize#1%
                    \baselineskip1.2em
                    \raggedright
                    \noindent
                    #4%
                }%
            \else
                \right.
            \fi
        \)
    }%
}

\parindent0pt%

\begin{document}

\begin{tabular}{@{}l@{}l@{}l@{}}
\bracenote[6em]{l}{6}{Some text about all six}& First&\bracenote{r}{4}{Some text about the first four}\\
& Second is rather long& \\
& Third& \\
& Fourth&\quad\bracenote[10em]{r}{3}{Something about the last three}\\
& Fifth& \\
& Sixth& 
\end{tabular}

\end{document}

相关内容