【问题标题】:Uppercase letters and numbers in mathjax are too bigmathjax 中的大写字母和数字太大
【发布时间】:2020-04-30 22:17:47
【问题描述】:

我正在使用 Jekyll 在 Github 中设置网页。我已经实现了 Mathjax 以呈现数学文本。我的配置是最小的:

<!-- Mathjax -->
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']],
      processEscapes: true
    }
  });
</script>
<script type="text/javascript" src="path-to-mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    <script type="text/javascript"
  src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

它工作正常,除了内联数学文本和大写字母看起来很大,考虑到周围的文本。我设置this page为例。

到目前为止,我唯一能做的就是将数学按周围文本的一个因子缩小,通过使用

"HTML-CSS": {
scale: 90
}

问题在于它会缩放所有数学表达式,包括看起来大小合适但没有缩放的小写字母。

所以我的问题是是否有办法解决这种差异。

【问题讨论】:

标签: mathjax


【解决方案1】:

...有办法解决这种差异吗?

没有。 MathJax 通过缩放自己的字体来匹配周围的字体,以便 ex-height 匹配周围字体的高度。这意味着小写字母的高度应该大致相等,如您的示例所示。所以 MathJax 正确地确定了周围的前高度并与之匹配。

大写不匹配的原因是不同字体的大小写字母高度之间的比例不同。因此,如果您让小写字母匹配,则大写字母不会匹配(反之亦然)。对于具有与 MathJax 字体不同的大小写高度比的字体,您将无法使两者都与周围的字体相匹配。这是这两种字体设计所固有的。

唯一的另一种可能性是将大写字母与小写字母不同地缩放,但这意味着权重将不匹配,并且数学布局的质量会受到影响。

所以,不,一般来说,你不能两者兼得。


2020 年 4 月 30 日编辑:

在下面的评论中,我们讨论了em 单位的含义,它与字体的(计算的)font-size 相同。不幸的是,这与字体中大写字母的高度不同。例如,下面的代码在高度和宽度为 1em 的红色框中显示了一个 M,在高度和宽度为 1ex 的框中显示了一个 x,用于字体 Times、Courier、Impact 和 Zapfino。运行它以查看结果。

div {
  font-size: 60px;
  display: inline-block;
  min-width: 120px;
}
em-box {
  display: inline-block;
  background-color: red;
  width: 1em; height: 1em;
  margin-right: -1em;
}
ex-box {
  display: inline-block;
  background-color: red;
  width: 1ex; height: 1ex; 
  margin-right: -1ex;
  margin-left: 10px;
}
M-box {
  display: inline-block;
  min-width: 1em;
}
x-box {
  display: inline-block;
  min-width: 1ex;
}
<div style="font-family: Times">
<em-box></em-box><M-box>M</M-box><ex-box></ex-box><x-box>x</x-box>
</div>
<div style="font-family: Courier">
<em-box></em-box><M-box>M</M-box><ex-box></ex-box><x-box>x</x-box>
</div>
<div style="font-family: Impact">
<em-box></em-box><M-box>M</M-box><ex-box></ex-box><x-box>x</x-box>
</div>
<div style="font-family: Zapfino">
<em-box></em-box><M-box>M</M-box><ex-box></ex-box><x-box>x</x-box>
</div>

这是一张图片,以防您无法查看上面的结果。

请注意,em 框(红色)在所有情况下都是相同的,并且是 CSS 中指定的高度(50 像素),而 M 的高度在该框内是不同的(而 x 的高度与其框匹配)。所以不能用em-size来判断字体中大写字母的高度。

我不知道如何确定 M 的实际高度。

【讨论】:

  • 太好了,谢谢。那么,有没有一种无衬线字体和Mathjax使用的字体大小写比例一样?
  • 我没有对字体进行任何分析来确定这一点。当然,MathJax_SansSerif-Regular 字体应该匹配。如果您不需要 ASCII 范围之外的任何内容,则可以将其用于文本。
  • 我知道 MathJax 默认匹配小写字母。是否可以使用自动字体大小匹配但匹配大写M?
  • @MikkoRantalainen,不,至少不是自动的。没有关于 M 高度的信息(而 x 的高度是)。 ex 的相对字体使用是字体中x 的高度,MathJax 可以使用它来确定要使用的高度。字体相对单位em 是M 的width,而不是它的高度,并且没有其他字体相对单位,所以MathJAx 无法确定M 的高度。你可以但是,关闭字体匹配并手动设置 MathJax 比例因子。但是你必须弄清楚任何试验和错误的规模。
  • @MikkoRantalainen,您对网络浏览器中的em 是正确的(MathJax 确实使用它来获得em 的大小)。不幸的是,em 的大小(和font-size)与您声称的 M 的高度不同。我在答案中添加了一个示例来说明这一点。不幸的是,我没有看到以编程方式确定大写字母高度的方法。我能建议的最好的方法是您使用scale 配置选项来调整输出的大小以更好地匹配您的环境。您可能还想将 matchFontHeight 设置为 false。
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 2019-08-08
  • 2022-06-30
  • 2020-01-04
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2020-10-17
相关资源
最近更新 更多