样式文件中的字符表有什么用途?

样式文件中的字符表有什么用途?

为什么要在样式文件的开头插入下面的代码?例如,可以在 上找到下面的代码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

字符表是旧时代的遗留,那时通过网关发送文件或电子邮件是一件危险的事情:每个网络都有自己的规则,输出混乱的情况很常见。我当时在 Bi​​tNET 节点上,但实际上它使用 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

相关内容