我想以不同的方式呈现注释字符,具体来说,我想将 Ada 的双破折号呈现为长破折号。使用literate=*{--}{{---}}1
可实现映射,但不幸的是,这会干扰列表呈现注释的能力。它不再被格式化为注释。我怎样才能实现我的目标而不产生这种副作用?
以下是一些演示该问题的示例代码:
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{mathptmx}
\usepackage[scaled]{helvet}
\usepackage{txfonts}
\lstset{basicstyle=\sffamily}
\lstset{texcl}
\lstset{literate=%
*{:=}{{$\coloneqq$}}1
{+}{{$+$}}1
{:}{{$\colon$}}1
{<=}{{$\leq$}}1
{>=}{{$\geq$}}1
{/=}{{$\neq$}}1
{=}{{$=$}}1
{=>}{{$\Rightarrow$}}1
{--}{{---} }1
}
\lstset{language=Ada,tabsize=3,columns=fullflexible,showstringspaces=false,escapechar=`,keepspaces}
\title{Test}
\begin{document}
\maketitle
\section{Code Listings}
\begin{lstlisting}
function Perform_Operation(X: Integer);
-- This is a comment, keywords such as begin end
-- should not be highligted and should be in
-- commentstyle
\end{lstlisting}
答案1
您可以使用转义机制,例如通过
escapeinside={--}{\^^M},escapebegin={--},escapeend={}
它捕获从行到行末的行--
,将 endash 和注释文本排版为普通 LaTeX。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{mathptmx}
\usepackage[scaled]{helvet}
\usepackage{txfonts}
\lstset{language=Ada,basicstyle=\sffamily,texcl,
literate=%
*{:=}{{$\coloneqq$}}1
{+}{{$+$}}1
{:}{{$\colon$}}1
{<=}{{$\leq$}}1
{>=}{{$\geq$}}1
{/=}{{$\neq$}}1
{=}{{$=$}}1
{=>}{{$\Rightarrow$}}1,
tabsize=3,
columns=fullflexible,
showstringspaces=false,
escapechar=`,
keepspaces,
escapeinside={--}{\^^M},escapebegin={--},escapeend={}}
\title{Test}
\begin{document}
\maketitle
\section{Code Listings}
\begin{lstlisting}
function Perform_Operation(X: Integer);
-- This is a comment, keywords such as begin end
-- should not be highligted and should be in
-- commentstyle
\end{lstlisting}
\end{document}
如果需要,您可以通过 为输出添加更多样式escapebegin
。例如,要将破折号后的文本设为斜体,您可以使用
escapebegin={--\itshape}