5
4

2 回答 2

4

它的工作方式如下:

\documentclass[letterpaper,10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage{german}
\usepackage{geometry}
\geometry{margin=2cm}
\newcommand*\origsffamily{}
\let\origsffamily\sffamily
\renewcommand*\sffamily{\origsffamily\small {\renewcommand\&{{\scalebox{1.2}{\textnormal{\fontspec{Baskerville}\itshape\amp}}}}}}

\begin{document}


hello, this is \& a \sffamily test \& 


\end{document}

这意味着,您将与符号的更改包含在 (in my example) 的定义中\sffamily

缺点是 - 当然 - 你必须为所有想要的字体系列执行此操作。

于 2010-07-05T15:36:25.263 回答
2

您可以测试标准的 LaTeX 令牌列表\f@family,但是,这可能不像您想要的那样可靠。以下代码仅检查当前系列是否等于\setmainfontand设置的默认系列\setsansfont,但不检查字体是否真的是无衬线字体:

\documentclass{article}

\usepackage{fontspec}
\usepackage{expl3}
\usepackage{xparse}

\setmainfont{DejaVu Serif}
\setsansfont{DejaVu Sans}

\makeatletter
\ExplSyntaxOn
\NewDocumentCommand \amp { } {
  \tl_if_eq:NNTF \f@family \rmdefault {
    % this is a roman font
    A
  } {
    \tl_if_eq:NNTF \f@family \sfdefault {
      % this is a sans font
      B
    } {
      % something else
      C
    }
  }
}
\ExplSyntaxOff
\makeatother


\begin{document}

test \amp\ test

\sffamily
test \amp\ test

\ttfamily
test \amp\ test

\end{document}
于 2010-07-05T16:07:48.093 回答