如何在数学环境中排版多行文本?

如何在数学环境中排版多行文本?

我在用开源TeX在 LaTeX 中渲染 Haskell 代码。它将代码预处理为复杂的 LaTeX 代码,然后在数学环境中渲染(在一种操作模式下)。现在,我在此代码中还包含长度超过一行的注释。并且希望以一种方式渲染它们,以便当它们到达页面边缘时,LaTeX 可以正确换行。

所以我的问题是,如何在数学环境中在给定的当前位置(不仅是在行首,而且还有缩进)插入多行文本,以便它自动跨越到页面边缘。 minipage 环境运行良好,但我必须手动指定其宽度。我希望看到此操作自动完成,基于 minipage 开头的当前位置,到页面边缘。这可能吗?如何获取页面上的当前位置,以便计算所需的高度?

答案1

amsmath包有一个命令\allowdisplaybreaks,如果在序言中指定,将允许任何(未装箱的)多行显示结构amsmath在页面末尾中断。

尽管此命令最好在\\“最佳”中断之前立即使用,但这需要手动干预,并且由于您的代码是由自动程序生成的,因此并不方便。

信息给出这个问题也同样相关。

答案2

在下一个示例代码中,我借助 定义了一个\parbox命令,该命令\MyText带有一个可选参数(文本的缩进,默认值为 0pt)和一个强制参数(要使用的文本); 的宽度\parbox自动计算为\textwidth减去可选参数中使用的缩进,其想法是在\intertext包提供的命令中使用此命令amsmath

\documentclass[a4paper]{article}
\usepackage{amsmath}

\newlength\myindent
\newlength\mycolwid

% syntax \MyText[<length>]{<text>} (default value for the optional argument: 0pt)
\newcommand\MyText[2][0pt]{%
  \setlength\parindent{0pt}%
      \setlength\myindent{#1}\setlength\mycolwid{\textwidth}%
  \setlength\mycolwid{\dimexpr\textwidth-\myindent}%
  \hspace*{\myindent}\parbox{\mycolwid}{#2}%
}

% a command to generate filler text for the example
\newcommand\test{text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text}
\begin{document}

\begin{align}
  a &= b \\
  \intertext{\MyText{\test}}
    &=c
  \intertext{\MyText[1in]{\test}}
   &= d
  \intertext{\MyText[2in]{\test}}
   &= e.
\end{align}

\end{document}

相关内容