テーマに従って組織エクスポートされた<code>ブロックの背景を設定します


24

org-modeファイルを頻繁にエクスポートしますが、ほとんどすべてにコードが含まれています。コードをエクスポートすると、テーマに応じてテキストが色付けされますが、暗いテーマと明るいテーマを定期的に切り替えます。明るいテーマの場合、<code>ブロックの背景は明るい必要があり、暗いテーマの場合、暗い背景が必要です(そうでなければ、灰色の背景に明るい黄色のテキストが表示され、判読できません)。

暗い背景には次の行を追加する必要があります。

#+HTML_HEAD: <style>pre.src {background-color: #303030; color: #e5e5e5;}</style>

そして、明るい色の背景に切り替えるたびに削除することを忘れないでください

エクスポート時に現在のテーマの背景色を自動的に検出し、エクスポートされたHTMLのCSSで使用する方法はありますか?

編集

私はジョーダンの答えに行きます(ジョーダンに感謝、カルマポイントを獲得します!)

(defun my/org-inline-css-hook (exporter)
  "Insert custom inline css to automatically set the
background of code to whatever theme I'm using's background"
  (when (eq exporter 'html)
    (let* ((my-pre-bg (face-background 'default))
           (my-pre-fg (face-foreground 'default)))
      (setq
       org-html-head-extra
       (concat
        org-html-head-extra
        (format "<style type=\"text/css\">\n pre.src {background-color: %s; color: %s;}</style>\n"
                my-pre-bg my-pre-fg))))))

(add-hook 'org-export-before-processing-hook 'my/org-inline-css-hook)

これにより、背景色だけでなく前景色も設定されます。また、既存のorg-html-head-extra設定に行を追加して、他のHTMLが誤って上書きされないようにします。私はテストしましたが、これは私に最適です!


1
方法はあると確信していますが、エクスポートするときに常に同じテーマを適用する方が良いとは思いませんか?または、異なるテーマで意図的にエクスポートしますか?
マラバルバ14

@Malabarbaは、現在使用しているテーマをエクスポートし、コードを読みやすくすることを目的としています。多くのテーマは(でもdisable-theme)きれいに切り替わらないので、HTMLをエクスポートするためだけに別のテーマでEmacsを再起動する必要はありません。
リーH 14

1
私が正しく理解していれば、現在の設定では既にコードブロックでテーマの色が使用されています。問題は、テーマの背景が使用されていないことです。間違った場合は、タイトルに行った編集をロールバックしてください。
マラバルバ14年

@Malabarba私の現在のセットアップでは、コードブロックの背景色を指定していません(ただし、CSSで背景色をハードコーディングすることもできます)。テーマの背景色を組織モードのコードブロックに使用したいと思います。新しいタイトルは私のために機能します。
リーH

上記のソリューションには2つの問題があります。まず、「gray80」のような色はCSS値に正しく変換されず、設定されません。第二に、エクスポートが実行されるたびorg-html-head-extraに追加され、無限の成長につながりますが、スタイルの機能は損なわれません。
RPディロン

回答:


10

まず、組織はhtmlizeテーマに応じてソースコードブロックを自動的に色付けするために使用できると思います。

代わりに。

http://definitelyaplug.b0.cx/post/custom-inlined-css-in-org-mode-html-export/を確認してください。を使用しorg-export-before-processing-hookて、htmlエクスポートの前に組織ドキュメントにカスタムcssをスローする方法の優れた例があります。

サイトがダウンした場合のコードは次のとおりです。

ここでhtmlエクスポートでは、orgは現在のディレクトリでstyles.cssと呼ばれるファイルまたは.emacs.dディレクトリでデフォルトファイルを探し、そのcssをドキュメントに挿入します。これは便利ですが、ユースケースには最適ではありません。

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let* ((dir (ignore-errors (file-name-directory (buffer-file-name))))
           (path (concat dir "style.css"))
           (homestyle (or (null dir) (null (file-exists-p path))))
           (final (if homestyle "~/.emacs.d/org-style.css" path)))
      (setq org-html-head-include-default-style nil)
      (setq org-html-head (concat
                           "<style type=\"text/css\">\n"
                           "<!--/*--><![CDATA[/*><!--*/\n"
                           (with-temp-buffer
                             (insert-file-contents final)
                             (buffer-string))
                           "/*]]>*/-->\n"
                           "</style>\n")))))

(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

これをいくつかの方法でカスタマイズして、希望どおりに機能させることができます。

1つの方法は、テーマに基づいて手動でcssを構築し、それを挿入することです。

以下は、背景をpre.srcデフォルトのfaces:backgroundプロパティの16進値に設定する修正バージョンです。

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let ((my-pre-bg (face-background 'default)))
      (setq org-html-head-include-default-style nil)
      (setq org-html-head
            (format "<style type=\"text/css\">\n pre.src { background-color: %s;}</style>\n" my-pre-bg)))))

(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

1
ジョーダンありがとう、これは素晴らしい!元の質問をわずかに編集したバージョンで更新しましたが、賞金と解決策が得られます!
リーH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.