有没有办法修复以下不兼容性?我无法将我的私有宏用于节点的文本。
\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}