Bagaimana cara menentukan jenis paragraf khusus dalam mode org dengan fontifikasi khusus?
Bagaimana saya bisa mendefinisikan blok paragraf khusus dalam mode org dengan fontifikasi khusus, misalnya sesuatu seperti
#+BEGIN_MYPAR
Some text
#+END_MYPAR
Lalu saya ingin misalnya blok ini ditampilkan dengan warna font oranye, satu poin lebih besar dari teks lainnya, wajah tebal dan diindentasi oleh satu tab.
Bagaimana saya bisa melakukan ini?
Edit :
Pertanyaannya adalah tentang bagaimana hal-hal ditampilkan di buffer emacs, bukan di ekspor (meskipun ini mungkin pertanyaan lanjutan).
Jawaban
Anda mencapai tujuan Anda cukup sederhana jika Anda menggunakan blok sumber, bukan blok khusus. Tentukan mode utama Anda sendiri, katakan mypar-mode
dengan bantuan define-generic-mode
atau define-derived-mode
dan atur fontifikasi untuk mode utama itu seperti yang Anda inginkan.
Pastikan bahwa org-src-fontify-natively
dan org-src-preserve-indentation
keduanya disetel ke t sehingga mypar
blok sumber di buffer Org terlihat sebanyak mungkin seperti buffer sumber fontified.
Jika Anda telah htmlizemenginstal Anda mendapatkan sebagian besar format yang diinginkan dalam ekspor HTML secara gratis.
Contoh kode yang telah saya uji dengan Emacs 27.1 dan 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)
Akhirnya gambar bagaimana mypar
blok sumber terlihat di Org:

Catatan pertama, pertanyaan Anda agak kabur. Di mana Anda ingin memiliki pemformatan khusus paragraf ini - dalam HTML-export atau LaTeX-export? Atau bahkan dalam representasi Org-buffer di Emacs?
Saya memberi Anda di sini jawaban untuk HTML- dan LaTeX-export.
Ide utama untuk ekspor-HTML adalah yang MYPAR
menentukan kelas gaya teks di blok khusus .
Anda dapat menentukan gaya Anda sendiri dalam #+HTML_HEAD
meta-line.
Ide utama untuk LaTeX-export adalah yang MYPAR
menentukan lingkungan LaTeX di mana teks dari blok khusus diletakkan di dalamnya. Anda dapat menentukan lingkungan kustom itu dalam #+LATEX_HEADER
meta-baris.
Sebuah contoh:
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.