在法语中,我们将世纪数字写成罗马数字,小写字母,后跟上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
,例如处理数学。