XYpic 中间距不等的列

XYpic 中间距不等的列

我经常需要在 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*}

相关内容