使用 '%'(百分比)符号的 catcode 进行调整

使用 '%'(百分比)符号的 catcode 进行调整

我的main.tex

  \catcode`\%=11
  \immediate\write18{git log -1 --pretty=format:"%h%x3b%ad" --date=short > \jobname.info}
  \catcode`\%=14

它从 git 中提取版本详细信息。现在我想将其放入.sty我在开始时加载的文件中,以便我可以重复使用此宏。文件中的代码.sty是:

\newcommand*{\getverhash}{\catcode`\%=11\immediate\write18{git log -1 --pretty=format:"%h%x3b%ad" --date=short > \jobname.info}\catcode`\%=14}

但是,即使没有调用宏,\getverhash我也会收到以下错误:

Runaway argument?
{\catcode `\%=11\immediate \write 18{git log -1 --pretty=format:"\par \ETC.
./main.tex:17: File ended while scanning use of \@argdef.
<inserted text>
\par

我猜问题在于更改包内的百分号 () 的 catcode %- 但我不知道如何解决这个问题。\getverhash在包内定义的正确方法是什么?

答案1

该问题与包无关,如果你在序言中使用它,你会看到相同的问题

\newcommand*{\getverhash}{\catcode`\%=11\immediate\write18{git log -1 --pretty=format:"%h%x3b%ad" --date=short > \jobname.info}\catcode`\%=14}

参数\newcommand(像任何宏一样)在执行之前会被扫描,因此 TeX 试图找到}newcommand 参数的结束,但由于%catcode 更改不会应用,直到此命令被执行用过的已经太晚了。

\catcode`\%=11

    \newcommand*{\getverhash}{\immediate\write18{git log -1 --pretty=format:"%h%x3b%ad" --date=short > \jobname.info}

\catcode`\%=14

或者更简单,不需要更改 catcode

 \newcommand*{\getverhash}{\immediate\write18{git log -1 --pretty=format:"\@percentchar h\@percentchar x3b\@percentchar ad" --date=short > \jobname.info}

相关内容