
В TeX каждый из 256 байтов имеет ассоциированные \lccode
и \uccode
, целые числа в диапазоне [0,255], которые указывают, среди прочего, как \lowercase
и \uppercase
действуют. Конечно, есть куча других чисел (например, mathcode и catcode), но я здесь сосредоточусь на кодах изменения регистра.
Взгляд на TeXbook подсказывает мне о следующих вариантах использования \lccode
and \uccode
:
\lowercase
<general text>
преобразует каждый символьный токен в аргументе в символьный токен с тем же кодом категории, но кодом символа, равным\lccode
исходному коду символа, если только не равен\lccode
нулю; в этом случае исходный код символа сохраняется.\uppercase
<general text>
ведет себя таким же образом, используя\uccode
вместо этого .При расстановке переносов TeX берет любые символы, которые попадают в его желудок (либо из токенов с кодом категории 11 или 12, либо из токенов, обозначенных символом, или 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
упоминает этот трюк в стартовом разделе комментариев.