如何解决在Emacs Org模式下突出显示LaTeX方程时,如何隐藏符号$?
我知道在组织模式下,*,~,=,+,_
这样的强调标记可以通过以下设置隐藏:(setq org-hide-emphasis-markers t)
。
我想知道是否有任何选项可以隐藏LaTeX的$
或\(
,\)
等标记?
当通过设置来突出显示LaTeX数学方程式时,这将很有用:
(setq org-highlight-latex-and-related '(latex script entities))
更新1
我尝试了@Thomas在崭新的emacs -q
上提出的解决方案,但是以某种方式$
仍然没有被隐藏,而其他标记如*,+
却被隐藏了。 \
不确定我的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。当光标进入和退出时,它会自动切换组织模式乳胶片段预览。
但是,当您打开包含方程式的文件时,它将仅在光标进入和离开方程式时切换方程式的预览。我还有一个echo
的快捷键(f5)。如果我打开包含许多方程式的组织模式文件,则可以键入org-latex-preview
来切换缓冲区中所有方程式的胶乳预览。如果要更改某些方程式,只需将光标移到该位置,C-u C-u f5
将关闭预览。然后,我可以编辑方程式,然后光标离开方程式,预览将再次自动启用。
当org-fragtog-mode
设置为任何可能的选项以及使用prettify-symbols-mode时,这也可以正常工作。
自定义变量INSTEAD OF INSERT
,并将org-emphasis-alist
添加为具有所有自定义选项默认值的附加制造商。为此,请输入
$
然后转到自定义缓冲区的底部,单击最后一个M-x customize-variable [RET] org-emphasis-alist [RET]
,然后在INS
下插入一个美元符号。
最后,单击Marker character:
,使此更改永久保留,仅适用于当前编辑会话,也适用于所有以后的会话。
注意,您必须再次输入State
重新启动组织模式,才能使更改生效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。