कस्टम फॉन्टिफिकेशन के साथ ऑर्ग मोड में कस्टम पैराग्राफ को कैसे परिभाषित करें?

Aug 17 2020

मैं कस्टम फ़ॉन्ट के साथ कस्टम मोड को ऑर्गन मोड में कैसे परिभाषित कर सकता हूं, उदाहरण के लिए कुछ

#+BEGIN_MYPAR
Some text 
#+END_MYPAR

फिर मैं उदाहरण के लिए चाहता हूं कि यह ब्लॉक नारंगी फ़ॉन्ट रंग में प्रदर्शित किया गया है, एक पाठ के बाकी हिस्सों की तुलना में बड़ा है, बोल्ड चेहरा और एक टैब से इंडेंट किया गया है।

मैं यह कैसे कर सकता हूँ?

संपादित करें :

सवाल यह है कि कैसे एमएसीएस बफर में चीजों को प्रदर्शित किया जाता है, निर्यात में नहीं (हालांकि यह एक अनुवर्ती प्रश्न हो सकता है)।

जवाब

2 Tobias Aug 27 2020 at 21:29

यदि आप विशेष ब्लॉकों के बजाय स्रोत ब्लॉकों का उपयोग करते हैं तो आप अपने लक्ष्य तक काफी सरल पहुंच जाते हैं। अपनी स्वयं की प्रमुख विधा को परिभाषित करें, mypar-modeइसकी सहायता से define-generic-modeकहें या define-derived-modeउस प्रमुख विधा के लिए फ़ॉन्टकरण सेटअप करें जैसे आप चाहते हैं।

सुनिश्चित करें कि org-src-fontify-nativelyऔर org-src-preserve-indentationदोनों इस तरह सेट हैं कि 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स्रोत ब्लॉक ऑर्ग में कैसा दिखता है:

1 Tobias Aug 23 2020 at 23:09

पहले ध्यान दें, कि आपका प्रश्न थोड़ा अस्पष्ट है। एचटीएमएल-एक्सपोर्ट या लाटेकएक्स-एक्सपोर्ट में आप पैराग्राफ की इस विशेष प्रारूपण को कहां चाहते हैं? या एमएसीएस में ऑर्ग-बफर के प्रतिनिधित्व में भी?

मैं आपको यहाँ HTML- और LaTeX- निर्यात का उत्तर देता हूँ।

एचटीएमएल-निर्यात के लिए मुख्य विचार यह है कि विशेष ब्लॉकMYPAR में पाठ की शैली वर्ग निर्धारित करता है ।

आप #+HTML_HEADमेटा-लाइनों के भीतर अपनी खुद की शैली को परिभाषित कर सकते हैं ।

LaTeX- निर्यात के लिए मुख्य विचार यह है कि MYPARLaTeX वातावरण को निर्धारित करता है जहां विशेष ब्लॉक का पाठ डाला जाता है। आप #+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.