我无法在 lstlisting 中的 \textcolor 中插入这些 ^ 字符

我无法在 lstlisting 中的 \textcolor 中插入这些 ^ 字符

我想在 lstlisting 元素中突出显示我的 Turtle 文档的某些部分(使用特定颜色),正如您在我的 MWE 中所看到的那样:

\documentclass{article}

\usepackage{listings}
\usepackage[dvipsnames]{xcolor} %with special prdefined colors 

\lstset{ basicstyle=\ttfamily,breaklines=true}
\lstset{escapeinside={<@}{@>}}


\begin{document}

\begin{lstlisting}[language=SPARQL,keywordstyle=\color{blue},basicstyle=\normalsize\ttfamily]
b:Shakespeare foaf:givenName <@\textcolor{NavyBlue}{"William"^^xsd:string}@>.
\end{lstlisting}

\end{document}

但是,结果不是“Shakespeare”^^xsd:string,而是“William”8sd:string。颜色其实没问题,但我无法避免显示 8 而不是 ^^。

答案1

<@和之间@>,TeX 使用其标准规则,这些规则规定像 这样的组合^^x指的是 ASCII 码与 的 ASCII 码相差x64(正或负,取决于哪种运算会给出 0-127 区间内的值)的字符。因此^^x得到8

实际上规则要复杂一些:如果后面两个字符^^在 之间0123456789abcdef,则它们将被解释为十六进制 16 位数字。但是,x并不适用此特定规则。

解决方案:使用\string

\documentclass{article}

\usepackage{listings}
\usepackage[dvipsnames]{xcolor} %with special prdefined colors 

\lstset{
  basicstyle=\ttfamily,
  breaklines=true,
  escapeinside={<@}{@>},
  columns=fullflexible,
}


\begin{document}

\begin{lstlisting}[language=SPARQL,keywordstyle=\color{blue},basicstyle=\normalsize\ttfamily]
b:Shakespeare foaf:givenName <@\textcolor{NavyBlue}{"William"\string^\string^xsd:string}@>.
\end{lstlisting}

\end{document}

我认为使用它columns=fullflexible来获得均匀的间距会更好。

在此处输入图片描述

相关内容