当出现单个字形时更改下标位置

当出现单个字形时更改下标位置

我想创建一个命令来“全局”解决以下问题:如下图所示,当字形“f”出现在数学模式中时,虽然上标的水平位置很酷,但下标的水平位置却不酷。因此,我想使用某些\ifx\first命令或更改字体尺寸,以使下标的水平位置更接近“f”。

请注意,斜体校正已应用,我主要想仅针对字形“f”获得此结果。“全局”意味着我想在$f^\ast_\ast$不使用其他命令的情况下编写 eg 时获得结果。对于后一个主题,我看到在 mtpro2 包中,已将类似的解决方案应用于 sub 和 supscripts,即全局,但我无法将其应用于当前情况。

在此处输入图片描述

答案1

如果您可以自由使用 LuaLaTeX,那么以下解决方案应该会引起您的兴趣。

f请注意,和下标之间的字距调整*在很大程度上取决于所使用的数学字体。例如,如果您使用Computer Modern MathLatin Modern MathXITS Math,字距调整-3mu——相当于负的细间距——对于星号来说看起来差不多,而-2mu对于小写字母下标来说看起来差不多。但是,如果您使用newtxmath字体包,只需调整-1.5mu(或一半负的细间距)的字距就足够了。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}

%% Uncomment one or the other of the next two lines to get a Times Roman clone math font
%\usepackage{newtxmath}\usepackage[no-math]{fontspec}
%\usepackage{unicode-math}\setmathfont{XITS Math}

\usepackage{luacode}
\begin{luacode}
function f_sub ( s )
  s = s:gsub ("(f.-)_{(.*)}"  ,"%1_{\\mkern-3mu %2}")
  s = s:gsub ("(f.-)_(\\ast)" ,"%1_{\\mkern-3mu %2}")
  return s
end
\end{luacode}

%% Two LaTeX macros to switch Lua function on and off:
\newcommand\fsubOn{\directlua{luatexbase.add_to_callback
    ( "process_input_buffer", f_sub , "f_sub" )}}
\newcommand\fsubOff{\directlua{luatexbase.remove_from_callback
    ( "process_input_buffer", "f_sub" )}}

\begin{document}
\fsubOn  % switch on the Lua function

$f^\ast_\ast$ $f_\ast$ $f_{n}$ --- with kerning adjustment

\fsubOff % switch off the Lua function

$f^\ast_\ast$ $f_\ast$ $f_{n}$ --- without kerning adjustment
\end{document} 

相关内容