我正在编写一个充满 UTF-8 字符和代码的文档,因此我使用带有 lstlisting 的 CJKutf8 包。但是,文本突出显示似乎有问题。
在下面的例子中,似乎只有 ASCII 字符被涂成蓝色,而 UTF-8 字符(中文和日文)则不是。为什么会发生这种情况?有没有什么方法可以解决这个问题?
结果:
来源:
\documentclass{article}
\usepackage{CJKutf8}
\usepackage{listings}
\usepackage{tikz}
\lstset{
extendedchars=false,
commentstyle=\color{blue},
}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
Text % may contain UTF-8 characters
\begin{lstlisting} [language=Python]
# Comment
# 注释 comment
# コメント comment
\end{lstlisting}
Text % may contain UTF-8 characters
\newpage
\end{CJK}
\end{document}
答案1
这实际上比预期的要简单:listings
有一个texcl
选项导致“注释行文本(直到行尾)被读取为 LaTeX 代码并以注释样式排版”(手册第 40 页)。这意味着注释由 CJKutf8 处理,允许文本着色。
要保留空格,您可以使用\obeyspaces
命令作为escapebegin
键 from 的参数listings
。不幸的是,这不适用于制表符。
梅威瑟:
\documentclass{article}
\usepackage{CJKutf8}
\usepackage{listings}
\usepackage{tikz}
\lstset{
extendedchars=false,
commentstyle=\color{blue},
texcl,
escapebegin=\obeyspaces
}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
Text % may contain UTF-8 characters
\begin{lstlisting}[language=Python]
# Comment
# 注释 comment with spaces and tabs
# コメント comment
\end{lstlisting}
Text % may contain UTF-8 characters
\newpage
\end{CJK}
\end{document}
结果: