我想要一个大括号来显示一组文本与另一组文本之间的关系,如下所示:
Nam dui ligula, fringilla a, )
euismod sodales, sollicitudin )
vel, wisi. Morbi auctor lorem ) Nulla malesuada porttitor diam. Donec felis erat,
non justo. Nam lacus libero, ) congue non, volutpat at, tincidunt tristique, libero.
pretium at, lobortis vitae, ) Vivamus viverra fermentum felis.
... )
我想用一个比例花括号)
来代替一排圆括号}
。我希望改变括号的大小以填充“较长”一侧的垂直文本量。
以下是对我的 ASCII 能力的测试,描述了我想要的内容(显然,这些线条是作为括号的一个字形的一部分):
Nam dui ligula, fringilla a, euismod sodales, sollicitudin |
vel, wisi. Morbi auctor lorem \ Nulla malesuada porttitor diam. Donec felis erat,
non justo. Nam lacus libero, > congue non, volutpat at, tincidunt tristique, libero.
pretium at, lobortis vitae, / Vivamus viverra fermentum felis.
... |
/
在退化的情况下,我想要:
Nam dui ligula, fringilla a. } Nulla malesuada portitor diam.
当文本的一侧或另一侧变大时,我希望括号至少增长到与文本较高侧的高度一样高。
我使用 Tex 的起点是:
\documentclass[12pt]{memoir}
\usepackage{fontspec,xltxtra,xunicode}
\usepackage{lipsum}
\begin{document}
\begin{tabular}{lcr}
\parbox{0.425\textwidth}{\lipsum[2]}%
& )%
& \parbox{0.425\textwidth}{\lipsum[3]} \\
\end{tabular}
\end{document}
显然,在上述情况下,我们最终得到的是小的、静态大小的)
,而不是按比例大小的}
,但这只是我正在思考的一个例子。
过去,我通过为 选择一个足够大的字体来避免这个问题}
。该技术需要不必要的“目测”,而我希望避免这种情况。
我在数学模式中使用了括号,如下所示:
\begin{math}
\left[% superfluous
\parbox{0.425\textwidth}{\lipsum[2]}%
\right\}%
\parbox{0.425\textwidth}{\lipsum[3]}
\end{math}
这是正确的概念,除了 (1) 括号与左侧成比例;以及 (2) 有一个多余的左括号。
我很感激任何想法和建议。
感谢您的阅读。
编辑:相关问题:
答案1
您可以使用\vphantom
来调整大小,以便使用最大值。下面的宏有 4 个参数:
- parbox 的宽度。如果要允许不同的宽度,可以调整此宏以采用两个参数,每个宽度一个。此参数是可选的,默认为
0.425\textwidth
。 - 您想要使用的支架。
- 左边的内容
\parbox
- 权利内容
\parbox
带花括号后的样子如下:\RelatedText{\}}{\lipsum[2]}{\lipsum[3]}
\documentclass[12pt]{memoir}
\usepackage{lipsum}
\newcommand{\RelatedText}[4][0.425\textwidth]{%
\begin{math}%
\left.%
\parbox{#1}{#3}\vphantom{\parbox{#1}{#4}}%
\right#2%
\parbox{#1}{#4}\vphantom{\parbox{#1}{#3}}%
\end{math}
}%
\begin{document}
\RelatedText{)}{\lipsum[2]}{\lipsum[3]}% Use a round )
\RelatedText{\}}{\lipsum[2]}{\lipsum[3]}% Use a curly }
\RelatedText{]}{\lipsum[2]}{\lipsum[3]}% Use a square ]
\end{document}
答案2
请记住,您可以提供一个空的可扩展分隔符来匹配非空分隔符。这可以使用(例如)\left.
或\right.
来表示缺失的分隔符。我在下面的解决方案中使用了这种方法。
将左侧文本块放在一个框中(称为\leftbox
),将右侧文本块放在另一个框中(称为\rightbox
)。使用环境很容易做到这一点lrbox
。然后,为了确保对齐尽可能大,\rule
可以使用“不可见”。
\lrboxbrace[<lwidth>]{<ltext>}[<rwidth>]{<rtext>}
在下面的 MWE 中,提供了命令。它<ltext>
在minipage
宽度为 的中排版<lwidth>
,在宽度为 的<rtext>
中排版。带星号的版本使用环境(来自minipage
<rwidth>
*
varwidth
varwidth
包裹)。实际显示是在数学模式下使用 进行的\ensuremath
,允许将其置于现有的数学模式(如$...$
或\[...\]
)或文本模式:
\documentclass{article}
\usepackage[margin=15mm]{geometry}% http://ctan.org/pkg/geometry
\usepackage{xparse}% http://ctan.org/pkg/xparse
\usepackage{varwidth}% http://ctan.org/pkg/varwidth
\begin{document}
\newsavebox{\leftbox} \newsavebox{\rightbox}%
\NewDocumentCommand{\lrboxbrace}{s O{0.4\linewidth} m O{0.4\linewidth} m}{% \lrboxbrace[<lwidth>]{<ltext>}[<rwidth>]{<rtext>}
\begin{lrbox}{\leftbox}% Left box
\IfBooleanTF{#1}% starred/unstarred
{\begin{varwidth}{#2}#3\end{varwidth}}
{\begin{minipage}{#2}#3\end{minipage}}
\end{lrbox}
\begin{lrbox}{\rightbox}% Right box
\IfBooleanTF{#1}% starred/unstarred
{\begin{varwidth}{#4}#5\end{varwidth}}
{\begin{minipage}{#4}#5\end{minipage}}
\end{lrbox}
\ensuremath{\left.\usebox\leftbox\rule{0pt}{\ht\rightbox}\right\}\usebox\rightbox}
}
\begin{center}
\lrboxbrace%
{Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed eleifend tincidunt enim, eu tincidunt felis auctor quis. Aenean
eget enim urna.}%
{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifend
tincidunt enim, eu tincidunt felis auctor quis. Aenean eget enim urna.
Pellentesque tincidunt adipiscing velit a fermentum. \endgraf
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifend
tincidunt enim, eu tincidunt felis auctor quis. Aenean eget enim urna.
Pellentesque tincidunt adipiscing velit a fermentum.}
\end{center}
\begin{center}
\lrboxbrace%
{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifend
tincidunt enim, eu tincidunt felis auctor quis. Aenean eget enim urna.
Pellentesque tincidunt adipiscing velit a fermentum. \endgraf
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifend
tincidunt enim, eu tincidunt felis auctor quis. Aenean eget enim urna.
Pellentesque tincidunt adipiscing velit a fermentum.}
{Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed eleifend tincidunt enim, eu tincidunt felis auctor quis. Aenean
eget enim urna.}%
\end{center}
\begin{center}
\lrboxbrace*% starred version
{A short sentence.}
{And another.}%
\end{center}
\begin{center}
\lrboxbrace%
[60pt]{Here is some different text that should be split}%
[120pt]{This is another line that is actually wider than the box
on the left. It should span five lines in total (one more
than the left box).}
\end{center}
\end{document}
geometry
只是为了增加利润。xparse
提供可以轻松混合可选参数和强制参数的接口。
这种方法的一个缺点是段落的使用略有限制。这是可能的,但需要使用\endgraf
而不是\par
或空行。然而,由于这未包含在原始请求中,因此这可能不是问题。
答案3
您可以使用 来删除多余的左括号,\left.
并使用 根据两侧的高度进行缩放\vphantom
。下面的解决方案使用 Scratch Box 来提高效率。
\newbox\braceboxa
\newbox\braceboxb
\makeatletter
\newcommand\braced[2]
{\setbox\braceboxa\hbox{\parbox{0.45\linewidth}{#1}}%
\setbox\braceboxb\hbox{\parbox{0.45\linewidth}{#2}}%
\hbox to \linewidth
\bgroup \hss \copy\braceboxa\hss
\m@th$\left.\vphantom{\copy\braceboxa\copy\braceboxb}\right\}$%
\hss\copy\braceboxb\hss
\egroup}
\makeatother
请注意,我正在缩放到\linewidth
而不是,\textwidth
并在适当的位置添加\hss
,以便剩余的空白0.1\linewidth
均匀分布。
答案4
构建两个等宽列的另一种解决方案:
\documentclass[a4paper]{article}
\newenvironment{reltext}[1][1]
{\calcreltextwd{#1}%
\begin{center}\hbox to\linewidth\bgroup\hss
$\mathsurround=0pt\nulldelimiterspace=0pt
\bgroup\left.\begin{minipage}{\reltextwd}
\vspace*{2pt}}
{\vspace*{2pt}\end{minipage}\checkreltext$\hss\egroup\end{center}}
\newcommand{\righttext}{\end{minipage}\right\rbrace\egroup
\def\righttextgiven{}\begin{minipage}{\reltextwd}}
\newcommand{\checkreltext}{%
\ifdefined\righttextgiven\else\right\rbrace\egroup\fi}
\newcommand{\calcreltextwd}[1]{%
\sbox0{$\nulldelimiterspace=0pt{\left.\vbox to 100pt{}\right\rbrace}$}%
\edef\reltextwd{\the\dimexpr(#1\linewidth-\wd0)/2\relax}}
\usepackage{lipsum}
\begin{document}
\lipsum[2]
\begin{reltext}
\lipsum*[3]
\righttext
\lipsum*[2]
\end{reltext}
\lipsum[2]
\newpage
\lipsum[2]
\begin{reltext}[.8]
\lipsum[4]
\righttext
\lipsum[4]
\end{reltext}
\end{document}
该命令\righttext
将左侧文本与右侧文本分开;如果未指定,则会很清楚,因为大括号右侧没有任何内容。
环境的可选参数(默认值为 1)是对象总宽度相对于线宽的“比例因子”。
该\nulldelimiterspace
设置旨在删除 TeX 在查找\left.
或 时通常放置的空格\right.
。补充括号用于避免出现“内部原子”。