我知道在 Org 模式下,像 *、~、=、+、_
这样的强调标记可以通过以下设置隐藏:(setq org-hide-emphasis-markers t)
.
我想知道是否有任何选项可以隐藏 LaTeX 的 $
或 \(
, \)
等标记?
当 LaTeX 数学方程可以通过设置突出显示时,这将很有用:
(setq org-highlight-latex-and-lated '(latex 脚本实体))
更新1
我在新的emacs -q
上尝试了@Thomas提出的解决方案,但不知何故符号$
仍然没有隐藏,而其他标记如*, +
是。\
不确定我的 Emacs 是否有问题?我正在使用 Emacs 27.1 的 Org 9.3
更新2
Thomas 的解决方案适用于 Emacs 25.2!
但不知何故,Emacs 26.2、26.3、27.1 中发生了重大变化,破坏了此功能...:(
更新3
由于 Thomas 建议的解决方案不适用于最新的 Emacs(26 或更高版本),我最终通过自定义函数 org-do-latex-and-lated
提出了一个快速解决方案组织模式。
(defun org-do-latex-and-related (_limit)
"Highlight LaTeX snippets and environments, entities and sub/superscript.
Stop at first highlighted object, if any. Return t if some
highlighting was done, nil otherwise."
(when (org-string-nw-p org-latex-and-related-regexp)
(catch 'found
(while (re-search-forward org-latex-and-related-regexp
nil t) ;; on purpose, we ignore LIMIT
(unless (cl-some (lambda (f) (memq f '(org-code org-verbatim underline
org-special-keyword)))
(save-excursion
(goto-char (1+ (match-beginning 0)))
(face-at-point nil t)))
(let* ((offset (if (memq (char-after (1+ (match-beginning 0)))
'(?_ ?^))
1
0))
(start (+ offset (match-beginning 0)))
(end (match-end 0)))
(if (memq 'native org-highlight-latex-and-related)
(org-src-font-lock-fontify-block "latex" start end)
(font-lock-prepend-text-property start end
'face 'org-latex-and-related))
;;<<<<<<<<<<<<<<<<<<<<<
;; my code starts here
(when (and org-hide-emphasis-markers (< (+ start 4) end))
(cond ((member (buffer-substring start (+ start 2)) '("$$" "\\("))
(add-text-properties start (+ start 2) '(invisible org-link)))
((string= (buffer-substring (1+ start) (+ start 2)) "$")
(add-text-properties (1+ start) (+ start 2) '(invisible org-link))))
(cond ((member (buffer-substring end (- end 2)) '("$$" "\\)"))
(add-text-properties end (- end 2) '(invisible org-link)))
((string= (buffer-substring (1- end) (- end 2)) "$")
(add-text-properties (1- end) (- end 2) '(invisible org-link)))))
;; my code ends here
;;>>>>>>>>>>>>>>>>>>>>>
(add-text-properties (+ offset (match-beginning 0)) (match-end 0)
'(font-lock-multiline t)))
(throw 'found t)))
nil)))
如果有人对此功能感兴趣,您可以在加载 Org-mode 后将上述函数放置在 Emacs 配置文件中的某个位置,以便新的 org-do-latex-and-lated
将覆盖原来的 Org-mode。
这是我使用上面的代码获得的结果:
最佳答案
另一种方法是根本不隐藏 $ 符号,而是使用 org-fragtog 。当光标进入和退出时,它会自动切换组织模式 latex 片段预览。
但是,当您打开包含方程的文件时,它只会在光标进入和离开方程时切换方程的预览。我还有一个用于 org-latex-preview 的键绑定(bind) (f5)。如果我打开一个包含许多方程的组织模式文件,我可以输入 C-u C-u f5
来切换缓冲区中所有方程的 latex 预览。如果我想改变一些方程,我只需将光标移到那里,org-fragtog-mode
就会关闭预览。然后我可以编辑方程,光标离开方程时,预览将再次自动启用。
当 org-highlight-latex-and-lated
设置为任何可能的选择以及使用 prettify-symbols-mode 时,这也可以正常工作。
关于emacs - 在 Emacs Org 模式下突出显示 LaTeX 方程时如何隐藏符号 $?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63870998/