Технические детали

Технические детали

Я борюсь с проблемой подчеркивания в моно шрифте. Кажется, что он короче других символов. Например:

\documentclass{article}

\begin{document}
\ttfamily
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\_cke[x]\ |\ dfi\_cs\_n[x]\ |\ dfi\_act\_n[x]\ | \\
.------------.-------------.--------------.
\end{document}

Результат:

Результат

Как видите, последняя строка (с подчеркиваниями) смещена влево. Как мне сделать так, чтобы

PS Нет, я не могу использовать собственную таблицу - это созданная пользователем часть, которую я должен вставить как есть. PSS Это verbatimне вариант, потому что он не работает внутриmulticolumn

решение1

Вместо этого \_вы можете использовать \string_:

введите описание изображения здесь

\documentclass{article}

\begin{document}

\ttfamily
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\string_cke[x]\ |\ dfi\string_cs\string_n[x]\ |\ dfi\string_act\string_n[x]\ | \\
.------------.-------------.--------------.

\end{document}

решение2

Самый естественный способ — использовать verbatim(см. ниже). Но давайте сначала немного объясним, что происходит.

В OT1кодировке, \textunderscore, которая \_опирается на, подделывается с помощью правила (это не символ текущего шрифта). Переключение на T1кодировку путем добавления \usepackage[T1]{fontenc}заставляет \_использовать фактический символ шрифта, выбранного \ttfamily:

\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}
\ttfamily
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\_cke[x]\ |\ dfi\_cs\_n[x]\ |\ dfi\_act\_n[x]\ | \\
.------------.-------------.--------------.
\end{document}

введите описание изображения здесь

Подчеркивания теперь имеют тот же размер, что и другие символы. Однако, как отметила Барбара Битон, последовательные дефисы в не дословном режиме объединяются в лигатуры (короткое тире с --, длинное тире с ---). Если мы отключим лигатуры — что является одной из вещей, которые verbatimэто делают — то все строки будут иметь ожидаемую длину:

\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}

\begingroup
\ttfamily\makeatletter\@noligs\makeatother
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\_cke[x]\ |\ dfi\_cs\_n[x]\ |\ dfi\_act\_n[x]\ | \\
.------------.-------------.--------------.
\endgroup

\end{document}

введите описание изображения здесь

На практике использование verbatimв таких ситуациях более естественно. Приведенные выше примеры были просто для того, чтобы помочь понять, что происходит за кулисами. Таким образом, я бы сделал здесь следующее:

\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}

\begin{verbatim}
Test
.-------------.-------------.--------------.
 | abcdefghig | klmnopqrstu | vwxyzabcdefg |
.-------------.-------------.--------------.
 | abc[e]ghig | klm[o]qrstu | vwxyza[c]efg |
.-------------.-------------.--------------.
 | dfi_cke[x] | dfi_cs_n[x] | dfi_act_n[x] |
.-------------.-------------.--------------.
\end{verbatim}

\end{document}

Дословно

Обратите внимание, что поскольку «Test» находится внутри verbatimсреды, в этом случае отступ абзаца не применяется.

Технические детали

Для интересующихся, реализация \textunderscorein OT1encoding, полученная с помощью \tracingmacros=1\tracingonline=1, делает:

\leavevmode \kern .06em\vbox{\hrule width .3em}

тогда как при T1кодировании, в конечном итоге, это просто \char"5F(то есть команда, которая добавляет в текущий список поле символа, содержащее символ с шестнадцатеричным кодом 5F в текущем шрифте).

решение3

Я бы использовал verbatim:

введите описание изображения здесь

\documentclass{article}
\begin{document}
\begin{verbatim}
   Test
.------------.-------------.--------------.
| abcdefghig | klmnopqrstu | vwxyzabcdefg | 
.------------.-------------.--------------.
| abc[e]ghig | klm[o]qrstu | vwxyza[c]efg | 
.------------.-------------.--------------.
| dfi_cke[x] | dfi_cs_n[x] | dfi_act_n[x] | 
.------------.-------------.--------------.
\end{verbatim}
\end{document}

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