在 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
在开始的评论部分提到了这个技巧。