我经常导出组织模式文件,并且几乎所有文件中都有代码。当我导出代码时,最终会根据主题为文本着色,但是,我会定期在深色主题和浅色主题之间切换。对于浅色主题,这些<code>
块需要具有浅色背景,对于深色主题,它们需要具有深色背景(否则,我最终在浅灰色背景上显示浅黄色文本,这是不可读的)。
我必须为深色背景添加此行:
#+HTML_HEAD: <style>pre.src {background-color: #303030; color: #e5e5e5;}</style>
然后记得在我切换到浅色背景时将其删除
有没有一种方法可以在导出时自动检测当前主题的背景色,并将其用于导出的HTML的CSS中?
编辑
我使用Jordon的答案(感谢Jordon,您得到了业障积分!),但是我想发布最终添加到我的代码中的解决方案,因为它是他的答案的稍微修改后的版本:
(defun my/org-inline-css-hook (exporter)
"Insert custom inline css to automatically set the
background of code to whatever theme I'm using's background"
(when (eq exporter 'html)
(let* ((my-pre-bg (face-background 'default))
(my-pre-fg (face-foreground 'default)))
(setq
org-html-head-extra
(concat
org-html-head-extra
(format "<style type=\"text/css\">\n pre.src {background-color: %s; color: %s;}</style>\n"
my-pre-bg my-pre-fg))))))
(add-hook 'org-export-before-processing-hook 'my/org-inline-css-hook)
这不仅设置了背景色,还设置了前景色。还将行添加到现有org-html-head-extra
设置,这样就不会意外覆盖其他HTML。我已经测试过,这对我非常有用!
disable-theme
),因此我不想为了导出HTML而不得不用单独的主题重新启动Emacs,我每天要这样做多次。
org-html-head-extra
都将附加到导出中,导致无限制的增长,尽管样式的功能不会受到损害。