我正在尝试定义一个宏来选择代码中的字体lstlisting
(即使用listings
包)。我指的是这个问题的答案设置列表字体的侵入性最小的方法是什么?
因此我定义宏如下:
\makeatletter
\newcommand\BeraMonottfamily{%
\def\fvm@Scale{0.85}% scales the font down
\fontfamily{fvm}\selectfont% selects the Bera Mono font
}
\makeatother
因此,当我使用这样的代码时,它运行良好:
\begin{lstlisting}[basicstyle=\BeraMonottfamily]
...
\end{lstlisting}
但是,我不明白如何@Scale{0.85}
在宏中使用。当我更改里面的数字时@Scale{}
,没有任何变化。我以为它会改变字体大小,但事实并非如此。
那么,是什么@Scale{0.85}
意思?如何使用?谢谢。
答案1
您正在使用单个宏\fvm@Scale
:因为在生效\def\fvm@Scale
时进入 TeX 的内存,所以是一个单个标记。\makeatletter
\fvm@Scale
为什么需要它?因为的内容t1fvm.fd
是
\ProvidesFile{t1fvm.fd}[2004/09/07 scalable font definitions for T1/fvm.]
\expandafter\ifx\csname fvm@Scale\endcsname\relax
\let\fvm@@Scale\@empty
\else
\edef\fvm@@Scale{s*[\csname fvm@Scale\endcsname]}%
\fi
\DeclareFontFamily{T1}{fvm}{\hyphenchar \font -1}
\DeclareFontShape{T1}{fvm}{m}{n}{
<-> \fvm@@Scale fvmr8t
}{}
(省略类似的行),并且您似乎想要将字体缩小到 85%。
因此,执行时\BeraMonottfamily
,缩放因子会被识别。第一次执行时可能需要这样做,但多次执行也无妨。
另一方面,这个字体定义文件应该通过\usepackage[beramono}
它加载,就像其他类似的包一样,提供了一个缩放字体的选项。
我相信您应该这样做,而不是采用间接方法:在整个文档中使用不同的等宽字体是没有意义的。
\documentclass{article}
\usepackage[T1]{fontenc} % needed for Bera Mono
\usepackage[scaled=0.85]{beramono}
\usepackage{listings}
\lstset{basicstyle=\ttfamily}
\begin{document}
Some text and \texttt{monospaced Bera Mono} and some other text
\begin{lstlisting}
This uses Bera Mono scaled 85%
\end{lstlisting}
\end{document}