org-mode 용으로 내 보낸 HTML 파일에서 소스 코드 블록의 구문 강조 및 들여 쓰기


9

조직 모드 파일 내에 C 코드 블록을 삽입하면 소스 코드의 구문 강조 및 들여 쓰기가 원하는대로 사용자 정의됩니다.

  1. html 파일로 내보낼 때 html 파일의 구문 강조 표시는 Emacs와 동일합니다. 그러나 구문 강조는 내 Emacs의 색상 테마와 더 잘 작동합니다. 예를 들어 {C 코드 블록에서 기호가 흰색이지만 색상 테마가 어둡습니다. html로 내 보내면 html 파일의 배경이 흰색이므로 {소스 코드 블록에서 볼 수 없습니다. 내 보낸 HTML조차도 있다고 생각했습니다.

  2. 내 Emacs에서는 소스 코드의 들여 쓰기가 정상이지만 (내가 사용자 정의한대로) 내 보낸 html 파일에서 소스 코드의 들여 쓰기는 달라 지므로 들여 쓰기를위한 공간 이 추가 됩니다.

  3. 에서 동일한 조직 파일을 emacs -q내 보내면 내 보낸 HTML 파일에서는 정상이지만 소스 코드의 구문 강조 및 들여 쓰기 default는 Emacs 의 구성입니다. 따라서 글꼴 구성 init.el이에 영향을 미칩니다 org-export.

그래서 내 질문은 : 소스 코드 블록을 포함하는 org-mode 파일을 html 파일 (또는 PDF와 같은 다른 형식)로 내보낼 때에 대한 내 자신의 글꼴 얼굴 구성을 모두 제거 할 수 있습니까? 소스 코드와 같이 emacs -q?

업데이트 :

두 번째 문제는 (setq org-src-preserve-indentation t)init 파일에서 설정 하거나 M-:( eval-expression)를 통해 실행하면 해결됩니다 .

업데이트 2 :

첫 번째 문제는 theme에 따라 org-exported <code> 블록의 배경을 설정하여 해결됩니다 .

첫 번째와 두 번째 문제가 해결되면 세 번째 문제는 중요하지 않습니다.

답변:


10

이를위한 솔루션은 elisp, org-mode 및 css customization입니다.

제거하다

기본적으로 글꼴 화 정보는 내 보낸 html 파일에 포함됩니다. 이를 비활성화하고 외부 CSS 파일을 사용하여 글꼴 서식 정보를 지정할 계획임을 org-mode에 알려야합니다.

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-file에서 사용할 CSS 파일을 지정하십시오. 이 파일에는 각 org-클래스의 형식을 지정하는 방법에 대한 정보가 포함됩니다 .

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

CSS

여기에서의 색상 코드를 복사 한 내 사용자 지정 테마 CSS 파일이 leuven-theme있습니다. 내 git에서 아래 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

org 모드 no-theme-inherit가 # + BEGIN_SRC에 대한 인수를 승인 한 경우 , 예 #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRC를 들어 코드에 대해 이맥스 기본 글꼴 화 정보 (이 경우 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.