tikz 图表的对齐问题

tikz 图表的对齐问题

考虑

\documentclass[11pt]{article}
\usepackage{tikz-feynman}
\begin{document}
\begin{tikzpicture}
\graph[layered layout, horizontal=a to b] {
  q -- a,
  qb -- a,
  a -- b -- c -- g1,
  c -- g2,
  b -- g3,
};
\end{tikzpicture}
\end{document}

在运行 macOS Sierra 的 Mac 上使用 LuaTeX 版本 0.95.0 (TeX Live 2016) 时,我得到了这个

在此处输入图片描述

但我希望g1和垂直对齐。我该怎么做?我尝试使用g2,但结果却显示g3{[same layer] g1, g2, g3}

在此处输入图片描述

我想让角度与第一张图完全相同。只需将b--g3线加长,使其g3g1和对齐g2即可。我甚至尝试过g3 [below=of g2],但不起作用。

答案1

节点放置计算完成后,您可以强制将节点放置在画布上的特定位置。这是通过语法完成的regardless at,语法在 TikZ 手册 (v3.0.1a) 的第 380 页中进行了描述。

节点q位于原点 (0,0)。将图表设置在 1cm 网格上,然后确定节点 的适当坐标就很简单了g3。我们发现坐标为,与和(4,-2)对齐。g3g1g2

因此我们可以这样写:b -- g3[regardless at={(4,-2)}]在所需位置添加节点。以下是结果,其中包含背景网格(如何在 TikZ 中自动按网格显示坐标?g3) 来说明处的节点定位(4,-2)

在此处输入图片描述

这是 MWE,从原始版本修改而来,以显示特别需要的库。Tikz-Feynman由于未使用任何宏,因此未加载该包。请注意,使用TikZ图形绘制库需要lualatex编译代码。

% !TeX TS-program = lualatex

\documentclass[tikz,border=5pt]{standalone}
\usepackage{luatex85}

\usetikzlibrary{
    graphs,
    graphdrawing,
}
\usegdlibrary{
    layered,   % requied for layered layout
}

% https://tex.stackexchange.com/a/39698
\makeatletter
\def\grd@save@target#1{%
    \def\grd@target{#1}}
\def\grd@save@start#1{%
    \def\grd@start{#1}}
\tikzset{
    grid with coordinates/.style={
        to path={%
            \pgfextra{%
                \edef\grd@@target{(\tikztotarget)}%
                \tikz@scan@one@point\grd@save@target\grd@@target\relax
                \edef\grd@@start{(\tikztostart)}%
                \tikz@scan@one@point\grd@save@start\grd@@start\relax
                \draw[minor help lines] (\tikztostart) grid (\tikztotarget);
                \draw[major help lines] (\tikztostart) grid (\tikztotarget);
                \grd@start
                \pgfmathsetmacro{\grd@xa}{\the\pgf@x/1cm}
                \pgfmathsetmacro{\grd@ya}{\the\pgf@y/1cm}
                \grd@target
                \pgfmathsetmacro{\grd@xb}{\the\pgf@x/1cm}
                \pgfmathsetmacro{\grd@yb}{\the\pgf@y/1cm}
                \pgfmathsetmacro{\grd@xc}{\grd@xa + \pgfkeysvalueof{/tikz/grid with coordinates/major step}}
                \pgfmathsetmacro{\grd@yc}{\grd@ya + \pgfkeysvalueof{/tikz/grid with coordinates/major step}}
                \foreach \x in {\grd@xa,\grd@xc,...,\grd@xb}
                \node[anchor=north,color=lightgray] at ([yshift=-0.15cm]\x,\grd@ya) {\pgfmathprintnumber{\x}};
                \foreach \y in {\grd@ya,\grd@yc,...,\grd@yb}
                \node[anchor=east,color=lightgray] at ([xshift=-0.15cm]\grd@xa,\y) {\pgfmathprintnumber{\y}};
            }
        }
    },
    minor help lines/.style={
        help lines,
        step=\pgfkeysvalueof{/tikz/grid with coordinates/minor step},
        minor line width/.initial=0.25pt,
    },
    major help lines/.style={
        help lines,
        line width=\pgfkeysvalueof{/tikz/grid with coordinates/major line width},
        step=\pgfkeysvalueof{/tikz/grid with coordinates/major step},
        line cap=round,
        color=lightgray,
    },
    grid with coordinates/.cd,
    minor step/.initial=.2,
    major step/.initial=1,
    major line width/.initial=0.5pt,
}
\makeatother
\begin{document}

\begin{tikzpicture}[
font=\tiny,
color=blue
]

\draw (0,-2) to[grid with coordinates] (4,1);

\graph[
layered layout, 
horizontal=a to b,
] {
  {q,qb} -- a,
  a -- b -- c,
  c -- {g1,g2},
  b -- g3[regardless at={(4,-2)}],
};
\end{tikzpicture}
\end{document}

相关内容