Экранированные символы в шрифте пишущей машинки

Экранированные символы в шрифте пишущей машинки

Я знаю несколько способов исправить это (например \usepackage[T1]{fontenc}, ), но я хочу понять, что происходит в следующем примере.

\documentclass{article}
\begin{document}
\noindent
\$ \% \& \{ \} \_ \# \textbackslash \\
\ttfamily \$ \% \& \{ \} \_ \# \textbackslash \\
\verb+$ % & { } _ # \ +
\end{document}

сбежавшие символы

  • Почему попытка получить \ttfamilyфигурную скобку, подчеркивание или обратную косую черту приводит к замене обычного римского символа? Глифы явно не отсутствуют, поскольку режим verbatim может получить к ним доступ.

  • Как именно режим дословного перевода получает доступ к этим глифам?

  • Удаление скобок и обратной косой черты, так что единственным оставшимся «проблемным» символом остается подчеркивание, устраняет предупреждения шрифта, несмотря на то, что замена все еще происходит. Почему так?

решение1

\verbи verbatimпредположим, что шрифт содержит эти символы в их позициях ascii и локально присваивает символам код 12 (как знакам препинания) без специального определения.

\textbackslash(и друзья) определяется как команда, зависящая от кодировки, и (чтобы создать видимость здравомыслия по сравнению с исходными кодировками TeX) LaTeX предполагает, что OT1кодировка — это кодировка, в cmr10которой нет символа обратной косой черты. Поэтому в OTопределении по умолчанию используется (использующее математические шрифты). \ttfamilyизменяет семейство, но не кодировку, и поэтому в этом случае вы получаете определение OT1, хотя шрифт cmttна самом деле закодирован по-другому.

В , все работает лучше, T1поскольку шрифты, помеченные как закодированные T1, на самом деле имеют ту же кодировку.

\_отличается тем, что \textunderscoreимеет определение по умолчанию, которое вообще не использует шрифт, а использует горизонтальную линейку.

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