我想要创建这个:
以下代码可以实现这一点,但在日志中会产生大量溢出的 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}