我正在努力解决单色字体中下划线的问题。它看起来比其他符号短。例如:
\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}