多年来,我在我的书中使用 Garamond 作为普通文本,使用 Beramono 作为打字机样式。在我的新笔记本电脑、新 Cygwin 上pdfTeX 3.14159265-2.6-1.40.17
,这些字体会产生冲突。列表中的关键字不再是粗体。如果我跳过 Garamond,关键字会变成粗体,但这样一来,我的文本字体就不对了。
\documentclass[]{article}
\usepackage[dutch]{babel}
\usepackage[urw-garamond,ttscaled=false]{mathdesign}
\usepackage[T1]{fontenc}
\usepackage[scaled=0.77]{beramono}
\usepackage[]{listings}
\lstset{
language=C,
basicstyle={\ttfamily\small},
keywordstyle={\bfseries},
commentstyle={\itshape},
showstringspaces=false
}
\begin{document}
This is normal text.
\begin{lstlisting}[]
#include <stdio.h>
int main(void)
{
printf("Hello World\n);
return 0;
}
\end{lstlisting}
This is normal text.
\end{document}
、int
和#include
应该void
加粗,但实际上并没有。我希望有人知道哪里错了。
答案1
使用urw-garamond
选项,mathdesign
重新定义\bfdefault
为mb
而不是b
(或bx
)。事实上,你会收到一个警告
LaTeX Font Warning: Font shape `T1/fvm/mb/n' undefined
(Font) using `T1/fvm/m/n' instead on input line 21.
如果您只需要里面的等宽粗体字体listings
,最简单的解决方法是选择正确的字体系列。
\documentclass[]{article}
\usepackage[T1]{fontenc}
\usepackage[dutch]{babel}
\usepackage[urw-garamond,ttscaled=false]{mathdesign}
\usepackage[scaled=0.77]{beramono}
\usepackage[]{listings}
\lstset{
language=C,
basicstyle=\ttfamily\small,
keywordstyle=\fontseries{b}\selectfont,
commentstyle=\itshape,
showstringspaces=false,
}
\begin{document}
This is normal text.
\begin{lstlisting}[]
#include <stdio.h>
int main(void)
{
printf("Hello World\n);
return 0;
}
\end{lstlisting}
This is normal text.
\end{document}
通过定义合适的字体替换可以获得更完整的解决方案:
\documentclass[]{article}
\usepackage[T1]{fontenc}
\usepackage[dutch]{babel}
\usepackage[urw-garamond,ttscaled=false]{mathdesign}
\usepackage[scaled=0.77]{beramono}
\usepackage[]{listings}
\makeatletter
\input{t1fvm.fd}
\DeclareFontShape{T1}{fvm}{mb}{n}{<->ssub * fvm/b/n}{}
\DeclareFontShape{T1}{fvm}{mb}{sl}{<->ssub * fvm/b/sl}{}
\DeclareFontShape{T1}{fvm}{mb}{it}{<->ssub * fvm/b/sl}{}
\makeatother
\lstset{
language=C,
basicstyle=\ttfamily\small,
keywordstyle=\bfseries,
commentstyle=\itshape,
showstringspaces=false,
}
\begin{document}
This is normal text.
\begin{lstlisting}[]
#include <stdio.h>
int main(void)
{
printf("Hello World\n);
return 0;
}
\end{lstlisting}
This is normal text.
\end{document}