![更新](https://linux22.com/image/264415/%E6%9B%B4%E6%96%B0.png)
我有下图:
\documentclass{article}
\usepackage{xypic,amsmath}
\DeclareMathOperator{\coker}{coker}
\DeclareMathOperator{\im}{im}
\newcommand{\subU}[1]{\left.#1\right|_U}
\begin{document}
\[
\xymatrix@C=7pt {
\subU{\ker\Theta_M^j} \ar@{^(->}[rr] &&
\subU{\widetilde M} \ar[rr]^-{\subU{\Theta_M^j}} \ar@{->>}[rd] &&
\subU{\widetilde M(jp^{r-1})} \ar@{->>}[rr] &&
\subU{\coker\Theta_M^j(jp^{r-1})} \\ &&&
\subU{\im\Theta_M^j(jp^{r-1})} \ar@{^(->}[ru]
} \]
\end{document}
在页面上,图像项的间距非常尴尬。底行中的图像项应该位于中心,但第一行末尾的余核项很大,图像项使得它所在的列比需要的要大。所以最终看起来有点丑。
我认为如果我可以将这两个术语移近一点,效果会好很多\widetilde M
。它们之间的空隙很大,因为图像术语使该列变大。有什么方法可以避免xypic
重叠吗?
或者如果您有任何其他建议,我很乐意听取。
答案1
对于您的第二个问题,关于通过使图像术语占用更少的空间来拉近两个中心术语的距离,建议在\hbox{}
固定宽度(例如 2em)中引入该术语。
为了防止盒子过满,并使术语在狭窄的盒子内居中(以便它在两侧突出相同的量),盒子可以\hss
在两端包含两个。
这个解决方案在语法上很不合适,因为它需要在数学模式中再次进入,\hbox
但会产生所需的结果。
\documentclass{article}
\usepackage{xypic,amsmath}
\DeclareMathOperator{\coker}{coker}
\DeclareMathOperator{\im}{im}
\newcommand{\subU}[1]{\left.#1\right|_U}
\begin{document}
\[
\xymatrix@C=7pt {
\subU{\ker\Theta_M^j} \ar@{^(->}[rr] &&
\subU{\widetilde M} \ar[rr]^-{\subU{\Theta_M^j}} \ar@{->>}[rd] &&
\subU{\widetilde M(jp^{r-1})} \ar@{->>}[rr] &&
\subU{\coker\Theta_M^j(jp^{r-1})} \\ &&&
\hbox to 3em{\hss$\displaystyle\subU{\im\Theta_M^j(jp^{r-1})}$\hss} \ar@{^(->}[ru]
} \]
\end{document}
关于你的第一个问题(将 imag 项置于页面的中心),解决方案会更困难。我会切换到 tikz 以获得完全的自由。
更新
这里有一个im
使用 tikz 使术语水平居中的想法。这个想法是定义以该节点为中心的 tikzpicture 的边界框,并通过 coker 术语。下图在预期的边界框周围绘制了一个红色矩形,可以清楚地说明这一点(我还在每个节点周围添加了一个边框,以便更好地查看其位置,并在下方添加了一条水平线,显示文本宽度,以欣赏居中效果)。我没有用箭头完成该图:
该图是用以下代码生成的(请注意,边界框的右边界是如何简单地计算为左边界的对称性的,使用它的负片x
,因为我将im
节点放在了(0,0)
):
\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath}
\usetikzlibrary{calc,positioning}
\DeclareMathOperator{\coker}{coker}
\DeclareMathOperator{\im}{im}
\newcommand{\subU}[1]{$\left.#1\right|_U$}
\begin{document}
\begin{center}
\begin{tikzpicture}[node distance=8mm, every node/.style={draw}]
\node (im) at (0,0) {\subU{\im\Theta_M^j(jp^{r-1})}};
\node[above left=of im.center] (M) {\subU{\widetilde M}};
\node[above right=of im.center] (Mj) {\subU{\widetilde M(jp^{r-1})}};
\node[left=of M] (ker) {\subU{\ker\Theta_M^j}};
\draw[red, use as bounding box]
let \p1 = (ker.north west)
in (ker.west|-im.south) rectangle (-\x1,\y1);
\node[right=of Mj] (coker) {\subU{\coker\Theta_M^j(jp^{r-1})}};
\end{tikzpicture}
\end{center}
\noindent\hrulefill\par
\end{document}