Skip to content

Commit

Permalink
Rearrange3 (#2442)
Browse files Browse the repository at this point in the history
* Utility macros \lx@endash,\lx@emdash, deprecate \@@endash,\@@emdash

* Make \overline (like \underline) work in text and math

* Make '?' NOT have role CLOSE (according to default mathcode)

* HACK to get ascii ~,^ within URLs (simulate proper latex)

* Make page counter start at 1

* Simplify how Box sets isSpace

* Utilities \lx@NBSP,\lx@nobreakspace (slightly distinct for ~,\nobreakspace); add bindings; update tests

* Use better test case for meaning of active char (~ is too internal)

* Simplify \#,\&, etc macros, leveraging Unicode data

* Have \hskip revert back to a common command, when possible
  • Loading branch information
brucemiller authored Dec 11, 2024
1 parent a40cf40 commit 7418141
Show file tree
Hide file tree
Showing 19 changed files with 113 additions and 77 deletions.
9 changes: 3 additions & 6 deletions lib/LaTeXML/Core/Box.pm
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ sub Box {
$font = $STATE->lookupValue('font') unless defined $font;
$locator = $STATE->getStomach->getGullet->getLocator unless defined $locator;
$tokens = LaTeXML::Core::Token::T_OTHER($string) if $string && !defined $tokens;
if ((!defined $properties{isSpace}) && (defined $string) && ($string =~ /^\s*$/)) {
$properties{isSpace} = 1; }
if ($properties{isSpace} && ($properties{width} || $properties{height} || $properties{depth})) {
$properties{width} = Dimension(0) unless defined $properties{width};
$properties{height} = Dimension(0) unless defined $properties{height};
Expand Down Expand Up @@ -138,12 +140,7 @@ sub beAbsorbed {

sub getProperty {
my ($self, $key) = @_;
if ($key eq 'isSpace') {
return $$self{properties}{$key} if defined $$self{properties}{$key};
my $tex = LaTeXML::Core::Token::UnTeX($$self{tokens}); # !
return (defined $tex) && ($tex =~ /^\s*$/); } # Check the TeX code, not (just) the string!
else {
return $$self{properties}{$key}; } }
return $$self{properties}{$key}; }

sub getProperties {
my ($self) = @_;
Expand Down
5 changes: 5 additions & 0 deletions lib/LaTeXML/Engine/Base_Deprecated.pool.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,11 @@ DefMacro('\@INVISIBLECOMMA',
DefMacro('\@INVISIBLEPLUS',
'\lx@DEPRECATE{\@INVISIBLEPLUS}{\lx@InvisiblePlus}\lx@InvisiblePlus');

DefMacro('\@@endash',
'\lx@DEPRECATE{\@endash}{\lx@endash}\lx@endash');
DefMacro('\@@emdash',
'\lx@DEPRECATE{\@emdash}{\lx@emdash}\lx@emdash');

# End of stuff to be deprecated.
#----------------------------------------------------------------------

Expand Down
13 changes: 13 additions & 0 deletions lib/LaTeXML/Engine/Base_Utility.pool.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,19 @@ sub isDefinable {

#======================================================================

DefPrimitive('\lx@endash', sub {
Box("\x{2013}", undef, undef, Tokens(T_OTHER('-'), T_OTHER('-'))); });
DefPrimitive('\lx@emdash', sub {
Box("\x{2014}", undef, undef, Tokens(T_OTHER('-'), T_OTHER('-'), T_OTHER('-'))); });

# Stand in for T_ACTIVE('~') (and maybe \nobreakspace)
DefPrimitiveI('\lx@NBSP', undef, sub {
Box(UTF(0xA0), undef, undef, T_ACTIVE("~"),
width => Dimension('0.333em'), isSpace => 1); }, locked => 1);
DefPrimitiveI('\lx@nobreakspace', undef, sub {
Box(UTF(0xA0), undef, undef, T_CS('\nobreakspace'),
width => Dimension('0.333em'), isSpace => 1); });

DefPrimitiveI('\lx@ignorehardspaces', undef, sub {
my ($stomach) = @_;
my $gullet = $stomach->getGullet;
Expand Down
4 changes: 4 additions & 0 deletions lib/LaTeXML/Engine/LaTeX.pool.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -1087,6 +1087,8 @@ DefMacro('\@addtofilelist{}', sub {
#======================================================================
# Ignored
NewCounter('page');
SetCounter(page => Number(1));

DefPrimitive('\pagestyle{}', undef);
DefPrimitive('\thispagestyle{}', undef);
DefPrimitive('\markright{}', undef);
Expand Down Expand Up @@ -1949,6 +1951,8 @@ sub afterDigestVerbatim {
$whatsit->setBody(map { Box($_, $font, $loc, T_OTHER($_)) } @lines, $end);
return; }

Let('\nobreakspace', '\lx@nobreakspace');

DefPrimitiveI('\@vobeyspaces', undef, sub {
AssignCatcode(" " => 13);
Let(T_ACTIVE(" "), '\nobreakspace');
Expand Down
8 changes: 8 additions & 0 deletions lib/LaTeXML/Engine/TeX_Character.pool.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ DefPrimitive('\char Number', sub {
# Create a box applying an accent to a letter
# Hopefully, we'll get a Box from digestion with a plain string.
# Then we can apply combining accents to it.
my %typewriter_accents = ("\x{02DC}" => "~", "\x{02C6}" => "^");

sub applyAccent {
my ($stomach, $letter, $combiningchar, $standalonechar, $reversion) = @_;
my $box = $stomach->digest($letter);
Expand All @@ -69,6 +71,12 @@ sub applyAccent {
if (($string =~ /[ij]/) && ($combiningchar eq "\x{0307}")) { # a dot on i,j Not needed
$combiningchar = ''; }
my @letters = split(//, $string);
# HACK HACK HACK to mimic real LaTeX's encoding mechanism (until using proper latex.ltx)
# Necessary for test cases using \~,\^ in urls, ascii, typewriter...
if (my $replacement = $typewriter_accents{$standalonechar}) {
if ($font && ((($font->getFamily || '') eq 'typewriter')
|| (($font->getEncoding || '') eq 'ASCII'))) {
return Box($replacement . $string, $font, $locator, Tokens($reversion, $letter)); } }
return Box(($string =~ /^\s*$/
? $standalonechar
: NFC($letters[0] . $combiningchar . join('', @letters[1 .. $#letters]))),
Expand Down
30 changes: 21 additions & 9 deletions lib/LaTeXML/Engine/TeX_Glue.pool.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,21 @@ use LaTeXML::Package;
# \vskip c inserts vertical glue in a vertical list.
# \unskip c removes a glue item from the current list.

our @spaces = ( # Spaces to fake spacing, with width in ems
[0.100, "\x{200A}"], # Hair space (thinner than thin space)
[0.167, "\x{2006}"], # six-per-em
[0.200, "\x{2009}"], # five-per-em, thin space
[0.250, "\x{2005}"], # four-per-em, mid space
[0.333, "\x{2004}"], # three-per-em, thick space
[0.500, "\x{2002}"], # en-quad, "nut"
[1.000, "\x{2003}"], # em-quad, "mutton"
our @spaces = ( # Spaces to fake spacing, with width in ems, along with the common command
[0.100, "\x{200A}"], # Hair space (thinner than thin space)
[0.167, "\x{2006}"], # six-per-em
[0.200, "\x{2009}", T_CS('\thinspace')], # five-per-em, thin space
[0.250, "\x{2005}", T_CS('\>')], # four-per-em, mid space
[0.333, "\x{2004}", T_CS('\;')], # three-per-em, thick space
[0.500, "\x{2002}", T_CS('\enspace')], # en-quad, "nut"
[1.000, "\x{2003}", T_CS('\quad')], # em-quad, "mutton"
[2.000, "\x{2003}\x{2003}", T_CS('\qquad')],
);

# String of spacing chars with width roughly equivalent to $dimen
sub DimensionToSpaces {
my ($dimen) = @_;
my $fs = LookupValue('font')->getSize; # 1 em
my $fs = LookupValue('font')->getSize; # 1 em
my $ems = $dimen->ptValue / $fs;
my $s = '';
for (my $i = $#spaces ; ($i >= 0) && ($ems > 0) ; $i--) {
Expand All @@ -49,6 +50,16 @@ sub DimensionToSpaces {
$ems -= $n * $w; $s .= $spaces[$i][1] x $n; } }
return $s; }

# Revert a skip to it's (common) command, falling back to a generic \hskip <dim>
sub revertSkip {
my ($command, $dimen) = @_;
my $fs = LookupValue('font')->getSize; # 1 em
my $ems = $dimen->ptValue / $fs;
for (my $i = 0 ; ($i <= $#spaces) ; $i++) {
next if ($ems > $spaces[$i][0] + 0.01) || !$spaces[$i][2];
return $spaces[$i][2] if $ems < $spaces[$i][0] + 0.01; }
return Invocation($command, $dimen); }

# \hskip handled similarly to \kern
# \hskip can be ignored in certain situations...
DefConstructor('\hskip Glue', sub {
Expand All @@ -68,6 +79,7 @@ DefConstructor('\hskip Glue', sub {
else {
# $document->openText(DimensionToSpaces($length), $props{font}); } },
$document->absorb(DimensionToSpaces($length)); } },
reversion => sub { revertSkip(T_CS('\hskip'), $_[1]); },
properties => sub {
my ($stomach, $length) = @_;
(width => $length, isSpace => 1, isSkip => 1); });
Expand Down
10 changes: 8 additions & 2 deletions lib/LaTeXML/Engine/TeX_Math.pool.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -908,7 +908,10 @@ Let('\vcenter', '\vbox');
# \overline c puts a line over the following character or subformula.
# \underline c puts a line under the following character or subformula.

DefMath('\overline Digested', UTF(0xAF), operator_role => 'OVERACCENT'); # MACRON
DefMath('\lx@math@overline{}', UTF(0xAF), operator_role => 'OVERACCENT',
name => 'overline', alias => '\overline');
DefConstructor('\lx@text@overline{}',
"<ltx:text framed='overline' _noautoclose='1'>#1</ltx:text>");
DefMath('\lx@math@underline{}', UTF(0xAF), operator_role => 'UNDERACCENT',
name => 'underline', alias => '\underline');
DefConstructor('\lx@text@underline{}',
Expand All @@ -920,7 +923,10 @@ DefMath('\lx@math@overleftarrow{}', "\x{2190}", operator_role => 'OVERACCENT',

# Careful: Use \protect so that it doesn't expand too early in alignments, etc.
# [Really shouldn't use \protect, since this is a TeX primitive and \protect is LaTeX]
DefMacro('\underline{}', '\protect\ifmmode\lx@math@underline{#1}\else\lx@text@underline{#1}\fi');
DefMacro('\overline{}', '\protect\ifmmode\lx@math@overline{#1}\else\lx@text@overline{#1}\fi',
locked => 1);
DefMacro('\underline{}', '\protect\ifmmode\lx@math@underline{#1}\else\lx@text@underline{#1}\fi',
locked => 1);

#======================================================================
# fraction-like things
Expand Down
37 changes: 11 additions & 26 deletions lib/LaTeXML/Engine/plain.pool.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -47,28 +47,20 @@ DefMacro('\brack',
#======================================================================
# Special Characters.
# Try to give them some sense in math...
DefMacroI('\#', undef, '\ifmmode\lx@math@hash\else\lx@text@hash\fi', protected => 1);
DefMacroI('\&', undef, '\ifmmode\lx@math@amp\else\lx@text@amp\fi', protected => 1);
DefMacroI('\%', undef, '\ifmmode\lx@math@percent\else\lx@text@percent\fi', protected => 1);
DefMacroI("\\\$", undef, '\ifmmode\lx@math@dollar\else\lx@text@dollar\fi', protected => 1);
DefMacroI('\_', undef, '\ifmmode\lx@math@underscore\else\lx@text@underscore\fi', protected => 1);
DefPrimitiveI('\lx@text@hash', undef, '#', alias => '\#');
DefPrimitiveI('\lx@text@amp', undef, '&', alias => '\&');
DefPrimitiveI('\lx@text@percent', undef, '%', alias => '\%');
DefPrimitiveI('\lx@text@dollar', undef, "\$", alias => "\\\$");
DefPrimitiveI('\lx@text@underscore', undef, '_', alias => '\_');
DefMathI('\lx@math@hash', undef, '#', alias => '\#');
DefMathI('\lx@math@amp', undef, '&', role => 'ADDOP', meaning => 'and', alias => '\&');
DefMathI('\lx@math@percent', undef, '%', role => 'POSTFIX', meaning => 'percent', alias => '\%');
DefMathI('\lx@math@dollar', undef, "\$", role => 'OPERATOR', meaning => 'currency-dollar',
alias => "\\\$");
DefMathI('\lx@math@underscore', undef, '_', alias => '\_');
DefPrimitive('\#', sub {
Box('#', undef, undef, T_CS('\#')); });
DefPrimitive('\&', sub {
Box('&', undef, undef, T_CS('\&'), role => 'ADDOP', meaning => 'and'); });
DefPrimitive('\%', sub {
Box('%', undef, undef, T_CS('\%'), role => 'POSTFIX', meaning => 'percent'); });
DefPrimitive('\$', sub {
Box('$', undef, undef, T_CS('\$'), role => 'OPERATOR', meaning => 'currency-dollar'); });
DefPrimitive('\_', sub {
Box('_', undef, undef, T_CS('\_')); });

# Discretionary times; just treat as invisible ?
DefMathI('\*', undef, "\x{2062}", role => 'MULOP', name => '', meaning => 'times'); # INVISIBLE TIMES (or MULTIPLICATION SIGN = 00D7)

# These 3 should have some `name' assigned ... but what???

#======================================================================
# If an XMWrap (presumably from \mathop, \mathbin, etc)
# has multiple children, ALL are XMTok, within a restricted set of roles,
Expand Down Expand Up @@ -96,9 +88,6 @@ DefMathRewrite(xpath => 'descendant-or-self::ltx:XMWrap['
});

#======================================================================
DefPrimitive('\@@endash', sub { Box("\x{2013}", undef, undef, T_CS('\@@endash')); });
DefPrimitive('\@@emdash', sub { Box("\x{2014}", undef, undef, T_CS('\@@emdash')); });

DefConstructor('\TeX',
"<ltx:text class='ltx_TeX_logo' cssstyle='letter-spacing:-0.2em; margin-right:0.2em'>"
. "T"
Expand Down Expand Up @@ -522,11 +511,7 @@ DefPrimitiveI('\break', undef, undef);
DefPrimitiveI('\nobreak', undef, undef);
DefPrimitiveI('\allowbreak', undef, undef);

DefPrimitiveI('\nobreakspace', undef, sub {
Box(UTF(0xA0), undef, undef, T_ACTIVE("~"),
width => Dimension('0.333em'), isSpace => 1); });

DefMacro("~", '\nobreakspace{}');
Let(T_ACTIVE('~'), T_CS('\lx@NBSP'));

DefMacroI('\slash', undef, '/');
DefPrimitiveI('\filbreak', undef, undef);
Expand Down
2 changes: 1 addition & 1 deletion lib/LaTeXML/Package/emulateapj.sty.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ Let('\tabcaption', '\caption');

DefMacro('\format@title@section{}', '\lx@tag[][.\space]{\thesection}#1');
DefMacro('\format@title@subsection{}', '\lx@tag[][.\space]{\thesubsection}#1');
DefMacro('\format@title@figure{}', '\lx@tag[][.\@@emdash\space]{\lx@fnum@@{figure}}#1');
DefMacro('\format@title@figure{}', '\lx@tag[][.\lx@emdash\space]{\lx@fnum@@{figure}}#1');
DefMacro('\format@title@table{}', '\lx@tag{\lx@fnum@@{table}}#1');

# #======================================================================
Expand Down
4 changes: 2 additions & 2 deletions lib/LaTeXML/Package/marvosym.sty.ltxml
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ DefPrimitive('\Checkedbox', "\x{2611}");
DefPrimitive('\CrossedBox', "\x{2612}"); Let('\Crossedbox', '\CrossedBox');
DefPrimitive('\HollowBox', "\x{2610}");
DefPrimitive('\PointingHand', "\x{261E}"); Let('\Pointinghand', '\PointingHand');
DefPrimitive('\WritingHand', "\x{270D}"); Let('\Writinghand', '\WritingHand');
DefPrimitive('\WritingHand', "\x{270D}"); Let('\Writinghand', '\WritingHand');
DefPrimitive('\MineSign', "\x{2692}");
DefPrimitive('\Recycling', "\x{2672}");
DefMacro('\PackingWaste', '\lx@nounicode{\PackingWaste}');
Expand Down Expand Up @@ -233,7 +233,7 @@ DefMacro('\Explosionsafe', '\lx@nounicode{\Explosionsafe}');
# DefPrimitive('\Explosionsafe',"\x{}");
#DefMacro('\Laserbeam', '\lx@nounicode{\Laserbeam}');
DefPrimitive('\lx@mvs@laser', "\x{2739}");
DefMacro('\Laserbeam', '\lx@mvs@laser\lx@tweaked{xoffset=-0.2em}{\@@emdash}');
DefMacro('\Laserbeam', '\lx@mvs@laser\lx@tweaked{xoffset=-0.2em}{\lx@emdash}');
DefPrimitive('\Biohazard', "\x{2623}");
DefPrimitive('\Radioactivity', "\x{2622}");
DefMacro('\BSEFree', '\lx@nounicode{\BSEFree}');
Expand Down
45 changes: 24 additions & 21 deletions lib/LaTeXML/Util/Unicode.pm
Original file line number Diff line number Diff line change
Expand Up @@ -340,27 +340,29 @@ our %math_props = (
"8" => { role => 'NUMBER', meaning => 8 },
"9" => { role => 'NUMBER', meaning => 9 },
#======================================================================
'=' => { role => 'RELOP', meaning => 'equals' },
'+' => { role => 'ADDOP', meaning => 'plus' },
'-' => { role => 'ADDOP', meaning => 'minus' },
'*' => { role => 'MULOP', meaning => 'times' },
'/' => { role => 'MULOP', meaning => 'divide' },
'!' => { role => 'POSTFIX', meaning => 'factorial' },
',' => { role => 'PUNCT' },
'.' => { role => 'PERIOD' },
';' => { role => 'PUNCT' },
':' => { role => 'METARELOP', name => 'colon' }, # plausible default?
'|' => { role => 'VERTBAR', stretchy => 'false' },
'<' => { role => 'RELOP', meaning => 'less-than' },
'>' => { role => 'RELOP', meaning => 'greater-than' },
'(' => { role => 'OPEN', stretchy => 'false' },
')' => { role => 'CLOSE', stretchy => 'false' },
'[' => { role => 'OPEN', stretchy => 'false' },
']' => { role => 'CLOSE', stretchy => 'false' },
'{' => { role => 'OPEN', stretchy => 'false' },
'}' => { role => 'CLOSE', stretchy => 'false' },
'&' => { role => 'ADDOP', meaning => 'and' },
## ':' => { role => 'METARELOP' }, # \colon # Seems like good default role
'=' => { role => 'RELOP', meaning => 'equals' },
'+' => { role => 'ADDOP', meaning => 'plus' },
'-' => { role => 'ADDOP', meaning => 'minus' },
'*' => { role => 'MULOP', meaning => 'times' },
'/' => { role => 'MULOP', meaning => 'divide' },
'!' => { role => 'POSTFIX', meaning => 'factorial' },
',' => { role => 'PUNCT' },
'.' => { role => 'PERIOD' },
';' => { role => 'PUNCT' },
':' => { role => 'METARELOP', name => 'colon' }, # plausible default?
'|' => { role => 'VERTBAR', stretchy => 'false' },
'<' => { role => 'RELOP', meaning => 'less-than' },
'>' => { role => 'RELOP', meaning => 'greater-than' },
'(' => { role => 'OPEN', stretchy => 'false' },
')' => { role => 'CLOSE', stretchy => 'false' },
'[' => { role => 'OPEN', stretchy => 'false' },
']' => { role => 'CLOSE', stretchy => 'false' },
'{' => { role => 'OPEN', stretchy => 'false' },
'}' => { role => 'CLOSE', stretchy => 'false' },
'&' => { role => 'ADDOP', meaning => 'and' },
'&amp;' => { role => 'ADDOP', meaning => 'and' },
'%' => { role => 'POSTFIX', meaning => 'percent' },
'$' => { role => 'OPERATOR', meaning => 'currency-dollar' },

#======================================================================
UTF(0x5C) => { role => 'ADDOP', meaning => 'set-minus' }, # \backslash
Expand Down Expand Up @@ -517,6 +519,7 @@ our %math_props = (
"\x{2AB0}" => { role => 'RELOP', meaning => 'succeeds-or-equals' }, # \succeq
"\x{FF0F}" => { role => 'OPFUNCTION', meaning => 'not' }, # \not
#======================================================================
"?" => { role => 'UNKNOWN' }, # Override TeX's mathcode (CLOSE presentationally, not semantic)
"arccos" => { role => 'OPFUNCTION', meaning => 'inverse-cosine' }, # \arccos #
"arcsin" => { role => 'OPFUNCTION', meaning => 'inverse-sine' }, # \arcsin #
"arctan" => { role => 'OPFUNCTION', meaning => 'inverse-tangent' }, # \arctan #
Expand Down
2 changes: 1 addition & 1 deletion t/babel/numprints.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
<paragraph inlist="toc" xml:id="S1.SS0.SSS0.Px6">
<title>Counters and Lengths</title>
<para xml:id="S1.SS0.SSS0.Px6.p1">
<p>Page: <text class="ltx_number">0</text></p>
<p>Page: <text class="ltx_number">1</text></p>
</para>
<para xml:id="S1.SS0.SSS0.Px6.p2">
<p>Lengths:
Expand Down
2 changes: 1 addition & 1 deletion t/complex/hypertest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
<p>But macros expanded: <ref class="ltx_url" font="typewriter" href="http://localhost/dir/index.html">http://localhost/dir/index.html</ref>.</p>
</para>
<para xml:id="S2.p4">
<p>And, you get this: <ref class="ltx_url" font="typewriter" href="http://example.com/}user">http://example.com/}user</ref></p>
<p>And, you get this: <ref class="ltx_url" font="typewriter" href="http://example.com/~{}user">http://example.com/~{}user</ref></p>
</para>
</section>
<rdf about="" content="An Author" property="dcterms:creator"/>
Expand Down
6 changes: 3 additions & 3 deletions t/complex/si.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1339,7 +1339,7 @@ Some text <break/><Math mode="inline" tex="4\text{\,}\mathrm{m}\text{\,}{\mathrm
</XMWrap>
</XMDual>
</XMath>
</Math> <break/><Math mode="inline" tex="12\text{~{}}345" text="12345" xml:id="S1.SS4.SSS1.p4.m3">
</Math> <break/><Math mode="inline" tex="12\text{~}345" text="12345" xml:id="S1.SS4.SSS1.p4.m3">
<XMath>
<XMDual>
<XMTok meaning="12345" role="NUMBER"/>
Expand Down Expand Up @@ -5503,7 +5503,7 @@ Some text <break/><Math mode="inline" tex="4\text{\,}\mathrm{m}\text{\,}{\mathrm
</XMApp>
</XMApp>
</XMath>
</Math> <break/><Math mode="inline" tex="\mathrm{J}\text{\text{~{}div~{}}}\text{(}\mathrm{mol}\text{\,}\mathrm{K}\text{)}" text="joule / mole * kelvin" xml:id="S2.SS1.SSS2.p2.m3">
</Math> <break/><Math mode="inline" tex="\mathrm{J}\text{\text{~div~}}\text{(}\mathrm{mol}\text{\,}\mathrm{K}\text{)}" text="joule / mole * kelvin" xml:id="S2.SS1.SSS2.p2.m3">
<XMath>
<XMApp>
<XMText meaning="divide" role="MULOP" xml:id="S2.SS1.SSS2.p2.m3.2"> div </XMText>
Expand Down Expand Up @@ -5990,7 +5990,7 @@ Some text <break/><Math mode="inline" tex="4\text{\,}\mathrm{m}\text{\,}{\mathrm
</Math><break/></p>
</para>
<para xml:id="S2.SS1.SSS6.p2">
<p><Math mode="inline" tex="{\mathrm{(kg~{}of~{}pol)}}^{2}\text{\,}{\mathrm{(mol~{}of~{}cat)}}^{-1}\text{%&#10;\,}{\mathrm{h}}^{-1}" text="power@(gram, 2) * power@(mole, - 1) * power@(hour, - 1)" xml:id="S2.SS1.SSS6.p2.m1">
<p><Math mode="inline" tex="{\mathrm{(kg~of~pol)}}^{2}\text{\,}{\mathrm{(mol~of~cat)}}^{-1}\text{\,}{%&#10;\mathrm{h}}^{-1}" text="power@(gram, 2) * power@(mole, - 1) * power@(hour, - 1)" xml:id="S2.SS1.SSS6.p2.m1">
<XMath>
<XMApp>
<XMText meaning="times" role="MULOP" xml:id="S2.SS1.SSS6.p2.m1.4"> </XMText>
Expand Down
Loading

4 comments on commit 7418141

@endash
Copy link

@endash endash commented on 7418141 Dec 11, 2024 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dginev
Copy link
Collaborator

@dginev dginev commented on 7418141 Dec 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apologies about the notification, I wonder if you get these a lot? \@@endash was a macro name used by LaTeXML.

@endash
Copy link

@endash endash commented on 7418141 Dec 11, 2024 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@emdash
Copy link

@emdash emdash commented on 7418141 Dec 11, 2024 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.