使用 listings 包更改空间样式

使用 listings 包更改空间样式

我想将代码中的所有空格字符都变成灰色。有没有简单的方法可以做到这一点?有没有类似spacestyle(我已注释掉)的方法?

\documentclass[a4paper, 10pt]{book}

\usepackage[UTF8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[T2A]{fontenc}
\usepackage[russian, ukrainian]{babel}

\usepackage{amsmath}
\usepackage{listings}

\usepackage[usenames, dvipsnames]{color}

\lstset{%
    language     = [77]Fortran,
    basicstyle   = \ttfamily,
    keywordstyle = \color{black},
    stringstyle  = \color{Gray},
    showspaces   = true,
%   spacestyle   = \color{Gray} 
    numbers      = left,
    numberstyle  = \ttfamily \color{black}
}

\begin{document}

\begin{lstlisting}
      PROGRAM HELLO
      WRITE(*, *) "Hello, World!"
      END PROGRAM
\end{lstlisting}

\end{document}

在此处输入图片描述 我还想将所有空格改为灰色项目符号。可以吗?

答案1

listings包使用\lst@visiblespace这些空间,因此您只需定义它:

在此处输入图片描述

这是乳胶代码。我删除了你的字体编码,因为我不想生成所有需要的字体。

\documentclass[a4paper, 10pt]{book}

\usepackage{amsmath}
\usepackage{listings}

\usepackage[usenames, dvipsnames]{color}

\makeatletter
\def\lst@visiblespace{$\color{Gray}\bullet$}
\makeatother

\lstset{%
    language     = [77]Fortran,
    basicstyle   = \ttfamily,
    keywordstyle = \color{black},
    stringstyle  = \color{Gray},
    showspaces   = true,
%   spacestyle   = \color{Gray}
    numbers      = left,
    numberstyle  = \ttfamily \color{black}
}

\begin{document}

\begin{lstlisting}
      PROGRAM HELLO
      WRITE(*, *) "Hello, World!"
      END PROGRAM
\end{lstlisting}

\end{document}

答案2

那些可见空间字符往往会分散读者的注意力(好吧,至少对我来说是这样);我可以理解为什么你会希望它们比showspaces设置时自然出现的更暗淡。

listings包未定义此类spacestyle密钥,但如果您愿意,可以随时创建一个。见下文。

在此处输入图片描述

我如何得知的\lst@visiblespace

我知道showspaces是负责排版可见空格字符代替空格的键,所以我在listings.dtx

\lst@Key{showspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifshowspaces}

然后我搜索了\lst@ifshowspaces,结果找到了以下一行:

\let\lst@outputspace\lst@visiblespace

然后我搜索了\lst@visiblespace,这让我找到了该宏的定义:

\def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace}

我的自定义spacestyle键使用了原始定义的修改版本。

代码

\documentclass[a4paper, 10pt]{book}

\usepackage{listings}
\usepackage[usenames, dvipsnames]{color}

% new custom key called spacestyle
\makeatletter
\lst@Key{spacestyle}{}
  {\def\lst@visiblespace{{#1\lst@ttfamily{\char32}\textvisiblespace{}}}}
\makeatother

\lstset{%
    language     = [77]Fortran,
    basicstyle   = \ttfamily,
    keywordstyle = \color{black},
    stringstyle  = \color{Gray},
    showspaces   = true,
    spacestyle   = \color{Gray},
    numbers      = left,
    numberstyle  = \ttfamily \color{black}
}

\begin{document}

\begin{lstlisting}
      PROGRAM HELLO
      WRITE(*, *) "Hello, World!"
      END PROGRAM
\end{lstlisting}

\end{document}

相关内容