使用带引号的 stringstyle 不适合使用 listings 包

使用带引号的 stringstyle 不适合使用 listings 包

请考虑以下 MWE stringstyle=\bfseries\color{blue}

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{color}
\usepackage{enumitem}

\usepackage{listings}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstset {%
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
        stringstyle=\bfseries\color{blue},      % <-- When using it the style does not apply because of ""
    basicstyle=\scriptsize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2,
    keepspaces=true,
    language=C++,
    columns=flexible,
}

\begin{document}

\begin{lstlisting}
"Example"
\end{lstlisting}

\end{document}

众所周知,双引号不太合适:

引号错误

所以我研究了一下,找到了两个很棒的解决方案乌尔丽克·菲舍尔埃格尔提出同样的问题!

不幸的是,如果我添加这两种解决方案中的任何一种,就会发生两件事:

  1. 样式引号其中的文字没有显示:无风格
  2. 当我尝试复制它给我的输出时,例如使用 egreg 第二个答案:“例子”(不是“例子”)。这很糟糕,因为在编译器中,前两个字符“”使代码无法正确编译:引号错误

PDF事实上,如果在输出中双引号的出现方式与我希望的复制后一样也是可能的。

有没有简单的方法来解决这两个问题?

谢谢你!!

附言: 感谢 cfr我忘了说我使用了LaTeX->PS->PDF,如果我添加\usepackage[T1]{fontenc},里面的所有文本都会消失。尝试添加它并用更多代码行进行测试:

\begin{lstlisting}
"Example"

Code around here


and here
\end{lstlisting}

输出为:

错误

以下是构建输出:

构建输出

答案1

您只需要T1字体的输出编码。(请注意,这假设使用传统的 TeX 引擎之一,即 TeX 或 pdfTeX。)

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\usepackage{xcolor,textcomp}
\usepackage{listings}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstset {%
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
        stringstyle=\bfseries\color{blue},      % <-- When using it the style does not apply because of ""
    basicstyle=\scriptsize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2,
    keepspaces=true,
    language=C++,
    columns=flexible,
}

\begin{document}

\begin{lstlisting}
"Example"  "Example"
\end{lstlisting}
\end{document}

第二个“示例”是从 Okular 中呈现的 PDF 复制回来的。

直上

请注意,这取决于文档中使用的字体是否以 T1 编码提供。对于大多数人来说,

\usepackage[T1]{fontenc}

就够了。例如,对于安装了 TeX Live 完整版本的人来说,这都是正确的。

但是,如果您没有 T1 格式的 Computer Modern,您可能会收到来自 pdfTeX 或用于从 DVI 转换的二进制文件的错误。在这种情况下,请安装缺少的字体(例如,cm-super一个提供 T1 格式 CM 的包)或切换字体包(例如,加载lmodern,或者更好的是,显然cfr-lm)。

相关内容