考虑以下 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}