;;; init-org.el -- Org mode 配置 ;;; Commentary: ;;; 配置 Org mode 以适应 LaTeX 导出、Org Babel 语言支持以及其他功能。 ;;; Code: ;; 启用 Org mode 钩子并设置必要的参数 (add-hook 'org-mode-hook (lambda () (setq truncate-lines nil) ;; 不截断长行 (when (member "REFTEX" org-todo-keywords-1) (reftex-mode t) ;; 启用 RefTeX 模式 (and (buffer-file-name) (file-exists-p (buffer-file-name)) (reftex-parse-all))))) ;; 使用 ox-latex 包进行 LaTeX 导出 (require 'ox-latex) ;; 配置 LaTeX 导出使用 xelatex 和 minted 代码高亮 (setq org-latex-listings 'minted org-latex-packages-alist '(("" "minted")) org-latex-pdf-process '("xelatex -8bit -shell-escape -interaction nonstopmode -output-directory %o %f" "xelatex -8bit -shell-escape -interaction nonstopmode -output-directory %o %f" "xelatex -8bit -shell-escape -interaction nonstopmode -output-directory %o %f")) ;; 配置 LaTeX 导出的超链接颜色和其他属性 (setq org-latex-hyperref-template nil) ;; 禁用默认的 hyperref 设置 (setq org-latex-with-hyperref t) ;; 启用 hyperref (setq org-latex-packages-alist '(("colorlinks=true,linkcolor=blue,urlcolor=cyan" "hyperref" nil))) ;; 设置 AUCTeX 自动保存与解析 (setq TeX-auto-save t TeX-parse-self t TeX-master nil) ;; 禁用 Babel 代码执行确认提示 (setq org-confirm-babel-evaluate nil) ;; 自定义 LaTeX 类 (setq org-latex-classes nil) ;; 初始化变量以防止冲突 (add-to-list 'org-latex-classes '("cn-article" "\\documentclass[10pt,a4paper]{article} \\usepackage{fontspec} % 引入 fontspec 包 \\usepackage{xeCJK} % 引入 xeCJK 包处理中文 \\usepackage{xcolor} % 引入xcolor \\definecolor{hltextcolor}{RGB}{255, 69, 0} % 配置文本单词高亮颜色 \\definecolor{bgcolor}{RGB}{245,245,245} % 定义代码块背景颜色为浅灰色 % 设置英文字体 \\setmainfont{Noto Sans SC} \\setsansfont{Arial} \\setmonofont{Noto Sans SC} % 设置等宽字体,用于代码 % 设置中文字体 \\setCJKmainfont{Microsoft YaHei} % 设置中文主字体为微软雅黑 \\setCJKsansfont{Microsoft YaHei UI} % 设置中文无衬线字体为微软雅黑UI \\setCJKmonofont{Microsoft YaHei Mono} % 设置中文等宽字体为微软雅黑Mono % 设置段落和行距 \\setlength{\parindent}{2em} % 首行缩进 \\setlength{\parskip}{0.5em} % 段落间距 \\linespread{1.5} % 行间距 \\usepackage[cache=false]{minted} \\setminted{fontsize=\\footnotesize, breaklines, breakanywhere, bgcolor=bgcolor, frame=lines, framesep=2mm} [NO-DEFAULT-PACKAGES] [NO-PACKAGES]" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))) ;; 配置 LaTeX 导出的 minted 代码框选项 (setq org-export-latex-minted-options '(("frame" "single") ;; 代码框:阴影盒 ("frameround" "tttt") ;; 代码框:圆角 ("fontsize" "\\scriptsize") ;; 代码框字体大小 ("linenos" "true") ;; 显示行号 ("breaklines" "true") ;; 自动换行 ("numbersep" "5pt") ;; 行号与代码距离 ("xleftmargin" "1em") ;; 左边距 ("xrightmargin" "1em") ;; 右边距 ("bgcolor" "lightgray") ;; 背景颜色 ("escapeinside" "||") ;; 特殊字符 )) ;; 导出前移除 hypersetup 设置,以免显示在文档中 (defun my/org-latex-remove-hypersetup (backend) "Remove hypersetup settings in the exported LaTeX file." (goto-char (point-min)) (while (re-search-forward "hypersetup.*" nil t) (replace-match ""))) ;; 高亮字体 (defun org-latex-highlight-texttt (text backend info) "Highlight =text= with \\textcolor{hltextcolor}{\\texttt{}} in LaTeX export." (when (org-export-derived-backend-p backend 'latex) (replace-regexp-in-string "\\\\texttt{\\([^}]+\\)}" "\\\\textcolor{hltextcolor}{\\\\texttt{\\1}}" text))) (add-to-list 'org-export-filter-final-output-functions 'org-latex-highlight-texttt) (add-hook 'org-export-before-processing-hook 'my/org-latex-remove-hypersetup) ;; 配置 Org Babel 支持多种编程语言 (org-babel-do-load-languages 'org-babel-load-languages '((R . t) ;; 支持 R 语言 (emacs-lisp . t) ;; 支持 Emacs Lisp (java . t) ;; 支持 Java (matlab . t) ;; 支持 Matlab (C . t) ;; 支持 C 语言 (perl . t) ;; 支持 Perl (shell . t) ;; 支持 Shell 脚本 (ditaa . t) ;; 支持 ditaa 图形 (python . t) ;; 支持 Python (haskell . t) ;; 支持 Haskell (dot . t) ;; 支持 Graphviz dot 语言 (latex . t) ;; 支持 LaTeX (js . t) ;; 支持 JavaScript )) ;;; Org-roam 配置,用于 Org mode 笔记管理 (use-package org-roam :ensure t :custom (org-roam-directory "C:/workspace/documents") (org-roam-db-location "C:/workspace/documents/org-roam.db") :config (setq org-roam-capture-templates '(("d" "default" plain "%?" :if-new (file+head "${slug}.org" "#+title: ${title}\n") :unnarrowed t))) (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag))) (org-roam-db-autosync-mode) (require 'org-roam-protocol)) ;; 在创建 org-mode buffer, 自动添加 latex class 解决生成中文pdf 问题 (eval-after-load 'autoinsert '(define-auto-insert '(org-mode . "Chinese Org skeleton") '("Description: " "#+LATEX_CLASS: cn-article\n" "#+LATEX_CLASS_OPTIONS: [oneside,A4paper,12pt]\n"))) (auto-insert-mode) (setq auto-insert-query nil) ;; 设置打印选项 (setq ps-paper-type 'a4 ps-font-size 16.0 ps-print-header nil ps-landscape-mode nil) ;; 解除 org-mode 中 C-, 快捷键的绑定 (add-hook 'org-mode-hook (lambda () (local-unset-key (kbd "C-,")))) ;; Org mode 操作的 Hydras 配置 (defhydra hydra-org-operations (:color blue :hint nil) " ^节点^ ^^^^^^^^^----------- _f_: 查找节点 " ("f" org-roam-node-find "查找节点")) ;; 提供 init-org 模块 (provide 'init-org) ;;; init-org.el ends here