# Insert Bash code with coloration into my latex report

I am writing a long report, and I need to include some code I wrote. I would like my code to appear colorized, as can be seen in some text editors, but not by using the verbatim package.

I need to colorize two distinct languages:

• Bash language
• (Java language)<= Already have it, thanks!

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily,
showstringspaces=false,
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}


listings does not work well for shell code because it can not deal well with a lot of codes such as the following one:

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{basicstyle=\ttfamily,
showstringspaces=false,
echo the $# parameter destroys listings syntax highlighting \end{lstlisting} \end{document}  It does not produce what you could expect (the # sign is considered as a comment delimiter and thus the rest of the line is not colored as it should. For bash you may instead use the minted package which need an exterior tool to produce the highlighting (the pygments python library). Compare the previous result with the one produced by this code (you need to call the compiler with 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

• If you quote the argument to echo, which might be a more robust version for the bash script, you do not have the issue that the $# destroys the highlighting. However, there might be other issues, but this might help if you don't want to use an external tool. – Martin - マーチン Mar 19 '19 at 17:22 for java i use the listings package with following style: \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 }  which i then use like \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}  • Welcome to TeX.sx! Can you turn your code snippets into a complete minimal working example (MWE)? Again, welcome and we look forward for more of your contributions to the TeX.sx. – hpesoj626 Jan 4 '13 at 11:46 • listings also supports bash and several other languages. – marczellm Jan 4 '13 at 12:04 • @marczellm Indeed, the OP should use sh as the language because Java isn't appropriate and it's the best alternative to using bash. – user10274 Jan 4 '13 at 13:16 • @MarcvanDongen Ermmm... what? – marczellm Jan 4 '13 at 13:24 • @JoG:Thanks for Java it's working well, but what about bash and some special chars (like$) etc. – user23710 Jan 4 '13 at 13:40