设置列表字体的侵入性最小的方法是什么?

设置列表字体的侵入性最小的方法是什么?

就像到过 经常 足够的,要在环境中获得粗体关键字lstlisting,必须使用不同的打字机字体。大多数答案建议包含这个或那个包。

如果仅仅包含一个包就会改变字体,那么这个包必须在后台应用一些魔法来安装自己。除非这个包是专门为列表制作的,否则这意味着它也可能改变其他东西。

我怎样才能在我的列表中使用其他字体,同时确保不影响其他内容,或者至少确保除了默认打字机字体之外没有任何变化?

答案1

这个问题问得好。listings本网站上关于的许多问题的答案都告诉您,要加载fontenc带有选项的软件包T1(这很好),以及诸如courier或 之类的软件包beramono,以便能够访问粗体打字机字体。但是,诸如beramono和之类的软件包courier会全局更改默认的打字机字体系列,这可能不是您想要的。

如果您只想在列表中使用某种字体,您只需在basicstyle键中选择它即可。

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

我建议您定义一个宏来轻松选择相关字体(见下文)。您仍应使用fontenc选项加载包T1,但不要加载beramono或类似的东西。

在此处输入图片描述

\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}

答案2

使用 Monofont 来显示列表,使用默认的 CM mono 来显示打字机文本,这其实毫无意义。将它用于所有\ttfamily文本,看起来会更美观。印刷师的规则之一是不要混合使用多种不同的字体。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}

在此处输入图片描述

相关内容