ox-latex.el: Support specific attributes for verse block
* lisp/ox-latex.el (org-latex-verse-block): Support verse-specific attributes. * doc/org-manual.org (Verse blocks in LaTeX export): New section. Link: https://orgmode.org/list/874kfdn0k5.fsf@posteo.net/
This commit is contained in:
parent
e0bc2b37fb
commit
89040fbf95
|
@ -13871,6 +13871,54 @@ The LaTeX export back-end converts horizontal rules by the specified
|
||||||
-----
|
-----
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
|
*** Verse blocks in LaTeX export
|
||||||
|
:PROPERTIES:
|
||||||
|
:DESCRIPTION: Attributes specific to special blocks.
|
||||||
|
:END:
|
||||||
|
|
||||||
|
#+cindex: verse blocks, in @LaTeX{} export
|
||||||
|
#+cindex: @samp{ATTR_LATEX}, keyword
|
||||||
|
|
||||||
|
The LaTeX export back-end accepts four attributes for verse blocks:
|
||||||
|
=:lines=, =:center=, =:versewidth= and =:latexcode=. The three first
|
||||||
|
require the external LaTeX package =verse.sty=, wich is an extension
|
||||||
|
of the standard LaTeX environment. The purpose of these attributes is
|
||||||
|
explained below.
|
||||||
|
|
||||||
|
- =:lines= :: To add marginal verse numbering. Its value is an
|
||||||
|
integer, the sequence in which the verses should be numbered.
|
||||||
|
- =:center= :: With value =t= all the verses on the page are optically
|
||||||
|
centered (a typographic convention for poetry), taking as a
|
||||||
|
reference the longest verse, which must be indicated by the
|
||||||
|
attribute =:versewidth=.
|
||||||
|
- =:versewidth= :: Its value is a literal text string with the longest
|
||||||
|
verse.
|
||||||
|
- =:latexcode= :: It accepts any arbitrary LaTeX code that can be
|
||||||
|
included within a LaTeX =verse= environment.
|
||||||
|
|
||||||
|
A complete example with Shakespeare's first sonnet:
|
||||||
|
|
||||||
|
#+begin_src org
|
||||||
|
,#+ATTR_LaTeX: :center t :latexcode \color{red} :lines 5
|
||||||
|
,#+ATTR_LaTeX: :versewidth Feed’st thy light’st flame with self-substantial fuel,
|
||||||
|
,#+begin_verse
|
||||||
|
From fairest creatures we desire increase,
|
||||||
|
That thereby beauty’s rose might never die,
|
||||||
|
But as the riper should by time decrease,
|
||||||
|
His tender heir mught bear his memeory:
|
||||||
|
But thou, contracted to thine own bright eyes,
|
||||||
|
Feed’st thy light’st flame with self-substantial fuel,
|
||||||
|
Making a famine where abundance lies,
|
||||||
|
Thyself thy foe, to thy sweet self too cruel.
|
||||||
|
Thou that art now the world’s fresh ornament
|
||||||
|
And only herald to the gaudy spring,
|
||||||
|
Within thine own bud buriest thy content
|
||||||
|
And, tender churl, makest waste in niggarding.
|
||||||
|
Pity the world, or else this glutton be,
|
||||||
|
To eat the world’s due, by the grave and thee.
|
||||||
|
,#+end_verse
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Markdown Export
|
** Markdown Export
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:DESCRIPTION: Exporting to Markdown.
|
:DESCRIPTION: Exporting to Markdown.
|
||||||
|
|
|
@ -3526,6 +3526,16 @@ channel."
|
||||||
"Transcode a VERSE-BLOCK element from Org to LaTeX.
|
"Transcode a VERSE-BLOCK element from Org to LaTeX.
|
||||||
CONTENTS is verse block contents. INFO is a plist holding
|
CONTENTS is verse block contents. INFO is a plist holding
|
||||||
contextual information."
|
contextual information."
|
||||||
|
(let* ((lin (org-export-read-attribute :attr_latex verse-block :lines))
|
||||||
|
(latcode (org-export-read-attribute :attr_latex verse-block :latexcode))
|
||||||
|
(cent (org-export-read-attribute :attr_latex verse-block :center))
|
||||||
|
(attr (concat
|
||||||
|
(if cent "[\\versewidth]" "")
|
||||||
|
(if lin (format "\n\\poemlines{%s}" lin) "")
|
||||||
|
(if latcode (format "\n%s" latcode) "")))
|
||||||
|
(versewidth (org-export-read-attribute :attr_latex verse-block :versewidth))
|
||||||
|
(vwidth (if versewidth (format "\\settowidth{\\versewidth}{%s}\n" versewidth) ""))
|
||||||
|
(linreset (if lin "\n\\poemlines{0}" "")))
|
||||||
(concat
|
(concat
|
||||||
(org-latex--wrap-label
|
(org-latex--wrap-label
|
||||||
verse-block
|
verse-block
|
||||||
|
@ -3533,19 +3543,20 @@ contextual information."
|
||||||
;; character and change each white space at beginning of a line
|
;; character and change each white space at beginning of a line
|
||||||
;; into a space of 1 em. Also change each blank line with
|
;; into a space of 1 em. Also change each blank line with
|
||||||
;; a vertical space of 1 em.
|
;; a vertical space of 1 em.
|
||||||
(format "\\begin{verse}\n%s\\end{verse}"
|
(format "%s\\begin{verse}%s\n%s\\end{verse}%s"
|
||||||
|
vwidth
|
||||||
|
attr
|
||||||
(replace-regexp-in-string
|
(replace-regexp-in-string
|
||||||
"^[ \t]+" (lambda (m) (format "\\hspace*{%dem}" (length m)))
|
"^[ \t]+" (lambda (m) (format "\\hspace*{%dem}" (length m)))
|
||||||
(replace-regexp-in-string
|
(replace-regexp-in-string
|
||||||
"^[ \t]*\\\\\\\\$" "\\vspace*{1em}"
|
"^[ \t]*\\\\\\\\$" "\\vspace*{1em}"
|
||||||
(replace-regexp-in-string
|
(replace-regexp-in-string
|
||||||
"\\([ \t]*\\\\\\\\\\)?[ \t]*\n" "\\\\\n"
|
"\\([ \t]*\\\\\\\\\\)?[ \t]*\n" "\\\\\n"
|
||||||
contents nil t) nil t) nil t))
|
contents nil t) nil t) nil t) linreset)
|
||||||
info)
|
info)
|
||||||
;; Insert footnote definitions, if any, after the environment, so
|
;; Insert footnote definitions, if any, after the environment, so
|
||||||
;; the special formatting above is not applied to them.
|
;; the special formatting above is not applied to them.
|
||||||
(org-latex--delayed-footnotes-definitions verse-block info)))
|
(org-latex--delayed-footnotes-definitions verse-block info))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;; End-user functions
|
;;; End-user functions
|
||||||
|
|
Loading…
Reference in New Issue