【问题标题】:Print latex text based on if statement to make PDF根据 if 语句打印乳胶文本以制作 PDF
【发布时间】:2019-10-10 13:25:14
【问题描述】:

我正在为人们创建一个 pdf 报告,并希望根据结果排除一些部分,以便于人们更轻松(例如,在此未发现任何问题,因此无需用空白解释某些内容表)。

我在 R 块中尝试了 If 语句,在代码块的标头中也尝试了 eval='' 语句。当我只包含由 kableExtra 创建的表时,它运行正常;但是,当我包含我想解释的文本时,它给了我多个错误,例如“\T”是字符串中无法识别的转义符”

do_this = (nrow(tableone) >= 1)
print("message
 \begin{Form}
    \TextField[name = tableoneone, width = 10cm,
               height = 3cm,
               multiline=true]{}
\end{Form}  ")

如果检查失败(表一中的行数为零),我希望它不包含在最终文档中。然而,这种情况并非如此。有什么我做错了,或者我没有想到的其他方法吗?

【问题讨论】:

    标签: r pdf latex markdown


    【解决方案1】:

    问题是由于您在字符串中使用了反斜杠造成的。在 R(和大多数其他现代语言)中,backslashes in strings start an escape sequence.

    如果要包含文字反斜杠,则需要将其加倍 ('\\')。

    此外,print 不是在此处使用的正确函数 - print 是一个(名称有点糟糕)用于在交互模式下检查值的函数。它应该从不在脚本中使用。相反,使用writeLinescat 将文本输出到标准输出或文件,或使用message 创建非输出消息。

    cat("\\begin{Form}
        \\TextField[name = tableoneone, width = 10cm,
                   height = 3cm,
                   multiline=true]{}
    \\end{Form}\n")
    

    【讨论】:

    • 感谢您的意见!我用 cat、writeLines 和 Message 都试过了,但我得到了 "## [1] "TDH Notes: \n\\begin{Form}\n \\TextField[name = tableoneone, width = 10cm,\n " 在生成的 pdf 中,而不是我想要的文本框。还有其他方法吗?
    • 代码块需要有results = 'asis',才能将乳胶解释为乳胶代码,而不是文本。换句话说,你的代码块头应该看起来像{r results = 'asis'}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多