Підсвітка синтаксису та відступ блоку вихідного коду в експортованому HTML-файлі для org-режиму


9

Коли я вставляю блок коду C всередину файлу org-mode, підсвітка синтаксису та відступ вихідного коду налаштовуються так, як я хотів.

  1. Коли я експортую його у файл html, підсвітка синтаксису у файлі html точно така ж, як у Emacs. Але виділення синтаксису краще працює з темою кольорів мого Emacs. Наприклад, {у моєму блоці коду C символ є білим, але моя кольорова тема є темною, якщо я експортую його в html, фон файлу html теж білий, це означає, що ви не можете побачити {у блоці вихідного коду експортували html навіть думали, що він є.

  2. Відступ вихідного коду є нормальним у моїх Emacs (як я його налаштував), але відступ вихідного коду в експортованому файлі html буде іншим, він додає більше пробілів для відступу.

  3. Якщо я експортую той самий файл org у emacs -q, вони експортуються у експортованому HTML-файлі, але підсвітка синтаксису та відступ вихідного коду буде defaultконфігурацією Emacs. Отже, це означає, що на конфігурації шрифтів init.elможуть вплинути org-export.

Отже, моє питання: коли я експортую файл org-режиму, який містить блок вихідного коду, у файл html (або, можливо, інші формати, такі як PDF), чи можливо позбутися всієї моєї власної конфігурації шрифтів для вихідний код і робити це як у emacs -q?

Оновлення :

Друга проблема вирішується, встановивши (setq org-src-preserve-indentation t)або файл init, або запустивши його через M-:( eval-expression).

Оновлення2 :

Перша проблема вирішується за допомогою встановлення фону орг-експортованих <code> блоків відповідно до теми .

Третя проблема не важлива при вирішенні 1-ї та 2-ї задач.

Відповіді:


10

Рішення для цього охоплює налаштування elisp, org-mode та css.

елісп

За замовчуванням інформація про fontification вкладається у експортований html-файл. Нам потрібно відключити це і сказати org-mode, що ми плануємо вказати інформацію про формат шрифту за допомогою зовнішнього файлу css.

Я вибрав префікс імен класів html org-рядком.

;; (setq org-html-htmlize-output-type 'inline-css) ;; default
(setq org-html-htmlize-output-type 'css)
;; (setq org-html-htmlize-font-prefix "") ;; default
(setq org-html-htmlize-font-prefix "org-")

орг-режим

Потім у org-файлі ви вказуєте, який файл css використовувати. Цей файл буде містити інформацію про те, як потрібно форматувати кожен org-клас.

# My custom fontification theme
#+HTML_HEAD: <link href="path/to/your/custom/theme.css" rel="stylesheet">

css

Ось мій спеціальний файл CSS теми, у який я скопіював кольорові коди з leuven-theme. Ви можете знайти останню версію CSS нижче з мого git .

/* Set the colors in <pre> blocks from the Leuven theme */
pre                                      {background-color:#FFFFFF;}
pre span.org-builtin                     {color:#006FE0;font-weight:bold;}
pre span.org-string                      {color:#008000;}
pre span.org-keyword                     {color:#0000FF;}
pre span.org-variable-name               {color:#BA36A5;}
pre span.org-function-name               {color:#006699;}
pre span.org-type                        {color:#6434A3;}
pre span.org-preprocessor                {color:#808080;font-weight:bold;}
pre span.org-constant                    {color:#D0372D;}
pre span.org-comment-delimiter           {color:#8D8D84;}
pre span.org-comment                     {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-1            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-2            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-3            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-4            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-5            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-6            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-7            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-8            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-9            {color:#8D8D84;font-style:italic}
pre span.org-rainbow-delimiters-depth-1  {color:#707183;}
pre span.org-rainbow-delimiters-depth-2  {color:#7388d6;}
pre span.org-rainbow-delimiters-depth-3  {color:#909183;}
pre span.org-rainbow-delimiters-depth-4  {color:#709870;}
pre span.org-rainbow-delimiters-depth-5  {color:#907373;}
pre span.org-rainbow-delimiters-depth-6  {color:#6276ba;}
pre span.org-rainbow-delimiters-depth-7  {color:#858580;}
pre span.org-rainbow-delimiters-depth-8  {color:#80a880;}
pre span.org-rainbow-delimiters-depth-9  {color:#887070;}
pre span.org-sh-quoted-exec              {color:#FF1493;}

Чи можу я просто використовувати emacs -qстиль за замовчуванням замість custom/theme.css?
CodyChan

Типовим стилем є використання поточної теми emacs. Ви можете вручну скопіювати кольори, які має тематика за замовчуванням, на вашemacs_default_theme.css
Kaushal Modi

1
Я не пробував цього, але ви, ймовірно, можете переглянути його org-html-fontify-codeтаким чином, щоб він встановив тему за замовчуванням перед fontification, а потім відновить попередню тему.
Каушал Моді

Було б дуже корисно, якби режим org прийняв no-theme-inheritаргумент до # + BEGIN_SRC, наприклад, #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCщо щойно використовується інформація про кодування Emacs за замовчуванням для коду, у цьому випадку Haskell.
Роб Стюарт

Хочу зазначити, що в css вище немає запису для звичайного тексту коду, і він просто виглядає чорним кольором. Було б непогано знайти цей запис. Я можу налаштувати кожен запис, наприклад, перед span.org-function-name {color: rgb (255,000,255);}, але я не можу змінити чорний колір більшості коду. Що span.org - ??? це було б?
Стів

2

Я знайшов просте рішення / вирішення проблеми з кольором. Перед експортом введіть M-x customize-themesі ввімкніть leuvenтему. Це тема зі світлим фоном, яка здається підходящою для друку коду на білому папері. Після експорту знову вимкніть тему, і ви повернетесь до своїх оригінальних кольорів.

Я якось припускав, що мені доведеться придумати якийсь складний спосіб переключення конфігурації для експорту, тому мені полегшило, що це було так просто!

Якщо ви робите це часто, можливо, варто порадити функцію експорту HTML зробити це автоматично:

(defvar my-org-html-export-theme 'tsdh-light)

(defun my-with-theme (orig-fun &rest args)
  (load-theme my-org-html-export-theme)
  (unwind-protect
      (apply orig-fun args)
    (disable-theme my-org-html-export-theme)))

(with-eval-after-load "ox-html"
  (advice-add 'org-export-to-buffer :around 'my-with-theme))

Так, це працює. Але якщо ви працюєте з великою кількістю файлів, які часто експортуєте в HTML, вам буде дуже прикро перемикатися назад і вперед між темами.
Крістіан Геренц

1
Так, я порадив функцію експорту: github.com/legoscia/dotemacs/blob/master/…
legoscia

Добре - теж рішення. Але, чому б не слідувати вищенаведеному маршруту і не використовувати користувальницький CSS на основі легкої теми?
Крістіан Геренц

@legoscia Це, здається, не працює для мене.
stardiviner
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.