lccode 和 uccode 有什么用?

lccode 和 uccode 有什么用?

在 TeX 中,256 个字节中的每一个都有一个关联的\lccode和一个\uccode,范围在 [0,255] 内的整数,它们指示\lowercase和如何\uppercase工作等。当然还有许多其他数字(例如 mathcode 和 catcode),但我在这里重点介绍大小写转换代码。

通过查看 TeXbook,我发现了 and 的以下\lccode用法\uccode

  • \lowercase <general text>将参数中的每个字符标记转换为具有相同类别代码的字符标记,但字符代码等于\lccode原始字符代码的字符标记,除非为零\lccode,在这种情况下保留原始字符代码。

  • \uppercase <general text>其行为方式相同,但使用\uccode代替。

  • 连字时,TeX 会获取其所接收的所有字符(无论是类别代码为 11 或 12 的标记,还是 chardef 标记或 char),并将“字母”定义为非零的 字符。如果等于其字符代码,\lccode则字母为小写。\lccode

就这些吗?具体来说,TeX\uccode除了使用原始函数之外,还使用其他什么用途\uppercase?其他引擎呢,pdfTeX、XeTeX 和 LuaTeX?

答案1

当设置为零时,字符的\lccode用于连字:\uchyph

\documentclass{article}
\begin{document}

\uchyph=0 %

\begingroup
  \lccode`\C=`\C
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Capitalised word.
  \par
\endgroup

\begingroup
  \lccode`\C=`\c
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Capitalised word.
  \par
\endgroup

\begingroup
  \uccode`\C=`\C
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Capitalised word.
  \par
\endgroup

\begingroup
  \uccode`\C=`\c
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Some filler text. 
  Capitalised word.
  \par
\endgroup

\end{document}

请注意,这个\uchyph名称具有误导性,因为要测试的是单词是否以小写字母开头(与\lccode自身相等的字母)。

答案2

内的字母\patterns通过 进行映射\lccode。事实上,这是唯一可以指定包括 - 和/或 0-9 的连字模式的机制,因为按字面意思书写它们会将它们解释为连字优先级或连字点。

hypht1.tex在开始的评论部分提到了这个技巧。

相关内容