我正在 Overleaf 上编写一个简单的代码文档,但是每当我将我的设置\ttfamily
为时sourcecodepro
,里面的引号lstlisting
都会被强制转换为花引号,无论我尝试修复什么。
这是我的示例 .TeX 文件:
\documentclass{article}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{polyglossia}
%\usepackage{sourcecodepro}
\lstset{basicstyle=\ttfamily, numberstyle=\ttfamily}
\setdefaultlanguage{english}
\begin{document}
\begin{itemize}
\item ``Normal text with correct quotes''
\item "Normal text with incorrect quotes"
\item \texttt{"Typewrite text with quotes"}
\item \verb/"Verbatim text with quotes"/
\item
\begin{lstlisting}
"Code listing with quotes"
\end{lstlisting}
\end{itemize}
\end{document}
此代码将生成以下输出,正如我所期望的那样:
但是,当我删除第 6 行的注释并启用sourcecodepro
包时,样式中的所有引号\texttt
都变得混乱:
这是包装的问题sourcecodepro
,还是我做错了什么?
答案1
sourcecodepro 加载所有字体,包括带有 Ligatures=TeX 的打字机字体。在我看来,这是一个相当可疑的决定。您可以在没有此功能的情况下重新加载单声道字体:
\documentclass{article}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{polyglossia}
\usepackage{sourcecodepro}
\makeatletter
\defaultfontfeatures[\ttfamily]
{
Numbers = \sourcecodepro@figurestyle ,
Scale = \SourceCodePro@scale ,
Extension = .otf }
% Monospace font
\setmonofont
[ UprightFont = *-\sourcecodepro@regstyle ,
ItalicFont = *-\sourcecodepro@regstyle It ,
BoldFont = *-\sourcecodepro@boldstyle ,
BoldItalicFont = *-\sourcecodepro@boldstyle It ]
{SourceCodePro}
\makeatother
\lstset{basicstyle=\ttfamily, numberstyle=\ttfamily}
\setdefaultlanguage{english}
\begin{document}
\begin{itemize}
\item ``Normal text with correct quotes''
\item "Normal text with incorrect quotes"
\item \texttt{"Typewrite text with quotes"}
\item \verb/"Verbatim text with quotes"/
\item
\begin{lstlisting}
"Code listing with quotes"
\end{lstlisting}
\end{itemize}
\end{document}