告诉 LaTeX 在一种情况下使用一个命令,在另一种情况下使用另一个命令

告诉 LaTeX 在一种情况下使用一个命令,在另一种情况下使用另一个命令

在法语中,我们将世纪数字写成罗马数字,小写字母,后跟上e标。由于我经常使用这种方法,因此我为其创建了一个命令:

\newcommand{\siecle}[1]{\textsc{#1}\textsuperscript{e} siècle}

但是,如果我在标题或粗体字体中使用它,小写字母就不起作用了,世纪字母最终会变成小写。我通过在这里查找找到了一种解决方法。我使用该anyfontsize包将实际大写字母的大小减小到 9.2 磅(介于\footnotesize和之间\scriptsize)。

我知道这不是一个好的解决方案,但它有效,而且是我发现的唯一方法,如下所示:

\documentclass[12pt,a4paper]{article}

\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{polyglossia}
\usepackage{anyfontsize}
\setmainlanguage{french}

\newcommand{\siecle}[1]{\textsc{#1}\textsuperscript{e} siècle} 

\begin{document}

On est au \siecle{vii} av. J.-C.

On est au {\fontsize{9.2}{11}\selectfont  VII}\textsuperscript{e} siècle av. J.-C.

\textbf{On est au \siecle{vii} av. J.-C.}

\textbf{On est au {\fontsize{9.2}{11}\selectfont  VII}\textsuperscript{e} siècle av. J.-C.}

\end{document}

给出:

在此处输入图片描述

有没有办法创建一个命令,如果字体有小写字母,则使用小写字母,如果没有,则使用缩小为较小字体的大写字母?

答案1

拉丁现代字体不采用粗体小型大写字母。

使用合适的字体。

\documentclass[12pt,a4paper]{article}

\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{french}

\setmainfont{CMU Serif}


\newcommand{\siecle}[1]{\textsc{#1}\textsuperscript{e}~siècle} % <-- don't forget ~

\begin{document}

On est au \siecle{vii} av. J.-C.

On est au {\fontsize{9.2}{11}\selectfont  VII}\textsuperscript{e} siècle av. J.-C.

\textbf{On est au \siecle{vii} av. J.-C.}

\textbf{On est au {\fontsize{9.2}{11}\selectfont  VII}\textsuperscript{e} siècle av. J.-C.}

\end{document}

在此处输入图片描述

答案2

正确的答案是选择包含粗体小写字母的字体集!你似乎使用的是没有粗体小写字母的拉丁现代字体,但也有其他计算机现代字体的衍生字体。另一方面,我发现 xelatex(你应该提到这一点)在设置类似字体时非常慢

\setmainfont[
  UprightFeatures={SmallCapsFont=AlegreyaSC-Regular},
  ItalicFeatures={SmallCapsFont=AlegreyaSC-Italic},
  BoldFeatures={SmallCapsFont=AlegreyaSC-Bold},
  BoldItalicFeatures={SmallCapsFont=AlegreyaSC-BoldItalic},
  Ligatures=TeX,
]{Alegreya}

因此,这是使用 LaTeX 宏来伪造小型大写字母的答案。使用它\mysc代替\textsc

\makeatletter
\newcommand\mysc[1]{\leavevmode{%
  \begingroup \def\X@a{bx}\edef\X@b{\f@series}%
  \expandafter\endgroup
  \ifx\x@a\x@b % missing bold small-caps
     \dimen@\f@size\p@ \[email protected]\dimen@
     \fontsize{\strip@pt\dimen@}{\f@baselineskip}%
     \def\f@shape{n}%
     \selectfont
     \MakeUppercase{#1}%
  \else
     \scshape #1%
  \fi
}}
\makeatother

请注意,它省略了一些细节\textsc,例如处理数学。

相关内容