为什么要在样式文件的开头插入下面的代码?例如,可以在 上找到下面的代码lipsum.sty
。
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%% Digits \0\1\2\3\4\5\6\7\8\9
%% Exclamation \! Double quote \" Hash (number) \#
%% Dollar \$ Percent \% Ampersand \&
%% Acute accent \' Left paren \( Right paren \)
%% Asterisk \* Plus \+ Comma \,
%% Minus \- Point \. Solidus \/
%% Colon \: Semicolon \; Less than \<
%% Equals \= Greater than \> Question mark \?
%% Commercial at \@ Left bracket \[ Backslash \\
%% Right bracket \] Circumflex \^ Underscore \_
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
%%
它是用来做什么的?
答案1
字符表是旧时代的遗留,那时通过网关发送文件或电子邮件是一件危险的事情:每个网络都有自己的规则,输出混乱的情况很常见。我当时在 BitNET 节点上,但实际上它使用 Vax/VMS 网络,通过某个地方的某个网关;其他人在 JANET 或 ARPAnet 上,其他人使用名为 munnari.oz(适用于澳大利亚)的邮件转发程序。
每个网关都可能以各种方式破坏输入,这些方式通常彼此不同,并且有时也与自身不同。
因此 LaTeX 团队设计了这种方法来检查文件完整性。在.dtx
文件中,百分号被删除,因此您报告的内容相当于
\CharacterTable{
Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
Digits \0\1\2\3\4\5\6\7\8\9
Exclamation \! Double quote \" Hash (number) \#
Dollar \$ Percent \% Ampersand \&
Acute accent \' Left paren \( Right paren \)
Asterisk \* Plus \+ Comma \,
Minus \- Point \. Solidus \/
Colon \: Semicolon \; Less than \<
Equals \= Greater than \> Question mark \?
Commercial at \@ Left bracket \[ Backslash \\
Right bracket \] Circumflex \^ Underscore \_
Grave accent \` Left brace \{ Vertical bar \|
Right brace \} Tilde \~}
宏\CharacterTable
定义为
\def\CharacterTable#1{%
\begingroup
\def\usedtable{#1}%
\ifx\usedtable\defaulttable
\typeout {***************************}%
\typeout {* Character table correct *}%
\typeout {***************************}%
\else
\PackageError{doc}{Character table corrupted}{\the\wrong@table}%
\show\defaulttable
\show\usedtable
\fi
\endgroup}
(通常,事实并非如此,但这就是想法)。宏\defaulttable
包含正确的字符表。由于\ifx
通过查看第一级扩展来比较两个宏,并且只有当两个扩展逐个标记一致时才返回 true(不解释它们),我们可以看到,如果文件已损坏,例如更改~
为其他内容(是的,这很常见),则测试将返回 false。
在每个字符前添加反斜杠可以抵消它们的特殊性质。同样,如果未定义\ifx
则不介意;如果它在相同的位置并且继续。\0
\usertable
\defaulttable