为什么`\@outputpage`在代码中读为文本?

为什么`\@outputpage`在代码中读为文本?

我收到了一份包含一些现有代码的文档。我想在奇数页和偶数页上设置文本高度(以解释不同的页脚)。我是 LaTeX 新手,不知道具体什么可能有用。

以下是我以为会在奇数页和偶数页上交替显示文本高度的代码。但不知何故,\@outputpage代码中的 被读作字符串,就好像我试图在文本中写入“@outputpage”,如屏幕截图所示。

\makeatletter
\patchcmd\@outputpage{\textheight}{\ifodd\count\z@ 210mm \else 176mm\fi}{}{}
\makeatother

在此处输入图片描述

我不知道如何防止这种情况发生,或者是否有其他方法来改变文本高度。我正在使用 Overleaf,我开始认为问题可能出在这里,而不是 LaTeX。

答案1

这对乳胶没有影响,它纯粹是编辑器中的一个产物。

与大多数语法高亮器一样,Overleaf 使用的语法高亮器实际上并不解释乳胶,它只是使用一些固定规则。

在一份文件中,如果没有\makeatletter

\patchcmd\@outputpage{\textheight}{\ifodd\count\z@ 210mm \else 176mm\fi}{}{}

\@将引用后面跟着 10 个字符标记的命令和后面跟着字符标记的outputpage 命令\z@

如果您实际执行了 latex,则会\makeatletter更改标记化规则,因此@是一个字母,因此\@outputpage\z@都是每个单独的标记命令名称,并且这种解释会持续到被恢复,\makeatother但语法高亮器不知道这一点。

您会在这个网站上看到相反的问题,它选择假设这@始终是一个字母,因此

\patchcmd\@outputpage{\textheight}{\ifodd\count\z@ 210mm \else 176mm\fi}{}{}

尽管被省略了,但它还是被突出显示,就像\@outputpage是一个命令一样\makeatletter,并且这对于乳胶来说会失败。

相关内容