org mode latex fragment 单独编译一个字符, 比如 $A$ 时, 图片上方有较多空白, 请问如何解决?

如下图所示

Screenshot 2021-09-09 at 18.09.04

2021-09-09T00:00:00Z : 找到原因了, 是因为 org latex header 用了 \usepackage{extpfeil}, 去掉就没事儿了. 要用这个包就需要在 init 中加在 org-latex-package-alist 中, 奇怪的是 extpfeil 加在 alist 中就不会出现这种异常了. 但是不理想的是, 这样所有 org buffer 用 latex 时都会加载 extpfeil 包, 不能进行 per-buffer 的设置, 比较不爽

2021-09-10T00:00:00Z 感谢二楼的解决方案, 有两个, 都用了一下, 其中:

  1. buffer local variable 是有用的,需要加上下面的 prop line
# -*- eval: (add-to-list 'org-latex-packages-alist '("" "extpfeil" t)); -*-

就是在 buffer 打开的时候执行对 org-latex-packages-alist 的修改, 但是由于改的并不是 buffer local 变量, 因此一旦打开一次有上面的 prop line 的 buffer, 所有的 buffer 在用 latex 时都会加载 extpfeil 包

  1. #+bind keyword 无效, 无效的意思是在输出 latex fragments 的时候, 连 extpfeil 包都没加载. 可能是因为 #+bind 貌似只管 org 全文 latex export 的行为, 而不影响 latex fragments.

另外自己发现了第三个解决方案: 改数学环境字体. 具体来说我将 latex 数学改为了 math design charter 字体, 也就是在 org buffer 开头加一行:

#+latex_header: \usepackage[charter]{mathdesign}

在用了上面的数学字体之后, 我可以不用在 init 或者 prop line 中改 org-latex-packages-alist, 可以设置 per-buffer de #+latex_header: \usepackage{extpfeil}, 并且不会出现 latex fragments 中奇怪的留白

1 个赞

有一个东西叫 buffer local variable。

或者也可以这样,但是需要把org-export-allow-bind-keywords设为t

#+BIND: org-latex-package-alist (("" "extpfeil" nil nil))