我正在使用kpfonts
,并且我知道我必须使用它\textscsl
来获得倾斜的小型大写字母,但是有没有什么方法可以让我\textscsl{slanted-small-caps}
随时自动替换为表单的文本{\scshape \textit{slanted-small-caps}}
?
为了举例说明,请参考下面的 MWE:
\documentclass{memoir}
\usepackage{kpfonts}
\usepackage[T1]{fontenc}
\renewcommand*{\printchaptertitle}[1]{\scshape{#1}}
\begin{document}
\chapter{small caps \textit{slanted-small-caps}}
\end{document}
因此,我希望 'slanted-small-caps' 为倾斜的小型大写字母。如何强制将任何此类内容自动替换为\textscsl
?同时,我希望保留 ,\textit{}
因为我希望它在目录中成为斜体字体。
答案1
您可以通过使用fontaxes
和帮助字体选择方案来替代scsl
,scit
因为kpfonts
只知道前者。
\documentclass{memoir}
\usepackage[T1]{fontenc}
\usepackage{fontaxes}
\usepackage{kpfonts}
\usepackage{etoolbox}
\renewcommand*{\printchaptertitle}[1]{\scshape#1}
\AtBeginDocument{%
\csletcs{T1/\familydefault/m/scit}{T1/\familydefault/m/scsl}%
\csletcs{T1/\familydefault/b/scit}{T1/\familydefault/b/scsl}%
\csletcs{T1/\familydefault/bx/scit}{T1/\familydefault/bx/scsl}%
}
\begin{document}
\chapter{small caps \textit{slanted-small-caps}}
\end{document}
答案2
有两个问题。
首先,您示例中的代码没有将章节标题设置为小写字母。这很容易解决。我们只需查看 Memoir 的文档并使用它提供的示例命令的修改版本:
\renewcommand{\chaptitlefont}{\normalfont\scshape}
第二个问题更为根本:LaTeX 2e 默认使用的新字体选择方案 (NFSS) 根本不支持斜体小写字母。因此,不同的软件包和字体提供不同的命令和不同的名称等等。根本没有标准。特别是,无论是像
\textsc{abc \textit{def}}
其行为是否符合预期完全取决于相关字体支持包的作者以及该包插入的任何扩展接口的想法。
kpfonts
本身并不支持这一点。
并且由于通用解决方案要求以支持它的方式设置字体,而这里的情况并非如此,我们不能仅仅插入nfssext-cfr
(或fontaxes
或其他)提供的接口。
但是,我们可以提供来自的几个定义的修改版本,特别nfssext-cfr
针对这些形状。kpfonts
\documentclass{memoir}
\usepackage{kpfonts}
\usepackage[T1]{fontenc}
\renewcommand{\chaptitlefont}{\normalfont\scshape}
\makeatletter
% based on definitions in nfssext-cfr, which is based on nfssext
% this stuff is almost certainly from the original nfssext
\DeclareRobustCommand{\itshape}{%
\not@math@alphabet\itshape\mathit
\anonymouse@test@shape{\itdefault}{\scdefault}{\scsldefault}}
\newcommand*\anonymouse@test@shape[3]{%
\edef\anonymouse@tempa{#2}%
\ifx\f@shape\anonymouse@tempa\fontshape{#3}\else\fontshape{#1}\fi
\selectfont
}
\newcommand*\scsldefault{scsl}
\makeatother
\begin{document}
\chapter{small caps \textit{slanted-small-caps}}
\end{document}
注意上面的代码仅有的修复了相关情况。这根本不通用!如果你写
\textsc{abc \textsl{def}}
def
将以斜体小写形式显示。如果你写
\textit{abc \textsc{def}}
def
将采用直立小型大写字母。
因为kpfonts
不支持扩展 NFSS 的通用框架之一,如果需要,每种情况都需要单独处理。然而,这非常简单,如果需要,您可以简单地调整上述示例。