清单重点介绍 Java 注释

清单重点介绍 Java 注释

我正在排版包含大量 Java 代码清单的内容。由于 Java 代码包含大量注释,并且注释对读者来说很重要,因此我希望将它们突出显示,就像其他关键字(如 class、public 等)一样。

我希望输出是黑白色的。

我尝试使用 minted,但 bw 输出没有突出显示注释。

我怎样才能迫使列表突出显示注释?

PS 这是我正在使用的 lstset:

\lstset{
  basicstyle=\footnotesize\tt,        % the size of the fonts that are used for the code
  breakatwhitespace=false,         % sets if automatic breaks should only happen at whitespace
  breaklines=true,                 % sets automatic line breaking
  captionpos=b,                    % sets the caption-position to bottom
  extendedchars=true,              % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
  frame=single,                    % adds a frame around the code
  language=Java,                 % the language of the code
  keywordstyle=\bf,
  showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
  showstringspaces=false,          % underline spaces within strings only
  showtabs=false,                  % show tabs within strings adding particular underscores
  tabsize=2                       % sets default tabsize to 2 spaces
}

答案1

首先,minted:这个伟大的软件包依赖于皮格门特斯据我所知,大多数可用的样式支持 Java 注释。遗憾的是,正如您所指出的,该bw样式不会突出显示注释。

一种可能性是创建此样式的扩展版本(换句话说,创建一个以此为bw基础的新样式),然后包含设置注释格式的指令(我只是快速浏览了一些样式,但未能确定 Pygments 使用哪条指令来引用注释)。

如果您想尝试listings,我会采纳 Pouya 的建议,使用自定义分隔符。原因是,在我看来,由于注释是语法元数据,因此不能将其视为关键字或注释,因此采用不同的样式来表示它们会是更明智的选择。

我知道您使用的是黑白主题,但我决定创建一个彩色输出,以便我们查看每个标识符应用了哪种样式。概念是一样的,只需用color您想要的字体系列替换出现的内容即可。

在我的代码中,我将创建两个分隔符:

moredelim=[il][\textcolor{pgrey}]{$$},
moredelim=[is][\textcolor{pgrey}]{\%\%}{\%\%}

第一个,$$,应用于整行,可用于单独一行的注释(此处可视为单行注释)。第二个,%% ... %%,行为类似于多行注释,它将分隔符内的所有内容括起来,对于内联应用于方法或字段的注释非常有用。

示例代码如下(此处的 Java 示例由龙目岛计划):

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{inconsolata}

\usepackage{color}

\definecolor{pblue}{rgb}{0.13,0.13,1}
\definecolor{pgreen}{rgb}{0,0.5,0}
\definecolor{pred}{rgb}{0.9,0,0}
\definecolor{pgrey}{rgb}{0.46,0.45,0.48}

\usepackage{listings}
\lstset{language=Java,
  showspaces=false,
  showtabs=false,
  breaklines=true,
  showstringspaces=false,
  breakatwhitespace=true,
  commentstyle=\color{pgreen},
  keywordstyle=\color{pblue},
  stringstyle=\color{pred},
  basicstyle=\ttfamily,
  moredelim=[il][\textcolor{pgrey}]{$$},
  moredelim=[is][\textcolor{pgrey}]{\%\%}{\%\%}
}

\begin{document}

\begin{lstlisting}
/**
 * This is a doc comment.
 */
package com.ociweb.jnb.lombok;

import java.util.Date;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NonNull;

$$@Data
$$@EqualsAndHashCode(exclude={"address","city","state","zip"})
public class Person {
    enum Gender { Male, Female }

    // another comment

    %%@NonNull%% private String firstName;
    %%@NonNull%% private String lastName;
    %%@NonNull%% private final Gender gender;
    %%@NonNull%% private final Date dateOfBirth;

    private String ssn;
    private String address;
    private String city;
    private String state;
    private String zip;
}
\end{lstlisting}

\end{document}

输出:

输出

希望能帮助到你。:)

答案2

您可以通过让列表将注释视为评论来实现这一点。将其添加到您的lstset

morecomment=[s][\color{gray}]{@}{\ }

简而言之:s 型注释有两个分隔符,不能嵌套,定义为:morecomment=[s][(optional) <style>]{<startDelimiter>}{<endDelimiter>}

因此,上面给出的注释样式将任何以@空格开头和结尾的字符串视为注释,并以灰色字体显示。

答案3

keywordsprefix您可以使用定义的选项在第 44 页的文档中例如

keywordsprefix={@},

突出显示所有 Java 注释(所有以 开头的单词@)。不过,目前存在一些注意事项/错误:

keywordsprefix=<prefix>

All identifers starting with the prefix will be printed as first order
keywords.

Bugs: Currently there are several limitations. (1) The prefix is always
case sensitive. (2) Only one prefix can be defined at a time. (3) If used 
‘standalone’ outside a language definition, the key might work only after 
selecting a nonempty language (and switching back to the empty language 
if necessary). (4) The key does not respect the value of classoffset and
has no optional class number argument.

相关内容