我是&符号的忠实粉丝 - 我非常虔诚地听取了SimpleBits对“use the best available ampersand”的建议。
为此,我在LaTeX中定义了以下快捷方式:
\let\amp\&
\renewcommand\&{{\scalebox{1.2}{\textnormal{\fontspec{Baskerville}\itshape\amp}}}}
简而言之,这会将“普通”&符号的所有用法改为时尚的变体,例如:
This is a text \& it contains an ampersand.
(使用\&
而不仅仅是&
,因为这是LaTeX的工作原理 - 后者已经保留用于分隔表环境中的列。)
然而,这总是使用相同的字体 - 在这里,Baskerville - 无论它是否适合。我想根据使用的字体系列使用不同的字体。也就是说,我想将另一个&符号与sans serif文本结合使用,特别是我希望阻止在monospace上下文中重写&符号。所以在以下两个上下文中,我不想触发上面的定义:
{\sffamily a \& b}
{\ttfamily a \& b}
我该怎么做?
我想象如下:
\renewcommand\&{
\ifsans
{\fontspec{Trebuchet MS}{\textnormal{\itshape\amp}}}
\else
\ifmono
\amp
\else
{\fontspec{Baskerville}\scalebox{1.2}{\textnormal{\itshape\amp}}}
\fi
\fi}
答案 0 :(得分: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}
这意味着,您将&符号的更改包含在(在我的示例中)\sffamily
的定义中。
缺点是 - 当然 - 您必须为所有想要的字体系列执行此操作。
答案 1 :(得分:2)
您可以测试标准LaTeX令牌列表\f@family
,但是,这可能不如您所希望的那样可靠。以下代码只检查当前系列是否等于\setmainfont
和\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}