根据使用的字体有条件地执行宏

Kon*_*lph 5 latex xetex

我是&符号的忠实粉丝 - 我非常虔诚地听取SimpleBits的建议"使用最好的&符号".

为此,我在LaTeX中定义了以下快捷方式:

\let\amp\&
\renewcommand\&{{\scalebox{1.2}{\textnormal{\fontspec{Baskerville}\itshape\amp}}}}
Run Code Online (Sandbox Code Playgroud)

简而言之,这将"正常"&符号的所有用法改为时尚的变体,例如:

This is a text \& it contains an ampersand.
Run Code Online (Sandbox Code Playgroud)

(使用\&而不仅仅是&因为LaTeX的工作方式 - 后者已经保留用于分隔表环境中的列.)

但是,这总是使用相同的字体 - 这里,Baskerville - 无论它是否适合.我想根据使用的字体系列使用不同的字体.也就是说,我想将另一个&符号与sans serif文本结合使用,特别是我想防止在monospace上下文中重写&符号.所以在以下两个上下文中,我不想触发上面的定义:

{\sffamily a \& b}
{\ttfamily a \& b}
Run Code Online (Sandbox Code Playgroud)

我怎么做?

我想象如下:

\renewcommand\&{
  \ifsans
    {\fontspec{Trebuchet MS}{\textnormal{\itshape\amp}}}
  \else
    \ifmono
      \amp
    \else
      {\fontspec{Baskerville}\scalebox{1.2}{\textnormal{\itshape\amp}}}
    \fi
  \fi}
Run Code Online (Sandbox Code Playgroud)

phi*_*mue 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}
Run Code Online (Sandbox Code Playgroud)

这意味着,您将 & 符号的更改包含到 (在我的示例中) 的定义中\sffamily

当然,缺点是您必须对所有所需的字体系列执行此操作。