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

标签 latex xetex

我是&符号的忠实粉丝 - 以至于我听取了 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 - 无论它是否合适。我想根据所使用的字体系列使用不同的字体。也就是说,我想将另一个 & 符号与无衬线文本结合使用,特别是我想防止在等宽字体上下文中重写 & 符号。所以在下面两种情况下,我不想触发上面的定义:

{\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}

最佳答案

它的工作方式如下:

\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 的定义中。

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

关于latex - 根据使用的字体有条件地执行宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180594/

相关文章:

r - 由 r 为 tex 格式化 ttest 输出

latex - 在空白不敏感环境/Z 表示法模式下 Latex 中字符串的格式化

latex -\LaTeX{} 的行间距问题

jupyter-notebook - 如何更改 IPython Notebook 中显示方程的对齐方式?

python - 使 Sphinx 在 PDF 输出中生成未分类的代码块

latex - LyX-打破惯例

latex - 如何将我的部分编号保留在Latex中,而只是将其隐藏?

latex - 自 Xetex 弃用以来,使用 Pandoc 将 Markdown 转换为 PDF

latex - XeTeX - 检测何时需要重新运行