Jupyter:将带有百分号的R笔记本转换为PDF

时间:2016-02-14 16:59:05

标签: r jupyter

问题:带有R的Jupyter无法转换为PDF。 原因:在乳胶转换阶段没有转义%符号。 我有一个解决方案,但我希望有更好/更容易/更永久的东西。

我以更简单的形式重新创建了我的问题,以便更好地突出显示它。基本上,我在Jupyter中运行以下命令(使用R内核):

description <- data.frame("variable"= c("female",
                                        "phsrank",
                                        "BA"),
                          "label"   = c("=1 if female",
                                        "% high school rank",
                                        "=1 if Bachelor's degree"))
description  

这将输出下表:

    variable    label
1   female      =1 if female
2   phsrank     % high school rank
3   BA          =1 if Bachelor's degree

然后我将笔记本保存为Breaking_pdf_R.ipynb,然后选择文件&gt;下载为&gt; PDF通过LaTeX。将打开一个新的浏览器窗口,其中包含以下内容:

500:内部服务器错误

错误是:

nbconvert failed: PDF creating failed

接下来,我尝试了命令行:

ipython nbconvert --to pdf Breaking_pdf_R.ipynb

输出中出现了乳胶错误:

LaTeX Warning: No \author given.

! Extra alignment tab has been changed to \cr.
<recently read> \endtemplate

l.242   3 &
           BA & =1 if Bachelor's degree\\
?
! Emergency stop.
<recently read> \endtemplate

l.242   3 &
           BA & =1 if Bachelor's degree\\
!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on notebook.log.

接着是错误:

raise RuntimeError("PDF creating failed")
RuntimeError: PDF creating failed

由于乳胶问题,pdf转换失败。我可以使用以下命令将.ipybn文件转换为.tex:

ipython nbconvert --to latex Breaking_pdf_R.ipynb

查看乳胶代码,我注意到表格输出(对于数据框)有一个未转义的%。因为%用于乳胶中的评论,所以这会使表格污染。

    \begin{tabular}{r|ll}
  & variable & label\\
\hline
    1 & female & =1 if female\\
    2 & phsrank & % high school rank\\
    3 & BA & =1 if Bachelor's degree\\
\end{tabular}

我将百分比转换(将%更改为\%),然后使用pdflatex转换文件(使用Texmaker),最后pdf成功,我有一张漂亮的桌子。

我想知道是否有更好的解决方法,而不是必须完成上述所有步骤,并尝试解释错误。

作为旁注,我发现这只是R的一个问题。当我使用Python在Jupyter中执行等效代码时,我在pdf输出中得到一个更丑陋的表(因为它不使用表格在乳胶中,与R示例不同,但%会自动转义。

使用Jupyter和Python内核:

import pandas as pd
description = pd.DataFrame({"variable": ["female",
                                        "phsrank",
                                        "BA"],
                            "label"   : ["=1 if female",
                                        "% high school rank",
                                        "=1 if Bachelor's degree"]})
description

输出:

    label                   variable
0   =1 if female            female
1   % high school rank      phsrank
2   =1 if Bachelor's degree BA

ipython nbconvert --to pdf Breaking_pdf_py.ipynb

以上工作正常(Breaking_pdf_py.ipynb是我的Jupyter python文件)。

0 个答案:

没有答案