如何使交换图中的箭头和节点排列整齐?

如何使交换图中的箭头和节点排列整齐?

我用用于排版我的交换图。我通常使用,它matrix of math nodes具有确保一行中的所有条目按照其顺序对齐的良好效果基线。比较下图中的两个版本,左边的版本按其center锚点对齐,右边的版本按其锚点对齐base

对齐和未对齐的节点

这种方法很有效,直到有人添加箭头。除非给出明确的锚点,否则箭头会绘制在中心节点,虽然右侧节点的底部对齐,但它们的中心却不对齐。因此,添加箭头可得出以下结果:

对齐和未对齐的箭头和节点

现在,很明显我是夸大了效果,但即使有轻微的差异也是显而易见的。

可以手动添加锚点,但这很麻烦(并且看似最好的锚点,mid却稍微太低了:它位于.5ex基线之上,但通过检查\(A \to B\)我认为它应该在.6ex)。

所以我的问题是:我可以对齐两个都节点和箭头,以便节点通过基线对齐但\draw[->] (a) -- (b);只是起作用。

下面是一些可供参考的代码:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\tikz[baseline]{ \node[rectangle] (a) {\(A_{\rule{1pt}{2em}}\)};
\node[rectangle] (b) at (2,0) {\(B^{\rule{1pt}{2em}}\)}; \draw[->] (a)
-- (b);}
\tikz[baseline]{ \node[anchor=base,rectangle] (a)
{\(A_{\rule{1pt}{2em}}\)}; \node[anchor=base,rectangle] (b) at (2,0)
{\(B^{\rule{1pt}{2em}}\)}; \draw[->] (a) -- (b);}
\end{document}

注意:这是一个问答式的问题。今天下午我花了不少时间来解决这个问题。然后我搜索了一下,看看这个问题是否已经被问过,虽然还没有——因此仍然在问——但我发现,套用一句话来说,“有一个包可以解决这个问题”,但我没有在这个网站上的任何地方找到这个包中提到的解决方案——尽管这个问题在其他答案中也出现过。

答案1

经过一番努力,我发现解决方案是tikz-cd包。虽然我更喜欢“手工”制作交换图,但这个包仍然定义了一些有用的东西,可以在不使用其特定环境的情况下使用。在这个特殊情况下,asymmetrical rectangle。这是一个矩形节点,它的“中心”位于普通矩形节点的“中间”位置,因此“中心”实际上并不位于周围框的中心(正如我在黑客攻击中了解到的那样,这使得计算正确的边界点变得有点复杂,但并非不可能)。

(最终的箭头处于正确的高度。)

证人:

对齐节点和箭头

由。。。生产:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\tikz[baseline]{
\node[rectangle] (a) {\(A_{\rule{1pt}{2em}}\)};
\node[rectangle] (b) at (2,0) {\(B^{\rule{1pt}{2em}}\)};
\draw[->] (a) -- (b);}

\tikz[baseline]{
\node[anchor=base,rectangle] (a) {\(A_{\rule{1pt}{2em}}\)};
\node[anchor=base,rectangle] (b) at (2,0) {\(B^{\rule{1pt}{2em}}\)};
\draw[->] (a) -- (b);}

\tikz[baseline]{
\node[asymmetrical rectangle] (a) {\(A_{\rule{1pt}{2em}}\)};
\node[asymmetrical rectangle] (b) at (2,0) {\(B^{\rule{1pt}{2em}}\)};
\draw[-to] (a) -- (b);}

\(
\tikz[baseline=(a.base),remember picture] \node[asymmetrical
rectangle] (a) {\(A_{\rule{1pt}{2em}}\)};
A \to B
\tikz[baseline=(b.base),remember picture] \node[asymmetrical
rectangle] (b) at (2,0) {\(B^{\rule{1pt}{2em}}\)};
\tikz[overlay,remember picture] \draw[-to] (a) -- (b);
\)

\end{document}

相关内容