我正在尝试在显示模式下在由 生成的一对图表之间排版一个方程\xymatrix
,其中这些图表已使用 垂直居中在线上\vcenter
。整个方程比文本宽度宽,所以我想将其居中。我找不到一个好的解决方案,而且我在其他地方使用过的两种方法都不起作用。我无法真正将它分成两行,因为我有更复杂的例子,我不确定它是否会起作用(\align
例如,在多行环境中,具有相同的成分)。我正在使用期刊提供的模板,下面 MWE 中的 ams 包是提供的,我不确定我是否可以更改它们(即使重新加载它们也无济于事)。
\documentclass[12pt]{amsart}
\usepackage{amsmath, amsthm, amscd, amsfonts} %these are all as provided, I can't change these
\usepackage[all]{xy}
\usepackage{lipsum}
\newcommand{\diagram}[1]{\vcenter{\hbox{\xymatrix{#1}}}} % also breaks without the \hbox
\newcommand{\equals}{\quad=\quad}
\begin{document}
\lipsum[2]
\[
% \centerline{% doesn't work
% \noindent\makebox[\textwidth]{% also doesn't work
\hspace{-2cm} % works, but is bad
\diagram{xxxxxxxxxx \ar[r] & xxxx \ar@/^1.5pc/[r] \ar@/_1.5pc/[r] & xxx }
\equals
\diagram{&& xxxxx \ar[dr] \\
xxxxxxxxxx \ar@/^/[urr]
\ar@/_/[drr] \ar[r] &
v^{[2]} \ar[ur] \ar[dr] && xxx\\
&& xxxxx \ar[ur]}%
% }
\]
\lipsum[2]
\end{document}
我很确定问题出在我尝试的水平对齐命令之间的交互上\vcenter
,但这有点关键。MWE 示例目前提供了我想要的内容,但没有如何我要它。
答案1
将一个过大的方程式置于中心并不是什么困难的事,但我建议将其分成多行。
\vcenter
不要使用 ,而要使用gathered
,它采用相同的机制,但更加用户友好。
我重新定义了\diagram
也接受选项\xymatrix
;所以我可以稍微减少列之间的间隙并得到一个稍微不那么宽的物体。
\documentclass[12pt]{amsart}
\usepackage{amsmath, amsthm, amscd, amsfonts} %these are all as provided, I can't change these
\usepackage[all]{xy}
\usepackage{lipsum}
\newcommand{\diagram}{}% to be sure it isn't defined
\def\diagram#1#{\diagramaux{#1}}% collect everything up to the first {
\newcommand\diagramaux[2]{\begin{gathered}\xymatrix#1{#2}\end{gathered}}
\newcommand{\equals}{\quad=\quad}
\begin{document}
\lipsum[2]
\[
\hspace{1000pt minus 2000pt}
\diagram@C-8pt{xxxxxxxxxx \ar[r] & xxxx \ar@/^1.5pc/[r] \ar@/_1.5pc/[r] & xxx }
\equals
\diagram@C-8pt{&& xxxxx \ar[dr] \\
xxxxxxxxxx \ar@/^/[urr]
\ar@/_/[drr] \ar[r] &
v^{[2]} \ar[ur] \ar[dr] && xxx\\
&& xxxxx \ar[ur]}
\hspace{1000pt minus 2000pt}
\]
\lipsum[2]
\end{document}
诀窍是在两边都使用柔性胶水。较大的自然尺寸会告诉 TeX 尽可能地挤压空间(实际上,在本例中什么也没做);但随后较大的收缩组件会完成居中工作,而不会溢出。
答案2
我不熟悉xy
这个包,所以我使用了tikz-cd
也适用于此类图的包。但是,这两个图的问题是一样的。
为了将“方程式!”置于文本中心,您可以使用changepage
包:
\documentclass[12pt]{amsart}%{article}
\usepackage{amsmath, amsthm, amscd} %these are all as provided, I can't change these
%\usepackage[all]{xy}
\usepackage{tikz-cd}
\usepackage{lipsum}
\newcommand{\diagram}[1]{\vcenter{\hbox{\xymatrix{#1}}}} % also breaks without the \hbox
\newcommand{\equals}{\quad=\quad}
\usepackage[strict]{changepage}
\begin{document}
\lipsum[2]
\begin{adjustwidth}{-6em}{-6em}
\centering
\begin{tikzcd}[baseline]
xxxxxxxxxx \ar[r] & xxxx \ar[r, bend left] & xxx \ar[l,bend left]
\end{tikzcd}%
\equals%
\begin{tikzcd}[baseline=-1ex]
& & xxxxx \ar[dr] & \\
xxxxxxxxxx \ar[r] \ar[urr,bend left]
\ar[drr, bend right]
& v^{[2]}\ar[ur]
\ar[dr]
& & xxx \\
& & xxxxx \ar[ur] &
\end{tikzcd}
\end{adjustwidth}
\lipsum[2]
\end{document}
附录: 您可以将机器人图合并为一个,并减少节点之间的分离。 之后,这个等式变得更窄:
\documentclass[12pt]{amsart}%{article}
\usepackage{amsmath, amsthm, amscd} %these are all as provided, I can't change these
%\usepackage[all]{xy}
\usepackage{tikz-cd}
\usepackage{lipsum}
\newcommand{\diagram}[1]{\vcenter{\hbox{\xymatrix{#1}}}} % also breaks without the \hbox
\newcommand{\equals}{\quad=\quad}
\usepackage[strict]{changepage}
\begin{document}
\lipsum[2]
\begin{adjustwidth}{-2.4em}{-2.4em}
%\rule{\linewidth}{1pt}
\centering%
\begin{tikzcd}[sep=small]
& & & & & xxx \ar[dr]
& \\
xxxxxxxxxx \ar[r]
& xxxx \ar[r, bend left]
& xxx\equals \ar[l,bend left]
& \hspace{-1.5em}
xxxxxxxxxx \ar[r] \ar[urr,bend left] \ar[drr, bend right]
& v^{[2]} \ar[ur] \ar[dr]
& & xxx \\
& & & & & xxxxx \ar[ur]
&
\end{tikzcd}
\end{adjustwidth}
\lipsum[2]
\end{document}