如何在TikZ的text along path中插入\newline、重音及加粗等命令?
TikZ中插入换行、特殊字符及加粗命令的解决方案
问题说明
你提供的LaTeX代码里,直接插入\newline、\'{e}、\textbf{...}这类命令会触发Runaway argument?错误,主要原因有两个:TikZ节点默认不支持换行,text along path装饰器对命令解析有语法要求,同时原代码存在大括号不匹配的语法问题。
分步解决
1. 节点内实现换行
默认TikZ节点不识别\newline,给节点添加align=center(或align=left/align=right)选项即可启用换行:
(180:4cm) node[align=center] (y) {BBBBB need \newline here CCCCC};
2. 路径文本中使用特殊命令
text along path装饰器中的文本可以使用\textbf{}、\'{e}这类命令,但要注意:
- 确保
postaction的大括号完全匹配(原代码第一个postaction缺少闭合的},这是报错的直接原因之一) - 命令可以直接嵌入文本部分,无需额外转义
修正后的完整代码:
\documentclass {beamer} \usepackage{tikz} \usetikzlibrary{decorations.pathreplacing,intersections} \usetikzlibrary{calc, arrows, decorations.markings, decorations.text, arrows.meta} \begin{document} \begin{frame} \begin{tikzpicture} \path (0 :4cm) node (x) {AAAAAA} (180:4cm) node[align=center] (y) {BBBBB need \newline here CCCCC}; \def\myshift#1{\raisebox{1ex}} % 修正大括号,加入\textbf和带重音的é示例 \draw [-{Stealth[length=3mm, width=2mm]}, thick, postaction={decorate, decoration={text along path, text align=center, text={|\sffamily\myshift|\textbf{AAAAAA} \'{e}测试}}}] (y) to [bend left=45] (x); \def\myshift#1{\raisebox{-2.5ex}} \draw [-{Stealth[length=3mm, width=2mm]}, thick, postaction={decorate, decoration={text along path, reverse path, text align=center, text={|\sffamily\myshift|Ok Ok } }}] (x) to [bend left=45] (y); \end{tikzpicture} \end{frame} \end{document}
注意事项
- 节点必须指定
align选项才能用\newline换行,否则不仅不生效还会报错 - 检查所有大括号的匹配情况,这是TikZ装饰器常见的报错点
- 特殊字符如
\'{e}、加粗命令\textbf{}可以直接在路径文本中使用,无需额外处理
内容的提问来源于stack exchange,提问作者mario
相关产品推荐
相关产品推荐

