涉及 TikZ 模式的宏不起作用

涉及 TikZ 模式的宏不起作用

我创建了一个宏来标记句子片段。它旨在用标签替换一段文本。不幸的是,只要文本片段包含非字母数字字符,它就会编译失败;

\documentclass{article}
\usepackage{tikz}

\newcommand{\LabelText}[3]{%
  \begin{tikzpicture}[baseline=(LabelText.base)]
    \node [
      text width=width("#1"),
      text centered,
      draw=none,
      thick,
      rectangle,
      inner sep=0pt,
      outer sep=0pt,
      fill={#3},
    ] (LabelText) {#2};
  \end{tikzpicture}%
}
\newcommand{\padv}[1]{\LabelText{#1}{\strut Adv}{blue!30}}%

\begin{document}
  This is an \padv{adverb,}
\end{document}

如果从 \padv{} 中删除逗号,该宏将起作用。我希望它能够处理非字母数字字符。非常感谢您的帮助。

注意,它应该看起来像这样...

在此处输入图片描述

答案1

我找到了两种解决方法。

一种方法是修改宏以接受如下\LabelText用法#1

\newcommand{\LabelText}[3]{%
  \begin{tikzpicture}[baseline=(LabelText.base)]
    \node [
      text width=width("{#1}"),
      text centered,
      draw=none,
      thick,
      rectangle,
      inner sep=0pt,
      outer sep=0pt,
      fill={#3},
    ] (LabelText) {#2};
  \end{tikzpicture}%
}

#1另一种是在定义中双重拥抱\padv

\newcommand{\padv}[1]{\LabelText{{#1}}{\strut Adv}{blue!30}}%

无论哪种方式都会将参数的内容保留#1在其自己的组中。

相关内容