我正在用这个包写论文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}%
}
这不是实际的定义。我重写了代码,在 LaTeX 源代码中
center
使用原始\def
命令定义环境以使用惯用的 LaTeX 声明。trivlist
是另一个不应该直接出现在文档代码中的环境。它用于构建各种显示文本环境,例如quotation
和verse
等。它让我们可以轻松地执行诸如嵌套quotation
环境之类的操作,或者让这些内容出现在正确调整边距的环境中enumerate
。原始代码使用
\trivlist
...\endtrivlist
而不是\begin{trivlist}
...\end{trivlist}
。在定义环境的上下文中,前者的语法几乎相同,因为我们已经有了来自\begin{}
...的分组\end{}
的分组。但是,随着现在属于 LaTeX 的环境的钩子接口的增加,在定义新代码时,除非您明确地如果不想应用钩子,则应在将环境包装在另一个环境定义中时使用环境语法。不太可能有人使用钩子,trivlist
但可能值得保留此选项。这就是为什么在 a 中
\centering
放入-column经常会导致问题的原因。如果您位于行的最后一列,并不意味着结束该行,而是在段落中换行。p
tabular
\\
这在练习 14.32 的答案中进行了讨论TeXbook。
您可以在 其中 找到此金额,
fleqn.clo
将其标识为\mathindent
。