ไฮไลต์ไวยากรณ์และการเยื้องของบล็อกซอร์สโค้ดในไฟล์ html ที่เอ็กซ์พอร์ตสำหรับโหมดองค์กร


9

เมื่อฉันแทรกบล็อกรหัส C ในไฟล์โหมดองค์กรไฮไลต์ไวยากรณ์และการเยื้องของซอร์สโค้ดจะถูกปรับแต่งตามที่ฉันต้องการ

  1. เมื่อฉันส่งออกเป็นไฟล์ html การเน้นไวยากรณ์ในไฟล์ html นั้นเหมือนกับใน Emacs แต่การเน้นไวยากรณ์จะทำงานได้ดีขึ้นกับชุดรูปแบบสีของ Emac ของฉัน ตัวอย่างเช่น{สัญลักษณ์เป็นสีขาวในบล็อกรหัส C ของฉัน แต่ชุดรูปแบบสีของฉันมืดถ้าฉันส่งออกเป็น html พื้นหลังของไฟล์ html ก็เป็นสีขาวด้วยซึ่งหมายความว่าคุณไม่เห็น{ในบล็อกรหัสต้นฉบับของ html ที่ส่งออกแม้จะคิดว่ามันอยู่ที่นั่น

  2. การเยื้องของซอร์สโค้ดเป็นเรื่องปกติใน Emacs ของฉัน (ตามที่ฉันกำหนดเอง) แต่การเยื้องของซอร์สโค้ดในไฟล์ html ที่ส่งออกจะแตกต่างกันเพิ่มการเว้นวรรคสำหรับการเยื้อง

  3. หากฉันส่งออกไฟล์ org เดียวกันemacs -qพวกเขาเป็นเรื่องปกติในไฟล์ html ที่ส่งออก แต่การเน้นไวยากรณ์และการเยื้องของซอร์สโค้ดจะเป็นการdefaultกำหนดค่าของ Emacs ดังนั้นจึงหมายถึงตัวอักษรใบหน้ากำหนดค่าในจะมีผลต่อinit.elorg-export

ดังนั้นคำถามของฉันคือเมื่อฉันส่งออกไฟล์โหมด org ซึ่งมีซอร์สโค้ดบล็อกเป็นไฟล์ html (หรืออาจเป็นรูปแบบอื่น ๆ เช่น PDF เช่นกัน) เป็นไปได้ไหมที่จะกำจัดการกำหนดค่าฟอนต์ใบหน้าของฉันทั้งหมดเกี่ยวกับ รหัสที่มาและทำมันในขณะที่emacs -q?

อัปเดต :

ปัญหาที่สองได้รับการแก้ไขโดยการตั้งค่า(setq org-src-preserve-indentation t)ในไฟล์ init หรือโดยเรียกใช้ผ่านM-:( eval-expression)

อัปเดต 2 :

ปัญหาแรกที่จะแก้ไขได้โดยการตั้งค่าพื้นหลังขององค์กรส่งออก <code> บล็อกตามรูปแบบ

ปัญหาที่สามไม่สำคัญหากปัญหาที่ 1 และ 2 ได้รับการแก้ไข

คำตอบ:


10

วิธีการแก้ปัญหาสำหรับช่วงนี้ elisp, โหมดองค์กรและการปรับแต่ง CSS

Elisp

โดยค่าเริ่มต้นข้อมูลแบบอักษรจะถูกฝังในไฟล์ html ที่ส่งออก เราจำเป็นต้องปิดการใช้งานและบอกโหมดองค์กรว่าเราวางแผนที่จะระบุข้อมูลการจัดรูปแบบตัวอักษรโดยใช้ไฟล์ css ภายนอก

ฉันได้เลือกคำนำหน้าชื่อคลาส html ด้วยorg-สตริง

;; (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 โหมด

ในไฟล์ org คุณต้องระบุไฟล์ css ที่จะใช้ ไฟล์นี้จะมีข้อมูลเกี่ยวกับวิธีการจัดรูปแบบแต่ละorg-คลาส

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

CSS

นี่คือชุดรูปแบบไฟล์ css leuven-themeที่กำหนดเองของฉันที่ฉันได้คัดลอกรหัสสีจาก คุณสามารถค้นหารุ่นล่าสุดของ CSS ด้านล่างจากคอมไพล์ของฉัน

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

ฉันสามารถใช้emacs -qสไตล์เริ่มต้นแทนสไตล์ได้custom/theme.cssหรือไม่
CodyChan

สไตล์เริ่มต้นคือการใช้ชุดรูปแบบ emacs ปัจจุบัน คุณสามารถคัดลอกสีที่ชุดรูปแบบเริ่มต้นได้ด้วยตัวคุณเองemacs_default_theme.css
Kaushal Modi

1
ฉันไม่ได้ลองสิ่งนี้ แต่คุณสามารถกำหนดได้ใหม่org-html-fontify-codeว่ามันจะตั้งค่าชุดรูปแบบเริ่มต้นก่อนการทำแบบอักษรแล้วคืนค่าชุดรูปแบบก่อนหน้า
Kaushal Modi

มันจะมีประโยชน์จริง ๆ หากโหมดองค์กรยอมรับno-theme-inheritอาร์กิวเมนต์เป็น # + BEGIN_SRC เช่น#+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCที่เพิ่งใช้ข้อมูลการเริ่มต้นแบบอักษร emacs เริ่มต้นสำหรับรหัสในกรณีนี้ Haskell
Rob Stewart

ฉันต้องการชี้ให้เห็นว่า css ด้านบนไม่มีรายการข้อความรหัสปกติและมันก็ปรากฏเป็นสีดำ มันคงจะดีถ้าได้เจอข้อความนั้น ฉันสามารถปรับแต่งทุกรายการได้เช่น pre span.org-function-name {color: rgb (255,000,255);} แต่ฉันไม่สามารถเปลี่ยนสีดำของรหัสส่วนใหญ่ได้ อะไร span.org - ??? นั่นจะเป็นอย่างไร
Steve

2

ฉันพบวิธีแก้ปัญหา / วิธีแก้ปัญหาง่ายๆสำหรับปัญหาสี ก่อนที่จะส่งออกให้พิมพ์M-x customize-themesและเปิดleuvenชุดรูปแบบ มันเป็นธีมที่มีพื้นหลังสีอ่อนซึ่งเหมาะสำหรับพิมพ์รหัสบนกระดาษสีขาว หลังจากส่งออกให้ปิดชุดรูปแบบอีกครั้งและคุณจะกลับมาพร้อมกับสีดั้งเดิมของคุณ

ฉันคิดว่าฉันจะต้องคิดหาวิธีสลับซับซ้อนการกำหนดค่าสำหรับการส่งออกดังนั้นฉันจึงรู้สึกว่ามันง่ายมาก!

หากคุณทำสิ่งนี้บ่อยครั้งอาจเป็นการดีที่จะแนะนำฟังก์ชั่นการส่งออก HTML ให้ทำสิ่งนี้โดยอัตโนมัติ:

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

ใช่มันใช้งานได้ แต่ถ้าคุณทำงานกับไฟล์จำนวนมากที่คุณส่งออกเป็น HTML บ่อยครั้งคุณจะพบว่ามันน่ารำคาญมากที่จะสลับไปมาระหว่างธีม
Christian Herenz

1
ใช่ฉันได้รับคำแนะนำเกี่ยวกับฟังก์ชั่นการส่งออก: github.com/legoscia/dotemacs/blob/master/…
legoscia

ตกลง - ยังเป็นวิธีแก้ปัญหา แต่ทำไมไม่ทำตามเส้นทางด้านบนและใช้ CSS ที่กำหนดเองตามธีมของแสงบางส่วน
Christian Herenz

@legoscia ดูเหมือนว่าจะไม่ได้ผลสำหรับฉัน
stardiviner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.