(Jupyter笔记本)通过LaTeX定制日期和标题格式的nbconvert PDF
我正在用Jupyter笔记本写大量代码和乳胶的报告。我想更改它们的标题、日期和格式。准确地说,我希望所有的文本都是较小的大小,最大12到14px 我花了几天时间尝试为nbconvert创建自定义的*.tplx文件,但都没有成功。无论我使用什么文件,标题和日期都保持不变。事实上,当我使用custom.tplx时,似乎没有什么变化 我发现有几个人在问这个问题,我在这里找到了有关模板的信息,以及在使用nbconvert时如何调用模板。每个完整的解决方案都涉及导出为“.tex”,然后手动进行更改。这是unideal,因为我经常一天创建几个文档,这会比一次性解决方案慢很多(Jupyter笔记本)通过LaTeX定制日期和标题格式的nbconvert PDF,latex,pdf-generation,jupyter-notebook,nbconvert,Latex,Pdf Generation,Jupyter Notebook,Nbconvert,我正在用Jupyter笔记本写大量代码和乳胶的报告。我想更改它们的标题、日期和格式。准确地说,我希望所有的文本都是较小的大小,最大12到14px 我花了几天时间尝试为nbconvert创建自定义的*.tplx文件,但都没有成功。无论我使用什么文件,标题和日期都保持不变。事实上,当我使用custom.tplx时,似乎没有什么变化 我发现有几个人在问这个问题,我在这里找到了有关模板的信息,以及在使用nbconvert时如何调用模板。每个完整的解决方案都涉及导出为“.tex”,然后手动进行更改。这是u
有什么建议吗?好的,我拼凑了一些代码,完成了本文的日期部分。(得到了极大的帮助。)类似的编辑可以改变标题和/或作者。我不确定这有多强大,但它确实起了作用 基本上,您需要编辑
/nbconvert/templates/latex
目录中的tplx文件。具体来说,我编辑了base.tplx
。它在哪里
((* block date *))((* endblock date *))
我把这个改成了
((* block date *))
((*- if nb.metadata["latex_metadata"]: -*))
((*- if nb.metadata["latex_metadata"]["date"]: -*))
\date{((( nb.metadata["latex_metadata"]["date"] )))}
((*- endif *))
((*- endif *))
((* endblock date *))
然后在笔记本元数据中,我添加了
"latex_metadata": {
"date": "CUSTOM DATE HERE"
},
最后的,
取决于它是否是元数据结构中的最后一行。如果不存在latex_元数据标记,则会将日期保留为空,并用latex替换当前日期
我唯一无法解决的问题是,当我通过LaTeX运行Download as->PDF时,它并不总是重新运行LaTeX生成器(有时它只是给我它创建的最后一个PDF,而不是新的)。我不明白为什么它有时运行,有时不运行
*编辑*
我在jupyter笔记本中的确切元数据部分现在如下所示(我使用date字段显示我的学生的截止日期):
谢谢你的宝贵意见。同样的操作也可以用于自定义标题和作者。我在base.tex.j2中编辑了适当的部分,如下所示,并在元数据中的日期字段下方添加了适当的字段
((* block title -*))
((*- if nb.metadata["latex_metadata"]: -*))
((*- if nb.metadata["latex_metadata"]["title"]: -*))
\title{((( nb.metadata["latex_metadata"]["title"] )))}
((*- endif *))
((*- endif *))
((*- endblock title *))
((* block date *))
((*- if nb.metadata["latex_metadata"]: -*))
((*- if nb.metadata["latex_metadata"]["date"]: -*))
\date{((( nb.metadata["latex_metadata"]["date"] )))}
((*- endif *))
((*- endif *))
((* endblock date *))
((* block author *))
((*- if nb.metadata["latex_metadata"]: -*))
((*- if nb.metadata["latex_metadata"]["author"]: -*))
\author{((( nb.metadata["latex_metadata"]["author"] )))}
((*- endif *))
((*- endif *))
((* endblock author *))
对于任何可能偶然发现这个答案的人。。。在某个时候更新了nbconvert之后,我发现它不再使用
base.tplx
。它现在使用位于anaconda安装下的share/jupyter/nbconvert/templates/latex
中的base.tex.j2
。尽管如此,上面的解决方案仍然有效。这种破解方法对您仍然有效吗?我们花了一整天的时间研究如何让它工作,按照您在这里列出的内容进行操作,但它仍然没有发挥作用:-/Yes,在更新为modifybase.tex.j2
而不是不推荐的base.tplx
后,它可以完美地工作。(事实上,我最初的帖子最后一行没有重新运行LaTeX生成器已经不再是问题,因为它每次都能完美地工作。)你有没有可能编辑你的答案,并在新笔记本上发布你的Jupyter元数据在你有了代码片段后的样子?我一直在关注你的帖子,但它不起作用,所以目前我的直觉是我可能在.json
语法方面犯了错误,我对此一无所知。如果失败了,我猜这可能是由于我的设置的一些特质。我目前正在使用Jupyter另存为.tex
,然后手动编辑,这并不理想。好,现在更新以显示元数据。
((* block title -*))
((*- if nb.metadata["latex_metadata"]: -*))
((*- if nb.metadata["latex_metadata"]["title"]: -*))
\title{((( nb.metadata["latex_metadata"]["title"] )))}
((*- endif *))
((*- endif *))
((*- endblock title *))
((* block date *))
((*- if nb.metadata["latex_metadata"]: -*))
((*- if nb.metadata["latex_metadata"]["date"]: -*))
\date{((( nb.metadata["latex_metadata"]["date"] )))}
((*- endif *))
((*- endif *))
((* endblock date *))
((* block author *))
((*- if nb.metadata["latex_metadata"]: -*))
((*- if nb.metadata["latex_metadata"]["author"]: -*))
\author{((( nb.metadata["latex_metadata"]["author"] )))}
((*- endif *))
((*- endif *))
((* endblock author *))