【问题标题】:Making knitr code blocks more cleanly cut-and-pastable使 knitr 代码块更清晰地剪切和粘贴
【发布时间】:2013-05-09 18:06:15
【问题描述】:

我想使用 knitr 生成 pdf 文档,从中可以干净地剪切和粘贴示例代码,但似乎不能。

我遇到的问题的一个例子:

knitr manual pdf 包含此代码块 (p.3):

## option tidy=TRUE
for (k in 1:10) {
j <- cos(sin(k) * kˆ2) + 3
print(j - 5)
} 

当从 pdf 复制然后粘贴到 R(或 SO 等)中时,它会产生:

## option tidy=TRUE
for (k in 1:10) f j <- cos(sin(k) * kˆ2) + 3
print(j - 5)
g 

看看前两个代码行是如何组合成一个的,更糟糕​​的是,{} 被转换为 fg

我的问题:

首先,我想,这是其他人经历过的事情吗?它是仅在 Windows 上发生,还是在其他地方也发生?

如果不只是我,是否有一些简单的解决方法?编译*.tex 文件时使用不同的字体会生成更容易复制和粘贴的*.pdf 文档吗?

(FWIW,如果我改用 minted 来突出显示我的 R 代码,我没有任何相同的问题,所以我知道它是 可能 解决这个问题。)

【问题讨论】:

  • (我现在看到这个可能对于 tex.stackexchange 来说是一个更合适的问题。不过,将它留在这里,因为似乎 knitr 的 R 代码可能是导致上面显示的行为。)
  • 我在我的 Mac 上也经历过同样的事情。我认为这也可能取决于您要粘贴到的文本编辑器。
  • @Carson -- 感谢您的确认!粘贴到 Emacs、WinEdt、NotePad 和 TextPad 对我来说也失败了。粘贴到 WordpPad 中确实会产生括号,但它们看起来很奇怪。我怀疑 pdf 文件中的括号没有表示为 ASCII 字符,而是表示为只有某些文本编辑器才能理解的其他非 ASCII 编码中的字符。
  • 你试过 xelatex 或 luatex 编译文档吗?听起来像是字体问题
  • @baptiste -- 我想我刚刚想通了(是的,这是字体问题)。将立即发布我的修复。 (顺便说一句,从 knit'ed pdf 粘贴到 R 时,您是否遇到过同样的问题?)

标签: r knitr


【解决方案1】:

根据this question and its accepted answer中的线索,我发现使用LaTeX fontenc包将字体编码设置为T1可以解决上面报告的问题。 (See also here 解释了为什么使用 T1 或多或少是官方推荐的各种 LaTeX 文档的最佳实践。改进的复制和粘贴性是该链接中提到的几个很好的原因之一。)

固定文档中序言的开头如下所示:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}

【讨论】:

  • hmm...我不知道,虽然我在 knitr-manual.Rnw 中有 \usepackage[T1]{fontenc},它是由 LyX 自动添加的 :)
  • @Yihui -- 有趣。我想这是一个很好的默认编码的更多证据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
相关资源
最近更新 更多