我已检讨多项有关问题,包括
但我不能让它起作用..。
我的测试用例很简单
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']}}
};似乎也没有达到预期的效果
问题:我不想修改笔记本之外的配置/javascript文件。如何在jupyter笔记本中动态启用MathJax upgreek?
(目前在jupyterlab 3.2.2,python 3.8.10在Windows 10下)
发布于 2021-11-19 09:57:33
这并不涉及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('$')它生成标记单元格的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;跳过列表,其输出如下:
αβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
取代了原始的解决方案:参考这个优秀的MathJax/TeX文档,我们找到了MathJax的\unicode指令,并通过本站找到了竖直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'))生成
https://stackoverflow.com/questions/69988793
复制相似问题