I am typesetting something that has a lot of Java code listings. Because the Java code has a lot of annotations, and that they are important to the reader, I'd like to have them highlighted, like other keywords such as class, public, etc.
I want the output to be in black and white.
I tried using minted, but the bw output does not highlight the annotations.
How can I arm-twist listings to highlight the annotations?
P.S. Here is the lstset that I am using:
\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
}
Best Answer
First, some thoughts on
minted
: this great package relies on Pygments and AFAIK most of the available styles does support Java annotations. Sadly, as you pointed out, thebw
style doesn't highlight annotations.One possibility is to create an extended version of this style (in order words, create a new style with
bw
as base) and then include the instruction that sets the formatting for annotations (I just took a quick look at some styles, but failed to determine which instruction is used by Pygments to refer to an annotation).If you want to try
listings
instead, I'd go with Pouya's suggestion on using custom delimiters. The reason is that, in my humble opinion, since annotations are syntactic metadata, they cannot be treated as keywords or comments, hence a different style to represent them would be a wiser choice.I know you are using a black and white theme, but I decided to create a colored output just for us to see which style is being applied to each identifier. The concept would be the same, just replace
color
occurrences by the font series you want.In my code, I'd create two delimiters:
The first,
$$
, is applied to the whole line and it can be used for annotations that are in lines of their own (think of a single line comment here). The second one,%% ... %%
, behaves like a multiline comment, which encloses everything that is inside these delimiters, and it's useful for annotations that are applied inline to methods or fields.A sample code is as follows (the Java example here is a courtesy of Project Lombok):
The output:
Hope it helps.
:)