emacs小白,通过ai推荐,最近想开始用emacs做数学笔记了,看了b站上金色飞贼小米的视频,收获颇丰,但是想要实现在右边实时渲染,左边的源码保持不动,这样能看着干净点
eaf markdown previewer
不用org吗
有个叫 eaf org previewer
如果你用tex或typst写笔记的话都有对应的方案. 对于tex, texpresso是一个可用的实时预览工具.
对于typst, tinymist提供了类似的工具, 你可以配合typst-preview.el使用.
我的相关配置是这样的
(use-package typst-ts-mode
:custom
(typst-ts-mode-watch-options "--open")
(typst-ts-indent-offset 2)
:hook
(typst-ts-mode . (lambda ()
(setq-local typst-preview-default-dir (project-root (project-current))
typst-preview--master-file (buffer-file-name))) ))
(defun my-typst-in-math-p ()
"如果在 typst-ts-mode 的 math 环境中则返回 non-nil。"
(interactive)
(when (derived-mode-p 'typst-ts-mode)
(let ((node (treesit-node-at (point))))
;; 向上查找父节点,直到找到类型为 "math" 的节点
(treesit-parent-until
node
(lambda (n)
(member (treesit-node-type n) '("math")))))))
(defun myfix/typst-preview--connect-browser (browser hostname)
"Open browser `BROWSER' at websocket URL `HOSTNAME'."
(let ((full-url (concat "http://" hostname)))
(pcase browser
("xwidget" (xwidget-webkit-browse-url full-url))
("default" (browse-url full-url))
("eaf-browser" (eaf-open-browser-other-window full-url))
("miniwindow"
(let* ((browse-url-generic-program (executable-find "chromium"))
(browse-url-browser-function 'browse-url-generic)
(browse-url-generic-args `("--new-window" ,(concat "--app=" full-url))))
(browse-url full-url)))
(_
(let* ((browse-url-generic-program (executable-find browser))
(browse-url-browser-function 'browse-url-generic))
(browse-url full-url))))))
(defun myfix/typst-preview-open-browser ()
"Open typst-preview browser interactively."
(interactive)
(let* ((browser-list '("miniwindow" "default" "xwidget" "safari" "google chrome" "eaf-browser"))
(browser (completing-read "Browser: " browser-list nil nil)))
(typst-preview--connect-browser browser (typst-preview--master-static-host typst-preview--local-master))))
(use-package typst-preview
:config
(setopt typst-preview-browser "miniwindow"
typst-preview-cmd-options '("--features" "html"))
(advice-add #'typst-preview--connect-browser :override #'myfix/typst-preview--connect-browser)
(advice-add #'typst-preview-open-browser :override #'myfix/typst-preview-open-browser)
)
谢谢,但是我还是想用org,这是我入门emacs的关键原因之一
那你给你的输入挂个hook, 每次输入时调用一下export方法, 然后再做下watch的实时更新就行了吧
还能这样吗,谢谢,我研究一下
我理解org就是org啦,还渲染个啥?能说下你为什么想要渲染吗?
我想可能是对 org 语法本身不够熟悉,对于实际 export 后的效果没有概念。
如果是这样,就需要知道想要导出到什么文件类型了。不同的类型,不同的渲染引擎,效果都不一样
数学笔记的话楼主应该主要是想要公式的渲染吧,其实是可以做到的,可惜似乎没看到相关的包来自动化这个过程:
主要思路应该就是用 make-indirect-buffer,两个 buffer 对应相同文字内容,分别使用不同 mode。不知道能不能让 AI 写个包来自动更新 Org-mode 样式,检测在更新 LaTeX 区块时调用 org-latex-preview,再同步一下滚动位置,这样应该就可以用了。
这完全可以的,我鼓励你简单地用 AI 开发一下,因为这个场景其他人未必有。
或许可以试试
左边Emacs编辑,右边浏览器实时预览,支持org,markdown和html
如果想要数学公式预览,有两种方式,一是使用Emacs内置的mathjax解析渲染
(setq maple-preview-render-alist '((org-mode . maple-preview-html-content)
(t . maple-preview-markdown-content)))
不过这种方式的css需要自己定义,否则样式不太好看
二是使用katex解析渲染
(add-to-list 'maple-preview-styles "https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" t)
(add-to-list 'maple-preview-scripts "https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js" t)
(add-to-list 'maple-preview-scripts "https://cdn.jsdelivr.net/npm/[email protected]/lib/index.umd.min.js" t)
(add-to-list 'maple-preview-scripts
"<script>
const markedKatexOptions = {
throwOnError: false
};
marked.use(markedKatex(markedKatexOptions));
</script>" t)
效果就如截图所示
org mode 本身就是富文本,emacs 对 org 的渲染就足够满足阅读需求,我猜你的需求是渲染数学公式,
这个项目可以看看,如果是嫌弃 org mode界面老土,可以看看
也许能帮上你

