Kuruluş modu için dışa aktarılan html dosyasında kaynak kod bloğunun sözdizimi vurgulaması ve girintisi


9

Bir org modu dosyasının içine C kodu bloğu eklediğimde, kaynak kodun sözdizimi vurgulaması ve girintisi istediğim gibi özelleştirildi.

  1. Bir html dosyasına aktardığımda, html dosyasındaki sözdizimi vurgulaması Emacs ile tam olarak aynıdır. Ancak sözdizimi vurgulaması Emacs'ımın renk temasıyla daha iyi çalışıyor. Örneğin, {C kodu bloğumda sembol beyaz, ancak renk temam karanlık, html'ye dışa aktarırsam, html dosyasının arka planı da beyazdır, {yani kaynak kod bloğunda göremezsiniz . html ihraç bile orada olduğunu düşündüm.

  2. Kaynak kodun girintisi Emacs'ımda normaldir (özelleştirdiğim gibi), ancak dışa aktarılan html dosyasındaki kaynak kodunun girintisi farklı olacaktır, girintileme için daha fazla alan ekler .

  3. Aynı kuruluş dosyasını dışa aktarırsam, emacs -qdışa aktarılan html dosyasında normaldir, ancak sözdizimi vurgu ve kaynak kodunun girintisi defaultEmacs yapılandırması olacaktır . Yani, font-face konfigürasyonlarının init.eletkileneceği anlamına gelir org-export.

Benim sorum şudur: html dosyasına kaynak kod bloğu içeren bir kuruluş modu dosyasını (veya belki de PDF gibi diğer formatları) dışa aktardığımda, yazı tipi yüzleriyle ilgili kendi yapılandırmamdan kurtulmak mümkün mü kaynak kodu ve gibi yapmak emacs -q?

Güncelleme :

İkinci sorun, (setq org-src-preserve-indentation t)init dosyasında ayarlanarak veya M-:( eval-expression) aracılığıyla çalıştırılarak çözülür .

Güncelleme2 :

İlk sorun, temaya göre kuruluş dışa aktarılan <code> bloklarının arka planını ayarla ile çözülür .

1. ve 2. problemler çözülürse üçüncü problem önemli değildir.

Yanıtlar:


10

Bunun çözümü elisp, org-mode ve css özelleştirmesini kapsar.

elisp

Varsayılan olarak, fontlaştırma bilgileri dışa aktarılan html dosyasına gömülüdür. Bunu devre dışı bırakmamız ve kuruluş moduna, harici bir css dosyası kullanarak yazı tipi biçimlendirme bilgilerini belirtmeyi planladığımızı söylememiz gerekiyor.

Html sınıf isimlerini org-dizeyle önek olarak seçtim .

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

Kuruluş dosyasında, hangi css dosyasının kullanılacağını belirtirsiniz. Bu dosya, her org-sınıfı nasıl biçimlendirmek istediğinize dair bilgiler içerir .

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

css

Renk kodlarını kopyaladığım özel tema css dosyası leuven-theme. Sen bulabilirsiniz benim git den aşağıda css son sürümünü .

/* 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;}

Yerine yalnızca varsayılan emacs -qstili kullanabilir miyim custom/theme.css?
CodyChan

Varsayılan stil, geçerli emacs temasını kullanmaktır. Varsayılan temanın sahip olduğu renkleri manuel olarak kopyalayabilirsinizemacs_default_theme.css
Kaushal Modi

1
Bunu denemedim, ancak org-html-fontify-codeyazı tipinden önce varsayılan temayı ayarlayıp daha sonra önceki temayı geri yükleyecek şekilde yeniden tanımlayabilirsiniz .
Kaushal Modi

no-theme-inheritKuruluş modu # + BEGIN_SRC için bir argüman kabul ettiyse, örneğin #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCbu kod için emacs varsayılan yazı tipi bilgisini (bu durumda Haskell) kullanan gerçekten yararlı olacaktır .
Rob Stewart

Yukarıdaki css normal kod metni için bir girdi olduğunu ve sadece siyah görünür işaret etmek istiyorum. Bu girişi bulmak güzel olurdu. Her girişi özelleştirebiliyorum, örneğin pre span.org-function-name {color: rgb (255,000,255);} ancak kodun çoğunun siyah rengini değiştiremiyorum. Ne span.org - ??? bu olur mu?
Steve

2

Renk sorunu için basit bir çözüm / geçici çözüm buldum. Dışa aktarmadan önce temayı yazın M-x customize-themesve açın leuven. Beyaz kağıda kod yazdırmak için uygun görünen hafif bir arka plana sahip bir tema. Dışa aktardıktan sonra temayı tekrar kapatın, orijinal renklerinizle geri döneceksiniz.

Her nasılsa, ihracat için yapılandırmayı değiştirmenin karmaşık bir yolunu bulmam gerektiğini varsaydım, bu yüzden bu kadar basit olduğunu rahatladım!

Bunu sık sık yapıyorsanız, HTML dışa aktarma işlevinin bunu otomatik olarak yapmasını önermeye değer olabilir:

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

Evet, işe yarıyor. Ancak, sık sık HTML'ye dışa aktardığınız birçok dosyayla çalışıyorsanız, temalar arasında geri ve ileri gitmenin çok can sıkıcı olduğunu göreceksiniz.
Christian Herenz

1
Evet, ihracat işlevini tavsiye ettim: github.com/legoscia/dotemacs/blob/master/…
legoscia

Tamam - ayrıca bir çözüm. Ancak, neden yukarıdaki rotayı takip etmiyor ve hafif bir temaya dayanan özel bir CSS kullanmıyorsunuz?
Christian Herenz

@legoscia Bu benim için çalışmıyor.
stardiviner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.