我可以将“中心”环境调整到左侧,以便它与“fleqn”方程式对齐吗?

我可以将“中心”环境调整到左侧,以便它与“fleqn”方程式对齐吗?

我正在用这个包写论文classicthesis。这个包用来fleqn证明方程式:

\PassOptionsToPackage{fleqn}{amsmath} % Math environments and more by the AMS 

但是,center环境不在左边。我想创建一个类似于 的新环境,center其中文本与方程式对齐。

我考虑过使用equation*环境来编写文本(即使用命令\text),但这给我带来了问题,而且我认为这不是一个很好的解决方案。更具体地说:必须手动指定结束行(很烦人/需要我决定在哪里最好地中断文本),并且对齐方式不正确(右对齐?)。例如:

在此处输入图片描述

这里的代码很简单:\begin{align*} \text{text...}\\ \text{text...}\end{align*}

有什么建议可以做到这一点吗?

梅威瑟:

\documentclass{article}
\usepackage[utf8]{inputenc}

\PassOptionsToPackage{fleqn}{amsmath} % align left eqs
 \usepackage{amsmath}

\begin{document}

This algorithm never terminates:

\begin{equation*}
    x=x+1
\end{equation*}

And this text is not to the left:

\begin{center}
    I am not well-behaved.
\end{center}

\end{document}

结果是(请注意文本与等式不一致):

在此处输入图片描述

谢谢!

答案1

首先,center它实际上并不是一个应该出现在文档中的环境,而更像是一种用于构建具有语义含义的其他环境/命令的东西。

现在,下一步是了解center其工作原理。is¹ 的定义如下center

\NewDocumentEnvironment{center}{}{%
   \begin{trivlist}\centering\item\relax
}
{%
   \end{trivlist}%
}

我们所做的是创建一个单项trivlist² ³并将\centering定义应用于它。\centering,依次是:

\DeclareRobustCommand\centering{%
  \let\\\@centercr % ❶
  \rightskip\@flushglue\leftskip\@flushglue % ❷
  \finalhyphendemerits=\z@ % ❸
  \parindent\z@\parfillskip\z@skip} % ❹ 

这相当简单:它确保\\在段落中开始新行⁴❶,将左右边距设置为相等扩展❷,确保段落不会多出一行以避免在倒数第二行出现连字符⁵❸,最后确保我们没有得到第一行缩进,并且最后一行右侧没有多余的空间。❹

因此,我们要修改它,使其\leftskip不再是\@flushglue,而是遵循fleqn段落的缩进。⁶ 这是我们的新定义。

\NewDocumentEnvironment{somesemanticenvironmentname}{}{%
   \begin{trivlist}
      \let\\\@centercr 
      \rightskip\@flushglue\leftskip\mathindent
      \finalhyphendemerits=\z@ 
      \parindent\z@
      \item\relax
}
{%
   \end{trivlist}%
}

  1. 这不是实际的定义。我重写了代码,在 LaTeX 源代码中center使用原始\def命令定义环境以使用惯用的 LaTeX 声明。

  2. trivlist是另一个不应该直接出现在文档代码中的环境。它用于构建各种显示文本环境,例如quotationverse等。它让我们可以轻松地执行诸如嵌套quotation环境之类的操作,或者让这些内容出现在正确调整边距的环境中enumerate

  3. 原始代码使用\trivlist...\endtrivlist而不是\begin{trivlist}... \end{trivlist}。在定义环境的上下文中,前者的语法几乎相同,因为我们已经有了来自\begin{}...的分组\end{}的分组。但是,随着现在属于 LaTeX 的环境的钩子接口的增加,在定义新代码时,除非您明确地如果不想应用钩子,则应在将环境包装在另一个环境定义中时使用环境语法。不太可能有人使用钩子,trivlist但可能值得保留此选项。

  4. 这就是为什么在 a 中\centering放入-column经常会导致问题的原因。如果您位于行的最后一列,并不意味着结束该行,而是在段落中换行。ptabular\\

  5. 这在练习 14.32 的答案中进行了讨论TeXbook

  6. 您可以在 其中 找到此金额,fleqn.clo将其标识为\mathindent

相关内容