我正在使用 flalign 将方程式与页边距左对齐。
然后我偶然发现了这个在同一文档中切换 leqno 和 reqno 选项(amsmath 的)并使用它。
现在我有标签与方程式重叠。请注意,标签的空间仍然在右侧。
\usepackage{amsmath,amssymb,amsthm}
\usepackage{dsfont}
\makeatletter
\newcommand{\leqnomode}{\tagsleft@true}
\newcommand{\reqnomode}{\tagsleft@false}
\makeatother
\leqnomode
\begin{flalign}
& \forall x, y(x,y\in\mathds{R}\Rightarrow x+y\in\mathds{R}) & P \\
& \forall x,y\left[ x,y\in\mathds{R}\Rightarrow x+y=y+x\right] & P \\
& \forall x,y,z\left[x,y,z\in\mathds{R}\Rightarrow(x+y)+z=x+(y+z)\right] & P
\end{flalign}
如何才能使标签具有自动且一致的间距,就像它们被设置为默认位置(正确)一样?
答案1
\newcommand{\leqnomode}{\tagsleft@true}
无法工作,如果fleqn
在加载时给出选项amsmath
使用不同的定义适用于大多数环境。仅在少数简单情况下(如链接答案所示),对中心方程和左对齐方程使用相同的代码,并进行运行时测试\iftagsleft@
。
为了允许一般切换,您需要复制 amsmath 代码,以便它始终加载居中和左齐平版本(在可区分的内部名称下,然后\let
环境的公共版本为居中或左齐平版本,具体取决于当时所需的样式。
答案2
在环境的位置flalign
,可以使用align
嵌套在fleq
环境中的普通nccmath
,其临时工作方式与fleqn
选项类似,并且可以采用可选参数:等式左边距与文本左边距的距离:
\documentclass{article}
\usepackage{showframe}
\renewcommand{\ShowFrameLinethickness}{0.3pt}
\usepackage{amssymb, mathtools, nccmath} %
\usepackage{dsfont}
\makeatletter
\newcommand{\leqnomode}{\tagsleft@true}
\newcommand{\reqnomode}{\tagsleft@false}
\makeatother
\begin{document}
\leqnomode
\begin{fleqn}[2.5em]
\begin{align}
& \forall x, y(x,y\in\mathds{R}\Rightarrow x+y\in\mathds{R}) & P \\
& \forall x,y\left[ x,y\in\mathds{R}\Rightarrow x+y=y+x\right] & P \\
& \forall x,y,z\left[x,y,z\in\mathds{R}\Rightarrow(x+y)+z=x+(y+z)\right] & P
\end{align}
\end{fleqn}
\end{document}