如何在 R markdown 里输出 r pi 并前后加上小撇`

来自 赵鹏 | September 22, 2017

其实本文的标题应该是:如何在文章里显示 `r pi` 这样的文字。但是我不知道怎么把这个格式弄到标题里。所以,就这样凑合过吧。

这个问题的答案,要分几层意思来说。`r pi` 是代码格式(本博客显示为粉底红字),并且包含的`符号同样是代码格式,并且 pi 并没有被编译成 3.1415927。别看它短,这三点每个都是个坑。

这个问题在编写 R markdown 教程时常见。其实,等你明白这个问题的答案后,会发现答案并不难,难的是如何描述这个问题。我费了好大劲,都想不出一个准确描述的办法,并且在那些支持 markdown 的论坛上,我连这个小撇都输不出来,这叫人怎么问?最后我只能这么提问:

请问在输出文档里怎么显示’撇 r pi 撇’并且别让它编译出来 3.1415927?

第 1 层意思,那个小撇 `,它到底叫什么?总不能总叫“小撇”吧?

我用的是德语键盘,挪,就是上图第一行右起第二个键的上面那个小可爱。

维基百科才知道,` 的学名叫 Grave accent ,中文叫“重音符”。在程序猿的世界里,它又被称作 backquotebacktick,中文叫反引号。所以,跟这个有关的问题可以这么问:

How do I escape a backtick ` in Markdown?

或者

How to display verbatim/literal inline r code with backticks using Rmarkdown?

第 2 层意思:怎么把反引号显示出来?

如果仅仅输入个反引号 ,在同一段里后面没有了还好办,万一又出现一个反引号,就会把他俩自动配对儿,两者之间的文字当成了代码。瞧,就是上句话这个德性。

为了棒打鸳鸯不让他俩自动配对儿,那就用转义符\。输入\`,就避免反引号自动配对变代码了。

第 3 层意思,是怎么把 r 语言的输出结果显示到代码环境里。

这个就开始有点绕了。

比如,我想在Rmd 源文件里输入 pi,而输出的文档里显示 3.1415927。注意,光是输出 3.1415927 这容易,输入`r pi` 就行了,但是怎么显示成代码格式(这里是粉底红字)?在 `r pi` 外边加一层反引号是不行的。

正确的方法是: 两个反引号 + 一个空格 + 一个反引号 + r + pi + 一个反引号 + 一个空格 + 两个反引号

也就是说,两个反引号 + 一个空格 相当于更外一层的反引号。 R markdown 先看到内层的反引号,进行编译,得到 3.1415927:然后,看到外层的反引号,于是把内层的编译结果表示成代码格式。

第 4 层意思,怎么让上面那个 3.1415927 在输出文档里显示源码’r pi’,并且都在代码环境(粉底红色)里,即 r pi

方法有两种。第一种是用knitrinline_expr() 函数:`r knitr::inline_expr('pi')`

第二种是用第 3 层意思里说的方法,即 两个反引号 + 一个空格 r + 一个空格 + pi + 一个空格 + 两个反引号

牢记两个反引号 + 一个空格 = 更外一层的反引号,就稍微容易理解一点。

写到这个地方,我已经要晕车了,但是还没完。

第 5 层意思,怎么在第 4 层意思的基础上再加两个反引号,并显示成粉底红字,即

`r pi`

我现在用的方法是: `r '\x60r pi\x60'`

这个 \x60 就是反引号。相当于把反引号弄到字符串里处理。

完了吗?还没完,还有第 6 层意思。

反引号就像个俄罗斯套娃;上文你看到的结果都是渲染出来的,而实际书写的源文档,总会比你看见的外面再多一层。

写到这里,我不行了,容我扶墙出去呼吸两颗新鲜空气。

comments powered by Disqus