首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在jupyter/ipython笔记本中启用MathJax Upgreek?

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

Stack Overflow用户
提问于 2021-11-16 12:00:56
回答 1查看 367关注 0票数 1

我已检讨多项有关问题,包括

但我不能让它起作用..。

我的测试用例很简单

代码语言:javascript
复制
from IPython.display import display, HTML, Math, Latex    
display(Math(r'\uppi'))

期待直立的$\pi$,但目前只得到'\uppi‘的背部生。

我已经尝试了以下使用细胞魔术

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

生成Javascript Error: Unexpected token '<'

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

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

代码语言:javascript
复制
%%javascript
window.MathJax = {
  loader: {load: ['[tex]/upgreek']},
  tex: {packages: {'[+]': ['upgreek']}}
};

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-19 09:57:33

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

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

代码语言:javascript
复制
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('$')

它生成标记单元格的TeX宏:

代码语言:javascript
复制
$
    \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}}}
$

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

代码语言:javascript
复制
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;跳过列表,其输出如下:

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

取代了原始的解决方案:参考这个优秀的MathJax/TeX文档,我们找到了MathJax的\unicode指令,并通过本站找到了竖直Pi符号的代码(例如)。

这就允许在笔记本单元格中,在from IPython.display import display, HTML, Math, Latex之后执行以下操作

代码语言:javascript
复制
display(Math(r'\unicode[Segoe UI]{x03C0}'))

生成π

鉴于

代码语言:javascript
复制
display(Math(r'\unicode[familySTIXMathJax_Normal-italic]{x03C0}'))

生成斜体(试图切换到familySTIXMathJax_Normal似乎不会影响!?)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69988793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档