我正在使用 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
将小型大写字体改为常规字体的原因是microtype
的tracking
功能与 不能完美配合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}