在 TikZ 节点内部,可以通过设置节点的选项\\
来强制换行。align
我想增加节点内的行距。这可以通过常规方式使用可选参数来实现\\
,例如\\[1em]
。不过,对每个换行符都这样做很繁琐。有没有办法增加换行符全球,以便\\
节点内部的任何一个都充当\\[1em]
?
编辑:快到了!
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\tikzset{
mynode/.style={
draw
, align=center
, execute at begin node=\setlength{\baselineskip}{2em}
}
}
\begin{tikzpicture}
\node[mynode] {
this \\
is \\
\tikz \node[mynode] {a \\ break};
};
\end{tikzpicture}
\end{document}
得出的结果为:
剩下的问题是如何在内部节点前放置 2em 断行。
答案1
那这个呢?
\setlength{\baselineskip}{16pt}
或者
\baselineskip=16pt
(如果不起作用,请尝试用明确的 来结束节点文本\par
。)
现在来看看第二部分:这不仅不平凡,而且定义不明确。顾名思义,\baselineskip
是连续文本行的基线(或者 hboxes,如果你喜欢的话)。对于“内部”tikz 节点,有一个问题:它的基线位于哪里?这可以通过 tikz 选项配置baseline
(这很难猜,对吧;)?),但是如果你设置它更高,然后 - 如果你添加另一行或任何其他内容以下- 距离会太小。
对你的问题最好的答案可能是\lineskip
和\lineskiplimit
参数。实际上(嗯,据我所知,因为我办公室有一本 TeXbook),规则(大致)如下:
如果 TeX 将两个框放在垂直列表中,它会在它们之间添加胶水,因此它们之间的距离他们的基线等于
\baselineskip
。但是,如果底部上部盒子和顶部下部的会小于\lineskiplimit
,插入的胶水等于\lineskip
。
因此您可能需要按以下方式进行设置:
\baselineskip=<the distance you want between the baselines>
\lineskiplimit=<the threshold distance>
\lineskip=<the distance you want between the boxes (not their baselines!) if they are close to each other>
其中“彼此接近”的意思是“比阈值更接近”。
答案2
我添加这个答案主要是因为树节点似乎Forest
不支持内部\baselineskip
修改。此方法使用\linespread{<scaling factor>}\selectfont
。副作用是它会影响边缘和标签之间的间距;inner sep
必须相应地重新调整。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage[linguistics]{forest}
\begin{document}
\tikzset{
mynode/.style={
draw
, align=center
, execute at begin node = \linespread{1.65}\selectfont
}
}
\begin{tikzpicture}
\node[mynode] {
this \\
is \\
\tikz \node[mynode] {a \\ break};
};
\end{tikzpicture}
\vspace{5ex}
\begin{forest}
[DP\\the cat, anchor=north, execute at begin node = \setlength{\baselineskip}{2em}% This command has no effect.
[D\\the, anchor=north, execute at begin node = \linespread{1.65}\selectfont]
[NP\\cat, anchor=north, execute at begin node = \linespread{2}\selectfont]
]
\end{forest}
\end{document}