使用框填充文本至右边距

使用框填充文本至右边距

我经常使用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,即使描述可能非常简短。

相关内容