技术细节

技术细节

我正在努力解决单色字体中下划线的问题。它看起来比其他符号短。例如:

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

逐字逐句

请注意,由于“测试”位于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}

相关内容