Shiny + knitr 在编译文档时不加载乳胶包
Shiny + knitr does not load latex packages when compiling the documents
关于我最近发现的 knitr 的一般问题,我还有更多悬而未决的问题。
当我通过 shiny 简单地编译文档时:
output$report = downloadHandler(
filename = reactive({paste0(input$filename,'.pdf')}),
content = function(file) {
out = knit2pdf(input = 'pdf_shell.Rnw')
file.rename(out, file)
},
contentType = 'application/pdf'
)
一些 Latex 包如 eso-pic
或 hyperref
不工作并导致错误 Running ' texi2div ' on ' pdf_shell.tex ' failed
。将 compiler = 'xelatex'
包含到 knit2pdf
有助于某些 功能,但会破坏其他功能(例如,\TextField
功能不起作用并覆盖文本)。
因此,我的问题是有谁知道如何使用默认编译器 pdflatex
编译 PDF 而不会出现上述错误?或者您可能有任何可以以不同方式解决问题的专业技巧。非常感谢任何输入。
编辑: 我不得不提一下,当我通过 R Studio 运行 应用程序时,一切正常。当我将应用程序功能(和乳胶包)上传到 shinyapps.io
时中断
edit 2: 我发现当我在我的 .Rnw 文件中包含额外的反斜杠时,文件编译正确。所以不起作用的版本:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \
\end{tabularx}
\end{Form}
有效版本:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \\
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \\
\end{tabularx}
\end{Form}
有人能解释我为什么会这样吗?
经过一些研究,我发现像 hyperref
(TextFields
) 这样的包在使用 xelatex
(proof) 编译时通常可能无法使用普通表, 但应在 p 列内编译,如下所示:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \
\end{tabularx}
\end{Form}
但是并没有解决Shiny内部的问题。为了让它工作,我不得不在行之间拆分时再添加一个反斜杠(不知道为什么)。
所以如果你想让它工作,你必须添加额外的反斜杠,结果代码应该是这样的:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \\
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \\
\end{tabularx}
\end{Form}
关于我最近发现的 knitr 的一般问题,我还有更多悬而未决的问题。 当我通过 shiny 简单地编译文档时:
output$report = downloadHandler(
filename = reactive({paste0(input$filename,'.pdf')}),
content = function(file) {
out = knit2pdf(input = 'pdf_shell.Rnw')
file.rename(out, file)
},
contentType = 'application/pdf'
)
一些 Latex 包如 eso-pic
或 hyperref
不工作并导致错误 Running ' texi2div ' on ' pdf_shell.tex ' failed
。将 compiler = 'xelatex'
包含到 knit2pdf
有助于某些 功能,但会破坏其他功能(例如,\TextField
功能不起作用并覆盖文本)。
因此,我的问题是有谁知道如何使用默认编译器 pdflatex
编译 PDF 而不会出现上述错误?或者您可能有任何可以以不同方式解决问题的专业技巧。非常感谢任何输入。
编辑: 我不得不提一下,当我通过 R Studio 运行 应用程序时,一切正常。当我将应用程序功能(和乳胶包)上传到 shinyapps.io
时中断edit 2: 我发现当我在我的 .Rnw 文件中包含额外的反斜杠时,文件编译正确。所以不起作用的版本:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \
\end{tabularx}
\end{Form}
有效版本:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \\
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \\
\end{tabularx}
\end{Form}
有人能解释我为什么会这样吗?
经过一些研究,我发现像 hyperref
(TextFields
) 这样的包在使用 xelatex
(proof) 编译时通常可能无法使用普通表, 但应在 p 列内编译,如下所示:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \
\end{tabularx}
\end{Form}
但是并没有解决Shiny内部的问题。为了让它工作,我不得不在行之间拆分时再添加一个反斜杠(不知道为什么)。 所以如果你想让它工作,你必须添加额外的反斜杠,结果代码应该是这样的:
\begin{Form}
\begin{tabularx}{\textwidth}{p{8cm}}
Description \\
\TextField[name=1, multiline=true, width=\linewidth,height=0.6in, bordercolor = 1 1 1, charsize=0pt]{} \\
\end{tabularx}
\end{Form}