
Я борюсь с проблемой подчеркивания в моно шрифте. Кажется, что он короче других символов. Например:
\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
среды, в этом случае отступ абзаца не применяется.
Технические детали
Для интересующихся, реализация \textunderscore
in OT1
encoding, полученная с помощью \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}