下标字距调整

下标字距调整

我有一个很大的文档,里面充满了代表点和向量的下标变量。我想将点和向量排版为直立和粗体。我使用 Unicode Math 和 Latin Modern,并使用 XeLaTeX 排版。我得到的结果如下:

丑陋

n我希望我的信件下标的字距能更好\mathbf{P}。我知道我可以单独纠正每个出现的问题,但这似乎不是正确的方法。

我的粗体实际上是由宏定义的,所以我的下一个尝试是将更正放在这个宏中。但这没有奏效,因为只有当后面跟着下标\mathbf{P}时才需要更正。\mathbf{P}

我想知道我的拉丁现代数学版本是否被损坏了,因为 Microsoft Word 中的下标字距调整也无法正常工作。字距调整如果我在 MS Word 中使用 Cambria 字体,它就可以工作。

以下是一个示例文档:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Latin Modern Roman}
\setmathfont{Latin Modern Math}

\def\A {\mathbf{A}}
\def\P {\mathbf{P}}

\begin{document}
\[  \P(x) = \P_n + \A^n  \]
\end{document}

我可以在不用单独编辑数千个公式的情况下解决这个问题吗?

我的解决方案(目前)

看来我现在能做的最好的事情是:

\def\Ps #1{\P_{ \mkern-3.5mu  {#1}}}
...
\[  \P(x) = \Ps{1} + \Ps{2} + \cdots + \Ps{n}  \]

对我来说,这给出了看起来不错的结果:

更好的

如果/当拉丁现代字体得到修复时,很容易删除这个黑客​​。

答案1

拉丁现代数学字母表\mathbf(TeX Live 2013 附带的版本)没有提供任何正确定位上标或下标的规定,也没有斜体校正(旧的 TeX 方式,OpenType 数学仍然支持)或数学插入(新的、更通用的方式)。所以这是一个字体问题,除了使用不同的字体外,最直接的解决方法是修复字体本身。

答案2

不含 OpenType 的 TeX

(|pdf)TeX 只能看到方框。它不知道字符框内的字形形状。隐式字距调整不适用于基本字符与其下标或上标之间的字距调整。

字距调整可以手动进行修复:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Latin Modern Roman}
\setmathfont{Latin Modern Math}

\begin{document}
\[  \mathbf P(x) = \mathbf P_n + \mathbf A^n  \]
\[ \mathbf P(x) = \mathbf P_{\!n} + \mathbf A^{\!n} \]
\end{document}

结果

PA可以在数学模式下激活。然后它们可以查找下标或上标。但这在这里没有帮助,因为PA隐藏在 内\mathbf。一种简单的方法是制作\mathbf P一个宏,可以检查以下标记的下标:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Latin Modern Roman}
\setmathfont{Latin Modern Math}

\usepackage{ltxcmds}[2011/04/14]
\makeatletter
\newcommand*{\bfP}{%
  \mathbf{P}%
  \ltx@ifnextchar@nospace_{\@CatchSubScriptNegKern}{}%
}
\newcommand*{\bfA}{%
  \mathbf{A}%
  \ltx@ifnextchar@nospace^{\@CatchSuperScriptNegKern}{}%
}
\def\@CatchSubScriptNegKern_#1{%
  _{\!#1}%
}
\def\@CatchSuperScriptNegKern^#1{%
  ^{\!#1}%
}
\makeatother

\begin{document}
\[ \bfP(x) = \bfP_n + \bfA^n \]
\end{document}

结果

LuaTeX/XeTeX

软件包unicode-math似乎具有替换某些上标和下标的功能,以便获得更好的位置。使用xits-math.otf此功能可行:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Latin Modern Roman}
%\setmathfont{Latin Modern Math}
\setmathfont{xits-math.otf}

\begin{document}
\[  \mathbf P(x) = \mathbf P_n + \mathbf A^n  \]
\[ \mathbf A^n = \mathbf A^^^^207f \mathrel{;} \mathbf A^{nn} \]
\[ \mathbf P_n \ne \mathbf P_^^^^2099 \mathrel{;} \mathbf P_{nn} \]
\end{document}

结果

评论:

  • 由 LuaLaTeX 生成的图像。

  • latinmodern-math.otf并且Asana-Math.otf不工作。

  • 如果下标/上标不是单个字符,它就不适用于 LuaLaTeX,如图所示。
  • n 的下标和上标也可以作为 Unicode 字符使用:

    U+2099: LATIN SUBSCRIPT SMALL LETTER N
    U+207F: SUPERSCRIPT LATIN SMALL LETTER N
    

    示例中只有后一种上标情况有效。 和 下标情况latinmodern-math.otf无效Asana-Math.otfxits-math.otf

相关内容