[英]How to hide the symbol $ when highlighting LaTeX equations in Emacs Org-mode?
我知道在 Org-mode 中,像*, ~, =, +, _
这样的强调标记可以被这个设置隐藏: (setq org-hide-emphasis-markers t)
。
我想知道是否有任何选项可以隐藏 LaTeX 的$
或\\(
, \\)
等标记?
当 LaTeX 数学方程可以通过设置突出显示时,这将很有用: (setq org-highlight-latex-and-related '(latex script entities))
更新 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-mode 的org-do-latex-and-related
函数,想出了一个快速解决方案。
(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-related
将覆盖原来的 Org-mode。
这是我使用上面的代码获得的:
另一种方法是根本不隐藏 $ 符号,而是使用org-fragtog 。 当光标进入和退出它们时,它会自动切换组织模式乳胶片段预览。
但是,当您打开带有方程式的文件时,它只会在光标进入和离开方程式时切换方程式的预览。 我还有一个用于org-latex-preview
的键绑定(f5)。 如果我打开一个包含许多方程的组织模式文件,我可以输入Cu Cu f5
来切换缓冲区中所有方程的乳胶预览。 如果我想改变一些公式,我可以将光标移动到那里, org-fragtog-mode
将关闭预览。 然后我可以编辑方程,光标离开方程,预览将再次自动启用。
当org-highlight-latex-and-related
设置为任何可能的选择以及使用 prettify-symbols-mode 时,这也能正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.