Como definir tipos de parágrafo personalizados no modo org com fonte personalizada?
Como posso definir blocos de parágrafo personalizados no modo org com uma fonte personalizada, por exemplo, algo como
#+BEGIN_MYPAR
Some text
#+END_MYPAR
Então eu quero, por exemplo, que este bloco seja exibido na cor de fonte laranja, um ponto maior que o resto do texto, em negrito e recuado em uma guia.
Como posso fazer isso?
Editar :
A questão é sobre como as coisas são exibidas no buffer do emacs, não nas exportações (embora esta possa ter sido uma questão de acompanhamento).
Respostas
Você atinge seu objetivo de forma bastante simples se usar blocos de origem em vez de blocos especiais. Defina seu próprio modo principal, digamos mypar-mode
com a ajuda de define-generic-mode
ou define-derived-mode
e configure a fonte para esse modo principal como você deseja.
Certifique-se de que org-src-fontify-natively
e org-src-preserve-indentation
estão configurados para t de forma que os mypar
blocos de origem no buffer Org se pareçam tanto quanto possível com os buffers de origem com fonte.
Se você htmlizeinstalou, obtém a maior parte da formatação desejada na exportação de HTML gratuitamente.
Um exemplo de código que testei com Emacs 27.1 e 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)
Por fim, uma imagem de como um mypar
bloco de origem se parece na Org:

Em primeiro lugar, observe que sua pergunta é um pouco vaga. Onde você deseja ter essa formatação especial do parágrafo - em HTML-export ou LaTeX-export? Ou mesmo na representação do Org-buffer no Emacs?
Apresento aqui uma resposta para exportação de HTML e LaTeX.
A ideia principal para a exportação de HTML é que MYPAR
determina a classe de estilo do texto no bloco especial .
Você pode definir seu próprio estilo dentro de #+HTML_HEAD
meta-linhas.
A ideia principal para a exportação LaTeX é que MYPAR
determina o ambiente LaTeX onde o texto do bloco especial é colocado. Você pode definir esse ambiente personalizado dentro de #+LATEX_HEADER
meta-linhas.
Um exemplo:
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.