TeX - LaTeX Asked by Yuki.F on March 27, 2021
As topic. I am using pdfLaTeX compiler on Overleaf.
I’ve figured out a remedy (?) as topic by not bolding the arrow: bm{a_{xxx}}{}_{uparrow}
. However, I want to know the reason that bm{a_{xxxuparrow}}
gives an extra white space after the uparrow
symbol that bm{a_{xxxdownarrow}}
would not do so.
documentclass[a4paper,12pt]{article}
usepackage{amsmath,latexsym,amssymb,enumerate,amsthm}
usepackage{setspace,color,graphicx,mathtools,yhmath}
usepackage[hang]{caption}
usepackage{dsfont}
usepackage[dvipsnames]{xcolor}
usepackage{subcaption,cancel}
usepackage{bm}
begin{document}
begin{equation}
bm{a_{xxxuparrow}}(i), bm{a_{xxxdownarrow}}(i).
end{equation}
end{document}
A bug in cmbsy7.tfm
: the characters used are octal 42 (up arrow) and octal 43 (down arrow) and we see in the tfm file (converted to human readable form)
(FAMILY CMBSY V2.2)
(FACE O 360)
(CODINGSCHEME TEX MATH SYMBOLS)
(DESIGNSIZE R 7.0)
(COMMENT DESIGNSIZE IS IN POINTS)
[...]
(CHARACTER O 42
(CHARWD R 0.65516)
(CHARHT R 0.694445)
(CHARDP R 0.194445)
(CHARIC R 0.714683)
)
(CHARACTER O 43
(CHARWD R 0.65516)
(CHARHT R 0.694445)
(CHARDP R 0.194445)
)
[...]
and the italic correction makes all the difference, because by rule TeX adds the italic correction when a symbol ends a math list. The italic correction ends up as 0.714683 times 7 points, a whopping 5pt!
Indeed, if I try $x_{bm{uparrow}}x_{bm{downarrow}}$
I get
....OML/cmm/m/it/10 x
....hbox(4.8611+1.3611)x10.08888, shifted 1.49998
.....hbox(4.8611+1.3611)x9.58888
......mathon
......OMS/cmsy/b/n/7 "
......kern5.00278
......mathoff
....OML/cmm/m/it/10 x
....hbox(4.8611+1.3611)x5.0861, shifted 1.49998
.....hbox(4.8611+1.3611)x4.5861
......mathon
......OMS/cmsy/b/n/7 #
......mathoff
and you see the added kern.
documentclass{article}
usepackage{amsmath}
usepackage{bm}
newcommandfixup{kern-fontcharicscriptfont2`"}
begin{document}
$x_{bm{uparrowfixup}x_{bm{downarrow}}x$
end{document}
Another fix could be
newcommand{fixup}{_{kern-scriptspace}}
The first suggested hack doesn't work with superscripts to the arrow, the second one would; however in case you have a subscript to the arrow, it will remove the wrong italic correction by itself.
The problem starts with the METAFONT source code by Knuth himself. We see in sym.mf
iff known down_arrow: cmchar "Downward arrow";
beginchar(down_arrow,9u#,asc_height#,asc_depth#);
adjust_fit(0,0); pickup crisp.nib;
pos1(rule_thickness,0); pos2(rule_thickness,0);
pos3(rule_thickness,90); pos4(rule_thickness,90);
lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h;
x0=x1=x2; bot y0=-d; x0-x3=x4-x0=if monospace:3u else:4u fi+eps;
y3=y4=y0+if monospace:.24 else:.36 fi asc_height+eps;
pos5(rule_thickness,angle(z4-z0)); z5l=z0;
pos6(rule_thickness,angle(z3-z0)); z6l=z0;
z9=.2[.5[z3,z4],z0];
numeric t; path p; p=z4r{z9-z4}..z6r;
t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
filldraw z0..{z4-z9}z4l--subpath (0,t) of(z4r{z9-z4}..z6r)
---z1r..z1l---subpath (t,0) of(z3r{z9-z3}..z5r)
--z3l{z9-z3}..z0 & cycle; % arrowhead and stem
penlabels(0,1,2,3,4,5,6,9); endchar;
iff known up_arrow: cmchar "Upward arrow";
beginchar(up_arrow,9u#,asc_height#,asc_depth#);
italcorr .76asc_height#*slant+.5crisp#-u#;
adjust_fit(0,0); pickup crisp.nib;
pos1(rule_thickness,0); pos2(rule_thickness,0);
pos3(rule_thickness,90); pos4(rule_thickness,90);
lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d;
x0=x1=x2; top y0=h; x0-x3=x4-x0=if monospace:3u else:4u fi+eps;
y3=y4=y0-if monospace:.24 else:.36 fi asc_height-eps;
pos5(rule_thickness,angle(z4-z0)); z5l=z0;
pos6(rule_thickness,angle(z3-z0)); z6l=z0;
z9=.2[.5[z3,z4],z0];
numeric t; path p; p=z4l{z9-z4}..z6r;
t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
filldraw z0..{z4-z9}z4r--subpath (0,t) of(z4l{z9-z4}..z6r)
---z1r..z1l---subpath (t,0) of(z3l{z9-z3}..z5r)
--z3r{z9-z3}..z0 & cycle; % arrowhead and stem
penlabels(0,1,2,3,4,5,6,9); endchar;
and there should be a reason for the italic correction in “up arrow” that isn't in “down arrow”. Anyway, this italic correction turns out to be negative, and so it is discarded, in cmsy5
to cmsy10
.
The real bug is in cmbsy7.mf
(in cmextra
, provided by the AMS) which has
crisp#:=11pt#; % diameter of serif corners
Similarly, cmbsy5.mf
has 9pt, whereas cmsy7.mf
has
crisp#:=7/36pt#; % diameter of serif corners
That's the issue. Indeed, cmbsy10.mf
has
crisp#:=13/36pt#; % diameter of serif corners
Similar bugs affect cmbsy5.mf
, cmbsy6.mf
and cmbsy8.mf
, but not cmbsy9.mf
and cmbsy10.mf
.
Correct answer by egreg on March 27, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP