我配置LaTeX遇到了一个问题, 现向论坛各位寻求帮助, 情况如下:
有一个名为init-LaTeX-mode.el的配置文件, 用于配置AUCTeX, RefTeX和CDLaTeX.
问题出现在当我调用TeX-command-run-all (C-C C-a和C-c C-v快捷键调用的函数), 那么就会接连打开5个zathura.
而如果不用add-hook和函数包装, 反倒不会出现这种情况. 请问是哪里错了? 应该怎么改?
我的环境:
- Debian13
- GNU Emacs 30.1
- 来自陈斌老大的配置, 有部分修改, 配置地址在此
我是用latexmk来进行编译:
~/.latexmkrc内容如下:
$pdf_update_method = 1; # 只刷新 PDF,不重新打开
$preview_mode = 1; # 允许持续预览
$pdf_previewer = 'zathura %O %S'; # 不会重新 fork 新窗口
设置~/.latexmkrc目的是为了增量编译. 这样我可以持续使用zathura来持续预览.
函数作用:
my-auctex-setup : 设置AUCTeX
my-reftex-setup : 设置RefTeX
my-synctex-setup : 设置SyncTeX, 主要是设置pdf查看器的正向搜索和反向搜索. 也再此定义了快捷键C-c C-v调用的函数
my-TeX-run-all-no-sync: 快捷键 C-c C-v 调用的函数
my-preview-setup : 设置Unicode 预览与美化
以下函数设置了AUCTeX 和 CDLaTeX中的快捷键设置, 已知和错误无关.
my-TeX-fold-config
my-TeX-fonts-config
my-more-prettified-symbols
my-set-cdlatex-command-alist
my-set-cdlatex-env-alist
my-set-cdlatex-math-modify-alist
my-set-cdlatex-math-symbol-alist
代码如下:
;;; init-LaTeX-mode.el --- AUCTeX + latexmk + XeLaTeX + RefTeX + CDLaTeX + amsreftex + Zathura -*- lexical-binding: t; -*-
;;; Commentary:
;;; ================= AUCTeX + latexmk + XeLaTeX + RefTeX + CDLaTeX + amsreftex + Zathura =================
;; - 主要功能
;; 支持中文 -> xetex
;; 自动项目编译 -> latexmk
;; 正向/反向搜索 -> SyncTeX + ~/.config/zathura/zathurarc
;; C-c C-a不高亮 -> my-TeX-run-all-no-sync
;; C-c C-v高亮当前行 (-> SyncTeX ?) -> TeX-command-run-all -> TeX-view -> TeX-view-program-list
;; 持续预览(PVS) -> LatexMk-PVC + ~/.latexmkrc
;; org-mode中文文件可以转换成正确的LaTeX文件并通过编译 -> org-latex-classes
;; - 使用方法
;; 编译: C-c C-c -> LatexMk
;; 自动实时预览: C-c C-c → LatexMk-PVC
;; 正向搜索(PDF): C-c C-v
;; 反向搜索:在 Zathura 中按中键或 Ctrl+左键 (依 Zathura 配置)
;;; Code:
;; --- AUCTeX 配置 ---
(defun my-auctex-setup ()
(my-ensure 'tex)
(setq-default TeX-master nil
TeX-engine 'xetex)
(setq TeX-auto-save t
TeX-parse-self t
TeX-command-default "LatexMk"
TeX-PDF-mode t)
;; (add-hook 'TeX-after-compilation-finished-functions
;; #'TeX-revert-document-buffer) ;; 在完成编译后刷新 pdf 文件
;; --- latexmk 编译命令 ---
(add-to-list 'TeX-command-list
'("LatexMk"
"latexmk -xelatex -interaction=nonstopmode -synctex=1 %s"
TeX-run-TeX nil t :help "Run latexmk"))
;; (my-ensure 'auctex-cont-latexmk)
;; 可选:持续预览(PVS)
(unless (assoc "LatexMk-PVC" TeX-command-list)
(add-to-list 'TeX-command-list
'("LatexMk-PVC"
"latexmk -xelatex -interaction=nonstopmode -synctex=1 -pvc %s"
TeX-run-TeX nil t :help "Run latexmk continuously"))))
;; --- 启用RefTeX(Emacs内置) ---
(defun my-reftex-setup ()
(my-ensure 'reftex)
(my-ensure 'amsreftex)
(turn-on-reftex)
(amsreftex-turn-on)
;; 启用 RefTeX, 并集成到 AucTeX 中, 在 LaTeX 模式中自动启用 RefTeX
;; 让 RefTeX 与 AUCTeX 配合更紧密, 这是关键配置
(setq reftex-parse-all t
reftex-enable-partial-scans t ;; RefTeX 只扫描正在编辑的部分(或最近修改的部分),提高性能
reftex-save-parse-info t
reftex-use-multiple-selection-buffers t
reftex-plug-into-AUCTeX t
reftex-ref-macro-prompt nil ;; ~ref<tab>~ 后不提示类型
reftex-trust-label-prefix t
reftex-label-menu-flags '(t t nil nil t nil t t)))
;; --- SyncTeX 配置 ---
(defun my-synctex-setup ()
;; --- 启动 Emacs server (反向搜索需要) ---
(require 'server)
(unless (server-running-p)
(server-start))
(setq TeX-source-correlate-method 'synctex
TeX-source-correlate-start-server t) ;; 允许 PDF 点击跳转, 用于 SyncTeX 功能: 从 PDF 点击可以跳转到 TeX 源码
(TeX-source-correlate-mode) ;; 打开源代码关联
;; --- PDF 查看器设为 Zathura ---
(setq TeX-view-program-list
'(("Zathura-NoSync" "zathura %o")
("Zathura-Sync" "zathura --synctex-forward %n:0:%b %o")))
(setq TeX-view-program-selection
'((output-pdf "Zathura-NoSync"))) ;; 默认 C-c C-a 不使用同步
(define-key TeX-mode-map (kbd "C-c C-v") #'my-TeX-run-all-no-sync))
;; C-c C-v 使用同步
(defun my-TeX-run-all-no-sync ()
"Run TeX-command-run-all but without SyncTeX highlighting."
(interactive)
(let ((TeX-view-program-selection
'((output-pdf "Zathura-Sync"))))
(call-interactively 'TeX-command-run-all))) ;; 正确调用方式
;; 预览与美化
(defun my-preview-setup ()
;; (set-fontset-font "fontset-default" '(#x10000 . #x1FFFF) "Cambria Math" nil 'prepend)
;; 光标移动到一个被替换成符号的地方时, 暂时显示原始文本
(setq prettify-symbols-unprettify-at-point t)
(set-fontset-font "fontset-default" 'mathematical "Cambria Math")
(prettify-symbols-mode 1) ;; 预览tex文件, 把某些字符自动用 Unicode 符号显示
)
;; - my-TeX-fold-config
;; - my-TeX-fonts-config
;; - my-more-prettified-symbols
;; - my-set-cdlatex-command-alist
;; - my-set-cdlatex-env-alist
;; - my-set-cdlatex-math-modify-alist
;; - my-set-cdlatex-math-symbol-alist
;; 来自 https://gitee.com/mickey991/emacs-config/tree/master/demo-emacs-config/ELatex
(defun my-TeX-fold-config ()
(setq TeX-fold-type-list '(env macro comment)
TeX-fold-env-spec-list '(("[comment]" ("comment")) ("[proof]" ("proof")))
LaTeX-fold-env-spec-list '(("frame" ("frame")))
TeX-fold-macro-spec-list
'(("[f]" ("footnote" "marginpar"))
("[c]" ("cite"))
("[l]" ("label"))
("[r]" ("ref" "pageref" "eqref"))
("[i]" ("index" "glossary"))
("[1]:||*" ("item"))
("..." ("dots"))
("(C)" ("copyright"))
("(R)" ("textregistered"))
("TM" ("texttrademark"))
(1 ("emph" "textit" "textsl" "textmd" "textrm" "textsf" "texttt" "textbf" "textsc" "textup")))))
(defun my-TeX-fonts-config ()
(setq LaTeX-font-list
'((?m "\\textmc{" "}" "\\mathmc{" "}")
(?g "\\textgt{" "}" "\\mathgt{" "}")
(?e "\\en{" "}")
(?c "\\cn{" "}")
(?4 "$" "$")
(1 "" "" "\\mathcal{" "}")
(2 "\\textbf{" "}" "\\mathbf{" "}")
(3 "\\textsc{" "}")
(5 "\\emph{" "}")
(6 "\\textsf{" "}" "\\mathsf{" "}")
(9 "\\textit{" "}" "\\mathit{" "}")
(12 "\\textulc{" "}")
(13 "\\textmd{" "}")
(14 "\\textnormal{" "}" "\\mathnormal{" "}")
(18 "\\textrm{" "}" "\\mathrm{" "}")
(19 "\\textsl{" "}" "\\mathbb{" "}")
(20 "\\texttt{" "}" "\\mathtt{" "}")
(21 "\\textup{" "}")
(23 "\\textsw{" "}")
(4 "" "" t))))
(defun my-more-prettified-symbols ()
;; (require 'tex-mode) ; 载入 tex--prettify-symbols-alist 变量
(mapc (lambda (pair) (delete pair tex--prettify-symbols-alist))
'(("\\supset" . 8835)))
(mapc (lambda (pair) (cl-pushnew pair tex--prettify-symbols-alist))
'(;; brackets
("\\big(" . ?\N{Z notation left image bracket}) ; ⦇, #x2987
("\\bigl(" . ?\N{Z notation left image bracket}) ; ⦇, #x2987
("\\big)" . ?\N{Z notation right image bracket}) ; ⦈ #x2988
("\\bigr)" . ?\N{Z notation right image bracket}) ; ⦈ #x2988
("\\Big(" . ?\N{left white parenthesis}); ⦅ #x2985
("\\Bigl(" . ?\N{left white parenthesis}); ⦅ #x2985
("\\Big)" . ?\N{right white parenthesis}) ; ⦆ #x2986
("\\Bigr)" . ?\N{right white parenthesis}) ; ⦆ #x2986
("\\bigg(" . ?\N{left double parenthesis}) ; ⸨
("\\biggl(" . ?\N{left double parenthesis}) ; ⸨
("\\bigg)" . ?\N{right double parenthesis}) ; ⸩
("\\biggr)" . ?\N{right double parenthesis}) ; ⸩
("\\big[" . ?\N{mathematical left white tortoise shell bracket}) ; ⟬
("\\bigl[" . ?\N{mathematical left white tortoise shell bracket}) ; ⟬
("\\big]" . ?\N{mathematical right white tortoise shell bracket}) ; ⟭
("\\bigr]" . ?\N{mathematical right white tortoise shell bracket}) ; ⟭
("\\Big[" . ?\N{mathematical left white square bracket}) ; ⟦ #x27E6
("\\Bigl[" . ?\N{mathematical left white square bracket}) ; ⟦ #x27E6
("\\Big]" . ?\N{mathematical right white square bracket}) ; ⟧ #x27E7
("\\Bigr]" . ?\N{mathematical right white square bracket}) ; ⟧ #x27E7
("\\bigg[" . ?\N{left white lenticular bracket}) ; 〖
("\\biggl[" . ?\N{left white lenticular bracket}) ; 〖
("\\bigg]" . ?\N{right white lenticular bracket}) ; 〗
("\\biggr]" . ?\N{right white lenticular bracket}) ; 〗
("\\{" . ?\N{medium left curly bracket ornament}) ; ❴
("\\}" . ?\N{medium right curly bracket ornament}) ; ❵
("\\big\\{" . ?\N{left white curly bracket}) ; ⦃
("\\bigl\\{" . ?\N{left white curly bracket}) ; ⦃
("\\big\\}" . ?\N{right white curly bracket}) ; ⦄
("\\bigr\\}" . ?\N{right white curly bracket}) ; ⦄
("\\Big\\{" . ?\N{left arc less-than bracket}) ; ⦓
("\\Bigl\\{" . ?\N{left arc less-than bracket}) ; ⦓
("\\Big\\}" . ?\N{right arc greater-than bracket}) ; ⦔
("\\Bigr\\}" . ?\N{right arc greater-than bracket}) ; ⦔
("\\bigg\\{" . ?\N{double left arc greater-than bracket}) ; ⦕
("\\biggl\\{" . ?\N{double left arc greater-than bracket}) ; ⦕
("\\bigg\\}" . ?\N{double right arc less-than bracket}) ; ⦖
("\\biggr\\}" . ?\N{double right arc less-than bracket}) ; ⦖
("\\big|" .?\N{left wiggly fence}) ; ⧘
("\\bigl|" .?\N{left wiggly fence}) ; ⧘
("\\bigr|" .?\N{left wiggly fence}) ; ⧘
("\\lvert" .?\N{left wiggly fence}) ; ⧘
("\\rvert" .?\N{left wiggly fence}) ; ⧚
("\\Big|" .?\N{left double wiggly fence}) ; ⧚
("\\Bigl|" .?\N{left double wiggly fence}) ; ⧚
("\\Bigr|" .?\N{left double wiggly fence}) ; ⧚
("\\lVert" .?\N{DOUBLE VERTICAL LINE}) ; ‖
("\\rVert" .?\N{DOUBLE VERTICAL LINE}) ; ‖
("\\coloneq" .?\N{colon equal}); ≔
("\\eqcolon" .?\N{equal colon}); ≕
;; blackboard bold/double-struck
("\\Z" . ?\N{double-struck capital Z}) ; ℤ 8484
("\\Q" . ?\N{double-struck capital Q}) ; ℚ 8474
("\\N" . ?\N{double-struck capital N}) ; ℕ 8469
("\\R" . ?\N{double-struck capital R}) ; ℝ 8477
("\\PP" . ?\N{double-struck capital P}) ; ℙ #x2119
("\\HH" . ?\N{double-struck capital H}) ; ℍ
("\\EE" . ?\N{mathematical double-struck capital E}) ; 𝔼 #x1D53C
("\\mathbb{S}" . ?\N{mathematical double-struck capital S}) ; 𝕊 #x1D54A
("\\ONE" . ?\N{mathematical double-struck digit ONE}) ; 𝟙 #x1D7D9
;; bold face
("\\Pp" . ?\N{mathematical bold capital P}) ; 𝐏 #x1D40F
("\\Qq" . ?\N{mathematical bold capital Q}) ; 𝐐
("\\Ee" . ?\N{mathematical bold capital E}) ; 𝐄 #x1D404
("\\bb" . ?\N{mathematical bold small b}) ; 𝐛
("\\mm" . ?\N{mathematical bold small m}) ; 𝐦
;; calligraphy
("\\Fc" . ?\N{script capital F}) ; ℱ #x2131
("\\Nc" . ?\N{mathematical script capital N}) ; 𝒩 #x1D4A9
("\\Zc" . ?\N{mathematical script capital Z}) ; 𝒵
("\\Pc" . ?\N{mathematical script capital P}) ; 𝒫
("\\Qc" . ?\N{mathematical script capital Q}) ; 𝒫
;; san-serif
("\\P" . ?\N{mathematical sans-serif capital P}) ; 𝖯 #x1D5AF
("\\E" . ?\N{mathematical sans-serif capital E}) ; 𝖤 #x1D5A4
;; others
("\\supset" . ?\N{superset of}) ; ⊃
("\\temp" . ?\N{mathematical italic kappa symbol}) ; 𝜘, varkappa
("\\varnothing" . ?\N{empty set}) ; ∅
("\\dotsb" . 8943)
("\\dotsc" . 8230)
("\\eps" . 949))))
(defun my-set-cdlatex-command-alist ()
(setq cdlatex-command-alist
'(("lr|" "insert \\lvert ? \\rvert" "\\lvert ? \\rvert" cdlatex-position-cursor nil nil t)
("no" "insert \\lVert ? \\rVert" "\\lVert ? \\rVert" cdlatex-position-cursor nil nil t)
("eq" "insert pairs of \\[ \\]" "\\[ ? \\]" cdlatex-position-cursor nil t t)
("ce" "insert :=" "\\coloneq " nil nil nil t)
("ec" "insert =:" "\\eqcolon " nil nil nil t)
("Big(" "insert \\Bigl( \\Bigr)" "\\Bigl( ? \\Bigr" cdlatex-position-cursor nil nil t)
("Big[" "insert \\Bigl[ \\Bigr]" "\\Bigl[ ? \\Bigr" cdlatex-position-cursor nil nil t)
("Big\\|" "insert \\Big\\lVert \\Big\\rVert" "\\Big\\lVert ? \\Big\\rVert" cdlatex-position-cursor nil nil t)
("Big{" "insert \\Bigl\\{ \\Bigr\\}" "\\Bigl\\{ ? \\Bigr\\" cdlatex-position-cursor nil nil t)
("Big|" "insert \\Big\\lvert \\Bigr\rvert" "\\Big\\lvert ? \\Big\\rvert" cdlatex-position-cursor nil nil t)
("aali" "insert equation" "\\left\\{\n\\begin{aligned}\n? \n\\end{aligned}\\right." cdlatex-position-cursor nil nil t)
("alb" "Insert beamer alert block with overlay" "\\begin{alertblock}<+->{ ? } \n\n\\end{alertblock}" cdlatex-position-cursor nil t nil)
("alb*" "Insert beamer alert block without overlay" "\\begin{alertblock}{ ? } \n\n\\end{alertblock}" cdlatex-position-cursor nil t nil)
("big(" "insert \\bigl( \\bigr)" "\\bigl( ? \\bigr" cdlatex-position-cursor nil nil t)
("big[" "insert \\bigl[ \\bigr]" "\\bigl[ ? \\bigr" cdlatex-position-cursor nil nil t)
("big\\|" "insert \\big\\lvert \\big\\rvert" "\\big\\lvert ? \\big\\rvert" cdlatex-position-cursor nil nil t)
("big{" "insert \\bigl\\{ \\bigr\\}" "\\bigl\\{ ? \\bigr\\" cdlatex-position-cursor nil nil t)
("big|" "insert \\big\\lvert \\big\\rvert" "\\big\\lvert ? \\big\\rvert" cdlatex-position-cursor nil nil t)
("bigg(" "insert \\biggl( \\biggr)" "\\biggl( ? \\biggr" cdlatex-position-cursor nil nil t)
("bigg[" "insert \\biggl[ \\biggr]" "\\biggl[ ? \\biggr" cdlatex-position-cursor nil nil t)
("bigg\\|" "insert \\bigg\\lvert \\bigg\\rvert" "\\bigg\\lvert ? \\bigg\\rvert" cdlatex-position-cursor nil nil t)
("bigg{" "insert \\biggl\\{ \\biggr\\}" "\\biggl\\{ ? \\biggr\\" cdlatex-position-cursor nil nil t)
("bigg|" "insert \\bigg\\lvert \\bigg\\rvert" "\\bigg\\lvert ? \\bigg\\rvert" cdlatex-position-cursor nil nil t)
("Bigg(" "insert \\Biggl( \\Biggr)" "\\Biggl( ? \\Biggr" cdlatex-position-cursor nil nil t)
("Bigg[" "insert \\Biggl[ \\Biggr]" "\\Biggl[ ? \\Biggr" cdlatex-position-cursor nil nil t)
("Bigg\\|" "insert \\Bigg\\lvert \\Bigg\\rvert" "\\Bigg\\lvert ? \\Bigg\\rvert" cdlatex-position-cursor nil nil t)
("Bigg{" "insert \\Biggl\\{ \\Biggr\\}" "\\Biggl\\{ ? \\Biggr\\" cdlatex-position-cursor nil nil t)
("Bigg|" "insert \\Bigg\\lvert \\Bigg\\rvert" "\\Bigg\\lvert ? \\Bigg\\rvert" cdlatex-position-cursor nil nil t)
("blo" "Insert beamer block with overlay" "\\begin{block}<+->{ ? } \n\n\\end{block}" cdlatex-position-cursor nil t nil)
("blo*" "Insert beamer block WITHOUT overlay" "\\begin{block}{ ? } \n\n\\end{block}" cdlatex-position-cursor nil t nil)
("bn" "binomial" "\\binom{?}{}" cdlatex-position-cursor nil nil t)
("capl" "insert \\bigcap\\limits_{}^{}" "\\bigcap\\limits_{?}^{}" cdlatex-position-cursor nil nil t)
("case" "insert cases" "\\begin{cases}\n? & \\\\\n &\n\\end{cases}" cdlatex-position-cursor nil nil t)
("cd" "insert dotsb" "\\dotsb" nil nil t t)
("cupl" "insert \\bigcup\\limits_{}^{}" "\\bigcup\\limits_{?}^{}" cdlatex-position-cursor nil nil t)
("dd" "insert ddots" "\\ddots" nil nil t t)
("def" "insert definition env" "" cdlatex-environment ("definition") t nil)
("des" "insert description" "" cdlatex-environment ("description") t nil)
("enu*" "insert enu" "\\begin{enumerate}\n\\item ?\n\\end{enumerate}" cdlatex-position-cursor nil t nil)
("equ*" "insert unlabel equation" "" cdlatex-environment ("equation*") t nil)
("exb" "Insert beamer example block with overlay" "\\begin{exampleblock}<+->{ ? } \n\n\\end{exampleblock}" cdlatex-position-cursor nil t nil)
("exb*" "Insert beamer example block without overlay" "\\begin{exampleblock}{ ? } \n\n\\end{exampleblock}" cdlatex-position-cursor nil t nil)
("exe" "Insert exercise" "\\begin{exercise}\n? \n\\end{exercise}" cdlatex-position-cursor nil t nil)
("fra" "insert frame (for beamer)" "" cdlatex-environment ("frame") t nil)
("hhl" "insert \\ \\hline" "\\\\ \\hline" ignore nil t nil)
("hl" "insert \\hline" "\\hline" ignore nil t nil)
("ipenu" "insert in paragraph enumerate" "" cdlatex-environment ("inparaenum") t nil)
("ipite" "insert in paragraph itemize" "" cdlatex-environment ("inparaitem") t nil)
("it" "insert \\item" "\\item?" cdlatex-position-cursor nil t nil)
("ld" "insert dotsc" "\\dotsc" nil nil t t)
("lem" "insert lemma env" "" cdlatex-environment ("lemma") t nil)
("liml" "insert \\lim\\limits_{}" "\\lim\\limits_{?}" cdlatex-position-cursor nil nil t)
("lr<" "insert bra-ket" "\\langle ? \\rangle" cdlatex-position-cursor nil nil t)
("myenu" "insert in my enumerate for beamer" "" cdlatex-environment ("myenumerate") t nil)
("myite" "insert in my itemize for beamer" "" cdlatex-environment ("myitemize") t nil)
("ons" "" "\\onslide<?>{ }" cdlatex-position-cursor nil t t)
("pa" "insert pause" "\\pause" ignore nil t nil)
("pro" "insert proof env" "" cdlatex-environment ("proof") t nil)
("prodl" "insert \\prod\\limits_{}^{}" " \\prod\\limits_{?}^{}" cdlatex-position-cursor nil nil t)
("prop" "insert proposition" "" cdlatex-environment ("proposition") t nil)
("se" "insert \\{\\}" "\\{ ? \\}" cdlatex-position-cursor nil nil t)
("spl" "insert split" "" cdlatex-environment ("split") nil t)
("st" "stackrel" "\\stackrel{?}{}" cdlatex-position-cursor nil nil t)
("te" "insert text" "\\text{?}" cdlatex-position-cursor nil nil t)
("thm" "insert theorem env" "" cdlatex-environment ("theorem") t nil)
("cte" "insert citation using helm-bibtex" "" helm-bibtex-with-local-bibliography nil t nil)
("vd" "insert vdots" "\\vdots" nil nil t t))))
(defun my-set-cdlatex-env-alist ()
(setq cdlatex-env-alist
'(("definition" "\\begin{definition}\n\\label{def:?}\n\n\\end{definition}" nil)
("enumerate" "\\begin{enumerate}[?]\n\\item \n\\end{enumerate}" "\\item ?")
("equation*" "\\begin{equation*}\n? \n\\end{equation*}" nil)
("exercise" "\\begin{exercise}[?]\n\n\\end{exercise}" nil)
("frame" "\\begin{frame}{ ? }\n\n\\end{frame}" nil)
("inparaenum" "\\begin{inparaenum}\n\\item ? \n\\end{inparaenum}" "\\item ?")
("inparaitem" "\\begin{inparaitem}\n\\item ?\n\\end{inparaitem}" "\\item ?")
("lemma" "\\begin{lemma}\n\\label{lem:?}\n\n\\end{lemma}" nil)
("myenumerate" "\\begin{myenumerate}\n\\item ?\n\\end{myenumerate}" "\\item ?")
("myitemize" "\\begin{myitemize}\n\\item ?\n\\end{myitemize}" "\\item ?")
("proof" "\\begin{proof}?\n\n\\end{proof}" nil)
("proposition" "\\begin{proposition}\n\n\\end{proposition}" nil)
("theorem" "\\begin{theorem}\n\\label{thm:?}\n\n\\end{theorem}" nil))))
(defun my-set-cdlatex-math-modify-alist ()
(setq cdlatex-math-modify-alist
'((?k "\\mathfrak" "" t nil nil)
(?t "\\mathbb" "" t nil nil))))
(defun my-set-cdlatex-math-symbol-alist ()
(setq cdlatex-math-symbol-alist
'((?0 ("\\varnothing" "\\emptyset"))
(?1 ("\\ONE" "\\one"))
(?. ("\\cdot" "\\circ"))
(?v ("\\vee" "\\bigvee"))
(?& ("\\wedge" "\\bigwedge"))
(?9 ("\\cap" "\\bigcap" "\\bigoplus"))
(?+ ("\\cup" "\\bigcup" "\\oplus"))
(?- ("\\rightharpoonup" "\\hookrightarrow" "\\circlearrowleft"))
(?= ("\\equiv" "\\Leftrightarrow" "\\Longleftrightarrow"))
(?~ ("\\sim" "\\approx" "\\propto"))
(?L ("\\Lambda" "\\limits"))
(?* ("\\times" "\\otimes" "\\bigotimes"))
(?e ("\\eps" "\\epsilon" "\\exp\\Big( ? \\Big)"))
(?> ("\\mapsto" "\\longrightarrow" "\\rightrightarrows"))
(?< ("\\preceq" "\\leftarrow" "\\longleftarrow"))
(?| ("\\parallel" "\\mid" "\\perp"))
(?S ("\\Sigma" "\\sum_{?}^{}"))
(?{ ("\\subset" "\\prec" "\\subseteq"))
(?} ("\\supset" "\\succ" "\\supseteq")))))
;; 确保 AUCTeX 已经加载
(with-eval-after-load 'latex
;; 加载 CDLaTeX
(my-ensure 'cdlatex)
;; 可选:添加钩子到 LaTeX-mode
(add-hook 'LaTeX-mode-hook #'turn-on-cdlatex)
(add-hook 'latex-mode-hook #'turn-on-cdlatex)
(my-ensure 'tex-mode)
;; tex
;; 折叠 LaTeX 文档中的环境, 宏和注释
(my-TeX-fold-config)
;; LaTeX 字体映射, 字体美化
(my-TeX-fonts-config)
;; LaTeX 命令与 Unicode 符号的映射
(my-more-prettified-symbols)
;; cdlatex
;; 快捷插入的 LaTeX 宏和符号
(my-set-cdlatex-command-alist)
;; 定义快捷插入的 LaTeX 环境
(my-set-cdlatex-env-alist)
;; 定义数学模式下的字体修饰
(my-set-cdlatex-math-modify-alist)
;; 定义数学符号快捷键 `触发
(my-set-cdlatex-math-symbol-alist))
(setq my-auctex-function-list '(my-auctex-setup))
(setq my-latex-function-list
'(my-reftex-setup
my-synctex-setup
my-preview-setup))
;; AUCTeX 主模式
(dolist (my-auctex-function my-auctex-function-list)
(add-hook 'LaTeX-mode-hook my-auctex-function t))
;; LaTeX(无论是 AUCTeX 或内置)共同 hook
(dolist (my-latex-function my-latex-function-list)
(add-hook 'LaTeX-mode-hook my-latex-function t)
(add-hook 'latex-mode-hook my-latex-function t))
(provide 'init-LaTeX-mode)
;;; init-LaTeX-mode.el ends here