如何制作具有不同样式的文本和换行符的 tikz 节点

如何制作具有不同样式的文本和换行符的 tikz 节点

我正在尝试创建一个具有不同样式文本的 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,因为多行功能的工作方式类似于表格(tabulararray)。

格式\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}

带有 varwidth 的结果

相关内容