Die Syntaxhervorhebung und Einrückung des Quellcodeblocks in der exportierten HTML-Datei für den Organisationsmodus

9

Wenn ich einen C-Codeblock in eine Datei im Organisationsmodus einfüge, werden die Syntaxhervorhebung und der Einzug des Quellcodes nach meinen Wünschen angepasst.

  1. Wenn ich es in eine HTML-Datei exportiere, ist die Syntaxhervorhebung in der HTML-Datei genau dieselbe wie in Emacs. Aber das Syntax-Highlight passt besser zum Farbthema meiner Emacs. Zum Beispiel ist das {Symbol in meinem C-Codeblock weiß, aber mein Farbthema ist dunkel. Wenn ich es in HTML exportiere, ist der Hintergrund der HTML-Datei ebenfalls weiß. Dies bedeutet, dass Sie es {im Quellcodeblock von nicht sehen können exportiertes HTML dachte sogar, dass es da ist.

  2. Das Einrücken des Quellcodes ist in meinem Emacs normal (wie ich es angepasst habe), aber das Einrücken des Quellcodes in der exportierten HTML-Datei ist unterschiedlich. Es werden mehr Leerzeichen für das Einrücken hinzugefügt.

  3. Wenn ich dieselbe Organisationsdatei emacs -qexportiere, sind sie in der exportierten HTML-Datei normal, aber die Syntaxhervorhebung und der Einzug des Quellcodes sind die defaultKonfiguration von Emacs. Dies bedeutet, dass die Konfiguration von Schriftarten init.elbeeinflusst wird org-export.

Meine Frage lautet also: Wenn ich eine Datei im Organisationsmodus, die einen Quellcodeblock enthält, in eine HTML-Datei (oder möglicherweise auch in andere Formate wie PDF) exportiere, ist es möglich, alle meine eigenen Konfigurationen von Schriftarten über das zu entfernen Quellcode und machen Sie es wie in emacs -q?

Update :

Das zweite Problem wird gelöst, indem (setq org-src-preserve-indentation t)entweder in der Init-Datei festgelegt oder durch M-:( eval-expression) ausgeführt wird.

Update2 :

Das erste Problem wird gelöst, indem der Hintergrund von org-exportierten <code> -Blöcken entsprechend dem Thema festgelegt wird .

Das dritte Problem ist nicht wichtig, wenn das 1. und 2. Problem gelöst sind.

CodyChan
quelle

Antworten:

10

Die Lösung hierfür umfasst die Anpassung von Elisp, Org-Modus und CSS.

elisp

Standardmäßig sind die Schriftartinformationen in die exportierte HTML-Datei eingebettet. Wir müssen das deaktivieren und dem Organisationsmodus mitteilen, dass wir die Schriftformatierungsinformationen mithilfe einer externen CSS-Datei angeben möchten.

Ich habe beschlossen, den HTML-Klassennamen eine org-Zeichenfolge voranzustellen.

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

In der Organisationsdatei geben Sie dann an, welche CSS-Datei verwendet werden soll. Diese Datei enthält Informationen darüber, wie Sie jede org-Klasse formatieren möchten .

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

CSS

Hier ist meine benutzerdefinierte Theme-CSS-Datei, in die ich die Farbcodes aus dem kopiert habe leuven-theme. Sie finden die neueste Version des folgenden CSS von meinem 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;}
Kaushal Modi
quelle
Kann ich einfach den Standardstil emacs -qanstelle des verwenden custom/theme.css?
CodyChan
Der Standardstil ist die Verwendung des aktuellen Emacs-Themas. Sie können die Farben, die das Standardthema hat, manuell auf Ihreemacs_default_theme.css
Kaushal Modi
1
Ich habe dies nicht versucht, aber Sie können es wahrscheinlich neu definieren org-html-fontify-code, sodass das Standardthema vor der Schriftart festgelegt und dann das frühere Thema wiederhergestellt wird.
Kaushal Modi
Es wäre sehr nützlich, wenn der no-theme-inheritOrganisationsmodus ein Argument für # + BEGIN_SRC akzeptieren würde, z. B. #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCdas nur die Standard-Fontifizierungsinformationen von emacs für den Code verwendet, in diesem Fall Haskell.
Rob Stewart
Ich möchte darauf hinweisen, dass das obige CSS keinen Eintrag für den regulären Codetext hat und nur schwarz erscheint. Es wäre schön, diesen Eintrag zu finden. Ich kann jeden Eintrag anpassen, zum Beispiel vor span.org-Funktionsname {color: rgb (255,000,255);}, aber ich kann die schwarze Farbe des größten Teils des Codes nicht ändern. Was span.org - ??? wäre das
Steve
2

Ich habe eine einfache Lösung / Problemumgehung für das Farbproblem gefunden. Geben Sie vor dem Export M-x customize-themesdas leuvenThema ein und aktivieren Sie es. Es ist ein Thema mit hellem Hintergrund, das zum Drucken von Code auf weißem Papier geeignet zu sein scheint. Schalten Sie das Thema nach dem Export wieder aus, und Sie erhalten wieder Ihre Originalfarben.

Ich bin irgendwie davon ausgegangen, dass ich mir eine komplizierte Methode zum Wechseln der Konfiguration für den Export ausdenken muss, also bin ich erleichtert, dass es so einfach ist!

Wenn Sie dies häufig tun, empfiehlt es sich möglicherweise, die HTML-Exportfunktion zu empfehlen, dies automatisch zu tun:

(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
quelle
Ja, das funktioniert. Wenn Sie jedoch mit vielen Dateien arbeiten, die Sie häufig in HTML exportieren, ist es sehr ärgerlich, zwischen Themen hin und her zu wechseln.
Christian Herenz
1
Ja, am Ende habe ich die Exportfunktion
empfohlen
OK - auch eine Lösung. Aber warum nicht der obigen Route folgen und ein benutzerdefiniertes CSS verwenden, das auf einem leichten Thema basiert?
Christian Herenz
@legoscia Das scheint bei mir nicht zu funktionieren.
Stardiviner