Podświetlanie składni i wcięcia bloku kodu źródłowego w eksportowanym pliku HTML dla trybu org

9

Kiedy wstawiam blok kodu C do pliku trybu org, podświetlanie składni i wcięcia kodu źródłowego są dostosowywane tak, jak chciałem.

  1. Kiedy eksportuję go do pliku HTML, podświetlanie składni w pliku HTML jest dokładnie takie samo jak w Emacsie. Ale podświetlanie składni działa lepiej z motywem kolorystycznym mojego Emacsa. Na przykład {symbol jest biały w moim bloku kodu C, ale motyw kolorystyczny jest ciemny, jeśli wyeksportuję go do HTML, tło pliku HTML również będzie białe, co oznacza, że ​​nie widać {w bloku kodu źródłowego wyeksportowany HTML nawet myślałem, że tam jest.

  2. Wcięcie kodu źródłowego jest normalne w moim Emacsie (jak go dostosowałem), ale wcięcie kodu źródłowego w eksportowanym pliku HTML będzie inne, dodaje więcej miejsca na wcięcie.

  3. Jeśli wyeksportuję ten sam plik org emacs -q, są one normalne w eksportowanym pliku HTML, ale podświetleniem składni i wcięciem kodu źródłowego będzie defaultkonfiguracja Emacsa. Oznacza to, że init.elwpłynie to na konfiguracje czcionek org-export.

Więc moje pytanie brzmi: kiedy eksportuję plik trybu org, który zawiera blok kodu źródłowego do pliku HTML (a może także inne formaty, takie jak PDF), czy mogę pozbyć się całej mojej konfiguracji czcionek o kod źródłowy i zrobić to tak jak w emacs -q?

Aktualizacja :

Drugi problem można rozwiązać, ustawiając go (setq org-src-preserve-indentation t)w pliku init lub uruchamiając go poprzez M-:( eval-expression).

Aktualizacja 2 :

Pierwszy problem rozwiązuje ustawienie tła bloków <code> eksportowanych przez org zgodnie z motywem .

Trzeci problem nie jest ważny, jeśli pierwszy i drugi problem zostaną rozwiązane.

CodyChan
źródło

Odpowiedzi:

10

Rozwiązaniem tego problemu jest dostosowywanie elisp, org-mode i css.

elisp

Domyślnie informacje o czcionce są osadzone w eksportowanym pliku HTML. Musimy to wyłączyć i powiedzieć trybowi org, że planujemy określić informacje o formatowaniu czcionek za pomocą zewnętrznego pliku css.

Zdecydowałem się poprzedzić org-ciąg znaków nazwami klas HTML .

;; (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-")

tryb org

W pliku org określasz, którego pliku css chcesz użyć. Ten plik będzie zawierał informacje o tym, jak chcesz sformatować każdą org-klasę.

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

css

Oto mój niestandardowy plik css motywu, w którym skopiowałem kody kolorów z leuven-theme. Możesz znaleźć najnowszą wersję poniższego css z mojego gita .

/* 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;}
Kaushal Modi
źródło
Czy mogę po prostu użyć domyślnego emacs -qstylu zamiast custom/theme.css?
CodyChan
Domyślnym stylem jest użycie bieżącego motywu emacs. Możesz ręcznie skopiować kolory domyślnego motywu do swojegoemacs_default_theme.css
Kaushal Modi
1
Nie próbowałem tego, ale prawdopodobnie możesz zdefiniować na nowo, org-html-fontify-codetak aby ustawiał domyślny motyw przed czcionką, a następnie przywracał wcześniejszy motyw.
Kaushal Modi
Byłoby bardzo użyteczne, gdyby tryb org zaakceptował no-theme-inheritargument do # + BEGIN_SRC, np. Który #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCużył domyślnej informacji o czcionce emacsa dla kodu, w tym przypadku Haskell.
Rob Stewart,
Chcę podkreślić, że powyższy css nie ma wpisu dla zwykłego tekstu kodu i wydaje się po prostu czarny. Byłoby miło znaleźć ten wpis. Jestem w stanie dostosować każdy wpis, na przykład pre span.org-function-name {color: rgb (255,000,255);}, ale nie mogę zmienić czarnego koloru większości kodu. Co span.org - ??? to by było?
Steve
2

Znalazłem proste rozwiązanie / obejście problemu dotyczącego koloru. Przed eksportowaniem wpisz M-x customize-themesi włącz leuvenmotyw. Jest to motyw z jasnym tłem, który wydaje się odpowiedni do drukowania kodu na białym papierze. Po wyeksportowaniu wyłącz ponownie motyw, a wrócisz z oryginalnymi kolorami.

W jakiś sposób założyłem, że będę musiał wymyślić jakiś skomplikowany sposób przełączania konfiguracji eksportu, więc odczuwam ulgę, że było to takie proste!

Jeśli robisz to często, warto doradzić funkcji eksportu HTML, aby zrobiła to automatycznie:

(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))
legoscia
źródło
Tak, to działa. Ale jeśli pracujesz z dużą ilością plików, które często eksportujesz do HTML, bardzo denerwujące będzie przełączanie się między tematami.
Christian Herenz,
1
Tak, skończyłem doradzając funkcji eksportu: github.com/legoscia/dotemacs/blob/master/…
legoscia
OK - także rozwiązanie. Ale dlaczego nie zastosować powyższej trasy i użyć niestandardowego CSS opartego na lekkim motywie?
Christian Herenz,
@legoscia Wydaje się, że to nie działa dla mnie.
stardiviner