我想创建一个\myjob
具有相同的宏价值,但\jobname
字母的 catcode 为 11,而不是 12。目标是能够执行类似
\documentclass{article}
\edef\myjob{\jobname}
\makeatletter
\newcommand{\mytest}[1]{\begingroup%
\def\@tempa{#1}%
% \expandafter\def\expandafter\@tempa\expandafter{\detokenize{#1}}%
\meaning\@tempa\par%
\meaning\myjob\par%
\ifx\@tempa\myjob%
YES%
\else%
NO%
\fi%
\endgroup}
\begin{document}
\mytest{test}
\end{document}
其中\ifx\@tempa\myjob
为真(假设将正确的字符串传递给\mytest
)。我宁愿不将输入字符串去标记化。相反,我正在寻找一种不同的定义方式,\myjob
即“重新标记化” \jobname
。
答案1
感谢 Joseph Wright 的提示,我所需要的只是\scantokens
。
\documentclass{article}
\edef\myjob{\expandafter\scantokens\expandafter{\jobname\noexpand}}
\makeatletter
\newcommand{\mytest}[1]{\begingroup%
\def\@tempa{#1}%
% \expandafter\def\expandafter\@tempa\expandafter{\detokenize{#1}}%
\meaning\@tempa\par%
\meaning\myjob\par%
\ifx\@tempa\myjob%
YES%
\else%
NO%
\fi%
\endgroup}
\begin{document}
\mytest{test}
\end{document}