Я экспортирую файлы в режиме org довольно часто, и почти во всех них есть код. Когда я делаю экспортный код, он заканчивает окраску текста в зависимости от моей темы, однако я регулярно переключаюсь между темной и светлой темами. В случае светлой темы у <code>
блоков должен быть светлый фон, а для темной темы у них должен быть темный фон (в противном случае я получаю светло-желтый текст на сероватом фоне, и он не читается).
Я должен добавить эту строку для темных фонов:
#+HTML_HEAD: <style>pre.src {background-color: #303030; color: #e5e5e5;}</style>
И затем не забудьте удалить его каждый раз, когда я переключаюсь на светлый фон
Есть ли способ, которым я могу автоматически определить цвет фона текущей темы во время экспорта и использовать его в CSS экспортированного HTML?
РЕДАКТИРОВАТЬ
Я иду с ответом Джордона (спасибо Джордон, вы получаете очки кармы!), Однако я хотел опубликовать решение, которое в итоге добавил к своему коду, поскольку это была слегка измененная версия его ответа:
(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
), я не хочу перезапускать Emacs с отдельной темой только для экспорта HTML, что я делаю много раз в день.
org-html-head-extra
добавляются элементы, что приводит к неограниченному росту, хотя функциональность стиля не пострадает.