FiraMono 和列表中的字形和连字符错误

FiraMono 和列表中的字形和连字符错误

考虑以下 MWE:

% Compile with pdfLaTeX
\documentclass{article}
\usepackage{FiraMono}
\usepackage{listings}
\lstset{
  language=[LaTeX]TeX,
  basicstyle=\ttfamily,
  columns=fullflexible,
  keepspaces=true
}
\begin{document}
\begin{lstlisting}
\ifx\foo\baz
\fi
\end{lstlisting}
\end{document}

清单

为什么反斜杠会被渲染成双引号?如何禁用fi连字符?请注意,如果使用 XeLaTeX 编译上述 MWE,这两个问题就会消失。


原因columns=fullflexible:默认columns=fixed将每个字符放在固定宽度的框中0.6em。巧合的是,0.6em这恰好是 Fira Mono 中字符的宽度。但对于其他字体,宽度有所不同。该选项columns=fullflexible将每个字符设置为其自然宽度,这是理想的。

答案1

您可以使用该microtype包禁用所有tt字体的连字。这也会禁用该特定字体的字距调整,但这对于打字机文本来说通常是不必要的。

对于反斜杠,默认的 OT1 编码没有足够的插槽,因此未映射。使用 T1 编码可解决该问题。

% Compile with pdfLaTeX
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{FiraMono}
\usepackage{listings}
\lstset{
  language=[LaTeX]TeX,
  basicstyle=\ttfamily,
  columns=fullflexible,
  keepspaces=true
}
\DisableLigatures{encoding = *, family = tt* }
\begin{document}
\begin{lstlisting}
\ifx\foo\baz
\fi
\end{lstlisting}
\end{document}

在此处输入图片描述

相关内容