我经常需要在 XYpic 中创建一个列间距不同的图表。这通常是当一个人有一个到某个对象 X 的映射时,其中 X 的定义就在图表本身中,例如
\begin{equation*}
\xymatrix{
A \ar[r] & B = \{c \in C \mid f(c) = 0 \}
\\
a \ar@{|->}[r] & b
}
\end{equation*}
如果你真的排版了这一点,那么下面的 b 将与相当大的第二列的中心对齐,而有人希望它位于上面的 B 下方。一个解决方案是写
\begin{equation*}
\xymatrix{
A \ar[r] & B & = \{c \in C \mid f(c) = 0 \}
\\
a \ar@{|->}[r] & b
}
\end{equation*}
因此 B 的定义位于第三列。现在的问题是等号距离它所指的 B 太远了。
这样的事情在 kuvio 中很容易做到,但是 kuvio 不支持 pdflatex,而且我的同事选择了 xypic。
答案1
\documentclass{minimal}
\usepackage{xypic,mathtools}
\begin{document}
\begin{equation*}
\xymatrix{
A \ar[r] & \mathrlap{B = \{c \in C \mid f(c) = 0 \}}
\\
a \ar@{|->}[r] & b
}
\end{equation*}
\end{document}
答案2
解决方案是使用tikz-cd
。借助包,calc
您可以将两个单元格的宽度设置为相同的值:
% arara: pdflatex
\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz-cd}
\usepackage{calc}
\begin{document}
\[
\begin{tikzcd}
A \ar{r} & \mathmakebox[\widthof{$b$}][l]{B = \{c \in C \mid f(c) = 0 \}}\\
a \ar[mapsto]{r}& b
\end{tikzcd}
\]
\end{document}
答案3
您还可以使用 xyguide.pdf 第 9 页描述的 excursion 命令:
\begin{equation*}
\xymatrix{
A \ar[r] & B &
\save[]+<1.75em,0em>*{= \{c \in C \mid f(c) = 0 \}}\restore \\
a \ar@{|->}[r] & b
}
\end{equation*}
答案4
通过调整您提出的解决方案,我能够获得所需的间距。我只是将列宽设置为可忽略不计,并添加了一个额外的列。我不知道是否有更好的方法来实现所需的结果。
\begin{equation*}
\xymatrix@C=-2pt{
A \ar[rr] &\qquad& B &= \{c \in C \mid f(c) = 0 \}
\\
a \ar@{|->}[rr]& & b
}
\end{equation*}