【问题标题】:How to Enable MathJax Upgreek in jupyter/ipython notebook?如何在 jupyter/ipython 笔记本中启用 MathJax Upgreek?
【发布时间】:2021-12-27 12:14:12
【问题描述】:

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

但我无法让它工作......

我的测试用例很简单

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 '&lt;'

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

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

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

这似乎也没有达到预期的效果

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

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

【问题讨论】:

    标签: ipython jupyter mathjax


    【解决方案1】:

    这并没有解决 OP 的基本问题,该问题与在 jupyter 中安装 MathJax 扩展的控制有关,但它确实解决了目标:改变希腊符号的呈现外观(但可以应用于其他字体-相关需求)

    更新 以下将为所有大写和小写希腊字符创建 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;跳过列表它的输出是:

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

    取代原来的 解决方法:参考this excellent MathJax/TeX documentation,我们找到了 MathJax 的 \unicode 指令,并通过 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}'))
    

    生成斜体?(尝试切换到familySTIXMathJax_Normal 似乎没有影响!?)

    而普通的display(Math(r'\pi'))生成?

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多