Evidenziazione della sintassi e rientro del blocco del codice sorgente nel file html esportato per la modalità org


9

Quando inserisco il blocco di codice C all'interno di un file in modalità org, l'evidenziazione della sintassi e il rientro del codice sorgente vengono personalizzati come desiderato.

  1. Quando lo esporto in un file html, l'evidenziazione della sintassi nel file html è esattamente la stessa di Emacs. Ma l'evidenziazione della sintassi funziona meglio con il tema colore dei miei Emacs. Ad esempio, il {simbolo è bianco nel mio blocco di codice C, ma il mio tema colore è scuro, se lo esporto in html, anche lo sfondo del file html è bianco, significa che non puoi vedere {nel blocco di codice sorgente di HTML esportato anche pensato che fosse lì.

  2. Il rientro del codice sorgente è normale nel mio Emacs (come l'ho personalizzato), ma il rientro del codice sorgente nel file html esportato sarà diverso, aggiungendo più spazi per il rientro.

  3. Se esporto lo stesso file org in emacs -q, sono normali nel file html esportato, ma l'evidenziazione della sintassi e il rientro del codice sorgente saranno la defaultconfigurazione di Emacs. Quindi significa init.elche influiranno le configurazioni dei caratteri in org-export.

Quindi la mia domanda è: quando esporto un file in modalità org che contiene il blocco del codice sorgente in file html (o forse anche altri formati come PDF), è possibile eliminare tutta la mia configurazione di font-face riguardo al codice sorgente e farlo come in emacs -q?

Aggiornamento :

Il secondo problema viene risolto impostando (setq org-src-preserve-indentation t)nel file init o eseguendolo attraverso M-:( eval-expression).

Aggiornamento2 :

Il primo problema è risolto da Imposta lo sfondo dei blocchi <code> esportati dall'organizzazione in base al tema .

Il terzo problema non è importante se il 1o e il 2o problema vengono risolti.

Risposte:


10

La soluzione per questo si estende su personalizzazione elisp, org-mode e css.

elisp

Per impostazione predefinita, le informazioni sulla fontificazione sono incorporate nel file html esportato. Dobbiamo disabilitarlo e dire alla modalità org che stiamo pianificando di specificare le informazioni sulla formattazione del carattere usando un file CSS esterno.

Ho scelto di aggiungere il prefisso ai nomi delle classi html con org-stringa.

;; (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-mode

Nel file org, si specifica quindi quale file CSS utilizzare. Questo file conterrà informazioni su come formattare ciascuna org-classe.

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

css

Ecco il mio file css del tema personalizzato in cui ho copiato i codici colore da leuven-theme. Puoi trovare l'ultima versione del css qui sotto dal mio 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;}

Posso semplicemente usare lo emacs -qstile predefinito invece di custom/theme.css?
CodyChan,

Lo stile predefinito è utilizzare l'attuale tema di emacs. Puoi copiare manualmente i colori che il tema predefinito ha sul tuoemacs_default_theme.css
Kaushal Modi il

1
Non ho provato questo, ma probabilmente puoi ridefinire in org-html-fontify-codemodo tale da impostare il tema predefinito prima della fontificazione e quindi ripristinare il tema precedente.
Kaushal Modi,

Sarebbe davvero utile se la modalità org accettasse un no-theme-inheritargomento su # + BEGIN_SRC, ad es. #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCChe ha appena usato le informazioni di fontificazione predefinite di emacs per il codice, in questo caso Haskell.
Rob Stewart,

Voglio sottolineare che il CSS sopra non ha alcuna voce per il normale testo in codice e sembra solo nero. Sarebbe bello trovare quella voce. Sono in grado di personalizzare ogni voce, ad esempio pre span.org-function-name {color: rgb (255.000.255);} ma non posso cambiare il colore nero della maggior parte del codice. Cosa span.org - ??? sarebbe?
Steve,

2

Ho trovato una soluzione / soluzione semplice per il problema del colore. Prima di esportare, digitare M-x customize-themese attivare il leuventema. È un tema con uno sfondo chiaro che sembra adatto per la stampa di codice su carta bianca. Dopo l'esportazione, disattiva nuovamente il tema e tornerai con i colori originali.

In qualche modo ho pensato che avrei dovuto escogitare un modo complicato per cambiare la configurazione per l'esportazione, quindi sono sollevato dal fatto che sia stato così semplice!

Se lo fai spesso, potrebbe valere la pena consigliare alla funzione di esportazione HTML di farlo automaticamente:

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

Sì, funziona. Ma se lavori con molti file che esporti frequentemente in HTML, troverai molto fastidioso passare da un tema all'altro.
Christian Herenz,

1
Sì, ho finito per consigliare la funzione di esportazione: github.com/legoscia/dotemacs/blob/master/…
legoscia

OK, anche una soluzione. Ma perché non seguire il percorso sopra e utilizzare un CSS personalizzato basato su un tema leggero?
Christian Herenz,

@legoscia Questo sembra non funzionare per me.
stardiviner il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.