这listings
使用默认比例字体时,软件包会将源代码连字符(-
,U+002D)转换为减号(−
,U+2212),但使用默认等宽打字机字体时则不会。一个最小的工作示例:
\documentclass{article}
\usepackage{listings}
\lstset{language=C}
\begin{document}
\lstinline[basicstyle=\rmfamily]{--x} \textrm{-{}-x} \par
\lstinline[basicstyle=\sffamily]{--x} \textsf{-{}-x} \par
\lstinline[basicstyle=\ttfamily]{--x} \texttt{-{}-x}
\end{document}
前两行渲染清楚地显示了长减号和短连字符之间的区别:
这不仅仅是一个美学问题。清单中的代码确实不再正确。减号不是连字符,C(以及大多数其他语言)的语法不将它们视为可互换的。 --x
是有效的 C 代码,但−−x
事实并非如此。如果一个不懂 Unicode 的人试图从这样的清单中复制和粘贴代码,她可能会发现它无法编译,但对问题感到困惑。
如何防止listings
连字符变成减号?
答案1
添加literate={-}{-}1
到列表集。例如:
\documentclass{article}
\usepackage{listings}
\lstset{language=C, literate={-}{-}1}
\begin{document}
\lstinline[basicstyle=\rmfamily]{--x} \textrm{-{}-x} \par
\lstinline[basicstyle=\sffamily]{--x} \textsf{-{}-x} \par
\lstinline[basicstyle=\ttfamily]{--x} \texttt{-{}-x}
\end{document}
看清单手册第 6.4 节。