我想编写一些可以在任何字体下正确呈现的代码(我不能使用 UTF8 输入)。有没有办法找出\textendash
当前字体是否正确定义了?
使用\ttfamily
,--
不会呈现为短划线,而是按照--
字面意思,\textendash
呈现为左括号{
。
所以我想,我需要一个自己的宏,textendash
如果可用则使用,-
否则使用。
\documentclass{minimal}
\begin{document}
This -- should work the same \textendash{} in any font.
\ttfamily
This -- should work the same \textendash{} in any font.
\end{document}
答案1
您所看到的大多数只是OT1
编码的产物,而实际上并不是单一编码:每种经典的 tex 字体都有单独的编码,特别是 tt 字体非常不同,因此可以逐字打印 ascii。
使用 T1 您可以获得更一致的结果。
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
This -- should work the same \textendash{} in any font.
\ttfamily
This -- should work the same \textendash{} in any font.
\end{document}
您无法真正自动从 TeX 检测出哪个字符位于哪个位置。LaTeX 字体设置只是决定假装所有经典字体都具有相同的“OT1”编码,以便提供半合理的界面。因此,由于您无法分辨字符形状,因此您无法通过测试检测出 cmtt 的编码实际上与 cmr 的编码不同。