包裹microtype
有命令\textls
来操纵字母间距特别指定方式。虽然印刷师通常不赞成使用这种方式,但根据microtype
用户手册(第 23 页脚注),它一些适当使用以突出局部重点。
\textls
以天真的方式应用会导致与数学内容混合时产生不良后果。这是这个问题的目的获得一个可以\myTextls
工作的修改后的命令句法和语义上就像\textls
但数学模式保持不变。通常情况下,类似情况会发生\textsl
(注意“l”和“s”的交换)。见下文。
以下是 MWE 的输出:
第 2 行内的间距与第 1 行和第 3 行内的间距{1, 2}
类似。{ 1, 2 }
{1, 2}
笔记当然,当我说“应该”时,我的意思只是说,这就是我欲望,仅此而已。倾斜textsl
只是为了输出类比,我无意谈论实施类比这可能会(非常)不同。我说的“分裂……不可取”仅仅是指手动的分裂。
MWE 代码:2021/03/14 v2.8c
//使用Overleaf 版本运行microtype
。与我本地的发行版和版本重复2022/06/23 v3.0f
//
\documentclass{book}
\usepackage{microtype}
\usepackage[a4paper]{geometry}
\newgeometry{margin=2.5cm}
%definition of \myTextls
\begin{document}
\textsl{1. [textsl] This should only affect text, not \( \{ 1, 2 \} \) mathematics. And \textit{does}!}
\textls{2. [textls] This should only affect text, not \( \{ 1, 2 \} \) mathematics. But \textit{doesn't}!}
\textls{3. [textls twice] Splitting up works} \( \{ 1, 2 \} \) \textls{but is not desirable.}
%\myTextls{4. [myTextls] This should only affect text, not \( \{ 1, 2 \} \) mathematics. It \textit{does(n't)} work!}
\end{document}
类似问题
据我所知,该网站上有两个类似的问题,且并非重复。
- 微类型和数学模式的问题
\textls
[重复]– 此问题与以下问题重复,因此已关闭 - Microtype 在数学模式下给出错误的字母间距– 讨论的是早期版本的错误,
microtype
现已修复(在 v2.6 中)。试图改变早期版本,前缀解决方案此案未能成功。
答案1
问题在于,microtype 并非设计用于区分数学模式和文本模式(或者更一般地说,它不知道字体选择发生的上下文)。对于当前的情况,如果您愿意将默认文本编码更改为 T1,则可以轻松解决这个问题,因为这将使 OT1 仅用于数学:
\usepackage[T1]{fontenc}
\SetTracking
[ name = nomath, load = default ]
{ encoding = {OT1,OMS,OML,OMX} }
{ 0 }
如果您不想更改文档的编码,您可以另外修补 microtype 以使其在数学模式下忽略字体:
\makeatletter
\pretocmd\MT@set@tr@codes{\ifmmode\MT@set@tr@zero\else}{}{}
\apptocmd\MT@set@tr@codes{\fi}{}{}
\makeatother
(\pretocmd
并且\apptocmd
来自无论如何都会加载的etoolbox
包microtype
)
在这两种解决方案中,您只需使用\textls
。
至于忽略内部某些命令的内容的更一般情况\textls
,您可以使用该\lslig
命令(最初是为了保留字母间距文本中的连字符,但也适用于较长的文本,包括字体更改):
\DeclareRobustCommand\myemph[1]{\emph{\lslig{#1}}}