使用小型大写字母排版材料时,microtype、LuaLaTeX 和 otf 字体之间存在冲突

使用小型大写字母排版材料时,microtype、LuaLaTeX 和 otf 字体之间存在冲突

我正在使用 microtype 包 ( microtype beta 2.5 build 08) 来修改我的文档,并且我想保留其在所有字体形状中的功能,但小型大写字母 ( \scshape) 除外。我该怎么做?

我之所以问这个问题,是因为每当我使用通过 加载的 otf 字体(adobe caslon pro、adobe garamond pro 等)时microtype,都不会保留\scshape目录中列出的部分名称的 ( ) fontspec。相反,它会将它们更改为常规文本。每当我不加载 micro type 时,文本就会恢复为 scshape。我想\scshape在使用时保持部分名称的 ( ) 完整,microtype而不必放弃使用上述 otf 字体。

当启用微类型时,我的目录如下所示: 微类型已启用

以下是禁用微类型后的情况: 在此处输入图片描述

我正在使用 构建我的文档,以便Lualatex于加载 otf 字体并将其用于microtype。我注意到使用普通 latex 字体时不会发生此问题。

这是我的代码:

\documentclass[dotinlabels,nohyper]{tufte-book}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Minion Pro}
\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage[unicode=true,
 bookmarks=true,bookmarksnumbered=true,bookmarksopen=false,
 breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=true]
 {hyperref}
\usepackage{titletoc}
\usepackage{titlesec}
\usepackage{tocloft}
% If you do not load micro type below, small caps are preserved.
\usepackage[activate={true,nocompatibility},final,tracking=true,factor=1100,stretch=10,shrink=0]{microtype} 

\hypersetup{linktocpage=true}

\setcounter{secnumdepth}{1}

\setcounter{tocdepth}{2}

%formatting for toc entries
\renewcommand{\cftsecfont}{\large\scshape\MakeLowercase} 
\renewcommand{\cfttoctitlefont}{\scshape\MakeUppercase}
\renewcommand{\cftsecdotsep}{\cftdotsep}
\renewcommand{\cftsecpagefont}{\scshape}
%

\titleformat{\section}{\titlerule\vspace{.8ex}%
\Large\bfseries}{\Large\thesection.}{.5em}{}

\renewcommand{\sectionmark}[1]{%
  \markboth{}{\thesection.\ #1}}

\newcommand{\hsp}{\hspace{20pt}}

%Chapter title Formatting
\definecolor{gray75}{gray}{0.75}
\titlespacing{\chapter}{0pt}{*0}{*5}
\titleformat{\chapter}[hang]{\Huge\bfseries}{\thechapter\hsp\textcolor{gray75}{|}\hsp}{0pt}{\huge\bfseries}
%

\begin{document}
\fancyhf{} % clear all header/footer fields 
\fancyhead[RO]{\scshape\normalsize\MakeLowercase{\rightmark}} 
\fancyfoot[R]{\thepage} 

\tableofcontents{}

\chapter{Preliminaries}
\section{Mathematical Induction}
text goes here...
\newpage{}
test
\newpage{}
test
\end{document}

答案1

将小型大写字体改为常规字体的原因是microtypetracking功能与 不能完美配合lualatex。目前,唯一的解决方法(除了完全不使用跟踪)是使用Renderer=Basic而不是(默认)来加载字体Full

\setmainfont[Ligatures=TeX,Renderer=Basic]{Minion Pro}

不幸的是,这可能会产生副作用,因为切换到基本渲染器意味着会失去一些 OpenType 功能。例如,对于小写字母,将定义更少的字距调整对。虽然可能还会发现更多问题,但还有或者其他错误Renderer=Full


[我本来建议将其限制为小写字体:

\setmainfont[Ligatures=TeX,SmallCapsFeatures={Renderer=Basic}]{Minion Pro}

但这不起作用。

答案2

microtype软件包提供定义字体集的功能。甚至有一个预定义的集名称,称为smallcaps,但它用处不大,因为显然只能包含激活微排版的集。

排除小型大写字母与包括其他所有内容的效果相同。

代码

\documentclass{article}
\usepackage[
    protrusion=false,
    expansion=false,
]{microtype}
\DeclareMicrotypeSet{non Small Caps}{shape={it*,up*,sl*}}
\microtypesetup{activate=non Small Caps}
\usepackage{lipsum}
\begin{document}
{\scshape\lipsum}
{\itshape\lipsum}
\end{document}

但据我了解,这将覆盖 所做的所有默认设置microtype;因此修补 似乎更容易\scshape

代码

\documentclass{article}
\usepackage{microtype}
\expandafter\def\expandafter\scshape\expandafter{\scshape\microtypesetup{activate=false}}
\usepackage{lipsum}
\begin{document}
{\scshape\lipsum}
{\itshape\lipsum}
\end{document}

答案3

我不确定microtype在处理小型大写字体时您希望禁用哪些方面。我假设是追踪(字母间和单词间间距)您想要禁用。(不知何故,我不认为您想禁用小型大写字母的字符突出优化。)

要禁用microtype仅针对小型大写字符的跟踪的操作,您可以发出以下命令(microtype显然,在加载包之后):

\SetTracking[spacing = {0,0,0}]{encoding=*,shape=sc}{0}

相关内容