
我正在努力解決單色字體中下劃線的問題。看起來它比其他符號短。例如:
\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}
下劃線現在與其他字元具有相同的大小。然而,正如 Barbara Beeton 所指出的,非逐字模式下的連續連字符組合成連字(短破折號與--
,長破折號與---
)。如果我們關閉連字(這是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
的實現會:OT1
\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}