问问题
758 次
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
,但是,这可能不像您想要的那样可靠。以下代码仅检查当前系列是否等于\setmainfont
and设置的默认系列\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 回答