org-mode 缓冲区 Latex 语法高亮

Posted

技术标签:

【中文标题】org-mode 缓冲区 Latex 语法高亮【英文标题】:org-mode buffer latex syntax highlighting 【发布时间】:2013-06-18 19:45:00 【问题描述】:

我一直在使用 org-mode 发布科学笔记。我发布的大部分内容都是编译后的乳胶代码,我正在寻找一种方法来突出显示 org-mode 缓冲区中的乳胶语法。我遇到了许多使用列出的、铸造的、pygments 等显示已发布的乳胶代码的解决方案。有没有办法在 org-buffer 中显示突出显示的乳胶语法?

【问题讨论】:

您能否举例说明您在组织文档中的含义? 我认为他希望在org-mode 缓冲区中突出显示所有嵌入的乳胶代码(例如\alphaS^3\dots)。 在编辑 LaTeX 块时C-c ' 还不够吗?您想一直看到它突出显示吗? 【参考方案1】:

变量org-highlight-latex-and-related 允许您 突出显示内联数学。但是,LaTeX 片段只会以单面突出显示。

来自org-highligh-latex-and-related的文档:

Non-nil means highlight LaTeX related syntax in the buffer.
When non nil, the value should be a list containing any of the
following symbols:
  `latex'    Highlight LaTeX snippets and environments.
  `script'   Highlight subscript and superscript.
  `entities' Highlight entities.

例如:

(setq org-highlight-latex-and-related '(latex script entities))

面部org-latex-and-related 用于字体化LaTeX 片段。

【讨论】:

这不会突出显示内联数学,例如 $v\in V$。有没有办法实现这样的高亮? @AlwaysLearning 我确实观察到 $v \in V$ 被突出显示。您使用的是哪个组织模式版本? 版本 9.0.7。除了设置org-highlight-latex-and-related,我还需要设置什么吗?另外,会不会有冲突? 我只是检查了我的配置,并没有更改任何其他与乳胶相关的组织模式选项。我的版本是 9.0.9,但这已经工作了很长时间。您是否启用了任何其他可能影响 Org 模式行为的字体锁定选项?如果没有,您可能希望在 Org 模式邮件列表中发布您的问题。 即使使用emacs -q 打开.org 文件然后评估(setq org-highlight-latex-and-related '(latex script entities)),我也遇到了这个问题。【参考方案2】:

您可以将latex fragments 附在#+BEGIN_LaTeX latex#+END_LaTex latex 中以突出显示它们。它与逐字导出的source blocs (#+BEGIN_SRC LaTeX....) 不同(正如您提到的那样,可能通过 pygments 突出显示)。

它适用于环境(方程式、对齐...):

据我所知,它不适用于内联数学(如果你将整个段落括起来但你失去了使用 org-mode 的意义...)

来源:emacs.stackexchange 和 Reddit 中的此答案。

【讨论】:

【参考方案3】:

将以下内容放入您的 .emacs 配置文件中:

;; fontify code in code blocks
(setq org-src-fontify-natively t)

PS- 我不明白它默认没有启用。

【讨论】:

我已经将该变量设置为 true,并且当我的乳胶代码包含在 #+BEGIN_SRC latex #+END_SRC latex 中时,它会正确突出显示。但是我想编译乳胶代码,而不是将其显示为源代码。【参考方案4】:

您可能想尝试这样的事情。

(font-lock-add-keywords 'org-mode
        '(("\\(\\\\cite\\)" . font-lock-keyword-face)
          ("\\[[0-9]+]" . font-lock-type-face)
          ("\\s-*[a-zA-Z]+[0-9]+[a-z]" . font-lock-constant-face)))
(font-lock-add-keywords 'org-mode
        '(("\\(\\\\citep\\)" . font-lock-keyword-face)))
(font-lock-add-keywords 'org-mode
        '(("\\(\\\\citet\\)" . font-lock-keyword-face)))
(font-lock-add-keywords 'org-mode
        '(("\\(\\\\citealp\\)" . font-lock-keyword-face)))
(font-lock-add-keywords 'org-mode
        '(("\\(\\\\citeauthor\\)" . font-lock-keyword-face)))
(font-lock-add-keywords 'org-mode
        '(("\\(\\\\citeyear\\)" . font-lock-keyword-face)))

http://www.emacswiki.org/emacs/AddKeywords http://www.emacswiki.org/emacs/RegularExpression

【讨论】:

如果您在已经打开一个要字体化的缓冲区时评估这些命令,则必须执行 Mx revert-buffer 或 Mx normal-mode 以使它们在已经打开的情况下生效缓冲区。 虽然这通常是您添加字体的方式,但这是完全没有必要的,因为 org-mode 已经允许您这样做。

以上是关于org-mode 缓冲区 Latex 语法高亮的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Org-mode 内联源代码 src_lang 语法高亮?

同一文件中多种语言的语法高亮显示:StatWeave/SAS/LaTeX

.Rnw 文件 (LaTeX) 中的 knitr 语法高亮显示

用于 arXiv 的 Lua 语法高亮乳胶

Emacs Auctex 自定义语法高亮

SublimeText3:单个文件上的多种语法