我想将代码中的所有空格字符都变成灰色。有没有简单的方法可以做到这一点?有没有类似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}