我正在编写一份包含清单的文档,这些清单是在 Courier 中排版的。当我更改文档的主字体时,此字体的软件包(随 一起安装autoinst
)决定应将主字体编码从 T1 切换为 LY1。令我惊讶的是,这影响了我的清单的排版。
我把这个文档精简为MWE:
\documentclass{standalone}
\usepackage[<<font encoding>>]{fontenc}
\usepackage{listings}
\lstset{basicstyle=\fontfamily{pcr}\selectfont}
\begin{document}
\begin{lstlisting}
print "Hello world"
\end{lstlisting}
\end{document}
<<font encoding>>
设置为,T1
编译为:
<<font encoding>>
设置为,LY1
编译为:
注意不同的字母间距。在环境之外使用 Courier 字体时,问题似乎不会出现,lstlisting
例如\texttt{Hello}
。
T1
我已经通过在 中明确选择字体编码解决了该问题\lstset
。但我仍然不明白为什么会发生这种情况。因此,我有一个由两部分组成的问题:
- 由 创建的包
autoinst
明确支持T1
和LY1
,即它有一个命令\RequirePackage[T1,LY1]{fontenc}
。那么,为什么LY1
尽管\usepackage[T1]{fontenc}
我的文档中有明确的命令,它还是会选择它呢? - 为什么两种字体编码在列表中使用时会产生不同的结果?
答案1
T1 和 LY1 编码中的指标pcr
不同:本诊断文档将
\documentclass{article}
\usepackage[LY1,T1]{fontenc}
\begin{document}
\fontfamily{pcr}\selectfont \showthe\dimexpr1em\relax
\fontencoding{LY1}\selectfont \showthe\dimexpr1em\relax
\stop
将停止两次并显示消息
> 10.0pt.
和
> 11.99998pt.
如果您输入qcr
而不是pcr
,那么加载 TeX Gyre Cursor(Courier 的克隆版)时,在两种情况下您都会得到 11.99998pt。
进一步的研究表明,在 OT1 编码中 em 的宽度pcr
也是 10pt,而 的宽度为 11.99998pt qcr
。
正确的值是多少?可能是 12pt(请注意,11.99998pt 只少了一个缩放点),因为(固定)字符宽度为 6pt。
答案2
您正在使用column=fixed
设置,并且间距取决于em
两个编码之间的值(知道为什么会很有趣...),正如 egreg 指出的那样。如果您使用绝对长度来定义字符的宽度,则会得到均匀的间距:
\documentclass{article}
\usepackage[LY1,T1]{fontenc}
\usepackage{listings}
\lstset{basicstyle=\fontfamily{pcr}\selectfont,}
\begin{document}
\lstset{basewidth={3mm,0.45em}} %3mm box width
\begin{lstlisting}
print "Hello world"
\end{lstlisting}
\fontencoding{LY1}\selectfont
\begin{lstlisting}
print "Hello world"
\end{lstlisting}
\end{document}