【问题标题】:html tags in an R markdown document compiled to pdf编译为 pdf 的 R markdown 文档中的 html 标签
【发布时间】:2016-01-14 22:50:45
【问题描述】:

我正在尝试使用 R Markdown 创建 pdf 文档,但在使用某些 html 标签时遇到了问题。比如R markdown文档

---
output: pdf_document
---

<pre>
code1
</pre>

<code>
code2
</code>

<pre><code>
code3
</code></pre>

编译给出

code2

当想要的输出是

code1
code2
code3

code3 提供了一些不错的格式。但是如果我编译成html(output: html_document而不是元数据中的output: pdf_document),问题就解决了。

我正在使用以下引擎在 Mac 上使用 TexShop 进行编译。

#!/bin/bash
/Library/Frameworks/R.framework/Versions/Current/Resources/bin/Rscript -e "rmarkdown::render(\"$1\", encoding='UTF-8')"

我怀疑我在编译为 pdf 时不允许使用某些 html 标签,但我找不到任何关于此的指南。

【问题讨论】:

  • 当 Markdown 有自己的标记代码方式时,您是否有理由为此使用原始 HTML?
  • 我可以用 2 组每组 3 个反引号来绑定代码,但我不喜欢审美,而且我无法控制样式。
  • Markdown 标准如何:缩进代码块?
  • 缩进块对我来说编译相同。

标签: r markdown knitr


【解决方案1】:

请务必记住,PDF 格式不是 HTML,而且对 HTML 标记一无所知。将文档转换为 PDF 时,需要将文档的每一部分转换为其对应的 PDF 实体。因此,当您在文档中引入非标准的原始 HTML 时,转换器很容易被混淆。

当然,转换器在后台的工作方式也会对输出产生一些影响。例如,如果您使用的工具将 Markdown 转换为 HTML,然后将该 HTML 转换为 PDF,则原始 HTML 可能有更好的机会被正确映射。但是,如果该工具直接从解析树(标记列表)到输出格式,那么它可能对原始 HTML 一无所知(除非它也是一个 HTML 解析器)。关键是使用原始 HTML 会在转换为 PDF 时增加另一个潜在的失败层。我的建议是在您缩进转换为 PDF 时尽可能避免它(请记住,Markdown 最初旨在仅输出 HTML)。

事实证明,Markdown 已经提供了一种(或两种;取决于您使用的实现方式)标记代码块的方法:indented code blocks(可能还有围栏代码块)。有趣的是,它们输出的 HTML 与您发现可以工作的原始 HTML 相同。也许这应该提供一个线索,表明您尝试的其他两种可能性无效。

事实上,HTML 规范非常清楚代码块必须包含在&lt;pre&gt;&lt;code&gt; 标记中。 &lt;pre&gt; 标签是块级标签,因此不需要包裹在任何父标签中。但是,&lt;pre&gt; 标记不会将其内容标识为“代码”。因此,绝不能假定它包含“代码”本身。另一方面,&lt;code&gt; 标签不是块级标签。它必须由块级标签(如&lt;pre&gt;&lt;p&gt;...)包装。 &lt;code&gt; 标签是唯一将内容标记为“代码”的标签。因此,在 HTML 中标记代码块的唯一有效方法是将其包装在 &lt;pre&gt;&lt;code&gt; 标记中。事实证明,当你这样做时,它会起作用。因此,我的结论是转换器被无效的 HTML 混淆并且失败(应该如此)。

因此,总而言之,要么使用原生 Markdown 方法来标记代码,要么,如果您必须使用原始 HTML,则坚持使用有效的 HTML。

【讨论】:

  • 您已经彻底回答了我最初的问题。不过,我对 pdf 输出的外观并不满意。不幸的是,我不能总是使用 HTML,而且我偶尔想用 R 以外的语言显示代码。stackoverflow.com/questions/34815357/… 有我的后续问题。
猜你喜欢
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
相关资源
最近更新 更多