当前位置: 首页 > 知识库问答 >
问题:

IPython(Jupyter)MathJaX前导

农鸿达
2023-03-14

我如何设置MathJax"序言"在IPython(或Jupyter)笔记本中使用,以方便他人阅读我的文档(http://nbviewer.org),并适用于LaTeX/PDF生成的方式重复使用?

我想用IPython(现在的Jupyter)笔记本记录我后来通过LaTeX转换成PDF的文档(使用IPython nbconvert)。问题是如何包含我在几乎所有文档中使用的一系列宏定义。比如:

\newcommand{\vect}[1]{\vec{#1}}
\newcommand{\abs}[1]{\lvert#1\rvert}
\DeclareMathOperator{\erf}{erf}

等等。就笔记本而言,一个不令人满意的解决方案是简单地将它们包含在笔记本顶部的标记单元格中,嵌入在两个美元符号$$之间,因此它被解释为数学。如果这是在一些介绍性文本之后完成的,那么它甚至不会影响输出。

问题是,当转换为LaTeX(用于PDF导出)时,这些命令嵌入在LaTeX文件的数学环境中。这有几个问题:

  1. \DeclareMath操作员这样的命令必须出现在LaTeX文档前导中。
  2. 命令定义是方程式的本地定义,在文档的后面不可用。(这可以通过使用\gdef\global\def来解决,但是必须使用\let\gdef{\def}这样的东西来欺骗MathJax来识别这些命令,这在某种程度上是对LaTeX隐藏的。我发现的任何完成这项工作的方法都相当于一个丑陋的黑客。)
  3. 有时命令已经在LaTeX中定义,并且需要有\刷新命令(MathJax不支持,但是\let\刷新命令\new指令等也可以提供,这对我来说似乎是合理的,因为MathJax不知道最后的LaTeX文件可能使用什么前导)。

可能解决方案是通过添加类似的代码(不确定这里的\DeclareMath操作员的等效项...)

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  TeX: {
    Macros: {
      vect: ["{\\vec #1}",1],
      abs: ["{\\lvert #1 \\rvert}",1]
    }
  }
});
</script>

定制。js文件,然后提供一个LaTeX包,以便在转换为PDF时包含。这种方法的问题是:如何分发定制。js文件和LaTeX风格的文件供其他人(合作者和观众)使用?

>

  • 我希望合作者能够编辑和阅读我的文档,而无需在其全局配置中安装自定义扩展。具体来说,我可以要求他们运行python setup之类的命令。py configure一旦他们下载/签出我的代码,它会对项目进行本地修改,比如填充ipython\u notebook\u config。py包含笔记本电脑的所有目录中的文件,但我不喜欢安装扩展,或修改其个人全局自定义。js文件。

    我在这里的绊脚石是,我不知道如何添加来自本地定制的贡献。js文件,并怀疑这可能违反了安全策略。

    最好的解决方案不需要我的合作者采取任何行动。

    我想让我的笔记本工作http://nbviewer.org,人们可以下载笔记本并生成PDF。(我认为这排除了使用custom.jshacks和分布式*.sty文件的可能性,但我不确定。)

    我更希望能够简单地启动一个新的笔记本,然后开始写作,而不必在每个笔记本的开头插入一堆样板代码,尽管可以通过一个简单的方法,使用笔记本扩展或python\u notebook\u config中的一些钩子来自动化这个过程。py

    下面的文章讨论了其中的一些问题,但在大多数方面都不够:

    • 在ipython笔记本中使用打包和制作宏
    • IPython中的物理符号(特别是这个答案指出了相关的困难)
    • 如何让MathJax在ipython笔记本中启用mhchem扩展

    关于潘多克从IPython笔记本电脑生产LaTeX文件(潜在)问题的讨论:

    • pandoc和mathjax有些问题
    • \从mark down转换为pandoc时的new命令环境
    • Pandoc IPython笔记本丢失了一些Mathjax

    笔记本中数学的一般讨论:

    • 如何在IPython笔记本上书写乳胶
  • 共有1个答案

    都沈浪
    2023-03-14

    我认为你可以解决一些问题,但不是全部。

    首先是绊脚石。我相信(尽管我可能错了)nbviewer只看笔记本本身。例如,我不知道它如何运行ipython_notebook_配置。py存储在笔记本旁边。这就排除了这种思路,也就是说,我认为你必须咬紧牙关,在每个笔记本上都添加样板文件。但你至少可以把样板文件最小化。本着这种精神:

    您可以维护您的自定义。js(可能用一个更具描述性的名称)在github上或其他任何地方,然后在所有笔记本上添加一行样板文件,从URL加载该脚本。你仍然需要样板,但要短得多。

    一旦你执行了包含javascript的代码单元格,它就会被保存在笔记本中,这意味着它会在浏览器下次加载它时自动发生,甚至在代码单元格被执行之前。所以除非nbview阻止javascript的执行,否则它应该会很好地工作。这也将使协作者工作得很好,因为他们不必下载额外的文件。

    至于你自己的风格文件,我怀疑任何足够成熟的人安装ipython和latex,下载你的笔记本,并在其上运行nbconvert,也足够成熟,可以下载。sty文件。不管怎样,我觉得没必要这么做。。。

     类似资料:
    • 我回顾了各种相关问题,包括 如何让MathJax在ipython笔记本中启用mhchem扩展 但我不能让它工作。。。 我的测试用例很简单 期待直立的$\pi$,但目前只是'\uppi'回来了。 我已经尝试了以下使用细胞魔法 这会生成

    • IPython IPython 通常指的是一个 Python REPL shell。提供了远比 Python shell 强大的 shell 环境。 该名词本事即 Iteractive Python shell 的缩写。 IPython notebook IPython notebook 是一个基于 IPython REPL 的 web 应用,安装 IPython 后在终端输入 ipython n

    • 问题内容: 我一直在使用中描述的方法,这个职位设立IPython的笔记本电脑与Django的发挥很好。该方法的要点是创建一个IPython扩展,该扩展设置DJANGO_SETTINGS_MODULE并在IPython启动时运行django.setup()。 该扩展的代码是: 在最近升级到Jupyter Notebook的情况下,此设置对我而言已无效。通过在笔记本的第一个单元格中添加类似的代码,我可

    • 我一直在使用本文中描述的方法来设置IPython笔记本,以便与Django很好地玩。该方法的要点是创建一个IPython扩展,它设置DJANGO_SETTINGS_模块并运行DJANGO。IPython启动时的setup()。 扩展代码为: 最近升级到Jupyter笔记本电脑后,我的这个设置就被破坏了。我可以在Jupyter笔记本中运行Django代码,方法是在笔记本的第一个单元格中添加类似的代码

    • 我试图找到一种方法,让mathjax在我的iPython笔记本上不使用STIX字体进行数学运算。相反,我更希望它使用“TeX”字体。根据我应该使用的Mathjax留档: 尽管如此,我不知道该把这个放在哪里。我已经试着把这段代码放到我的自定义代码中。js文件属于我自己的ipython配置文件,但它不起作用。理想情况下,我想对mathjax进行ipython配置文件特定的调整。

    • 问题内容: 在IPython / Jupyter Notebook中运行的大多数语言内核的错误报告都指出发生错误的行;但是(至少默认情况下)在笔记本电脑中未显示行号。 是否可以将行号添加到IPython / Jupyter Notebook? 问题答案: -在CodeMirror区域中切换行号。有关其他键盘快捷键,请参见快速帮助。 详细信息- (或)将您带入命令模式,然后按键应切换当前单元格行号的