将带有颜色的 Bash 代码插入我的 Latex 报告中

将带有颜色的 Bash 代码插入我的 Latex 报告中

我正在写一份长报告,需要包含一些我写的代码。我希望我的代码能以彩色显示,就像在某些文本编辑器中看到的那样,但使​​用 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需要外部工具来产生突出显示的包(pygmentspython 库)。

将前面的结果与此代码生成的结果进行比较(您需要使用 调用编译器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}

相关内容