사용자 정의 글꼴을 사용하여 조직 모드에서 사용자 정의 단락 유형을 정의하는 방법은 무엇입니까?

Aug 17 2020

사용자 정의 글꼴을 사용하여 조직 모드에서 사용자 정의 단락 블록을 정의하려면 어떻게해야합니까?

#+BEGIN_MYPAR
Some text 
#+END_MYPAR

그런 다음 예를 들어이 블록이 나머지 텍스트보다 한 포인트 더 크고 굵은 글꼴로 표시되고 하나의 탭으로 들여 쓰기를 원합니다.

어떻게 할 수 있습니까?

편집 :

문제는 내보내기가 아닌 emacs 버퍼에 사물이 어떻게 표시되는지에 관한 것입니다 (이는 후속 질문 일 수 있음).

답변

2 Tobias Aug 27 2020 at 21:29

특수 블록 대신 소스 블록을 사용하면 목표에 매우 간단하게 도달 할 수 있습니다. 또는 mypar-mode도움을 받아 자신의 주 모드를 정의 하고 원하는대로 해당 주 모드에 대한 글꼴을 설정합니다.define-generic-modedefine-derived-mode

Org 버퍼 의 소스 블록이 글꼴 화 된 소스 버퍼와 최대한 비슷하게 보이 도록 org-src-fontify-nativelyorg-src-preserve-indentation둘 다 t로 설정되어 있는지 확인합니다 mypar.

htmlize설치 한 경우 HTML 내보내기에서 원하는 대부분의 형식을 무료로 얻을 수 있습니다.

Emacs 27.1 및 Org 9.3.7에서 테스트 한 코드 예제 :

(require 'org)
(require 'cl-lib)
(define-generic-mode mypar-mode
  nil ;; comment-list
  nil ;; keyword-list
  ;; font-lock-list:
  '(("^.*$"
     ;; match-highlight:
     (0 ;; subexpression
      ;; facename:
      `(face (:inherit default :foreground "orange" :height 1.5 :weight bold) ;; we use an anonymous face
         ;; indent:
         line-prefix "\t"
         wrap-prefix "\t")
      )))
  nil ;; auto-mode-list
  '((lambda ()
      "Make `line-prefix' and `wrap-prefix' work in the source fontification buffer."
      (setq-local font-lock-extra-managed-props '(line-prefix wrap-prefix))
      ));; function-list
  "Formatting MYPAR blocks.")

(defun org+-hack-org-fontification ()
  "Make `wrap-prefix' and `line-prefix' text properties work in Org buffers."
  (setq-local font-lock-extra-managed-props (cl-union
                         '(line-prefix wrap-prefix)
                         font-lock-extra-managed-props)))

(add-hook 'org-mode-hook #'org+-hack-org-fontification)
(setq org-src-fontify-natively t
      org-src-preserve-indentation t)

마침내 mypar소스 블록이 Org에서 어떻게 보이는지 이미지 :

1 Tobias Aug 23 2020 at 23:09

먼저 귀하의 질문이 약간 모호하다는 점에 유의하십시오. HTML 내보내기 또는 LaTeX 내보내기에서이 특수한 단락 서식을 원하는 위치는 어디입니까? 아니면 Emacs의 Org-buffer 표현에서도?

여기서 HTML 및 LaTeX 내보내기에 대한 답변을 제공합니다.

HTML 내보내기의 주요 아이디어 MYPAR는 특수 블록 에있는 텍스트의 스타일 클래스 를 결정하는 것입니다 .

#+HTML_HEAD메타 라인 내에서 자신 만의 스타일을 정의 할 수 있습니다 .

LaTeX-export의 주요 아이디어 MYPAR는 특수 블록 의 텍스트 가 삽입 되는 LaTeX 환경 을 결정하는 것입니다. #+LATEX_HEADER메타 라인 내에서 해당 사용자 정의 환경을 정의 할 수 있습니다 .

예 :

Some text before my paragraph. Let this paragraph have some more text. It should have at least two lines.
#+BEGIN_MYPAR
Some text in my paragraph. Let this paragraph have some more text. It should have at least two lines. Even a third line would be nice to have. So we continue this text for some time.
#+END_MYPAR
Some text after my paragraph. Let this paragraph have some more text. It should have at least two lines.

* Style :noexport:
This section is just for definition of HTML and LaTeX formatting.
#+HTML_HEAD: <style>.MYPAR { color:orange; text-indent:8em; font-weight:bold; foint-size:110% }</style>
#+LATEX_HEADER: \usepackage{xcolor}
#+LATEX_HEADER: \newdimen\myparindent\myparindent8em
#+LATEX_HEADER: \newdimen\myparwidth\myparwidth\textwidth\advance\myparwidth-\myparindent
#+LATEX_HEADER: \newenvironment{MYPAR}{\par\noindent\hfill\begin{minipage}[t]{\myparwidth}\bf\color{orange}\fontsize{1em}{1.2em}\selectfont}{\par\xdef\tpd{\the\prevdepth}\end{minipage}\par\prevdepth\tpd}
See https://tex.stackexchange.com/questions/35933/indenting-a-whole-paragraph for using ~minipage~ for indenting a whole paragraph.