XeLaTeX + sourcecodepro + listings = 总是使用引号

XeLaTeX + sourcecodepro + listings = 总是使用引号

我正在 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}

此代码将生成以下输出,正如我所期望的那样: 显示 \texttt 中正确引号的图像

但是,当我删除第 6 行的注释并启用sourcecodepro包时,样式中的所有引号\texttt都变得混乱: 显示 \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}

在此处输入图片描述

相关内容