更新

更新

我有下图:

在此处输入图片描述

\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}

相关内容