T1 与 LY1 的列表行为

T1 与 LY1 的列表行为

我正在编写一份包含清单的文档,这些清单是在 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。但我仍然不明白为什么会发生这种情况。因此,我有一个由两部分组成的问题:

  1. 由 创建的包autoinst明确支持T1LY1,即它有一个命令\RequirePackage[T1,LY1]{fontenc}。那么,为什么LY1尽管\usepackage[T1]{fontenc}我的文档中有明确的命令,它还是会选择它呢?
  2. 为什么两种字体编码在列表中使用时会产生不同的结果?

答案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}

在此处输入图片描述

相关内容