对于上标

对于上标

我正在使用newpx字体,但我想在文本样式中降低后方\int(即 之后\nolimits)的上标,也可能在显示样式中也降低。这可能吗?

在此处输入图片描述

\documentclass{article}

\usepackage{newpxmath}

\makeatletter
   \AtBeginDocument{
      \check@mathfonts
      \fontdimen13\textfont2=3.5pt
      \fontdimen14\textfont2=3.5pt
      \fontdimen16\textfont2=2.5pt
      \fontdimen17\textfont2=2.5pt
   }
\makeatother

\begin{document}
$\int_A^B x_a x^b x_a^b \,\mathrm{d}x$
\[\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\end{document}

我知道最低限度移位是由字体角控制的,但似乎我无法\int进一步最小化限制的值(只有增加它才会起作用,但只会影响正常的上标)。

答案1

我不确定这是否会破坏其他东西,但是......我使其^活跃,如果在数学模式下,我会重新定义它以将参数向下移动,同时保留当前的数学风格。

对于上标

(正如原帖作者所问的)

\documentclass{article}
\usepackage{scalerel,url}
\let\svss^
\catcode`^=\active %
\def^{\ifmmode\expandafter\svss\expandafter\bgroup\expandafter\lowerit\else\svss\fi}
\def\lowerit#1{\ThisStyle{\raisebox{-2\LMpt}{$\SavedStyle#1$}}\egroup}
\usepackage{newpxmath,newpxtext}
\makeatletter
   \AtBeginDocument{
      \check@mathfonts
      \fontdimen13\textfont2=3.5pt
      \fontdimen14\textfont2=3.5pt
      \fontdimen16\textfont2=2.5pt
      \fontdimen17\textfont2=2.5pt
   }
\makeatother
\begin{document}
\centering
A\_B \url{A_B} $\int_A^B x_a x^b x_a^b \,\mathrm{d}x$
\[\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\[\scriptstyle\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\[\scriptscriptstyle\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\end{document}

在此处输入图片描述

不幸的是,这降低了全部上标,我还没有找到一种方法来限制它的范围,例如\int

可以使用如果设置为 true\int并在使用后设置为 false:

\documentclass{article}

\usepackage{scalerel,url}

\let\svss^
\catcode`^=\active %
\gdef^{\ifmmode\expandafter\svss\expandafter\bgroup\expandafter\lowerit\else\svss\fi}

% if to check wether an \int was preceding or not
\newif\ifAfterInt

\def\lowerit#1{%
   % lower superscript only if \int preceeded, then set
   % bool to false for all following superscripts until
   % the next \int sets it to true.
   \ifAfterInt
      \global\AfterIntfalse
      \ThisStyle{\raisebox{-2.5\LMpt}{$\SavedStyle#1$}}\egroup
   \else
      #1\egroup
   \fi
}

\usepackage{newpxmath,newpxtext}

\makeatletter
   \AtBeginDocument{
      \check@mathfonts
      \fontdimen13\textfont2=3.5pt
      \fontdimen14\textfont2=3.5pt
      \fontdimen16\textfont2=2.5pt
      \fontdimen17\textfont2=2.5pt
   }
\makeatother

% redefine \int to set the boolean to true
% (must be done after newpxmath was loaded)
\def\int{
   \intop\AfterInttrue\nolimits
}

\begin{document}
\centering
A\_\^B \url{A_^B}

$\int_A^B x_a x^b x_a^b \,\mathrm{d}x$

\[\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]

\[\int_A^{\text{B}} x_a x^b x_a^b \,\mathrm{d}x\]

\[\scriptstyle\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]

\[\scriptscriptstyle\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\end{document}

在此处输入图片描述

问题

虽然这个解决方案有效,但它存在一些问题:

  • '之前不能有素数^,即V'^2必须输入为V'{}^2
  • \text必须用括号括起来:V^{\text{txt}}
  • 您不能再使用^in\pgfmathsetmacro和 linke
  • 它打破mhchem\ce{^{123}Xx}

下标方法

(原文误读了这个问题)

\documentclass{article}
\usepackage{scalerel,url}
\let\svus_
\catcode`_=\active %
\def_{\ifmmode\expandafter\svus\expandafter\bgroup\expandafter\lowerit\else\svus\fi}
\def\lowerit#1{\ThisStyle{\raisebox{-2\LMpt}{$\SavedStyle#1$}}\egroup}
\usepackage{newpxmath}
\makeatletter
   \AtBeginDocument{
      \check@mathfonts
      \fontdimen13\textfont2=3.5pt
      \fontdimen14\textfont2=3.5pt
      \fontdimen16\textfont2=2.5pt
      \fontdimen17\textfont2=2.5pt
   }
\makeatother
\begin{document}
\centering
A\_B \url{A_B} $\int_A^B x_a x^b x_a^b \,\mathrm{d}x$
\[\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\[\scriptstyle\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\[\scriptscriptstyle\int_A^B x_a x^b x_a^b \,\mathrm{d}x\]
\end{document}

在此处输入图片描述

不幸的是,这降低了全部下标,我还没有找到一种方法来限制它的范围,例如\int。这可以按照上面上标所示进行修复。

答案2

这是一个基于 LuaLateX 的解决方案。它对输入材料的格式有两个要求:(a) 积分下限和上限的材料必须用花括号括起来,(b) 积分下限必须位于积分上限之前。(如果任何一个要求不满足,Lua 函数就不会执行其操作。)

  • 积分下限向下移动的量和积分上限向上移动的量分别由宏\Tstrut(“顶部支柱”)和\Bstrut(“底部支柱”)控制。

  • 提供了两个 LaTeX 宏,分别称为\ChangeIntOff\ChangeIntOn,用于关闭和重新打开该功能。默认状态为“开启”。

(据我所知,这些包newpxtextnewpxmathLuaLaTeX 配合得不是很好。因此,在下面的代码中,我将其加载TeX Gyre Pagella为文本字体和TeX Gyre Pagella Math数学字体。)

下面的截图显示,该解决方案影响内联式积分表达式,但不影响显示式积分表达式。​​这些线是为了帮助眼睛判断积分极限分别向下和向上移动了多远(当然,如果有的话)。

在此处输入图片描述

\documentclass{article}

% Set the dimensions of the top and bottom struts
\newcommand\Tstrut{\rule{0pt}{1.65ex}}
\newcommand\Bstrut{\rule[-0.85ex]{0pt}{0pt}}

\usepackage{fontspec,unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}

%% Lua-side code
\usepackage{luacode}
\begin{luacode}
function change_int ( s ) 
   s = string.gsub ( s , "\\int%s-%_%s-(%b{})%s-^%s-(%b{})", 
            "\\int_{\\mkern-2mu %1\\Tstrut}^{%2\\Bstrut}")
   return s
end
\end{luacode}

%% TeX-side code
\newcommand\ChangeIntOn{\directlua{%
   luatexbase.add_to_callback ( "process_input_buffer", 
   change_int , "change_int" )}}
\newcommand\ChangeIntOff{\directlua{%
   luatexbase.remove_from_callback ( "process_input_buffer",
   "change_int" )}}
\AtBeginDocument{\ChangeIntOn} % function is on by default

\begin{document}

\hrule 
$\int _{A} ^{B} f(x)\,dx$ 
vs.\ 
$\int _A ^ {B} f(x)\,dx$ % not affected by Lua function b/c no curly braces around "A"
\hrule 

\bigskip
\hrule
$\displaystyle\int _ {A} ^ {B} f(x)\,dx$
vs.\ 
$\displaystyle\int _ A ^ {B} f(x)\,dx$
\hrule

\end{document} 

相关内容