Dex*_*nan 6 markdown latex r pandoc r-markdown
我正在将 R markdown 编织为 PDF。我在图中的标签之一包含表达式 $\\times10^23$。
\n---\ntitle: "Untitled"\noutput: pdf_document\ndate: "2023-06-24"\n---\n\n```{r setup, include=FALSE}\nknitr::opts_chunk$set(echo = TRUE)\n```\n\n## R Markdown\n\n```{r}\nplot(1, type="n", ylab=expression(paste("Count (\\u00d7",10^23/L,")")))\n```\n\n
Run Code Online (Sandbox Code Playgroud)\n然而,knitted PDF 显示不同的符号 10^23 和 10\xcb\x8623。由于这个不同的 Unicode 符号,复制代码将返回错误。
\n\n感谢您的任何评论。
\n由于我不完全理解的原因(见下文),为我解决这个问题的是使用 xelatex (或 lualatex)作为引擎来编译.tex
为 pdf 的引擎。
RStudio 中有一个设置,据说可以在 中进行全局设置Tools > Global Options ...
,在左侧窗格中选择“Sweave”,然后将“使用:将 LaTex 排版为 PDF”旁边的下拉列表更改为“XeLaTeX”。
在为我编译 R Markdown 文件时,更改该设置实际上并没有改变任何内容(默认值仍然是 pdflatex),但我可以通过替换output: pdf_document
为以下内容来在文件的 YAML 标头中指定乳胶引擎:
output:\n pdf_document:\n latex_engine: xelatex\n
Run Code Online (Sandbox Code Playgroud)\n从标头中包含此内容的文件生成的 pdf 应该在 R 代码块(以及其他位置)中具有预期的插入字符。
\nR Markdown 输出为 pdf,首先运行 R 代码并收集输出(通过函数knit()
),然后使用Pandoc.tex
将生成的 Markdown 转换为 LaTeX ( ) ,然后使用TeX引擎将 LaTeX 文件编译为 pdf(请参阅R Markdown 文档了解详情)。pandoc 和 TeX 引擎(甚至可能是显示文件的 pdf 程序)都可以在屏幕上最终复制的字符中发挥作用。
我们希望在输出中包含的字符(以便我们可以将其粘贴到控制台中)是 ASCII 代码 94 (^),它是一个“插入符 - 抑扬符”字符;但是我们从 R Markdown 的默认设置中得到的是 ASCII 代码 136 (\xcb\x86),这是一个“修饰符字母抑扬音重音”——换句话说,是一个下面没有字母的字符重音。不过,我不认为这是 R Markdown 的错。
\n据我所知,Pandoc 做了一些与输出中插入符号的处理方式相关的事情。特别是,潘多克:
\nr
将带有语法高亮显示的所有代码(即带有 的所有代码块的内容echo=TRUE
)Verbatim
从 LaTeX 包中放入自定义环境中favyvrb
。verbatim
环境中(LaTeX 区分大小写,因此这与环境不同)Verbatim
。\\^{}
Latex 输出中的 --- 环境内容verbatim
(即纯代码块,包括控制台输出)和数学模式 ( $...$
) 除外。\n\\^
被 Pandoc 替换\\textasciicircum
:在数学模式下不允许使用此命令,并且 Latex 引擎会生成警告,但会继续。讽刺的是,在这种情况下,pdf 中的输出是 ASCII 字符代码 136,这与 LaTeX 文档中的其他上下文不同(见下文)。\\^{}
不仅在数学模式下不允许,而且在乳胶引擎编译时会导致错误。这可能就是 Pandoc\\textasciicircum
在这种情况下使用的原因,尽管数学模式中有更好的替代方案(请参阅下面的链接)。在 Latex 中表示该字符的方法有很多种,具体取决于上下文(纯文本、逐字记录或数学模式)。有关一些选项和详细信息,请参阅“综合 LaTeX 符号列表”和此 StackOverflow 答案。
\n\\^{}
并且\\textasciicircum
通常在乳胶中呈现为“等效”表示,至少在文本模式下。但根据我的经验,情况并非总是如此。通常(但并非总是),我发现使用 pdflatex 引擎,\\^{}
会产生重音字符(ASCII 代码 136,不是我们想要的),而\\textasciicircum
会产生插入符号(ASCII 代码 94,我们想要的)。\n这对我来说很有意义,考虑到\\^{}
乳胶也使用该命令为字母添加扬抑符,通过将该字母放在大括号中作为参数(例如,\\^{o}
生成“\xc3\xb4”)。因此,如果没有参数,该命令的语义就是不带字母的重音。
我还知道 XeTeX 和 luaTeX 处理输入编码和字体的方式与 pdfTeX 不同。更改 TeX 引擎会导致输出中出现不同的字符,这一事实表明问题可能与字体有关,但也可能与它们本身处理命令的方式有关。但这就是我的知识和理解力所耗尽的地方。
\n为什么 Pandoc 将“^”替换为“ \\^{}
”而不是“ \\textasciicircum
”?我不知道,但我已经在 pandoc-discuss 邮件列表上提出了这个问题,并且在撰写本文时我正在等待回复。 编辑:这是 Pandoc 中的错误吗?
为什么 XeTeX 和 luaTeX 的渲染方式\\^{}
与 pdfTeX 不同?以我有限的经验,\\^{}
并且\\textasciicircum
会有所不同(但在“独立”文档类中则不然,我不明白为什么),但在使用 xelatex 或 lualatex 时它们都会产生相同的输出字符。
奇怪的是,“综合乳胶符号列表”中的 ASCII 代码 94(表 583)和 136(表 585)条目似乎颠倒了:根据asciivalue.com ,出现在 ASCII 字符代码 94 旁边的字符实际上是 136,并且反之亦然。但显示的字符是由所示命令生成的:即,\\^{}
生成 ASCII 字符代码 136 和\\textasciicircum
代码 94,尽管文档在表中声明了这一点。这是文档中的错误,还是 pdfLaTeX 中的错误?或者是其他东西?由于这些在功能和语义上是不同的 ASCII 字符,为什么本文档(和其他文档)声称“ \\^{}
”和“\\textasciicircum
”?是等价的?
归档时间: |
|
查看次数: |
290 次 |
最近记录: |