IPython(Jupyter)MathJaX序言 问题:
我如何设置MathJax“序言”,以便在IPython(或Jupyter)笔记本中重复使用,以便于其他人阅读我的文档(on),并用于生成LaTeX/PDF 背景 我想使用IPython(现在的Jupyter)笔记本记录我后来通过LaTeX转换为PDF的文档(使用IPython(Jupyter)MathJaX序言 问题:,ipython,ipython-notebook,mathjax,pandoc,Ipython,Ipython Notebook,Mathjax,Pandoc,我如何设置MathJax“序言”,以便在IPython(或Jupyter)笔记本中重复使用,以便于其他人阅读我的文档(on),并用于生成LaTeX/PDF 背景 我想使用IPython(现在的Jupyter)笔记本记录我后来通过LaTeX转换为PDF的文档(使用IPython nbconvert)。问题是如何包含我在几乎每个文档中使用的大量宏定义。比如: \newcommand{\vect}[1]{\vec{#1}} \newcommand{\abs}[1]{\lvert#1\rvert} \D
IPython nbconvert
)。问题是如何包含我在几乎每个文档中使用的大量宏定义。比如:
\newcommand{\vect}[1]{\vec{#1}}
\newcommand{\abs}[1]{\lvert#1\rvert}
\DeclareMathOperator{\erf}{erf}
等等。就笔记本电脑而言,一个不令人满意的解决方案是将它们简单地包含在笔记本电脑顶部的降价单元格中,嵌入在两个美元符号之间,因此它被解释为数学。如果这是在一些介绍性文本之后完成的,那么它甚至不会影响输出
问题是,在转换为LaTeX(用于PDF导出)时,这些命令嵌入到LaTeX文件的数学环境中。这有几个问题:
\DeclareMathOperator
这样的命令必须出现在LaTeX文档前言中\gdef
或\global\def
来克服,但是必须用\let\gdef{\def}
之类的东西欺骗MathJax来识别这些命令,这些东西在某种程度上是隐藏在LaTeX中的。我发现的任何制作这项工作的方法都是一个丑陋的黑客行为。)\renewcommand
(MathJax不支持,但同样可以由\let\renewcommand\newcommand
等提供。这对我来说似乎是合理的,因为MathJax不知道最终LaTeX文件可能使用什么前导)\DeclareMathOperator
此处…)
MathJax.Hub.Config({
特克斯:{
宏:{
向量:[“{\\vec#1}”,1],
abs:[“{\\lvert#1\\rvert}”,1]
}
}
});
到custom.js
文件,然后在转换为PDF时提供一个LaTeX包以供包含。这种方法的问题是:如何分发custom.js
文件和LaTeX样式的文件供其他人(协作者和查看者)使用
python setup.py configure
的命令,该命令对项目进行本地修改,例如在包含笔记本的所有目录中填充ipython\u notebook\u config.py
文件,但我不喜欢安装扩展,或者修改他们的个人全局custom.js
文件
我的绊脚石是,我不知道如何将本地custom.js
文件的贡献添加到笔记本链中,并怀疑这可能违反了安全策略
最好的解决方案不需要我的合作者采取任何行动custom.js
hacks和分布式*.sty
文件的可能性,但我不确定。)python\u notebook\u config.py
中的一些钩子来实现这一过程的自动化- (特别注意到相关困难)
- 我认为你可以解决一些问题,但不是全部
首先是绊脚石。我相信(尽管我可能错了)nbviewer只看笔记本本身。例如,我不知道它如何运行
ipython\u notebook\u config.py
。这就排除了这种思路,也就是说,我认为你必须咬紧牙关,在每个笔记本上都添加样板文件。但你至少可以将样板文件最小化。本着这种精神:
您可以在github或其他任何平台上维护您的custom.js
(可能使用更具描述性的名称),然后向所有笔记本添加一行样板文件,以从URL加载该脚本。您仍然需要样板文件,但要短得多
一旦您执行了包含javascript的代码单元,它就会保存在笔记本中,这意味着下次浏览器加载它时,它会自动发生,甚至在代码单元执行之前。因此,除非nbviewer阻止javascript的执行,否则它应该可以正常工作。这也将使协作者能够很好地工作,因为他们不必下载额外的文件
至于您自己的风格文件,我怀疑任何人如果足够成熟,能够安装ipython和latex,下载您的笔记本,并在其上运行
nbconvert
,也足以下载.sty
文件。无论如何,我看不出有任何方法可以绕过这一需要……在web上拥有一个中心custom.js
文件不是一个坏主意,只要有一种方法可以使用本地版本(例如在飞机上工作时)。问题是:在哪里可以包含样板文件,以便它能够尽早影响MathJax配置?到
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: {
Macros: {
vect: ["{\\vec #1}",1],
abs: ["{\\lvert #1 \\rvert}",1]
}
}
});
</script>