我正在写一份长报告,需要包含一些我写的代码。我希望我的代码能以彩色显示,就像在某些文本编辑器中看到的那样,但使用 verbatim 包则不行。
我需要为两种不同的语言着色:
- Bash 语言
- (Java 语言)<= 已经有了,谢谢!
预先感谢您的帮助。
答案1
与 JoG 的回答没有任何矛盾:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily,
showstringspaces=false,
commentstyle=\color{red},
keywordstyle=\color{blue}
}
\begin{document}
\begin{lstlisting}[language=Java,caption={Java version}]
public class HelloWorld {
// Here's the main class
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
\end{lstlisting}
\begin{lstlisting}[language=bash,caption={bash version}]
#!/bin/bash
echo "Hello, world!"
\end{lstlisting}
\end{document}
答案2
listings
对 shell 代码不太适用,因为它不能很好地处理很多代码,比如下面的代码:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily,
showstringspaces=false,
commentstyle=\color{red},
keywordstyle=\color{blue}
}
\begin{document}
\begin{lstlisting}[language=bash,caption={bash version}]
#!/bin/bash
echo the $# parameter destroys listings syntax highlighting
\end{lstlisting}
\end{document}
它并没有产生您所期望的结果(该#
符号被视为注释分隔符,因此该行的其余部分没有按应有的颜色着色。
对于 bash,您可以改用minted
需要外部工具来产生突出显示的包(pygments
python 库)。
将前面的结果与此代码生成的结果进行比较(您需要使用 调用编译器pdflatex -shell-escape myfile.tex
):
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}{bash}
#!/bin/bash
echo the $# parameter did not destroy pygments syntax highlighting
\end{minted}
\end{document}
答案3
对于 java,我使用具有以下样式的 listings 包:
\definecolor{javakeyword}{rgb}{0,0,0.5}
\definecolor{javastring}{rgb}{0,0.5,0}
\definecolor{javacomment}{rgb}{0.5,0.5,0.5}
\lstdefinestyle{java}{
language=Java,
showspaces=false,
showstringspaces=false,
basicstyle=\ttfamily,
columns=flexible,
stringstyle=\color{javastring},
keywordstyle=\color{javakeyword}\ttfamily\textbf,
commentstyle=\color{javacomment}\ttfamily\textit
}
然后我用
\begin{lstlisting}[float,style=Java,caption={Correct Logging example},label=lst:logging]
private static final Log log = LogFactory.getLog(MyClass.class);
public void doSomeStuff(Stuff stuff) throws StuffException {
checkNotNull(stuff,"stuff should not be null");
}
\end{listlisting}