Latex 使用列表创建第二个关键字样式不起作用

Latex 使用列表创建第二个关键字样式不起作用

我需要使用列表在我的 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}

我改变了一些颜色以使突出显示更清晰。

相关内容