我想在 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 码相差x
64(正或负,取决于哪种运算会给出 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
来获得均匀的间距会更好。