Tikz 中的交换图中的线不是完全水平的

Tikz 中的交换图中的线不是完全水平的

今天在使用 Tikz 绘制简单图表时,我遇到了一个问题。下图中的水平线右侧比左侧略低。 交换图

在左侧添加下标\mathbb B不会改变这种行为 - 也不会省略h_j顶部的标签。

以下是该图的最小工作代码:

\documentclass{article}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{center}
\begin{tikzpicture}
\matrix (m) 
[matrix of math nodes,row sep=4em,column sep=4em,minimum width=2em] 
{
\mathbb B & \mathbb B_{j} \\
          & \mathbb B_{i} \\ 
}; 
\path[-stealth] 
(m-1-1) edge node [above] {$h_{j}$} (m-1-2)
        edge node [below] {$h_{i}$} (m-2-2)
(m-1-2) edge node [right] {$h_{\mathbb B_{i}, \mathbb B_{j}}$} (m-2-2);
\end{tikzpicture}
\end{center}
\end{document}

这是一个已知问题吗?有人知道如何解决吗?

答案1

右侧\mathbb{B}_j的 比左侧的 更深\mathbb{B},这就是为什么右侧的线更低。您只需\vphantom{_j}在左侧的节点上添加 即可弥补这一点。

\documentclass[border=2pt,tikz]{standalone}
\usetikzlibrary{matrix}
\usepackage{amssymb}
\begin{document} 

\begin{tikzpicture}
\matrix (m) 
[matrix of math nodes,row sep=4em,column sep=4em,minimum width=2em] 
{
\mathbb{B}\vphantom{_j} & \mathbb{B}_j \\
          & \mathbb B_{i} \\ 
}; 
\path[-stealth] 
(m-1-1) edge node [above] {$h_{j}$} (m-1-2)
        edge node [below] {$h_{i}$} (m-2-2)
(m-1-2) edge node [right] {$h_{\mathbb B_{i}, \mathbb B_{j}}$} (m-2-2);
\end{tikzpicture}

\end{document}

在此处输入图片描述

另外用节点positioning代替\matrix会看起来更美观:

\documentclass[border=2pt,tikz]{standalone}
\usetikzlibrary{positioning}
\usepackage{amssymb}
\begin{document}

\begin{tikzpicture}[node distance=1.5cm]
\node (b) {$\mathbb{B}$};
\node[right=of b]  (bj) {$\mathbb{B}_j$};
\node[below=of bj] (bi) {$\mathbb{B}_i$};   

\path[-stealth] 
    (b)  edge node [above] {$h_{j}$} (bj)
         edge node [below] {$h_{i}$} (bi)
    (bj) edge node [right] {$h_{\mathbb B_{i}, \mathbb B_{j}}$} (bi);
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

我建议使用tikz-cd

\documentclass{article}
\usepackage{amsmath,amssymb,tikz-cd}

\begin{document}

\[
\begin{tikzcd}
\mathbb{B} \arrow[r,"h_j"] \arrow[dr,swap,"h_i"] &
  \mathbb{B}_j \arrow[d,"h_{\mathbb{B}_i,\mathbb{B}_j}"]
\\
& \mathbb{B}_i
\end{tikzcd}
\]

\end{document}

在此处输入图片描述

答案3

正如前面提到的,问题在于节点内容的文本深度。调整此问题的一种简单方法是通过使用以下键手动指定文本深度,在每个节点中为其保留相等的空间text depth

\documentclass[tikz]{standalone}
\usepackage{amssymb}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[
    every node/.style={text depth=0.5pt}
]

\matrix (m) 
[matrix of math nodes,row sep=4em,column sep=4em, minimum width=2em] 
{
\mathbb B & \mathbb B_{j} \\
          & \mathbb B_{i} \\ 
}; 
\path[-stealth] 
(m-1-1) edge node [above] {$h_{j}$} (m-1-2)
        edge node [below] {$h_{i}$} (m-2-2)
(m-1-2) edge node [right] {$h_{\mathbb B_{i}, \mathbb B_{j}}$} (m-2-2);
\end{tikzpicture}
\end{document}

答案4

XY图提供了另一种选择。在这种情况下,它无需特殊调整即可正确对齐。tikz-cd在简单情况下,语法与非常相似。(虽然我认为更正确的说法是:的语法tikz-cdxymatrix...非常相似)

\documentclass[margin=5mm]{standalone}
\usepackage{amssymb}
\usepackage[matrix,pdf,arrow]{xy}
\begin{document}
\begin{xymatrix}{
  \mathbb{B} \ar[rd]_{h_i} \ar[r]^{h_j}
  &\mathbb{B}_j \ar[d]^{h_{\mathbb{B}_i,\mathbb{B}_j}}
\\
  &\mathbb{B}_i
\\}
\end{xymatrix}
\end{document}

在此处输入图片描述

相关内容