使用 fontspec 的词汇表和仿制小型大写字母

使用 fontspec 的词汇表和仿制小型大写字母

我想在使用包制作缩写列表时使用伪造的小型大写字母glossaries。我使用的是另一种字体,但为了可重复性,我在此示例中使用了Linux Libertine O。为了使事情更清楚,我还在此示例中夸大了缩放因子。出于某种原因,有时我的\smallCaps命令似乎可以正常工作,但在这种情况下它不会再返回。我做错了什么?

\documentclass{memoir}

\usepackage{glossaries}
\usepackage{fontspec}

\newcommand{\smallCaps}[1]{%
    {\fontspec[Scale=0.5]{Linux Libertine O} #1}%
}

\setacronymstyle{long-short}
\begin{document}

%ABBREVIATIONS
\newacronym{ADR}{\smallCaps{ADR}}{adverse drug reaction}

\setmainfont{Linux Libertine O}
Works \smallCaps{FOO} does not work: \gls{ADR}). A more specific definition
for the term \gls{ADR} is 

\end{document}

在此处输入图片描述

答案1

您绝不应该\fontspec在文档内部使用它;它是用户级命令和类似命令使用的通用命令\setmainfont\newfontfamily\setmainfont只应在序言中使用。

我删除了\setmainfont声明,只是为了展示如何独立于主字体选择字体。关键是使用short中的键\newacronym

\documentclass{memoir}

\usepackage{glossaries}
\usepackage{fontspec}

\newcommand{\smallCaps}[1]{%
    {\fontspec[Scale=0.5]{Linux Libertine O} #1}%
}

\setacronymstyle{long-short}
\begin{document}

%ABBREVIATIONS
\newacronym{ADR}{\smallCaps{ADR}}{adverse drug reaction}

\setmainfont{Linux Libertine O}
Works \smallCaps{FOO} does not work: \gls{ADR}). A more specific definition
for the term \gls{ADR} is 

\end{document}

在此处输入图片描述

另一方面,更好的策略(假设您没有其他方法来制作小型大写字母)是将其添加到字体定义中:

\documentclass{memoir}

\usepackage{fontspec}
\usepackage{glossaries}

\makeglossaries

\setmainfont{Latin Modern Roman}[
  SmallCapsFont={Linux Libertine O},
  SmallCapsFeatures={Scale=0.5},
]

\setacronymstyle{long-short}
\begin{document}

%ABBREVIATIONS
\newacronym[
  short=\textsc{ADR}
]{ADR}{ADR}{adverse drug reaction}

Works \textsc{FOO} does not work: \gls{ADR}). A more specific definition
for the term \gls{ADR} is

\printglossaries

\end{document}

最后,如果您没有真正的小型大写字母,最好的策略就是完全避免使用它们。

相关内容