未修改的源代码

未修改的源代码

我有一个宏可以帮助我使用 lua 以各种方式打印出(或做任何事情)源代码:

看:xparse 逐字换行

宏是

\def\SourceCode{%
  \begingroup%
  \endlinechar`\^^J%
  \catcode`\\=12\catcode`\^^M=12\catcode`\#=12\catcode`\~=12\catcode`\%=12\catcode`\^=12\catcode`\_=12\catcode`\@=12\catcode`\ =12\catcode`\|=12%
  \SourceCodeAux}%
\def\SourceCodeAux#1#2{\endgroup\directlua{print("\luaescapestring{#1}")}}%

在这种情况下,我们只需将代码打印到控制台来查看它是否正确。

问题是\detokenize在宏后面添加了一个空格。有什么方法可以阻止或逆转此行为吗?(我在想,如果我们可以使用不同的、不可见的或未在源代码块中使用的转义字符,那么也许可以吗?)


\documentclass{minimal}
\usepackage{luatex}\directlua{tex.enableprimitives('',tex.extraprimitives())}

\def\SourceCode{%
  \begingroup%
  \endlinechar`\^^J%
  \catcode`\\=12\catcode`\^^M=12\catcode`\#=12\catcode`\~=12\catcode`\%=12\catcode`\^=12\catcode`\_=12\catcode`\@=12\catcode`\ =12\catcode`\|=12%
  \SourceCodeAux}%
\def\SourceCodeAux#1#2{\endgroup\directlua{print("\luaescapestring{#1}")}}%


\begin{document}

\SourceCode{
   \documentclass{minimal}
   \def\SourceCode{%
      \begingroup%
      \obeyspaces%
      \endlinechar`\^^J%
      \catcode`\^^M=13%
      \SourceCodeAux}%
   \def\SourceCodeAux#1#2{\directlua{print("\luaescapestring\expandafter{\detokenize{#1}}")}\endgroup}%
}
\end{document}

答案1

通过使用\catcode'\\=12和删除\detokenizer似乎可以有效地对代码块进行去标记化:

\def\SourceCode{%
  \begingroup%
  \endlinechar`\^^J%
  \catcode`\\=12\catcode`\^^M=12\catcode`\#=12\catcode`\~=12\catcode`\%=12\catcode`\^=12\catcode`\_=12\catcode`\@=12\catcode`\ =12\catcode`\|=12%      
  \SourceCodeAux}%
\def\SourceCodeAux#1#2{\endgroup\directlua{print("\luaescapestring{#1}")}}%

相关内容