pdf - 将 IPython 笔记本 mhchem markdown 转换为 pdf

标签 pdf latex jupyter-notebook mathjax

弄清楚如何将 mhchem 插入 IPython 笔记本中的 MathJax 表达式后,(来自此 question )我非常高兴,直到我想将笔记本转换为 PDF。我的 Markdown 单元格包含:

$\require{mhchem}$
$\ce{CH2O2->[k_1]H2 + CO2}$

但尝试使用以下终端命令将笔记本转换为 PDF

ipython nbconvert untitled.ipynb --to pdf

产生!未定义的控制序列错误 - 类似于此 post 。但是,Markdown 单元中的 MathJax 解释器无法识别建议的解决方案 (\texorpdfstring)。有什么想法或解决方法可以解决该问题吗?

IPython 3.0.0/MiKTeX 2.9/win7x86

最佳答案

要包含 mhchem 包,您需要创建一个自定义模板。此外,还需要处理 pdflatex 中不可用的 \require mathjax 命令。

可能的模板 (chemtempl.tplx) 可能如下所示

((*- extends 'article.tplx' -*))

((* block packages *))
((( super() )))
\usepackage{mhchem}
((* endblock packages *))

((* block commands *))
((( super() )))
% disable require command
\newcommand{\require}[1]{}
((* endblock commands *))

此模板通过覆盖包和命令 block 来扩展为默认文章模板。 super 调用与 python 命令类似,包含原始 block 内容。 \require 命令是通过定义一个新命令来解决的,该命令接受一个参数并且不执行任何操作 -> 这样它就可以保留在笔记本中。

模板的使用方式如下

jupyter nbconvert --template chemtempl.tplx --to pdf notebook.ipynb

如果您使用的是 IPython 3.x,只需将 jupyter 替换为 ipython

要将模板与笔记本中的下载为 pdf 功能一起使用, 必须使用配置文件。为此,创建一个配置文件(.ipython/profile_default/ipython_config.py 对于 IPython 3.x 或 .jupyter/jupyter_notebook_config.py 对于 IPython 4.x (Jupyter) )包含以下内容:

c = get_config()
c.LatexExporter.template_path = ['/home/path/to/template/']
c.LatexExporter.template_file = 'chemtempl.tplx'

重新启动 Jupyter 后,应加载新配置并使用模板。

(我猜对于 IPython 3.x,该文件也可以命名为 ipython_notebook_config.py 但目前我没有 3.x 版本来测试它。)

关于pdf - 将 IPython 笔记本 mhchem markdown 转换为 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203791/

相关文章:

jupyter-notebook - 有没有办法在 jupyter 的 "Replace in all cells"中默认为 "Find and Replace"?

android - 如何在电子邮件中附加pdf文件

java - Itext PDF 显示空白页

latex - 将 bib2gls 与 rmarkdown 一起使用无法呈现词汇表

pdf - doxygen Latex 由于输入编码错误而失败

python - 删除 matplotlib 图中的窗口标题

iphone - 如何从pdf文件中的FileAttachment Annotation获取EmbeddedFiles

java - 如何在启用嵌入式时间戳和 LTV 的情况下签署 PDF?

emacs - emacs 中的文档 View : refreshing dvi content automatically

docker - VSCode : How to run a Jupyter notebook in a docker container, 通过远程服务器?