¿Cómo definir tipos de párrafos personalizados en modo org con fontificación personalizada?
¿Cómo puedo definir bloques de párrafo personalizados en el modo de organización con una fuente personalizada, por ejemplo algo como
#+BEGIN_MYPAR
Some text
#+END_MYPAR
Entonces quiero, por ejemplo, que este bloque se muestre en color de fuente naranja, un punto más grande que el resto del texto, en negrita y con sangría en una pestaña.
¿Cómo puedo hacer esto?
Editar :
La pregunta es sobre cómo se muestran las cosas en el búfer de emacs, no en las exportaciones (aunque esta puede haber sido una pregunta de seguimiento).
Respuestas
Alcanza su objetivo de manera bastante simple si usa bloques de origen en lugar de bloques especiales. Defina su propio modo principal, digamos mypar-mode
con la ayuda de define-generic-mode
o define-derived-mode
y configure la fuente para ese modo principal como lo desee.
Asegúrese de que org-src-fontify-natively
y org-src-preserve-indentation
estén configurados en t de manera que los mypar
bloques de origen en el búfer de organización se parezcan lo más posible a los búferes de origen con fuente.
Si lo ha htmlizeinstalado, obtendrá la mayor parte del formato deseado en la exportación HTML de forma gratuita.
Un ejemplo de código que he probado con Emacs 27.1 y 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 fin una imagen de cómo se mypar
ve un bloque fuente en Org:

En primer lugar, tenga en cuenta que su pregunta es un poco vaga. ¿Dónde desea tener este formato especial del párrafo, en HTML-export o LaTeX-export? ¿O incluso en la representación del búfer Org en Emacs?
Te doy aquí una respuesta para la exportación de HTML y LaTeX.
La idea principal de la exportación HTML es que MYPAR
determina la clase de estilo del texto en el bloque especial .
Puede definir su propio estilo dentro de las #+HTML_HEAD
meta-líneas.
La idea principal de la exportación LaTeX es que MYPAR
determina el entorno LaTeX donde se coloca el texto del bloque especial . Puede definir ese entorno personalizado dentro de las #+LATEX_HEADER
meta-líneas.
Un ejemplo:
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.