knitr Markdown 在 Emacs 中突出显示?

Posted

技术标签:

【中文标题】knitr Markdown 在 Emacs 中突出显示?【英文标题】:knitr Markdown highlighting in Emacs? 【发布时间】:2013-05-10 03:51:23 【问题描述】:

在 Emacs 中打开 knitr markdown 文档时,是否对现有工具或新工具进行了语法高亮(颜色)R 代码块的修改?

我正在查看的 knitr 块是三重反引号块 [```],其中包含 R 代码。

编辑:到目前为止我尝试过的事情:

- Ubuntu 12.04 与 Emacs 23

emacs --version
GNU Emacs 23.3.1

1.多模

https://github.com/vitoshka/polymode/issues/3

我试图让 polymode 语法高亮我的 Rmd 文件,但它抱怨“颜色”加载文件:

cd ~/.emacs.d
git clone https://github.com/vitoshka/polymode.git

在我的 .emacs 文件中:

(add-to-list 'load-path "/home/avilella/.emacs.d/polymode/")
(add-to-list 'load-path "/home/avilella/.emacs.d/polymode/modes/")

;; Require any polymode bundles that you are interested in:

(require 'poly-R)
(require 'poly-markdown)

评估缓冲区:

Cannot open load file: color

-CentOS 使用 Emacs 24:

emacs --version
GNU Emacs 24.2.1

1. Polymode 安装正确

打开一个 Rmd 文件,M-x polymode-minor-mode,语法高亮没有变化。


emacs --version
GNU Emacs 24.3.1

1. Polymode 安装正确

打开一个 Rmd 文件,M-x poly-markdown+r-mode,开始出现一些语法高亮显示,但我需要手动修改每个三勾代码块中的测试,以使其完全显示语法。

第二张图片是在 knitr 块之前键入 Return 之后。

【问题讨论】:

我很想知道答案。一直有传言说 ESS 家伙会解决这个问题,但我还没有看到... 我家里有一些基本可以用的东西。它基于 mumamo-mode 和 markdown-mode。不过,我必须对 mumamo-mode 进行一些更改才能使其正常工作,此处解释为:bugs.launchpad.net/nxhtml/+bug/626039/comments/5。回家后我会在这里跟进并给出答案,并记住我做了什么。 维塔莉的polymode: github.com/vitoshka/polymode怎么样 @daroczig -- 有趣。知道他在 README 的 Warning! 部分中所说的“没有识字的编程后端”是什么意思吗? @JoshO'Brien 在 Vitalie 的 ess-help 公告中,他澄清了他的意思:“Rnw 只是一个多模态。我所说的识字编程后端是一种可以将文件处理/转换为别的东西。比如 knitr 或 org-mode。这些天我将在 R 相关的多模式地图中挂上 ess-swv-weave 和 ess-swv-PDF。暂时应该没问题,因为 knitr 足够聪明,可以识别它的东西正在处理。” 【参考方案1】:

你的问题

首先,你说你有 GNU Emacs 23.3.1,但在 polymode readme.md 中,它写着:

使用 Emacs 24.3.1 和 24.4.5 测试。

至于你的错误:“无法打开加载文件:颜色”,在polymode.el,有一行:

(require 'color)

这个包在 Emacs 24 中,但它很可能在你的版本中丢失。

解决方案

    升级到 Emacs 的最新(因此受支持)版本。

    将polymode.zip 解压到你保存 Emacs 材料的目录中,例如:

    ~\conf\emacs
    

并将生成的 polymode-master 目录更改为 polymode

    将此添加到您的初始化文件中(如果您在上面使用了不同的名称,请相应地更改下面的名称):

    ;; Just an Emacs personal dir containing polymode packages etc.
    (setq MY-EMACS  "~/conf/emacs") 
    
    (defun my-emacs  (subfolder)
    "Get path to personal dir + subfolder"
    (concat (expand-file-name MY-EMACS) "/" subfolder))
    
    ;; ESS Markdown
    ;; -------------
    (defun rmd-mode ()
      "ESS Markdown mode for rmd files"
      (interactive)
      (setq load-path 
        (append (list (my-emacs "polymode/") 
                  (my-emacs "polymode/modes/"))
            load-path))
      (require 'poly-R)
      (require 'poly-markdown)
      (poly-markdown+r-mode))
    
    ;; Wrap line in markdown. Comment if you don't dislike words cut in the middle
    (add-hook 'markdown-mode-hook (lambda () (visual-line-mode 1)))
    
    ;; Let you use markdown buffer easily
    (setq ess-nuke-trailing-whitespace-p nil)  
    

    Meta+rmd 当 Rmd 文件打开或在<!-- Local Variables: --> 中设置模式时 ...享受生产力的巨大变化。

PS 不要忽略最后一条 elisp 行。它将允许正确保存降价。否则,当您重新打开文档时,您会遇到令人不快的意外。

Windows 用户须知

如果你是 Linux 人,请跳过这个,但是,尽管问题提到了 Ubuntu,但我的回答也完全适用于 Windows Emacs。只是关于:

第 2 步)您将在以下位置提取 polymode.zip:

%USERPROFILE%\conf\emacs

如您所料,环境变量 %USERPROFILE% 包含您的用户配置文件目录的路径。如果您不确定它是什么,请在 CLI 提示符下执行 set USERPROFILE。 作为 Windows 用户,您可能习惯于在 My Documents 中存储东西。在这种情况下,您的目录将是:

%USERPROFILE%\Documents\conf\emacs

第 3 步)如果在第 2 步)中您使用了路径 %USERPROFILE%\Documents\conf\emacs,则相应地更改第一行代码:

(setq MY-EMACS  "~/conf/emacs") 

到(注意斜线):

(setq MY-EMACS  "~/Documents/conf/emacs") 

在这两种情况下(有和没有“我的文档”),您可能更喜欢 Windows 风格:

(setq MY-EMACS (substitute-in-file-name "$USERPROFILE/Documents/conf/emacs")) 

【讨论】:

【参考方案2】:

这可能会有所帮助:http://sjp.co.nz/posts/emacs-ess-knitr/

通过 ESS 在 Emacs 中进行 Knitr 降价

【讨论】:

对不起,这个参考是错误的。目前,Emacs-ESS 没有 highlighting 用于 Rmd 文档甚至是简单的降价(顺便说一下,您的链接文章并没有这样声明)。至于前者,您需要 polymode,而后者则需要 markdown.el。另外,如果你只想将 ESS 引擎从 Sweave 切换到 knitr(不高亮!),则无需阅读本文的所有复杂内容,只需在 init 文件中添加 (setq ess-swv-processor 'knitr) 即可。

以上是关于knitr Markdown 在 Emacs 中突出显示?的主要内容,如果未能解决你的问题,请参考以下文章

使用knitr和pandoc转换为PDF时markdown中的图形位置

使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象

R Markdown、Knitr、Pandoc和Bookdown之间的关系

在 R-Markdown 中使用 knitr 和 kableExtra 的表格单元格中的乳胶公式或符号,

在 Emacs 缓冲区中渲染 Markdown

markdown 在OS X上使用XWidget Patch构建Emacs 27