答案1
我认为这是 LuaTeX 的一个错误。奇怪的是,如果你在下标中添加一个空原子,字距调整是正确的。
\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmainfont{Lucida Bright OT}
\setmathfont{Lucida Bright Math OT}
\begin{document}
$\sigma_{ij}=\sigma_{i}\sigma_{j}$ (original)
$\sigma_{ij}=\sigma_{i{}}\sigma_{j{}}$ (with phantoms)
\end{document}
为了进行比较,这是使用 XeLaTeX 的输出
注意:LuaTeX 1.09 显然已经修复了该问题,但 TeX Live 2018 绑定到 LuaTeX 1.07。
答案2
答案3
subscriptcorrection
这是字距调整的问题。你可以借用newtxmath
包,我相信这是受到启发的mtpro2
包裹。
已编辑:以下代码使字距调整自动进行,因此您无需在每次出现“难看的”下标时添加负空格。由于代码取自newtxmath
,字距调整说明是为 Times 设计的。您可能需要针对 Lucida 进行调整。
\makeatletter
% Enable subscript correction
\AtBeginDocument{\mathcode`\_=\string"8000 \catcode`\_=12\relax}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Subscript correction code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begingroup
\catcode`\_=13
\gdef_{\futurelet\next\s@@b}
\endgroup
\def\s@@b{\ifcat\relax\noexpand\next\expandafter\sb\else
\expandafter\s@@b@\fi}
\def\s@@b@#1{\sb{\futurelet\next\sb@#1}}
\def\sb@{%
\ifx\next\space@\def\next@. {\futurelet\next\sb@}\else
\def\next@.{%
\ifx\next f\mkern-\tw@ mu\else
\ifx\next j\mkern-\tw@ mu\else
\ifx\next p\mkern-\@ne mu\else
%\ifx\next t\mkern\@ne mu\else
\ifx\next y\mkern-\@ne mu\else
\ifx\next A\mkern-\tw@ mu\else
\ifx\next B\mkern-\@ne mu\else
\ifx\next D\mkern-\@ne mu\else
\ifx\next H\mkern-\@ne mu\else
\ifx\next I\mkern-\@ne mu\else
\ifx\next K\mkern-\@ne mu\else
\ifx\next L\mkern-\@ne mu\else
\ifx\next M\mkern-\@ne mu\else
\ifx\next N\mkern-0.5mu\else
\ifx\next P\mkern-\@ne mu\else
\ifx\next X\mkern-\@ne mu\else
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}%
\fi
\next@.}
\makeatother
您可以调整\@ne
、\tw@
和0.5
你使用的字体对于 LucidaBrightMathOT,它们完全主观因为它们是图形设计的问题。
添加:如果您希望添加新的字距调整指令,例如,则在该行前$\sigma_i$
插入,\ifx\next i\mkern-<number>mu\else
\ifx\next j\mkern-\tw@ mu\else
和\fi
在重复的 's 序列中再添加一个\fi
。 的常见选择<number>
是1
、2
和3
。
另外,请注意newtxmath
注释掉的字距调整指令$_t$
:%\ifx\next t\mkern\@ne mu\else
。