技術細節

技術細節

我正在努力解決單色字體中下劃線的問題。看起來它比其他符號短。例如:

\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}

相關內容