宏中的比例来选择字体

宏中的比例来选择字体

我正在尝试定义一个宏来选择代码中的字体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}

在此处输入图片描述

相关内容