使用常见的 Latex 宏来装饰 tikz 的节点文本

使用常见的 Latex 宏来装饰 tikz 的节点文本

有时我需要像 这样的 Latex 宏\huge\color{red}而不是 提供的节点可选参数,tikz才能通过 为图片的“节点文本”赋予样式tikz。这是可以的,如下面的 MWE 所示。

/.expanded然而,当我构造必须用于传递参数的宏 \test 时,我发现如果使用宏(例如 \huge)则无法编译(请参阅下面的代码)。

b/.code 中的 Args 在我的代码中必须是一个值(而不是宏)。那么在这种情况下,如何实现我在 tikz 中使用常见 Latex 宏装饰节点文本的目标?

梅威瑟:

\documentclass{article}
\usepackage{tikz,picture,eso-pic,xcolor}
\begin{document}

    \pgfkeys{%
      a/.store in=\aaa,a/.default={},
      b/.code={%
        \AddToShipoutPictureBG{
          \AtTextUpperLeft{
            \tikz\draw(0,0) --node{#1}(5cm,0);}}},
      c/.code={%
        \AddToShipoutPictureBG{
          \AtTextCenter{
            \tikz\draw(0,0) --node{#1}(5cm,0);}}},
    }
    \newcommand\test[2][]{%
      \pgfkeys{a,#1,#2/.expanded={\aaa}}
    }
    %
    \test[a=aaa]{b}
    \test[a=777]{c}
    \test[a={\huge\color{red} ttt}]{c}% Wrong!! a={\noexpand\huge ttt} can pass the compile, but it's boring to write \noexpand each time. #2/.expanded={\noexpand\aaa} causes overwrite of the node text. So is there a better way to deal with this problem?

    first page\clearpage second page
\end{document}

相关内容