Cú pháp tô sáng và thụt lề của khối mã nguồn trong tệp html đã xuất cho chế độ org


9

Khi tôi chèn khối mã C bên trong tệp chế độ tổ chức, phần tô sáng cú pháp và thụt lề của mã nguồn được tùy chỉnh theo ý muốn.

  1. Khi tôi xuất nó thành tệp html, cú pháp tô sáng trong tệp html hoàn toàn giống như trong Emacs. Nhưng cú pháp tô sáng hoạt động tốt hơn với chủ đề màu của Emacs của tôi. Chẳng hạn, {biểu tượng có màu trắng trong khối mã C của tôi, nhưng chủ đề màu của tôi tối, nếu tôi xuất nó thành html, nền của tệp html cũng có màu trắng, điều đó có nghĩa là, bạn không thể thấy {trong khối mã nguồn của xuất html thậm chí nghĩ rằng nó ở đó.

  2. Việc thụt mã nguồn là bình thường trong Emacs của tôi (như tôi đã tùy chỉnh nó), nhưng việc thụt mã nguồn trong tệp html xuất sẽ khác, nó thêm nhiều khoảng trống để thụt lề.

  3. Nếu tôi xuất cùng một tệp org emacs -q, chúng là bình thường trong tệp html đã xuất, nhưng cú pháp tô sáng và thụt lề của mã nguồn sẽ là defaultcấu hình của Emacs. Vì vậy, nó có nghĩa là cấu hình mặt chữ trong init.elsẽ ảnh hưởng org-export.

Vì vậy, câu hỏi của tôi là: khi tôi xuất một tệp chế độ org chứa khối mã nguồn thành tệp html (hoặc có thể các định dạng khác như PDF), có thể loại bỏ tất cả cấu hình khuôn mặt phông chữ của riêng tôi về mã nguồn và làm như trong emacs -q?

Cập nhật :

Vấn đề thứ hai được giải quyết bằng cách đặt (setq org-src-preserve-indentation t)trong tệp init hoặc bằng cách chạy nó qua M-:( eval-expression).

Cập nhật2 :

Vấn đề đầu tiên được giải quyết bằng cách Đặt nền của các khối <code> được xuất theo chủ đề .

Vấn đề thứ ba không quan trọng nếu vấn đề thứ 1 và thứ 2 được giải quyết.

Câu trả lời:


10

Giải pháp cho tùy chỉnh này kéo dài elisp, org-mode và css.

elisp

Theo mặc định, thông tin phông chữ được nhúng trong tệp html đã xuất. Chúng ta cần phải vô hiệu hóa điều đó và thông báo cho chế độ org rằng chúng ta đang dự định chỉ định thông tin định dạng phông chữ bằng tệp css bên ngoài.

Tôi đã chọn tiền tố tên lớp html bằng org-chuỗi.

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

chế độ tổ chức

Trong tệp org, sau đó bạn chỉ định tệp css nào sẽ sử dụng. Tập tin này sẽ chứa thông tin về cách bạn muốn định dạng mỗi org-lớp.

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

css

Đây là tập tin css chủ đề tùy chỉnh của tôi, trong đó tôi đã sao chép mã màu từ leuven-theme. Bạn có thể tìm thấy phiên bản mới nhất của css dưới đây từ git của tôi .

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

Tôi chỉ có thể sử dụng emacs -qkiểu mặc định thay vì custom/theme.css?
CodyChan

Kiểu mặc định là sử dụng chủ đề emacs hiện tại. Bạn có thể sao chép thủ công các màu mà chủ đề mặc định có vàoemacs_default_theme.css
Kaushal Modi

1
Tôi chưa thử điều này nhưng có lẽ bạn có thể xác định lại org-html-fontify-codeđể nó đặt chủ đề mặc định trước khi phông chữ và sau đó khôi phục chủ đề trước đó.
Kaushal Modi

Sẽ thực sự hữu ích nếu chế độ org chấp nhận một no-theme-inheritđối số cho # + BEGIN_SRC, ví dụ: #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCchỉ sử dụng thông tin phông chữ mặc định của emacs cho mã, trong trường hợp này là Haskell.
Rob Stewart

Tôi muốn chỉ ra rằng css ở trên không có mục nhập cho văn bản mã thông thường và nó chỉ xuất hiện màu đen. Nó sẽ được tốt đẹp để tìm mục đó. Tôi có thể tùy chỉnh mọi mục nhập, ví dụ pre span.org-function-name {color: rgb (255.000.255);} nhưng tôi không thể thay đổi màu đen của hầu hết mã. Span.org - ??? đó sẽ là
Steve

2

Tôi tìm thấy một giải pháp / giải pháp đơn giản cho vấn đề màu sắc. Trước khi xuất, nhập M-x customize-themesvà bật leuvenchủ đề. Đó là một chủ đề với nền sáng có vẻ phù hợp để in mã trên giấy trắng. Sau khi xuất, tắt chủ đề lại và bạn sẽ quay lại với màu gốc.

Bằng cách nào đó tôi đã giả định rằng tôi phải đưa ra một số cách chuyển đổi cấu hình phức tạp để xuất khẩu, vì vậy tôi cảm thấy nhẹ nhõm vì nó đơn giản!

Nếu bạn đang làm điều này thường xuyên, có thể đáng để khuyên chức năng xuất HTML tự động thực hiện việc này:

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

Vâng, điều này hoạt động. Nhưng nếu bạn làm việc với nhiều tệp mà bạn xuất thường xuyên sang HTML, bạn sẽ thấy rất khó chịu khi chuyển đổi qua lại giữa các chủ đề.
Christian Herenz

1
Có, cuối cùng tôi đã tư vấn cho chức năng xuất: github.com/legoscia/dotemacs/blob/master/
mẹo

OK - cũng là một giải pháp. Nhưng, tại sao không đi theo lộ trình trên và sử dụng CSS tùy chỉnh dựa trên một số chủ đề nhẹ?
Christian Herenz

@legoscia Điều này dường như không làm việc cho tôi.
stardiviner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.