emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Way to mark contents of an Org special block as verbatim?


From: Berry, Charles
Subject: Re: Way to mark contents of an Org special block as verbatim?
Date: Sun, 9 Jan 2022 03:01:13 +0000


> On Jan 8, 2022, at 3:29 PM, Kaushal Modi <kaushal.modi@gmail.com> wrote:
> 
>> What am I missing?
>> 
>> It seems like you want your derived backend to transcode special blocks 
>> somewhat differently than the parent backend. And adding a special block 
>> export filter doesn't quite do the job.
> 
> I tried out the example Juan posted and it works perfectly well. But
> it would require to user to do something similar for each arbitrary
> new special block they need. E.g. #+being_katex, #+begin_tikz,
> #+begin_tikzjax (could be anything!) where the content needs to be
> kept unmodified.
> 

Right, so maybe use `(member type <list of accepted types>)' rather than 
'(equals type "newlatex")' in the3 example below.


>> For that purpose, you should write a special block transcoder - perhaps 
>> falling back to the parent backend for block types you do not wish to handle 
>> as described above.
> 
> Can you please point me to an example?
> 

A simple one here:

#+begin_src emacs-lisp
  ;; minimal backend with latex parent
  (org-export-define-derived-backend 'newlatex 'latex
    :translate-alist
    '((special-block . org-newlatex-special-block)))

  ;; special block transcoder
  (defun org-newlatex-special-block (special-block contents info)
    "Newlatex special block transcoder."
    (let
         ((type (org-element-property :type special-block)))
      (if (equal type "newlatex")
          (format "{{<FOO>}}\n%s{{<//FOO>}}\n" contents)
        ;; not `newlatex` so default to latex transcoder
        (org-export-with-backend 'latex special-block contents info))))
#+end_src

Eval the above, then use this as an example by copying the following
src block to an org buffer and entering

M-; (org-export-to-buffer 'newlatex "*Org NEW LATEX Export*" nil nil nil t) RET

#+begin_src org

  ,#+begin_newlatex
  This is the new content
  ,#+end_newlatex


  ,#+attr_latex: :caption \MyCaption{HeadingA}
  ,#+BEGIN_proof
         dot-dot-dot
  ,#+END_proof

#+end_src

I get an *Org NEW LATEX Export* buffer like this:

#+begin_example
{{<FOO>}}
This is the new content
{{<//FOO>}}


\begin{proof}
dot-dot-dot
\MyCaption{HeadingA}
\end{proof}

#+end_example


>> Block specific customizations could rely on a backend specific attribute.
> 
> Yes, I am doing block-specific customization (like support
> #+attr_shortcode above special blocks here[1]). But I don't know how
> to get back the original content of the special block because the
> `contents` arg received by the exporter's org-hugo-special-block
> already has the Org entities, and sub/super replacements done.
> 
> [1]: 
> https://urldefense.com/v3/__https://github.com/kaushalmodi/ox-hugo/blob/458142675bb5a0e7ee26ecea07d75c10aa52184b/ox-hugo.el*L2872__;Iw!!LLK065n_VXAQ!xZhh--YwGpo06BbAHLF_A2MY_4mk4gBxHgFG3InZakP_7mdFDpyBNMgqvDVvBimzWQ$
>  





reply via email to

[Prev in Thread] Current Thread [Next in Thread]