Sorotan sintaks dan lekukan blok kode sumber dalam file html yang diekspor untuk mode-org

9

Ketika saya menyisipkan blok kode C di dalam file mode-org, sorotan sintaks dan lekukan kode sumber disesuaikan seperti yang saya inginkan.

  1. Ketika saya mengekspornya ke file html, sorotan sintaks dalam file html persis sama dengan di Emacs. Tetapi highlight sintaks berfungsi lebih baik dengan tema warna Emacs saya. Misalnya, {simbolnya putih di blok kode C saya, tetapi tema warna saya gelap, jika saya mengekspornya ke html, latar belakang file html juga putih, artinya, Anda tidak dapat melihat {di blok kode sumber dari diekspor html bahkan mengira itu ada.

  2. Lekukan kode sumber normal di Emacs saya (seperti yang saya sesuaikan), tetapi lekukan kode sumber dalam file html yang diekspor akan berbeda, ia menambahkan lebih banyak ruang untuk lekukan.

  3. Jika saya mengekspor file org yang sama emacs -q, itu normal dalam file html yang diekspor, tetapi highlight sintaks dan lekukan kode sumber akan menjadi defaultkonfigurasi Emacs. Jadi itu berarti konfigurasi font-faces init.elakan mempengaruhi org-export.

Jadi pertanyaan saya adalah: ketika saya mengekspor file mode-org yang berisi blok kode sumber ke file html (atau mungkin format lain seperti PDF juga), apakah mungkin untuk menyingkirkan semua konfigurasi font-face saya sendiri tentang kode sumber dan lakukan seperti pada emacs -q?

Perbarui :

Masalah kedua diselesaikan dengan mengatur (setq org-src-preserve-indentation t)apakah init file atau dengan menjalankannya melalui M-:( eval-expression).

Pembaruan2 :

Masalah pertama diselesaikan dengan Menyetel latar belakang blok <code> yang diekspor org menurut tema .

Masalah ketiga tidak penting jika masalah 1 dan 2 diselesaikan.

CodyChan
sumber

Jawaban:

10

Solusi untuk bentang ini mencakup kustomisasi, mode-org, dan css.

elisp

Secara default, informasi fontifikasi disematkan dalam file html yang diekspor. Kami perlu menonaktifkannya dan memberi tahu mode-org bahwa kami berencana untuk menentukan informasi pemformatan font menggunakan file css eksternal.

Saya telah memilih untuk awalan nama kelas html dengan org-string.

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

mode-org

Di file org, Anda kemudian menentukan file css mana yang akan digunakan. File ini akan berisi informasi tentang bagaimana Anda ingin memformat setiap org-kelas.

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

css

Berikut adalah file css tema khusus saya di mana saya telah menyalin kode warna dari leuven-theme. Anda dapat menemukan versi terbaru css di bawah ini dari git saya .

/* 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
sumber
Bisakah saya menggunakan emacs -qgaya default saja custom/theme.css?
CodyChan
Gaya default adalah menggunakan tema emacs saat ini. Anda dapat menyalin warna tema secara manual keemacs_default_theme.css
Kaushal Modi
1
Saya belum mencoba ini tetapi Anda mungkin dapat mendefinisikan ulang org-html-fontify-codesehingga menetapkan tema default sebelum fontifikasi dan kemudian mengembalikan tema sebelumnya.
Kaushal Modi
Akan sangat berguna jika mode org menerima no-theme-inheritargumen ke # + BEGIN_SRC, mis. #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCYang baru saja menggunakan informasi fontifikasi standar emacs untuk kode, dalam hal ini Haskell.
Rob Stewart
Saya ingin menunjukkan bahwa css di atas tidak memiliki entri untuk teks kode biasa dan itu hanya tampak hitam. Akan menyenangkan untuk menemukan entri itu. Saya dapat menyesuaikan setiap entri, misalnya pre span.org-function-name {color: rgb (255,000.255);} tetapi saya tidak dapat mengubah warna hitam sebagian besar kode. Apa span.org - ??? apakah itu akan terjadi?
Steve
2

Saya menemukan solusi / solusi sederhana untuk masalah warna. Sebelum mengekspor, ketikkan M-x customize-themesdan nyalakan leuventema. Ini adalah tema dengan latar belakang terang yang tampaknya cocok untuk mencetak kode pada kertas putih. Setelah mengekspor, matikan tema lagi, dan Anda akan kembali dengan warna asli Anda.

Entah bagaimana saya berasumsi bahwa saya harus menemukan cara rumit untuk mengalihkan konfigurasi untuk mengekspor, jadi saya merasa lega karena ini sederhana!

Jika Anda sering melakukan ini, ada baiknya menyarankan fungsi ekspor HTML untuk melakukan ini secara otomatis:

(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
sumber
Ya, ini berhasil. Tetapi jika Anda bekerja dengan banyak file yang sering Anda ekspor ke HTML, Anda akan merasa sangat menjengkelkan untuk berpindah-pindah antar tema.
Christian Herenz
1
Ya, saya akhirnya menasihati fungsi ekspor: github.com/legoscia/dotemacs/blob/master/…
legoscia
OK - juga solusinya. Tapi, mengapa tidak mengikuti rute di atas dan menggunakan CSS khusus berdasarkan beberapa tema ringan?
Christian Herenz
@legoscia Tampaknya ini tidak berfungsi untuk saya.
stardiviner