169 lines
6.3 KiB
EmacsLisp
169 lines
6.3 KiB
EmacsLisp
;;; 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
|