使用 RMarkdown 和 knitR 时使用左引号

使用 RMarkdown 和 knitR 时使用左引号

通常,当您想在 LaTeX 中使用左引号时,请输入以下内容:

``

但是在 RMarkdown 中,当您在同一行输入两对反引号时,将触发运行一段 R 代码,从而导致 LaTeX 无法正确呈现。

例如,

``Sticks and stones may break my bones,'' he said. ``But words will never hurt me.''

在输出文档中将无法正确显示;具体来说,反引号括起来的内容将由 R 打印出来,而其后的所有内容将由 LaTeX 正确显示。这是一张图片:

渲染不佳

然后我尝试使用反斜杠来转义 R 代码,这让我更接近了,但是现在正确的引号被识别为一对紧挨着的单引号:

\`\`Sticks and stones may break my bones,'' he said. \`\`But words will never hurt me.''

更接近,但没有成功

如何使用 RMarkdown 在同一行上正确获取两个左引号,而不会出现这些渲染问题?

答案1

首先,你需要意识到这个事实:

Markdown 不是 LaTeX。

因此,一般来说,您不应期望 LaTeX 语法在 Markdown 文档中有效。在 Markdown 中写引号的正确方法是直接按字面意思写引号,即使用" "。当 Markdown 转换为 LaTeX(通过 Pandoc)时,它们将被转换为正确的 LaTeX 代码(即`` '')。单引号也是如此。

反引号在 Markdown 中具有特殊含义:它们用于逐字书写文本。您可以使用任意数量的反引号(一个、两个、三个……),只要反引号成对出现即可。在您的例子中,您有一对双反引号,它们将文本标记Sticks and stones may break my bones,'' he said.为逐字。

强烈推荐你读Pandoc 的 Markdown 语法 至少一次在使用 R Markdown 之前,请先了解一下。这将为您节省大量时间,并且您可能不会对 Markdown 基础知识产生疑问。

答案2

R 端修复:

这有点棘手,因为您可以执行转义正则表达式来R重新定义解释为 R 代码的内容。但是,有一个“简单”的解决方法:

重新定义如何knitr解析文件:

有点取决于文件的编织方式。这里的想法是在编织之前定义图案。

如果你在 RStudio 中,那么你可以将当前代码块重新定义为默认的 Rnw 语法。从knitr 文档.因此在 R 中:

library(knitr)
old_patterns = knit_patterns$get() # old pattern list (to restore later)
all_patterns = all_patterns # a list of all built-in patterns
str(all_oatterns) # See all the patterns
knit_patterns$set(all_patterns[["rnw"]]) # set pattern list from 
all_patterns$rnw
knit("path/to/myR.Rmd")

然而,还有一些TeX替代方案:

quickTeX 修复

创建一个新字符,例如",来表示反引号,并像这样使用它:

\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
        % Define " to be an active character
        \catcode`"\active
        % Define " to be the backtick ` like so
        \let"`
        % Now use " as if it was a back
        ""Sticks and stones may break my bones,'' he said. ""But words will never hurt me.''
\end{document}

另一个(可能)快速(可能)的解决方法:

使用包dirtytalk

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{dirtytalk}
\begin{document}
    \say{Sticks and stones may break my bones,} he said. \say{But words will never hurt me.}
\end{document}

还有另一个(可能的)解决方法:

你可以创建自己的不被 knitr 解析的外部 tex 文件:

%% quoteCommands.tex
\newcommand{\startQuote}{``}
\newcommand{\endQuote}{''}

进而

\documentclass{article}
\usepackage[utf8]{inputenc}
    \input{quoteCommands}
\begin{document}
        \startQuote Sticks and stones may break my bones,\endQuote he said. \startQuote But words will never hurt me.\endQuote
\end{document}

相关内容