如何使用文学重新定义评论字符

如何使用文学重新定义评论字符

我想以不同的方式呈现注释字符,具体来说,我想将 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}

斜体样本

相关内容