我经常使用eqnarray
(我知道最好使用align
,但除非它会改变答案,否则我们不必担心这个问题)来列出一堆符号的定义或描述。以下是一个例子:
\begin{eqnarray*}
f & \text{:} & \begin{minipage}[t]{\textwidth}The objective function that we're trying to maximize.\end{minipage} \\
h & \text{:} & \begin{minipage}[t]{\textwidth}The concave heuristic function that we can use to approximate $f$.\end{minipage}
\end{eqnarray*}
得出的结果为:
然而,一个常见的问题是,如果我的描述太长,它们会超出页面末尾。我发现这minipage
可以解决这种情况。我尝试过这样的方法:
\begin{eqnarray*}
\sqrt{\sin{f-g}} & \text{:} & \begin{minipage}[t]{\textwidth}This is the description of a function but unfortunately goes past the right margin over the edge of the page.\end{minipage}
\end{eqnarray*}
但是,这会导致内容超出右边距,如下所示:
解决这个问题的一个方法是手动计算出这个minipage
块应该有多“长”,然后使用该测量值而不是\textwidth
上面的代码块。这种方法不够灵活,每当我的方程式的长度发生变化时,就需要进行更改。如何使用框/环境/其他解决方案在文本达到页面的绝对右边距时自动开始换行?我想要的输出看起来像这样:
谢谢你!
答案1
以下选项使用tabularx
设置列表/描述,因此不能跨越页面边界:
\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{tabularx}% http://ctan.org/pkg/tabularx
\newenvironment{mylist}
{\par\centering\vspace{\abovedisplayskip}%
\tabularx{\linewidth}{@{}l@{~:~}X@{}}}
{\endtabularx
\par\vspace{\belowdisplayskip}}
\begin{document}
\lipsum[2]
\begin{mylist}
$f$ & The objective function that we're trying to maximize. \\
$h$ & The concave heuristic function that we can use to approximate~$f$\kern-.2em. \\
$g$ & \lipsum*[2]
\end{mylist}
\lipsum[2]
\begin{mylist}
$f$ & The objective function that we're trying to maximize. \\
$h$ & The concave heuristic function that we can use to approximate~$f$\kern-.2em.
\end{mylist}
\lipsum[2]
\end{document}
您必须使用X
-column 才能从tabularx
的自动调整列大小功能中受益。我还使用了\linewidth
而不是,因为如果您在其他类似列表的环境中(其中可能太宽),\textwidth
前者更合适。作为参考,请参阅\textwidth
\textwidth
和\linewidth
之间的区别\hsize
。
为了方便使用,我只使用了两列,中间一列总是为冒号 ( ~:~
)。它只是为了提高一致性而设置一个通用设置,而不是毫无理由地重复输出。
请注意,您的mylist
环境将总是具有宽度\linewidth
,即使描述可能非常简短。