我需要使用列表在我的 latex 文档中插入一些代码。我为 Java 语言创建了自己的集合
\lstset{
language=Java,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle={\small},
numbers=none,
numberstyle=\tiny\color{gray},
morekeywords=[1]{@},
keywordstyle=[1]\color{red},
keywordstyle={[2]\color{red}},
keywordstyle=\bfseries\color{purple!40!black},
otherkeywords={String,async,await,Task,var},
keywords=[2]{DatabaseField,DatabaseTable},
commentstyle=\color{ForestGreen},
stringstyle=\color{mauve},
captionpos=b, % sets the caption-position to bottom
breaklines=true,
breakatwhitespace=true,
tabsize=3}
正如您所看到的,我尝试了许多在线解决方案,但对我来说都没有用。
我知道正确的语法应该是:
keywords=[<number>]{<list of keywords>}
keywordstyle={[<number>]<style commands>}
但是,这不起作用,而且我的“正常”关键字样式中的粗体文本也被忽略了,我的错误在哪里?
答案1
列表中仍然支持 Java。
尝试评论language = Java
。如果您只想突出显示两个词,例如keywords=[2]{DatabaseField,DatabaseTable}
,
尝试修改样式,方法如下:
\lstdefinestyle{Java}
{
otherkeywords={String,MyClass,etc}, %you can add otherwords to the keywords
literate={
{DatabaseTable}{{{\color{red}{DatabaseTable}}}}{1} %DatabaseTable -> red
{DatabaseField}{{{\color{yellow}{DatabaseField}}}}{1} %DatabaseField -> yellow
}
}
答案2
您的设置基本上是正确的,但是您应该注意,普通关键字属于类,[1]
因此keywordstyle=[1]\color{red}
会被后续 覆盖keywordstyle
。如果您希望@
关键字以不同的颜色突出显示,则应为其指定不同的数字,例如[3]
并定义相应的样式。但是,我猜您在使用@
注释前缀之后想要突出显示此类注释。这可以用 来完成keywordsprefix=@
,但限制是 是类[1]
,因此不能给出不同的样式。
\documentclass{article}
\usepackage{listings,xcolor}
\lstset{
language=Java,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle={\small},
numbers=none,
numberstyle=\tiny\color{gray},
keywordstyle=\bfseries\color{blue},
keywordstyle={[2]\color{green}},
keywordstyle={[3]\color{red}},
otherkeywords={String,async,await,Task,var},
keywords=[2]{DatabaseField,DatabaseTable},
keywords=[3]{@},
commentstyle=\color{ForestGreen},
stringstyle=\color{pink},
captionpos=b,
breaklines=true,
breakatwhitespace=true,
tabsize=3}
\begin{document}
\begin{lstlisting}
import java.db;
@Object.name(field = "a",field = "b")
@ Object.name(field = "a",field = "b")
public DatabaseField(java.lang.String name,
java.lang.Class type,
int length,
int keyType)
\end{lstlisting}
\begin{lstlisting}[keywordsprefix=@]
import java.db;
@Object.name(field = "a",field = "b")
@ Object.name(field = "a",field = "b")
public DatabaseField(java.lang.String name,
java.lang.Class type,
int length,
int keyType)
\end{lstlisting}
\end{document}
我改变了一些颜色以使突出显示更清晰。