# What is the least invasive way to set the font for listings?

As has been asked often enough, to get bold keywords in lstlisting environments, one has to use a different typewriter font. Most answers suggest to include this or that package.

If just including a package changes the font, then the package must be applying some magic in the background to install itself. And unless the package was specifically made for listings, this means it potentially also changes other stuff.

How can I use another font in my listings while being sure that nothing else is affected, or at least that nothing but the default typewriter font is changed?

-
Good font packages such as DejaVuSansMono or beramono just change the meaning of \ttdefault, which is just what you want; they also allow to specify a scaling factor. The package tgcursor does the same, but unfortunately also changes the meaning of \bfdefault; just add \renewcommand{\bfdefault}{bx} after loading tgcursor. –  egreg May 2 at 20:08
@egreg I think Arian wants to use a different font for listings without changing \ttdefault... –  Jubobs May 2 at 20:27
Changing \ttdefault is acceptable, as Herbert said it doesn't make much sense to use different monospaced fonts. But my work has to conform to a given style (cls file is provided), and I want to change it as little as possible. –  Cephalopod May 2 at 21:02

That's an excellent question. Many answers to questions about listings on this site tell you to load along with the fontenc package with option T1 (which is fine) along with a package such as courier or beramono in order to have access to boldface typewriter fonts. However, packages like beramono and courier change the default typewriter font family globally, which may not be what you want.

If you want a certain font only inside listings, you should simply select it in the basicstyle key.

basicstyle = \fontfamily{desired-font}\selectfont ...


I suggest you define a macro to easily select the font in question (see below). You should still load the fontenc package with option T1, but don't load beramono or the likes of it.

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{listings}

% macro to select a scaled-down version of Bera Mono (for instance)
\makeatletter
\newcommand\BeraMonottfamily{%
\def\fvm@Scale{0.85}% scales the font down
\fontfamily{fvm}\selectfont% selects the Bera Mono font
}
\makeatother

\lstset{
basicstyle=\BeraMonottfamily,
frame=single,
}

\begin{document}

\texttt{Computer Modern typewriter font, as usual}

\begin{lstlisting}[language=C,caption=listing typeset with Bera Mono]
/* Hello World program */

#include<stdio.h>

main()
{
printf("Hello World");

}
\end{lstlisting}
\end{document}

-
Let's say I know which font I want (eg, from here: tug.dk/FontCatalogue/typewriterfonts.html). How do I know what to put in \fontfamily{}? –  Cephalopod May 2 at 21:05
–  Jubobs May 3 at 9:03

It makes no real sense to use a Monofont for listings and the default CM mono for typewriter text. Use it for all \ttfamily and it looks nicer. It is one of the typographers rule not to mix a lot of different fonts. A scaled version of DejaVu Mono:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[scaled=0.9]{DejaVuSansMono}
\usepackage{listings}

\lstset{basicstyle=\ttfamily}

\begin{document}
\begin{lstlisting}[language=C]
/* Hello World program */

#include<stdio.h>

main()
{
printf("Hello World");

}
\end{lstlisting}
\end{document}


-
The OP doesn't want the default typewriter font to be Bera Mono everywhere in the document, only in listings. –  Jubobs May 2 at 19:12
There are many cases in which I don't want Bera Mono everywhere. –  Jubobs May 2 at 19:41