![tikz 图表的对齐问题](https://linux22.com/image/361761/tikz%20%E5%9B%BE%E8%A1%A8%E7%9A%84%E5%AF%B9%E9%BD%90%E9%97%AE%E9%A2%98.png)
考虑
\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
线加长,使其g3
与g1
和对齐g2
即可。我甚至尝试过g3 [below=of g2]
,但不起作用。
答案1
节点放置计算完成后,您可以强制将节点放置在画布上的特定位置。这是通过语法完成的regardless at
,语法在 TikZ 手册 (v3.0.1a) 的第 380 页中进行了描述。
节点q
位于原点 (0,0)。将图表设置在 1cm 网格上,然后确定节点 的适当坐标就很简单了g3
。我们发现坐标为,与和(4,-2)
对齐。g3
g1
g2
因此我们可以这样写: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}