如何取消 % 作为特殊字符?

如何取消 % 作为特殊字符?

背景:我用来LaTeX显示自动生成的数据。我无法手动更改原始数据(因为它们经常更新)。

但此原始文本包含LaTeX特殊字符(_&%)。这会导致编译失败。

我发现处理文本中的特殊 LaTeX 字符如何告诉 LaTeX 将_&视为“常规”字符。但是,\catcode`%=12不起作用...


问题:如何告诉 LaTeX 该符号%应该被视为“常规”字符?

当然,全局定义这种行为会导致许多包的编译失败,因此这种重新定义应该在本地/临时适用(例如在\inputed.tex文件中)。

答案1

您可以%通过以下方式制作标点符号

\catcode`\%=12

答案2

在 ConTeXt 中,您可以通过说 来使用 ASCII 模式。这将从此时起禁用整个文档\asciimode的特殊含义。您仍然可以使用双百分号进行注释。#$%&^_|~

\asciimode
\starttext

#$%&^_|~  %% these are disabled

\ { }     %% these remain enabled

\stoptext

如果您只想对一小段文本启用它,请使用\start...\stopasciimode

\starttext

\startasciimode
  #$%&^_|~  %% these are disabled

  \ { }     %% these remain enabled
\stopasciimode

\stoptext

答案3

类别代码分配的形式为

\catcode <number> = <number>

(空格和=是可选的)。第一个<number>是我们要分配类别代码的字符(因此在旧式引擎中是八位,0x10FFFF对于 Unicode 引擎最多是),第二个是类别代码(四位数)。

该数字可以以 TeX 理解的任何合法形式表示:十进制、八进制、十六进制或字母。例如,通常的类别代码 4&可以分配为

\catcode 38 = 4    % decimal
\catcode '46 = 4   % octal
\catcode "26 = 4   % hexadecimal
\catcode `& = 4    % alphabetic

为了改变的类别代码%(在 INITEX 启动时该代码被预先分配给 14,因此嵌入在不改变分配的每种格式中),如果我们想使用“字母”表示法,就会遇到问题:

\catcode `% = 12

无法工作,因为该%字符尚未分配不同的类别代码,因此在读入代码时它仍然是注释字符。您可以使用显式数字来执行此操作

\catcode 37 = 12

因为%是 ASCII 37(十六进制0x25)。但使用字符会更方便!有一个解决方法死胡同:字母常数也可以通过以下方式设计

`\<character>

其中反斜杠必须是类别代码 0 的字符(通常如此)。在这种情况下,单字符控制序列不会被解释为宏,而只是被解释为命名的字符。因此

\catcode `\% = 12

会起作用。同样,如果你想暂时将反斜杠的类别代码更改为 12,你可以这样做

\catcode `\\ = 12

(任务将完成输入控制序列\\以便由于反引号而将其解释为字母常量)。

必须以这种方式表示的其他字符是类别代码为 5(结束行)、9(忽略)或 15(无效)的字符。类别代码为 6 的字符也最好以这种方式表示,特别是当类别代码分配在宏的替换文本中时。

因此,当您必须更改类别代码为 0(转义)、5(结束行)、6(参数)、9(忽略)、14(注释)或 15(无效)的字符的类别代码时,请使用十进制形式或转义形式。

相关内容