TikZ 和库 babel - 私有宏 \my@macro 无法与节点的文本一起使用

TikZ 和库 babel - 私有宏 \my@macro 无法与节点的文本一起使用

有没有办法修复以下不兼容性?我无法将我的私有宏用于节点的文本。

\documentclass{article}

\RequirePackage{tikz,amsmath}
\usetikzlibrary{babel}

\makeatletter
\newcommand\my@macro[1]{%
    {\tiny$\substack{-\\#1}$}%
}


\newcommand\test[1]{%
    \begin{tikzpicture}
        \path (0, 0) 
              -- node[draw] {\my@macro{#1}}
              (1,0);
    \end{tikzpicture}
}
\makeatother

\begin{document}

\test{PARIS}

\end{document}

答案1

修订的解决方案

感谢 Ulrike,她为我原来的解决方案提出了替代方案。我更喜欢她的方法:避免调用时出现 catcode 问题\csname my@macro\encsname

\documentclass{article}

\RequirePackage{tikz,amsmath}
\usetikzlibrary{babel}

\makeatletter
\newcommand\my@macro[1]{%
    {\tiny$\substack{-\\#1}$}%
}


\newcommand\test[1]{%
    \begin{tikzpicture}
        \path (0, 0) 
              -- node[draw] {\csname my@macro\endcsname{#1}}
              (1,0);
    \end{tikzpicture}
}
\makeatother

\begin{document}
\test{PARIS}
\end{document}

在此处输入图片描述

原始解决方案

不确定为什么需要它,但通过在\makeatletter...\makeatother嵌入的调用周围放置一个包装器,就可以使其工作。

\documentclass{article}

\RequirePackage{tikz,amsmath}
\usetikzlibrary{babel}

\makeatletter
\newcommand\my@macro[1]{%
    {\tiny$\substack{-\\#1}$}%
}


\newcommand\test[1]{\makeatletter\testaux{#1}\makeatother}
\newcommand\testaux[1]{%
    \begin{tikzpicture}
        \path (0, 0) 
              -- node[draw] {\my@macro{#1}}
              (1,0);
    \end{tikzpicture}
}
\makeatother

\begin{document}
\test{PARIS}
\end{document}

相关内容