mfo*_*bes 16 ipython mathjax pandoc ipython-notebook
如何设置MathJax"序言"以便在IPython(或Jupyter)笔记本中重复使用,方便其他人阅读我的文档(在http://nbviewer.org上)并且适用于LaTeX/PDF代?
我想使用IPython(现在是Jupyter)笔记本来处理我后来通过LaTeX(使用ipython nbconvert
)转换为PDF的文档.问题是如何在几乎每个文档中包含一堆宏定义.就像是:
\newcommand{\vect}[1]{\vec{#1}}
\newcommand{\abs}[1]{\lvert#1\rvert}
\DeclareMathOperator{\erf}{erf}
Run Code Online (Sandbox Code Playgroud)
就笔记本电脑而言,一个令人不满意的解决方案是将它们简单地包含在笔记本顶部的降价单元中,嵌入两个美元符号之间,$$
因此它被解释为数学.如果这是在一些介绍性文本之后完成的,那么它甚至不会影响输出.
问题是,当转换为LaTeX(用于PDF导出)时,这些命令嵌入在LaTeX文件的数学环境中.这有几个问题:
\DeclareMathOperator
必须出现在LaTeX文档前言中.\gdef
或者克服来解决,\global\def
但是必须要求MathJax识别这些命令,其中某些东西\let\gdef{\def}
在某种程度上是从LaTeX中隐藏的.我发现使这项工作的任何方式都相当于一个丑陋的黑客.)\renewcommand
(MathJax不支持,但也可以由\let\renewcommand\newcommand
等等提供,这对我来说似乎是合理的,因为MathJax无法知道前导码可能用于最终的LaTeX文件) .可能解决方案是通过添加代码(不确定等效于此处......)为MathJax提供一组宏\DeclareMathOperator
.
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: {
Macros: {
vect: ["{\\vec #1}",1],
abs: ["{\\lvert #1 \\rvert}",1]
}
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
到custom.js
文件,然后在转换为PDF时提供包含的LaTeX包.我对这种方法的问题是:如何custom.js
为其他人(协作者和查看者)分发文件和LaTeX样式文件?
我希望协作者能够编辑和阅读我的文档,而无需在其全局配置中安装自定义扩展.具体来说,我可以要求他们运行一个命令,就像python setup.py configure
他们下载/签出我的代码一样,对项目进行本地修改,比如ipython_notebook_config.py
在包含笔记本的所有目录中填充文件,但是不喜欢安装扩展或修改他们的个人全局custom.js
文件.
我的绊脚石是我不知道如何将本地custom.js
文件中的贡献添加到笔记本链中,并怀疑这可能违反了安全策略.
最好的解决方案不需要我的协作者的任何操作.
我希望我的笔记本能够在http://nbviewer.org上工作,并且人们能够下载笔记本并制作PDF.(我认为这排除了使用custom.js
黑客和分布式*.sty
文件的可能性,但我不确定.)
我希望能够简单地启动一个新的笔记本,然后开始编写,而不必在每个笔记本的开头插入一堆样板代码,尽管可以通过一个简单的方法使用笔记本扩展或者自动化这个过程.一些钩子python_notebook_config.py
.
以下帖子解决了其中一些问题,但在大多数方面都不尽如人意:
讨论来自IPython笔记本的pandoc生产LaTeX文件的(潜在)问题:
笔记本中数学的一般讨论:
我认为你可以解决一些问题,但不是全部。
首先,绊脚石。我相信(尽管我可能是错的)nbviewer 除了笔记本本身之外不会查看任何内容。例如,我不知道它如何ipython_notebook_config.py
与笔记本一起运行存储。因此,这就排除了这种思路,这意味着我认为您必须硬着头皮向每个笔记本添加样板。但您至少可以最大限度地减少样板文件。本着这样的精神:
您可以在 github 或其他地方维护您的脚本custom.js
(可能使用更具描述性的名称),然后向所有笔记本添加一行样板以从 URL 加载该脚本。您仍然需要样板文件,但它会短得多。
一旦执行了包含 javascript 的代码单元,它就会保存在笔记本中,这意味着它会在浏览器下次加载它时自动发生,甚至在代码单元执行之前。因此,除非 nbviewer 阻止 JavaScript 的执行,否则它应该可以正常工作。这也将使协作者的工作顺利进行,因为他们不必下载额外的文件。
至于你自己的样式文件,我怀疑任何有能力安装 ipython 和 Latex、下载你的笔记本并nbconvert
在其上运行的人也足够有能力下载该.sty
文件。无论如何,我看不出有什么办法可以解决这个问题......
归档时间: |
|
查看次数: |
3961 次 |
最近记录: |