我正在尝试创建一个具有不同样式文本的 tikz 节点。在粗体文本中添加换行符会破坏渲染:
! 未定义控制序列。\tikz@invoke@collected@onpath ...mmand \tikz@temp \pgf@stop \tikz@node@is@a@... l.14 \testNode{1}{Normal text}{Bold\\text}
此代码重现了错误:
\documentclass[a4paper,landscape]{article}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.multipart,shapes.geometric,arrows,arrows.meta,calc}
\tikzstyle{theTest} = [font=\small, draw, thin, align=flush center, minimum height=1em, node distance=3em]
\newcommand{\testNode}[3]{
\node[theTest] (#1) {
#2\\
\textbf{#3}
};
}
\begin{document}
\begin{tikzpicture}
\testNode{1}{Normal text}{Bold\\text}
\end{tikzpicture}
\end{document}
编辑:我正在寻找一种动态方法,我不知道“粗体文本”是否有新行。
答案1
\\
一定不能在里面\textbf
,因为多行功能的工作方式类似于表格(tabular
,array
)。
格式\textbf{bold\\text}
必须应用于两行:
\textbf{bold}\\\textbf{text}
完整示例:
\documentclass[a4paper,landscape]{article}
\usepackage{tikz}
\usetikzlibrary{
positioning,
shapes.multipart,
shapes.geometric,
arrows,
arrows.meta,
calc
}
\tikzstyle{theTest} = [
font=\small,
draw,
thin,
align=flush center,
minimum height=1em,
node distance=3em,
]
\begin{document}
\begin{tikzpicture}
\node[theTest] (1) {
Normal text\\
\textbf{bold text}
};
\node[theTest,below of=1] (2) {
Normal text\\
%\textbf{bold\\text}
\textbf{bold}\\
\textbf{text}
};
\end{tikzpicture}
\end{document}
如果文本由具有任意内容的宏提供,则可以使用\parbox
或环境minipage
。以下示例使用环境varwidth
,当行短于指定值时,它可以减小整体框的宽度:
\documentclass[a4paper,landscape]{article}
\usepackage{varwidth}
\usepackage{tikz}
\tikzstyle{theTest} = [
font=\small,
draw,
thin,
align=flush center,
minimum height=1em,
node distance=3em,
]
\begin{document}
\begin{tikzpicture}
\newcommand\mymacro{Normal text\\\textbf{bold\\text}}
\node[theTest] (1) {%
\begin{varwidth}{.2\linewidth}% maximum width
\centering
\mymacro
\end{varwidth}%
};
\end{tikzpicture}
\end{document}