使用正常的 catcodes 获取 `\jobname`

使用正常的 catcodes 获取 `\jobname`

我想创建一个\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}

相关内容