是否有可能在环境中将等式稍微向左移动align
?
例如,如何将下列等式向左移动,使得其\simeq
大约位于中心?
(我读这个问题,但建议\MoveEqLeft
不太适合这里,那里的答案需要额外的包,所以我想知道是否有更简单的方法)
\documentclass{article}
\usepackage{mathtools}
\DeclareMathOperator{\Hom}{Hom}
\begin{document}
\begin{align*}
\Hom_C(C \otimes_B (B \otimes_A M), P)
& \simeq \Hom_B(B \otimes_A M, P)\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
\end{document}
答案1
说实话,我看不出有什么理由这么做。
测量两侧并插入适当的空间(正极或负极)。
\documentclass{article}
\usepackage{mathtools}
\DeclareMathOperator{\Hom}{Hom}
\makeatletter
\newcommand{\centralize}[3]{%
\settowidth{\@tempdima}{$\m@th\displaystyle#1$}%
\settowidth{\@tempdimb}{$\m@th\displaystyle#3$}%
\hspace*{\dimexpr\@tempdimb-\@tempdima}#1#3%
}
\makeatother
\begin{document}
\noindent
X\dotfill X\dotfill X
\begin{align*}
\centralize{\Hom_C(C \otimes_B (B \otimes_A M), P)}{\simeq}{\Hom_B(B \otimes_A M, P)}\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
X\dotfill X\dotfill X
\begin{align*}
\centralize{\Hom_C(C, P)}{\simeq}{\Hom_B(B \otimes_A M, P)}\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
\end{document}
对于更复杂的情况,请使用幻影。
\documentclass{article}
\usepackage{mathtools}
\DeclareMathOperator{\Hom}{Hom}
\makeatletter
\newcommand{\centralize}[3]{%
\settowidth{\@tempdima}{$\m@th\displaystyle#1$}%
\settowidth{\@tempdimb}{$\m@th\displaystyle#3$}%
\hspace*{\dimexpr\@tempdimb-\@tempdima}#1#3%
}
\makeatother
\begin{document}
\noindent
X\dotfill X\dotfill X
\begin{align*}
\centralize{\Hom_C(C \otimes_B (B \otimes_A M), P)}{\simeq}{\Hom_B(B \otimes_A M, P)}\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
X\dotfill X\dotfill X
\begin{align*}
\Hom_C(C \otimes_B (B \otimes_A M), P)
& \simeq \Hom_B(B \otimes_A M, P)\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P) \\
\centralize{\hphantom{\Hom_C(C \otimes_B (B \otimes_A M), P)}}
{\simeq}{xxxxxxxxxxxxxxxxxxxxxxxxx}
\end{align*}
X\dotfill X\dotfill X
\begin{align*}
\centralize{\Hom_C(C, P)}{\simeq}{\Hom_B(B \otimes_A M, P)}\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
\end{document}
答案2
如果您希望 ≃ 字符正好位于中心,并且没有明确设置任何随机尺寸,那么您可以\calign
基于\halign
原始 TeX 命令和\tabskip
原始寄存器定义自己的对齐宏。
\def\calign#1{\tabskip=0pt plus1fill
\halign to\hsize{\llap{$\displaystyle##$}\tabskip=0pt &%
$\displaystyle{}##{}$&\rlap{$\displaystyle##$}\tabskip=0pt plus1fill\cr
#1\crcr}%
}
\def\Hom{\mathop{\rm Hom}\nolimits}
\noindent X\dotfill Y
$$
\calign{
\Hom_C(C ⊗_B (B ⊗_A M), P) & ≃ & \Hom_B(B ⊗_A M, P)\cr
& ≃ & \Hom_A(M, P)\cr
& ≃ & \Hom_C(C ⊗_A M, P)
}
$$
X\dotfill Y
\noindent X\dotfill Y\dotfill Z
答案3
\documentclass{article}
\usepackage{mathtools}
\DeclareMathOperator{\Hom}{Hom}
\begin{document}
\noindent X\dotfill X
\begin{align*}
\Hom_C(C \otimes_B (B \otimes_A M), P)
& \simeq \Hom_B(B \otimes_A M, P)\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
\noindent X\dotfill X
\begin{align*}
\hspace*{-2cm}\Hom_C(C \otimes_B (B \otimes_A M), P)
& \simeq \Hom_B(B \otimes_A M, P)\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
\end{document}
不会\hspace
直接移动对齐方式,但会影响第一个单元格的有效大小,从而导致位置发生改变
答案4
fleqn
使用来自 的环境的简单解决方案nccmath
。此环境可以采用可选参数来指定从左边距开始的距离:
\documentclass{article}
\usepackage{mathtools}
\usepackage{nccmath}
\DeclareMathOperator{\Hom}{Hom}
\usepackage{showframe}
\renewcommand{\ShowFrameLinethickness}{0.4pt}
\begin{document}
\begin{fleqn}[4.5em]
\begin{align*}
\Hom_C(C \otimes_B (B \otimes_A M), P)
& \simeq \Hom_B(B \otimes_A M, P)\\
& \simeq \Hom_A(M, P)\\
& \simeq \Hom_C(C \otimes_A M, P)
\end{align*}
\end{fleqn}
\end{document}