(Jupyter笔记本)通过LaTeX定制日期和标题格式的nbconvert PDF

(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

我正在用Jupyter笔记本写大量代码和乳胶的报告。我想更改它们的标题、日期和格式。准确地说,我希望所有的文本都是较小的大小,最大12到14px

我花了几天时间尝试为nbconvert创建自定义的*.tplx文件,但都没有成功。无论我使用什么文件,标题和日期都保持不变。事实上,当我使用custom.tplx时,似乎没有什么变化

我发现有几个人在问这个问题,我在这里找到了有关模板的信息,以及在使用nbconvert时如何调用模板。每个完整的解决方案都涉及导出为“.tex”,然后手动进行更改。这是unideal,因为我经常一天创建几个文档,这会比一次性解决方案慢很多


有什么建议吗?

好的,我拼凑了一些代码,完成了本文的日期部分。(得到了极大的帮助。)类似的编辑可以改变标题和/或作者。我不确定这有多强大,但它确实起了作用

基本上,您需要编辑
/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,在更新为modify
base.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 *))