alhassy/org-special-block-extras

Support LaTeX's `\blockcquote`

Opened this issue · 2 comments

I'd love to have a LaTeX special block which would correctly export to the respective \blockcquote command. For example,

#+begin_bquote :key zermelo1908 :pages 20-22

    This is a blockquote.

#+end_bquote

should export to \blockcquote[20-22]{zermelo1908}{This is a quote.}. Could you implement it, or does anyone have an idea how to do it?

@Perangelot This should be straightforward to make.

To make it, start with this simple exercise (with solutions) on how to define a new block type 😉

In LaTeX, the blockcquote block simply expands to the LaTeX-command \blockcquote. In beamer, it results in a quote environment in which the text is placed, below of which the full author name, the title of the work and the year it was published are displayed. For the beamer implementation, the command \citeauthorfull has to be defined like this:

\DeclareCiteCommand{\citeauthorfull}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \DeclareNameAlias{labelname}{first-last}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   \printtext[bibhyperref]{\printnames{labelname}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

Although not a mandatory argument, citekey is needed for it to work properly.

Here is the code:

(org-defblock blockcquote nil (citekey "" pages "" above "1em" below "0.5em")
              "For LaTeX, use the `blockcquote' command, for beamer, use the `quote' environment with the quote description centered below."
              (cond
               ((equal backend 'latex)
                (format "\\blockcquote[%s]{%s}{%s}"
                        pages citekey contents))
               ((equal backend 'beamer)
                ()
                (format "\\vskip %s
  \\begin{quote}
  %s
  \\end{quote} \\pause \\vskip %s
  \\begin{center}
  \\vskip -1em
  \\parbox[c]{0.8\\linewidth}{\\centering \\textemdash~\\citeauthorfull{%s}, \\citefield{%s}{title}, \\citeyear{%s}}
  \\end{center}"
                        above raw-contents below citekey citekey citekey))))