将 \scshape 或 \textsc 与 fontspec/xelatex 一起使用

将 \scshape 或 \textsc 与 fontspec/xelatex 一起使用

我已经尝试过了在 beamer \institute 中使用 \scshape 或 \textsc修复\rmfamily下面的 MWE,但它不起作用 - 我已经看到了\textsc 的问题以及,但是我认为我fontenc现在不应该加载我正在使用fontspecxelatex

这是我得到的输出 - 该部分下方的居中文本应该是小型大写字母,但事实并非如此(但请注意,该部分标题/标题确实按预期显示了小型大写字母):

测试.png

以下是 MWE:

\documentclass[letterpaper,12pt]{article}

% \typeout{ == \the\paperwidth / \the\paperheight ==}
% \typeout{ == \the\pdfpagewidth / \the\pdfpageheight ==}
\pdfpagewidth=\paperwidth \pdfpageheight=\paperheight

\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Junicode}

\makeatletter
\renewcommand{\section}{\@startsection
{section}%                   % the name
{1}%                         % the level
{\z@}%                       % the indent / 0mm
{-\baselineskip}%            % the before skip / -3.5ex \@plus -1ex \@minus -.2ex
{0.5\baselineskip}%          % the after skip / 2.3ex \@plus .2ex
{\centering\normalsize\scshape}} % the style
\makeatother


\usepackage{lipsum}
\usepackage{tikz}


\begin{document}

\section*{A test of section small-caps}

\begin{center}
\textbf{\rmfamily \textsc{Something written without small-caps}}
\end{center}

  \lipsum[1]

\end{document}

关于如何让小型股在这里运行,您有什么建议吗?

非常感谢您的任何回答,
干杯!

答案1

问题是您的字体没有定义粗体小写字母。如果您使用带有粗体小写字母的字体(例如 Minion Pro),它将起作用:

使用 Minion Pro 进行演示

答案2

在得出结论后上一篇已删除,现已这里); 我终于设法找到了一个作弊方法,这样\bfseries\scshape就可以得到正常的小写字母,但“假粗体”,使用 ; 选项fontspec并且没有任何抱怨(并保留大写字母)。

诀窍是\fontspec在初始调用\setmainfont(这将创建新的字体系列 Junicode(0))之后发出一个请求 Junicode(常规)的伪粗体调用(这将创建新的字体系列 Junicode(1))。然后,使用 Latex2e 命令,\DeclareFontShape我们可以将 Junicode(0) 的粗体小写字母(不存在)映射到 fakebold Junicode(1) 的小写字母(存在)。

\DeclareFontShape您可以通过观察没有它时生成的警告来找到正确的语法,对我来说,这些警告是:

LaTeX Font Warning: Font shape `EU1/Junicode(0)/bx/sc' undefined
(Font)              using `EU1/Junicode(0)/bx/n' instead on input line 37.

这是示例代码的结果:

测试.png

...这是用以下方式编译的代码xelatex test.tex

\documentclass[letterpaper,12pt]{article}

% \typeout{ == \the\paperwidth / \the\paperheight ==}
% \typeout{ == \the\pdfpagewidth / \the\pdfpageheight ==}
\pdfpagewidth=\paperwidth \pdfpageheight=\paperheight

\usepackage{fontspec}

\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Junicode}

% each \setmainfont / fontspec command creates a new Junicode(X) font
% here we are at Junicode(0)
% create Junicode(1) with fake bold
\fontspec[FakeBold=2.5]{Junicode}

% map Junicode(0)/bx/sc (bold smallcaps) to Junicode(1)/m/sc (normal smallcaps of fake bold)
\DeclareFontShape{EU1}{Junicode(0)}{bx}{sc}{<->ssub * Junicode(1)/m/sc}{}

\makeatletter
\newcommand{\showfont}{Encoding: \f@encoding{},
  Family: \f@family{},
  Series: \f@series{},
  Shape: \f@shape{},
  Size: \f@size{}
}
\makeatother



\begin{document}

  {\scshape \showfont Aa}

  {\fontspec[Letters=SmallCaps]{Junicode} \showfont Aa}

  {\bfseries\scshape \showfont Aa}

\end{document}

好吧,希望这对某人有帮助,
干杯!


编辑:只是想指出,此代码也可以通过以下方式编译lualatex(如果您安装了所需的软件包);然而,一个区别是lualatex无法理解像'FakeBold'这样的OpenType选项:

.................................................
. fontspec info: "defining-font"
. 
. Font family 'Junicode(0)' created for font 'Junicode' with options
. [Ligatures=TeX,Scale=1.0].
. 
. This font family consists of the following shapes:
.................................................
luaotfload | load font: font family='junicode', subfamily='regular' found: /usr
/share/fonts/truetype/ttf-junicode/Junicode-Regular.ttf
fontspec: script 'latn' exists in font 'JunicodeRegular'
*************************************************
* fontspec warning: "fakebold-only-xetex"
* 
* The "FakeBold" and "AutoFakeBold" options are only available with XeLaTeX.
* Option ignored.
*************************************************

另一方面,xelatex当请求新选项(例如'FakeBold')时,似乎会为实例化的每个新“字体系列”在 PDF 中嵌入单独的字体 - 从我正在研究的类似示例中可以看出:

$ pdffonts test.pdf
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
WOHRES+Junicode-Regular              CID TrueType      yes yes yes      6  0
ZNKKUV+Junicode-Italic               CID TrueType      yes yes yes     18  0
HHUNME+Junicode-Bold                 CID TrueType      yes yes yes     23  0
YSORBG+Junicode-Regular              CID TrueType      yes yes yes     50  0
GDUQPQ+Junicode-Regular              CID TrueType      yes yes yes     64  0
MLJVAZ+Junicode-Regular              CID TrueType      yes yes yes     72  0
CHJXWV+Junicode-Regular              CID TrueType      yes yes yes     74  0

... 而lualatex在同一个 .tex 源上(关于‘FakeBold’的一个警告)似乎会“压缩”PDF 中嵌入的所有字体:

$ pdffonts test.pdf
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
VVMOBU+Junicode-Regular              CID TrueType      yes yes yes     39  0
QEUPWF+Junicode-Italic               CID TrueType      yes yes yes     53  0
VJZORW+Junicode-Bold                 CID TrueType      yes yes yes     58  0

相关内容