如何在 jupyter/ipython 笔记本中启用 MathJax Upgreek?

How to Enable MathJax Upgreek in jupyter/ipython notebook?

我已经查看了各种相关问题,包括

但我无法让它工作...

我的测试用例很简单

from IPython.display import display, HTML, Math, Latex    
display(Math(r'\uppi'))

期待直立的 $\pi$ 但目前只得到 '\uppi' 原始数据。

我使用细胞魔法尝试了以下方法

%%javascript
<script type="text/Javascript">
MathJax.Hub.Config({
  loader: {load: ['[tex]/upgreek']},
  tex: {packages: {'[+]': ['upgreek']}}
});
</script>

生成Javascript Error: Unexpected token '<'

%%javascript
MathJax.Hub.Config({
  loader: {load: ['[tex]/upgreek']},
  tex: {extensions: ['require.js'], packages: {'[+]': ['upgreek']}}
});

它没有抛出任何错误,但似乎没有任何效果

%%javascript
window.MathJax = {
  loader: {load: ['[tex]/upgreek']},
  tex: {packages: {'[+]': ['upgreek']}}
};

好像也没有达到预期的效果

问题:我不想修改笔记本外的configuration/javascript文件。如何在 jupyter notebook 中动态启用 MathJax upgreek?

(目前在 jupyterlab 3.2.2 上,python 3.8.10 在 Windows 10 下)

这没有解决 OP 的基本问题,它与 jupyter 中 MathJax 扩展的安装控制有关,但它确实解决了 objective:改变希腊符号的渲染外观(但可以也适用于其他与字体相关的需求)

已更新 下面将为所有大写和小写希腊字符创建 TeX 宏,如果可以安装的话,也可以在 Upgreek 中使用。

from IPython.display import display, Math

# Using codes from https://unicode-table.com/en/sets/greek-symbols/, create dictionaries of unicodes keyed by character names
grLcUpChars = [rf'\unicode{{{code}}}' for code in range(0x3B1, 0x3CA) if code != 0x3C2]  # omit 'final sigma'
grUcUpChars = [rf'\unicode{{{code}}}' for code in range(0x391, 0x3AA) if code != 0x3A2]  # omit omitted code for 'final sigma' in uppercase
grCharNames = ['alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda',
               'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega']

zipIt = zip(grCharNames, grLcUpChars)
grLcUpDict = dict(zipIt)
zipIt = zip(grCharNames, grUcUpChars)
grUcUpDict = dict(zipIt)

# Generate the MathJax code to create 'macro' definitions for upright greek characters
# See e.g. https://docs.mathjax.org/en/latest/input/tex/macros.html
# Paste output text from $ to $ inclusive into a markdown cell and execute it
print('$')
for grCharName in grCharNames:
    print(fr'    \def\Up{grCharName}{{{{{grLcUpDict[grCharName]}}}}}')

for grCharName in grCharNames:
    print(fr'    \def\Up{grCharName.title()}{{{{{grUcUpDict[grCharName]}}}}}')

print('$')

为 Markdown 单元格生成 TeX 宏:

$
    \def\Upalpha{{\unicode{945}}}
    \def\Upbeta{{\unicode{946}}}
    \def\Upgamma{{\unicode{947}}}
    \def\Updelta{{\unicode{948}}}
    \def\Upepsilon{{\unicode{949}}}
    \def\Upzeta{{\unicode{950}}}
    \def\Upeta{{\unicode{951}}}
    \def\Uptheta{{\unicode{952}}}
    \def\Upiota{{\unicode{953}}}
    \def\Upkappa{{\unicode{954}}}
    \def\Uplambda{{\unicode{955}}}
    \def\Upmu{{\unicode{956}}}
    \def\Upnu{{\unicode{957}}}
    \def\Upxi{{\unicode{958}}}
    \def\Upomicron{{\unicode{959}}}
    \def\Uppi{{\unicode{960}}}
    \def\Uprho{{\unicode{961}}}
    \def\Upsigma{{\unicode{963}}}
    \def\Uptau{{\unicode{964}}}
    \def\Upupsilon{{\unicode{965}}}
    \def\Upphi{{\unicode{966}}}
    \def\Upchi{{\unicode{967}}}
    \def\Uppsi{{\unicode{968}}}
    \def\Upomega{{\unicode{969}}}
    \def\UpAlpha{{\unicode{913}}}
    \def\UpBeta{{\unicode{914}}}
    \def\UpGamma{{\unicode{915}}}
    \def\UpDelta{{\unicode{916}}}
    \def\UpEpsilon{{\unicode{917}}}
    \def\UpZeta{{\unicode{918}}}
    \def\UpEta{{\unicode{919}}}
    \def\UpTheta{{\unicode{920}}}
    \def\UpIota{{\unicode{921}}}
    \def\UpKappa{{\unicode{922}}}
    \def\UpLambda{{\unicode{923}}}
    \def\UpMu{{\unicode{924}}}
    \def\UpNu{{\unicode{925}}}
    \def\UpXi{{\unicode{926}}}
    \def\UpOmicron{{\unicode{927}}}
    \def\UpPi{{\unicode{928}}}
    \def\UpRho{{\unicode{929}}}
    \def\UpSigma{{\unicode{931}}}
    \def\UpTau{{\unicode{932}}}
    \def\UpUpsilon{{\unicode{933}}}
    \def\UpPhi{{\unicode{934}}}
    \def\UpChi{{\unicode{935}}}
    \def\UpPsi{{\unicode{936}}}
    \def\UpOmega{{\unicode{937}}}
$

为了清晰和测试,在另一个单元格中,这将列出定义的宏名称并显示大小写字母

grLcAlphabetMathJax = [fr'\Up{grCharName}' for grCharName in grCharNames]
grUcAlphabetMathJax = [fr'\Up{grCharName.title()}' for grCharName in grCharNames]
display(grLcAlphabetMathJax)
display(grUcAlphabetMathJax)
display(Math(''.join(grLcAlphabetMathJax)))
display(Math(''.join(grUcAlphabetMathJax)))

从而有效地再现Upgreek;跳过列表它的输出是:

αβγδεζηθικλμνξοπρστυφχψω ΑβΓΔεΖHΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΩ

已取代原版 解决方法:参考 this excellent MathJax/TeX documentation we find the \unicode instruction for MathJax, and via this site 直立 Pi 符号的代码(例如)。

这将允许在 from IPython.display import display, HTML, Math, Latex

之后的笔记本单元格中执行以下操作
display(Math(r'\unicode[Segoe UI]{x03C0}'))

生成π

display(Math(r'\unicode[familySTIXMathJax_Normal-italic]{x03C0}'))

生成斜体</code>(尝试切换到familySTIXMathJax_Normal似乎没有影响!?)</p> <p>和普通的<code>display(Math(r'\pi'))生成