emacs 笔记问题(数学、物理),希望大家不吝赐教 (预览以及插入问题)。

我是一名学生,自从了解到emacs之后,尤其是org-mode,就十分喜欢。希望用这个记录自己的学术与生活。但是在使用的过程中遇到了一些问题:

一是org-mode里图片的插入并不是十分方便,经常需要先保存图片到本地再插入。org-download 我一直没有配置成功。同时我希望再org里编辑时能观看源码,而不是插入图片后只能看到图片的标题。

二是预览的效果不尽人意。尤其是org-mode导出latex-pdf,过程十分缓慢,难以缓解。即使我利用emacs写markdown,似乎也没有比较理想的预览方案。

请问大家对于以上问题有什么解决办法,或者自己的经历吗?希望大家能够分享,让我学习学习。

1 个赞

既然是数理方向,个人经验,与其折腾这些不如直接写 TeX……

2 个赞
(setq org-download-image-dir "~/pic")
(setq org-download-screenshot-method 'screencapture)
(setq org-download-abbreviate-filename-function 'expand-file-name)
(setq org-download-timestamp "%Y%m%d%H%M%S")
(setq org-download-display-inline-images nil)
(setq org-download-heading-lvl nil)
(setq org-download-annotate-function (lambda (_link) ""))
(setq org-download-image-attr-list '("#+NAME: fig: " "#+CAPTION: " "#+ATTR_ORG: :width 500px" "#+ATTR_LATEX: :width 10cm :placement [!htpb]" "#+ATTR_HTML: :width 600px"))
(setq org-download-screenshot-basename ".png")
(add-hook 'org-mode-hook 'org-download-enable)

以上是我的 org-download 配置,我一般使用 org-download-clipboard这个命令保存图片,其他的方式很少用。

预览的话,如果只是预览公式,我使用 math-preview (如果你使用linux,推荐你使用eaf),如果要临时导出看,我会看导出html看一下。如果要导出pdf,那么不要写过大的org文档(或局部编译),编译会很慢。有两个方式可以试试,第一,只编译一遍,最终导出pdf的时候再编译四遍。第二,在导言部份加入下面一行:

#+LATEX_HEADER: \special{dvipdfmx:config z 0}

这样导出pdf时不会压缩pdf文档,速度会快一点。

1 个赞

直接用obsidian转pdf,非常好用

可能有点跑题…我之前试过用 Org-mode/Markdown 作笔记, 也遇到类似问题, 一是输入慢 (公式多的时候), 二是预览不方便. 后来发现还是手写最合适 :expressionless:. 但是有时候又想电子化保存下来, 所以现在正考虑买台 ipad 或者大屏电纸书之类, 笔记可以直接导出 PDF 然后人工加个索引.

预览使用 xenops,输入一个公式就可以立即预览,不用编译成pdf

1 个赞

插入图片这个事,如果你是用的windows环境,我就比较有发言权了,可以用命令行调用剪贴板 ,我写了几行函数

(defun org-screenshot-on-windows10 ()
  (interactive)
  (setq full-file-name (file-name-sans-extension (file-name-nondirectory buffer-file-name)))
  ;; 如果文件名的长度小于14,放到mainImage文件夹下面
  (if (< (length full-file-name) 14)
      (setq before-file-name-part "main")
    ;;否则,判断文件中是否含有中文(专门给org roam做的优化,不通用,但是也不想改了)
    (if (string-match "\\cc" full-file-name)
        (setq before-file-name-part  (substring (file-name-sans-extension (file-name-nondirectory buffer-file-name)) 0 14))
      (setq before-file-name-part (substring (file-name-sans-extension (file-name-nondirectory buffer-file-name)) 15))))
  
  (setq imagefile (concat "./" before-file-name-part "Image/"))
  (unless (file-exists-p imagefile)
    (make-directory imagefile))
  (setq filename (concat (make-temp-name (concat imagefile
                                                 "_"
                                                 (format-time-string "%Y%m%d_%H%M%S_")))
                         ".png"))
  (shell-command (concat "powershell -command \"Add-Type -AssemblyName System.Windows.Forms;if ($([System.Windows.Forms.Clipboard]::ContainsImage())) {$image = [System.Windows.Forms.Clipboard]::GetImage();[System.Drawing.Bitmap]$image.Save('"
                         filename "',[System.Drawing.Imaging.ImageFormat]::Png); Write-Output 'clipboard content saved as file'} else {Write-Output 'clipboard does not contain image data'}\""))
  (insert (concat "[[file:" filename "]]"))
  (org-display-inline-images))
1 个赞

预览的话,如果使用latex进行编译的话,别想了,啥都这么慢,但是你可以选择使用 org-latex-preview 临时查看图片,相当于编译图片到orgmode里,

一般来说导出PDF就是准备归档了,不会频繁的改动,慢就慢吧,出去喝个咖啡

手写是最方便的,但是存在各种问题,(比如 字太丑,难更改)

输入慢是因为没有练出来,有两个包 cd-latex 和 laas 如果用上了之后能赶上老师讲课的速度,号称最快的latex公式输入器

这是我的 org-download 配置

  (use-package org-download
    :ensure t
    :defer t
    :bind (("C-S-y" . org-download-screenshot)
	   ("C-S-p" . org-download-clipboard))
    
    :config
    (setq-default org-download-image-dir "./images/")
    (add-hook 'dired-mode-hook 'org-download-enable))

需要注意的是 Ctrl + Shift + y 不知道为什么不起作用,需要插入图片的时候先复制图片内容,再 Ctrl + Shift + p,会在当前目录下新建一个 images 目录保存图片

预览方面我没怎么折腾过,这是配置

  (setq org-startup-indented t
	org-export-preserve-breaks t)
  )

一个是编辑时候自动缩进,一个是导出的时候不用按两下空格才渲染下一行

试用过xenops,有个问题一直没解决,就是字体颜色。使用暗色背景的时候,xenops生成出来的图片是png格式的,背景色透明,字体颜色则是黑色,这样一来就完全看不清楚了。

目前还是在用org-fragtog,每当离开一个公式环境时会生成相应图片的缓存,会卡顿一下;除此以外倒是没什么问题了,如果能解决这个顿卡问题,把生成图片的过程放到后台,不要冻结当前的操作就完美了。

我用的时候没有遇上字体颜色的问题,预览的公式和正文颜色一致

配置用的是 doom emacs,xenops 安装后直接使用,没有进行过额外设置

记理科笔记用Orgmode已经足够,记笔记的时候不需要过于在意排版问题,注意好层次以及富文本标记即可。

如果想要参考一下怎样记笔记,可以看一下 Gilles Castel 的系列博客: https://castel.dev,只不过人家使用 Vim 手写 tex,用 Emacs 的话就可以写 Org 然后输出TeX, 轻松了不止一点半点。

如果觉得公式输入效率不高的话可以使用 yasnippet 等模板系统大幅度提高输入效率。我的org-mode光是公式输入就已经有将近400个模板了,平时输入速度基本可以做到和手写齐平。

至于图片的话论坛里有很多大佬分享了自己的解决方法,比如pasteex-mode等等。网上也能找到一些比较好用的elisp代码,比如我现在还在用的一个一键截图插入的函数:


;;    ros - Rahul's Org-Mode Screenshot
;;
;;    ros is invoked with "M-x ros", then it waits for your selection, takes a
;; screenshot and saves it as orgfileopened.org_YYYYMMDD_hhmmss.png.
;;
;;    Finally, it keeps working by inserting a link and turning ON the
;; display-inline-images, showing the taken screenshot directly into
;; your file.
;;
;;    Track updates, contact the author and see a demo on github.com/Lionyx/ros
;; or http://rahuljuliato.com
;;
(add-hook 'org-mode-hook
	  (lambda ()
	    (defun ros ()
	      (interactive)
	      (if buffer-file-name
		  (progn
		    (message "Waiting for region selection with mouse...")
		    (let ((filename
			   (concat "./"
				   (file-name-nondirectory buffer-file-name)
				   "_"
				   (format-time-string "%Y%m%d_%H%M%S")
				   ".png")))
		      (if (executable-find "scrot")
			  (call-process "scrot" nil nil nil "-s" filename)
			(call-process "screencapture" nil nil nil "-s" filename))
		      (insert (concat "[[" filename "]]"))
		      (org-display-inline-images t t)
		      )
		    (message "File created and linked...")
		    )
		(message "You're in a not saved buffer! Save it first!")
		)
	      )
	    )
	  )

预览的话不知道你是想预览什么,如果是想预览公式的话 org 有 org-latex-preview (C-c C-x C-l),对我来讲不需要经常渲染预览整个文档,org-mode的显示搞的漂亮一些,用类似 org-bars, org-num 之类的minor mode,再设置一下各种face, 编辑体验就上去了,不需要经常预览渲染出来的文档,甚至不用渲染,直接在org-mode里面看更方便。

而且也可以设置 LaTeX 导出 PDF 文档或者导出带样式的HTML文件的模板,可以发给别人或者放到云服务器上闲暇时用手机浏览复习。

综上,用 Orgmode 记笔记是可以非常舒服的,多多了解并利用前人的经验并自己根据实际情况修改创新,便可以达到事半功倍的效果。

5 个赞

我这里使用xenops就非常的奇怪

我目前用的主题是modus-vivendi

EDIT: 似乎真的是主题的问题,切换到tango-dark就正常了

去读一下xenops获取前后景色的代码试试看下

似乎这个在windows上并不能正常工作

不知道为什么 在windows上org-latex-preview并不能正常工作

org-compile-file: File “c:/Users/…/AppData/Local/Temp/orgtexrRiG9R.dvi” wasn’t produced. Please adjust ‘dvipng’ part of ‘org-preview-latex-process-alist’. mouse-minibuffer-check: Minibuffer window is not active

latex之类的在你的path中吗?

我在path中添加了 “d:/texlive/2022/bin/win32”

在emacs里检查也有这个path

找到导出的.tex缓存的目录,单独去编译看看具体报什么错,我估计可能是编译参数缺少

-shell-escape

的问题

排查下来确实是xenops的问题,我也提了issue给xenops,排查的过程中还一度以为是theme的问题,错误地给modus-theme提了issue,prot大佬真是非常nice,帮忙测试、定位了问题。

目前是只要default字体的background是"black",相应的svg就会被渲染上错误的背景色;如果用png,问题就没了。关于这个问题我试着读了xenops的源码,感觉它获取前后景色的代码是正确的,但是emacs当中渲染svg相关的部分我实在不懂,只能暂时先提issue希望原作者能修一下了。

另一个问题是,xenops有个比较奇怪的地方,对于行间公式,比如

正常地渲染并没有问题

图片

但是再将光标移动上去,回车reveal之后:

预览的公式仍然存在,同时\end{equation*}的部分没有了。