Для чего используются lccode и uccode?

Для чего используются lccode и uccode?

В TeX каждый из 256 байтов имеет ассоциированные \lccodeи \uccode, целые числа в диапазоне [0,255], которые указывают, среди прочего, как \lowercaseи \uppercaseдействуют. Конечно, есть куча других чисел (например, mathcode и catcode), но я здесь сосредоточусь на кодах изменения регистра.

Взгляд на TeXbook подсказывает мне о следующих вариантах использования \lccodeand \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упоминает этот трюк в стартовом разделе комментариев.

Связанный контент