如何在matrix
节点内获取换行符?以下给出错误:
软件包 tikz 错误:放弃此路径。您忘记了分号吗?
除非我删除换行符。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of nodes
] {
{some text} &
{this node \\ does not work} \\
{other text} &
{more text} \\
};
\end{tikzpicture}
\end{document}
答案1
就像在任何节点一样,您需要指定对齐方式才能断线。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of nodes,
nodes={align=left, text width=3cm} % New!
] {
{some text} &
{text with \\ linebreak} \\
{other text} &
{more text} \\
};
\end{tikzpicture}
\end{document}
出于某种原因,对于矩阵中的节点,您还需要指定节点文本的宽度。
任何大于实际宽度的值都应该可以工作,但是在完成文档时,您应该尝试使该值尽可能接近文本的实际宽度,以便节点锚点能够位于预期的位置。
- - 编辑 - -
如果想避免text width
指定,可以手动绘制节点:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of nodes%,
%nodes={align=left, text width=3cm} % Not needed now
] {
{some text} &
\node[align=left] {text with \\ linebreak}; \\
{other text} &
{more text} \\
};
\end{tikzpicture}
\end{document}
答案2
这里有一个替代方案,它使用选项将矩阵中每个节点的内容包装在包\pbox
定义的可变宽度中。您可以有选择地将应用于有问题的材料,但这种方法允许使用问题的语法。是节点的最大宽度。由于节点的大小是单独确定的,我认为默认的左对齐看起来很奇怪,因此将内容居中。pbox
execute at begin cell
\pbox
\linewidth
\pbox
regexpatch
编辑:正如@cfr 在评论中指出的那样,\usetikzlibrary{chains}
从原始问题中的 MWE 来看,这是没有必要的。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{pbox}
\usepackage{regexpatch}
\makeatletter
\xpatchcmd{\pb@xiii}{{\parbox[\pb@xargi]{\pb@xlen}{#2}}}{{\parbox[\pb@xargi]{\pb@xlen}{\centering#2}}}{}{fail}%
\makeatother
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of nodes,
execute at begin cell = {\pbox[t]{\linewidth}},
] {
{some text to test} &
{really long text with\\ linebreak}\\
{other text} &
{more text} \\
};
\end{tikzpicture}
\end{document}
答案3
我不知道为什么。但是这有效。
\makeatletter
\def\tikz@lib@matrix@smuggle{%
\bgroup%
\def\\{\egroup\tikz@lib@matrix@saved@eol\bgroup}%
}
\tikz{
\matrix(m)[matrix of nodes,nodes={anchor=center,align=center}]{
some text & {this node \\ now works}& \\
other text & more text \\
};
}
PS 原来的定义在/tikzlibrarymatrix.code.tex
第60行:
\def\tikz@lib@matrix@smuggle{% \bgroup% \let\\=\tikz@lib@matrix@saved@eol% }
这表明 Ti钾Z 停止了,因为到达了类似
\node{{this node \\ does not work}};
新的定义导致
\node{{this node }\\{ now works}};
PS2. 这尚未经过广泛测试。