From: Rasmus <rasmus@gmx.us>
To: emacs-orgmode@gnu.org
Subject: Re: [ox, patch] #+SUBTITLE
Date: Thu, 02 Apr 2015 00:34:41 +0200 [thread overview]
Message-ID: <871tk3scji.fsf@gmx.us> (raw)
In-Reply-To: <87vbhhxx3c.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Tue, 31 Mar 2015 12:47:19 +0200")
[-- Attachment #1: Type: text/plain, Size: 788 bytes --]
Hi,
>>> For the record, if the situation ever rises again, I think that
>>> a keyword can be added to "ox.el" only if
>>>
>>> - it is supported at least in every major back-end (ASCII, HTML,
>>> LaTeX, ODT and Texinfo)
>>> - it comes with a toggle in the OPTIONS line e.g. keyword:nil
>>
>> For subtitle I'm reusing :with-title. If you think it necessary, I can
>> add a :with-subtitle, but I didn't think it was necessary.
>
> It doesn't apply here since SUBTITLE isn't defined in "ox.el". You can
> do whatever you think is appropriate for SUBTITLE.
I mainly changed documentation.
It would still be good if somebody who knows html and css would comment on
the implemented style in ox-html.
—Rasmus
--
I feel emotional landscapes they puzzle me
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ox-Add-SUBTITLE-property-in-some-backends.patch --]
[-- Type: text/x-diff, Size: 26973 bytes --]
From 56af4153a12383de5b69f290d420f8f01b7b5f2a Mon Sep 17 00:00:00 2001
From: Rasmus <rasmus@gmx.us>
Date: Sun, 1 Mar 2015 22:09:19 +0100
Subject: [PATCH] ox: Add SUBTITLE property in some backends
* ox-ascii.el (org-ascii-template--document-title)
(org-ascii-template--document-title)
ox-deck.el (org-deck-title-slide-template)
ox-s5.el (org-s5-title-slide-template)
ox-html.el (org-html--build-meta-info, org-html-format-spec)
(org-html--build-meta-info, org-html-format-spec)
(org-html--build-meta-info, org-html-format-spec)
ox-org.el (org), (org-org-keyword): Use SUBTITLE.
* ox-beamer.el (org-beamer-template)
ox-html (org-html-template)
ox-latex.el (org-latex-template)
ox-org (org-org-template): Insert SUBTITLE.
* ox-html (org-html-preamble-format) (org-html-postamble-format):
Update docstring.
* ox-html (org-html-style-default): Add .subtitle style and
change .title style.
* ox-texinfo.el (org-texinfo-template): Interpret subtitle.
* org.texi (ASCII/Latin-1/UTF-8 export): New section.
(Beamer specific export settings)
(HTML Specific export settings)
(@LaTeX{} specific export settings)
(ODT specific export settings)
(ASCII/Latin-1/UTF-8 export): Document SUBTITLE.
* ORG-NEWS: Add entry on SUBTITLE.
The patch adds a #+SUBTITLE keyword to ox-ascii, ox-latex, ox-html and
ox-odt.
---
contrib/lisp/ox-deck.el | 7 +++++++
contrib/lisp/ox-s5.el | 7 +++++++
doc/org.texi | 45 +++++++++++++++++++++++++++++++++++++++++++--
etc/ORG-NEWS | 33 ++++-----------------------------
lisp/ox-ascii.el | 22 +++++++++++++++++-----
lisp/ox-beamer.el | 20 +++++++++++++++++++-
lisp/ox-html.el | 37 +++++++++++++++++++++++++++++++------
lisp/ox-latex.el | 49 ++++++++++++++++++++++++++++++++++++++++++++-----
lisp/ox-odt.el | 30 ++++++++++++++++++++++++++++--
lisp/ox-texinfo.el | 10 +++++++---
10 files changed, 207 insertions(+), 53 deletions(-)
diff --git a/contrib/lisp/ox-deck.el b/contrib/lisp/ox-deck.el
index 7155863..915373f 100644
--- a/contrib/lisp/ox-deck.el
+++ b/contrib/lisp/ox-deck.el
@@ -38,6 +38,12 @@
;; See ox.el and ox-html.el for more details on how this exporter
;; works (it is derived from ox-html.)
+;; TODOs
+;; ------
+;; The title page is formatted using format-spec. This is error prone
+;; when details are missing and may insert empty tags, like <h2></h2>,
+;; for missing values.
+
(require 'ox-html)
(eval-when-compile (require 'cl))
@@ -261,6 +267,7 @@ Defaults to styles for the title page."
(defcustom org-deck-title-slide-template
"<h1>%t</h1>
+<h2>%s</h2>
<h2>%a</h2>
<h2>%e</h2>
<h2>%d</h2>"
diff --git a/contrib/lisp/ox-s5.el b/contrib/lisp/ox-s5.el
index b003919..503bfd0 100644
--- a/contrib/lisp/ox-s5.el
+++ b/contrib/lisp/ox-s5.el
@@ -48,6 +48,12 @@
;; in an Org mode buffer. See ox.el and ox-html.el for more details
;; on how this exporter works.
+;; TODOs
+;; ------
+;; The title page is formatted using format-spec. This is error prone
+;; when details are missing and may insert empty tags, like <h2></h2>,
+;; for missing values.
+
(require 'ox-html)
(eval-when-compile (require 'cl))
@@ -174,6 +180,7 @@ or an empty string."
(defcustom org-s5-title-slide-template
"<h1>%t</h1>
+<h2>%s</h2>
<h2>%a</h2>
<h3>%e</h3>
<h4>%d</h4>"
diff --git a/doc/org.texi b/doc/org.texi
index 2ab1bfe..6401399 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -10926,6 +10926,17 @@ When the original file is @file{myfile.txt}, the resulting file becomes
Export to a temporary buffer. Do not create a file.
@end table
+@subheading ASCII specific export settings
+
+ASCII export introduces a single of keywords, similar to the general options
+settings described in @ref{Export settings}.
+
+@table @samp
+@item SUBTITLE
+@cindex #+SUBTITLE (ASCII)
+The document subtitle.
+@end table
+
@subheading Header and sectioning structure
In the exported version, the first three outline levels become headlines,
@@ -11063,6 +11074,14 @@ inserted as metadata using @samp{hyperref}. Document metadata can be
configured via @code{org-latex-hyperref-template}. Description can also be
typeset as part of the front matter via @code{org-latex-title-command}. You
can use several @code{#+KEYWORDS} if the description is is long.
+
+@item SUBTITLE
+@cindex #+SUBTITLE (Beamer)
+@vindex org-beamer-subtitle-format
+The document subtitle. This is typeset using the format string
+@code{org-beamer-subtitle-format}. It can also access via
+@code{org-latex-hyperref-template} or typeset as part of the front
+matter via @code{org-latex-title-command}.
@end table
@node Sectioning Frames and Blocks in Beamer
@@ -11352,6 +11371,11 @@ is long.
@cindex #+LATEX_HEADER (HTML)
Arbitrary lines appended to the preamble used when transcoding @LaTeX{}
fragments to images. See @ref{Math formatting in HTML export} for details.
+
+@item SUBTITLE
+@cindex #+SUBTILE (HTML)
+The document subtitle. The formatting depends on whether HTML5 in used
+and on the @samp{subtitle} CSS class.
@end table
These keywords are treated in details in the following sections.
@@ -11700,6 +11724,7 @@ p.author @r{author information, including email}
p.date @r{publishing date}
p.creator @r{creator info, about org mode version}
.title @r{document title}
+.subtitle @r{document subtitle}
.todo @r{TODO keywords, all not-done states}
.done @r{the DONE keywords, all states that count as done}
.WAITING @r{each TODO keyword also uses a class named after itself}
@@ -11921,6 +11946,16 @@ inserted as metadata using @samp{hyperref}. Document metadata can be
configured via @code{org-latex-hyperref-template}. Description can also be
typeset as part of the front matter via @code{org-latex-title-command}. You
can use several @code{#+KEYWORDS} if the description is is long.
+
+@item SUBTITLE
+@cindex #+SUBTITLE (@LaTeX{})
+@vindex org-latex-subtitle-separate
+@vindex org-latex-subtitle-format
+The document subtitle. This is typeset according to
+@code{org-latex-subtitle-format}. If @code{org-latex-subtitle-separate}
+is non-@code{nil} it is typed as part of the @samp{\title}-macro. It
+can also access via @code{org-latex-hyperref-template} or typeset as
+part of the front matter via @code{org-latex-title-command}.
@end table
These keywords are treated in details in the following sections.
@@ -12410,6 +12445,10 @@ document metadata. You can use several such keywords if the list is long.
@vindex org-odt-styles-file
The style file of the document (@code{org-odt-styles-file}). See
@ref{Applying custom styles} for details.
+
+@item SUBTITLE
+@cindex SUBTITLE (ODT)
+The document subtitle.
@end table
@node Extending ODT export
@@ -13321,7 +13360,7 @@ options settings described in @ref{Export settings}.
@table @samp
@item SUBTITLE
-@cindex #+SUBTITLE
+@cindex #+SUBTITLE (Texinfo)
The document subtitle.
@item SUBAUTHOR
@@ -13401,7 +13440,6 @@ to define your own class in @code{org-texinfo-classes}, which see. Set
@subsubheading Title and copyright page
@cindex #+TEXINFO_PRINTED_TITLE
-@cindex #+SUBTITLE
The default template includes a title page for hard copy output. The title
and author displayed on this page are extracted from, respectively,
@code{#+TITLE} and @code{#+AUTHOR} keywords (@pxref{Export settings}). It is
@@ -14207,6 +14245,7 @@ however, override everything.
@item @code{:beamer-frame-default-options} @tab @code{org-beamer-frame-default-options}
@item @code{:beamer-outline-frame-options} @tab @code{org-beamer-outline-frame-options}
@item @code{:beamer-outline-frame-title} @tab @code{org-beamer-outline-frame-title}
+@item @code{:org-beamer-subtitle-format} @tab @code{org-beamer-subtitle-format}
@end multitable
@subsubheading HTML specific properties
@@ -14291,6 +14330,8 @@ however, override everything.
@item @code{:latex-listings} @tab @code{org-latex-listings}
@item @code{:latex-minted-langs} @tab @code{org-latex-minted-langs}
@item @code{:latex-minted-options} @tab @code{org-latex-minted-options}
+@item @code{:latex-subtitle-format} @tab @code{org-latex-subtitle-format}
+@item @code{:latex-subtitle-separate} @tab @code{org-latex-subtitle-separate}
@item @code{:latex-table-scientific-notation} @tab @code{org-latex-table-scientific-notation}
@item @code{:latex-tables-booktabs} @tab @code{org-latex-tables-booktabs}
@item @code{:latex-tables-centered} @tab @code{org-latex-tables-centered}
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 28e8394..a531de5 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -327,34 +327,9 @@ leading spaces within table cells.
*** New MathJax configuration options.
Org uses the MathJax CDN by default. See the manual and the docstring
of ~org-html-mathjax-options~ for details.
-** Miscellaneous
-*** Strip all meta data from ITEM special property
-ITEM special property does not contain TODO, priority or tags anymore.
-*** File names in links accept are now compatible with URI syntax
-Absolute file names can now start with =///= in addition to =/=. E.g.,
-=[[file:///home/me/unicorn.jpg]]=.
-*** Footnotes in included files are now local to the file
-As a consequence, it is possible to include multiple Org files with
-footnotes in a master document without being concerned about footnote
-labels colliding.
-*** Mailto links now use regular URI syntax
-This change deprecates old Org syntax for mailto links:
-=mailto:user@domain::Subject=.
-*** =QUOTE= keywords do not exist anymore
-=QUOTE= keywords have been deprecated since Org 8.2.
-*** Select tests to perform with the build system
-The build system has been enhanced to allow test selection with a
-regular expression by defining =BTEST_RE= during the test invocation.
-This is especially useful during bisection to find just when a
-particular test failure was introduced.
-*** Exact heading search for external links ignore spaces and cookies
-Exact heading search for links now ignore spaces and cookies. This is
-the case for links of the form ~file:projects.org::*task title~, as
-well as links of the form ~file:projects.org::some words~
-when ~org-link-search-must-match-exact-headline~ is not nil.
-*** ~org-latex-hyperref-template~, ~org-latex-title-command~ formatting
-New formatting keys are supported. See the respective docstrings.
-Note, ~org-latex-hyperref-template~ has a new default value.
+*** New ~#+SUBTITLE~ export keyword
+Org can typeset a subtitle in some export backends. See the manual
+for details.
* Version 8.2
** Incompatible changes
@@ -1430,7 +1405,7 @@ See http://orgmode.org/elpa/
| =C-c C-x E= | =E= | [[doc::org-inc-effort][org-inc-effort]] |
| | =#= | [[doc::org-toggle-comment][org-toggle-comment]] |
| | =:= | [[doc::org-columns][org-columns]] |
- | | =W= | Set =APPT_WARNTIME= |
+ | | =W= | Set =APPT_WARNTIME= |
| =k= | | [[doc::org-agenda-capture][org-agenda-capture]] |
| C-c , | , | [[doc::org-priority][org-priority]] |
diff --git a/lisp/ox-ascii.el b/lisp/ox-ascii.el
index 42495e2..5f11485 100644
--- a/lisp/ox-ascii.el
+++ b/lisp/ox-ascii.el
@@ -119,7 +119,8 @@
org-ascii-filter-comment-spacing)
(:filter-section . org-ascii-filter-headline-blank-lines))
:options-alist
- '((:ascii-bullets nil nil org-ascii-bullets)
+ '((:subtitle "SUBTITLE" nil nil space)
+ (:ascii-bullets nil nil org-ascii-bullets)
(:ascii-caption-above nil nil org-ascii-caption-above)
(:ascii-charset nil nil org-ascii-charset)
(:ascii-global-margin nil nil org-ascii-global-margin)
@@ -967,9 +968,15 @@ INFO is a plist used as a communication channel."
;; Links in the title will not be resolved later, so we make
;; sure their path is located right after them.
(info (org-combine-plists info '(:ascii-links-to-notes nil)))
- (title (if (plist-get info :with-title)
- (org-export-data (plist-get info :title) info)
- ""))
+ (with-title (plist-get info :with-title))
+ (title (org-export-data
+ (when with-title (plist-get info :title)) info))
+ (subtitle (org-export-data
+ (when with-title
+ (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword)))
+ info))
(author (and (plist-get info :with-author)
(let ((auth (plist-get info :author)))
(and auth (org-export-data auth info)))))
@@ -1012,8 +1019,12 @@ INFO is a plist used as a communication channel."
(let* ((utf8p (eq (plist-get info :ascii-charset) 'utf-8))
;; Format TITLE. It may be filled if it is too wide,
;; that is wider than the two thirds of the total width.
- (title-len (min (length title) (/ (* 2 text-width) 3)))
+ (title-len (min (max (length title)
+ (length subtitle))
+ (/ (* 2 text-width) 3)))
(formatted-title (org-ascii--fill-string title title-len info))
+ (formatted-subtitle (when (org-string-nw-p subtitle)
+ (org-ascii--fill-string subtitle title-len info)))
(line
(make-string
(min (+ (max title-len
@@ -1025,6 +1036,7 @@ INFO is a plist used as a communication channel."
(concat line "\n"
(unless utf8p "\n")
(upcase formatted-title)
+ (and formatted-subtitle (concat "\n" formatted-subtitle))
(cond
((and (org-string-nw-p author) (org-string-nw-p email))
(concat "\n\n" author "\n" email))
diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el
index 5d0b55d..b9b3e8c 100644
--- a/lisp/ox-beamer.el
+++ b/lisp/ox-beamer.el
@@ -133,6 +133,16 @@ You might want to put e.g. \"allowframebreaks=0.9\" here."
:type '(string :tag "Outline frame options"))
+(defcustom org-beamer-subtitle-format "\\subtitle{%s}"
+ "Format string used for transcoded subtitle.
+The format string should have at most one \"%s\"-expression,
+which is replaced with the subtitle."
+ :group 'org-export-beamer
+ :version "25.1"
+ :package-version '(Org . "8.3")
+ :type '(string :tag "Format string"))
+
+
\f
;;; Internal Variables
@@ -233,6 +243,7 @@ Return overlay specification, as a string, or nil."
:options-alist
'((:headline-levels nil "H" org-beamer-frame-level)
(:latex-class "LATEX_CLASS" nil "beamer" t)
+ (:beamer-subtitle-format nil nil org-beamer-subtitle-format)
(:beamer-column-view-format "COLUMNS" nil org-beamer-column-view-format)
(:beamer-theme "BEAMER_THEME" nil org-beamer-theme)
(:beamer-color-theme "BEAMER_COLOR_THEME" nil nil t)
@@ -810,7 +821,12 @@ information."
"Return complete document string after Beamer conversion.
CONTENTS is the transcoded contents string. INFO is a plist
holding export options."
- (let ((title (org-export-data (plist-get info :title) info)))
+ (let ((title (org-export-data (plist-get info :title) info))
+ (subtitle (org-export-data
+ (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword))
+ info)))
(concat
;; 1. Time-stamp.
(and (plist-get info :time-stamp-file)
@@ -877,6 +893,8 @@ holding export options."
(format "\\date{%s}\n" (org-export-data date info)))
;; 7. Title
(format "\\title{%s}\n" title)
+ (when (org-string-nw-p subtitle)
+ (concat (format (plist-get info :beamer-subtitle-format) subtitle) "\n"))
;; 8. Beamer-header
(let ((beamer-header (plist-get info :beamer-header)))
(when beamer-header
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 8c6406b..87daa6a 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -108,7 +108,8 @@
(if a (org-html-export-to-html t s v b)
(org-open-file (org-html-export-to-html nil s v b)))))))
:options-alist
- '((:html-doctype "HTML_DOCTYPE" nil org-html-doctype)
+ '((:subtitle "SUBTITLE" nil nil space)
+ (:html-doctype "HTML_DOCTYPE" nil org-html-doctype)
(:html-container "HTML_CONTAINER" nil org-html-container-element)
(:description "DESCRIPTION" nil nil newline)
(:keywords "KEYWORDS" nil nil space)
@@ -271,7 +272,12 @@ for the JavaScript code in this tag.
(defconst org-html-style-default
"<style type=\"text/css\">
<!--/*--><![CDATA[/*><!--*/
- .title { text-align: center; }
+ .title { text-align: center;
+ margin-bottom: .2em; }
+ .subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
@@ -1211,6 +1217,7 @@ The second element of each list is a format string to format the
postamble itself. This format string can contain these elements:
%t stands for the title.
+ %s stands for the subtitle.
%a stands for the author's name.
%e stands for the author's email.
%d stands for the date.
@@ -1275,6 +1282,7 @@ The second element of each list is a format string to format the
preamble itself. This format string can contain these elements:
%t stands for the title.
+ %s stands for the subtitle.
%a stands for the author's name.
%e stands for the author's email.
%d stands for the date.
@@ -1727,6 +1735,10 @@ INFO is a plist used as a communication channel."
"Return format specification for elements that can be
used in the preamble or postamble."
`((?t . ,(org-export-data (plist-get info :title) info))
+ (?s . ,(org-export-data (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword))
+ info))
(?d . ,(org-export-data (org-export-get-date info) info))
(?T . ,(format-time-string
(plist-get info :html-metadata-timestamp-format)))
@@ -1867,10 +1879,23 @@ holding export options."
(format "<%s id=\"%s\">\n" (nth 1 div) (nth 2 div)))
;; Document title.
(when (plist-get info :with-title)
- (let ((title (org-export-data
- (or (plist-get info :title) "") info)))
- (when (org-string-nw-p title)
- (format "<h1 class=\"title\">%s</h1>\n" title))))
+ (let ((title (plist-get info :title))
+ (subtitle (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword))))
+ (when title
+ (format
+ (if (plist-get info :html-html5-fancy)
+ "<header>\n<h1 class=\"title\">%s</h1>\n%s</header>"
+ "<h1 class=\"title\">%s%s</h1>\n")
+ (org-export-data title info)
+ (if subtitle
+ (format
+ (if (plist-get info :html-html5-fancy)
+ "<p class=\"subtitle\">%s</p>\n"
+ "\n<br>\n<span class=\"subtitle\">%s</span>\n")
+ (org-export-data subtitle info))
+ "")))))
contents
(format "</%s>\n" (nth 1 (assq 'content (plist-get info :html-divs))))
;; Postamble.
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index cfd1fdf..893496e 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -110,6 +110,7 @@
(:latex-header-extra "LATEX_HEADER_EXTRA" nil nil newline)
(:description "DESCRIPTION" nil nil newline)
(:keywords "KEYWORDS" nil nil space)
+ (:subtitle "SUBTITLE" nil nil space)
;; Other variables.
(:latex-active-timestamp-format nil nil org-latex-active-timestamp-format)
(:latex-caption-above nil nil org-latex-caption-above)
@@ -135,6 +136,8 @@
(:latex-listings-options nil nil org-latex-listings-options)
(:latex-minted-langs nil nil org-latex-minted-langs)
(:latex-minted-options nil nil org-latex-minted-options)
+ (:latex-subtitle-format nil nil org-latex-subtitle-format)
+ (:latex-subtitle-separate nil nil org-latex-subtitle-separate)
(:latex-table-scientific-notation nil nil org-latex-table-scientific-notation)
(:latex-tables-booktabs nil nil org-latex-tables-booktabs)
(:latex-tables-centered nil nil org-latex-tables-centered)
@@ -388,6 +391,7 @@ This format string may contain these elements:
%a for AUTHOR keyword
%t for TITLE keyword
+ %s for SUBTITLE keyword
%k for KEYWORDS line
%d for DESCRIPTION line
%c for CREATOR line
@@ -403,6 +407,22 @@ precedence over this variable."
:group 'org-export-latex
:type '(string :tag "Format string"))
+(defcustom org-latex-subtitle-format "\\\\\\medskip\n\\large %s"
+ "Format string used for transcoded subtitle.
+The format string should have at most one \"%s\"-expression,
+which is replaced with the subtitle."
+ :group 'org-export-latex
+ :version "25.1"
+ :package-version '(Org . "8.3")
+ :type '(string :tag "Format string"))
+
+(defcustom org-latex-subtitle-separate nil
+ "Non-nil means the subtitle is not typeset as part of title."
+ :group 'org-export-latex
+ :version "25.1"
+ :package-version '(Org . "8.3")
+ :type 'boolean)
+
(defcustom org-latex-toc-command "\\tableofcontents\n\n"
"LaTeX command to set the table of contents, list of figures, etc.
This command only applies to the table of contents generated with
@@ -419,6 +439,7 @@ This format string may contain these elements:
%a for AUTHOR keyword
%t for TITLE keyword
+ %s for SUBTITLE keyword
%k for KEYWORDS line
%d for DESCRIPTION line
%c for CREATOR line
@@ -1227,9 +1248,14 @@ INFO is a plist used as a communication channel."
verbatim))
(language (let ((lang (plist-get info :language)))
(or (cdr (assoc lang org-latex-babel-language-alist))
- lang))))
- `((?a . ,(org-export-data (plist-get info :author) info))
- (?t . ,(org-export-data (plist-get info :title) info))
+ lang ""))))
+ `((?a . ,(or (org-export-data (plist-get info :author) info) ""))
+ (?t . ,(or (org-export-data (plist-get info :title) info) ""))
+ (?s . ,(or (org-export-data
+ (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword))
+ info) ""))
(?k . ,(org-export-data (org-latex--wrap-latex-math-block
(org-element-parse-secondary-string
(plist-get info :keywords) objects)
@@ -1297,8 +1323,21 @@ holding export options."
;; Date.
(let ((date (and (plist-get info :with-date) (org-export-get-date info))))
(format "\\date{%s}\n" (org-export-data date info)))
- ;; Title
- (format "\\title{%s}\n" title)
+ ;; Title and subtitle.
+ (let* ((subtitle
+ (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword)))
+ (formatted-subtitle
+ (when subtitle
+ (format (plist-get info :latex-subtitle-format)
+ (org-export-data subtitle info))))
+ (separate (plist-get info :latex-subtitle-separate)))
+ (concat
+ (format "\\title{%s%s}\n" title
+ (if separate "" formatted-subtitle))
+ (when (and separate subtitle)
+ (concat formatted-subtitle "\n"))))
;; Hyperref options.
(let ((template (plist-get info :latex-hyperref-template)))
(and (stringp template)
diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el
index d52a3ae..427a3c5 100644
--- a/lisp/ox-odt.el
+++ b/lisp/ox-odt.el
@@ -99,6 +99,7 @@
'((:odt-styles-file "ODT_STYLES_FILE" nil nil t)
(:description "DESCRIPTION" nil nil newline)
(:keywords "KEYWORDS" nil nil space)
+ (:subtitle "SUBTITLE" nil nil space)
;; Other variables.
(:odt-content-template-file nil nil org-odt-content-template-file)
(:odt-display-outline-level nil nil org-odt-display-outline-level)
@@ -1328,6 +1329,11 @@ CONTENTS is the transcoded contents string. RAW-DATA is the
original parsed data. INFO is a plist holding export options."
;; Write meta file.
(let ((title (org-export-data (plist-get info :title) info))
+ (subtitle (org-export-data
+ (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword))
+ info))
(author (let ((author (plist-get info :author)))
(if (not author) "" (org-export-data author info))))
(email (plist-get info :email))
@@ -1365,6 +1371,10 @@ original parsed data. INFO is a plist holding export options."
(format "<meta:keyword>%s</meta:keyword>\n" keywords)
(format "<dc:subject>%s</dc:subject>\n" description)
(format "<dc:title>%s</dc:title>\n" title)
+ (when (org-string-nw-p subtitle)
+ (format
+ "<meta:user-defined meta:name=\"subtitle\">%s</meta:user-defined>\n"
+ subtitle))
"\n"
" </office:meta>\n" "</office:document-meta>")
nil (concat org-odt-zip-dir "meta.xml"))
@@ -1510,6 +1520,12 @@ original parsed data. INFO is a plist holding export options."
(insert
(let* ((title (and (plist-get info :with-title)
(org-export-data (plist-get info :title) info)))
+ (subtitle (when title
+ (org-export-data
+ (org-element-parse-secondary-string
+ (plist-get info :subtitle)
+ (org-element-restriction 'keyword))
+ info)))
(author (and (plist-get info :with-author)
(let ((auth (plist-get info :author)))
(and auth (org-export-data auth info)))))
@@ -1521,10 +1537,20 @@ original parsed data. INFO is a plist holding export options."
;; Title.
(when (org-string-nw-p title)
(concat
- (format "\n<text:p text:style-name=\"%s\">%s</text:p>"
+ (format "\n<text:p text:style-name=\"%s\">%s</text:p>\n"
"OrgTitle" (format "\n<text:title>%s</text:title>" title))
;; Separator.
- "\n<text:p text:style-name=\"OrgTitle\"/>"))
+ "\n<text:p text:style-name=\"OrgTitle\"/>\n"
+ ;; Subtitle.
+ (when (org-string-nw-p subtitle)
+ (concat
+ (format "<text:p text:style-name=\"OrgSubtitle\">\n%s\n</text:p>\n"
+ (concat
+ "<text:user-defined style:data-style-name=\"N0\" text:name=\"subtitle\">\n"
+ subtitle
+ "</text:user-defined>\n"))
+ ;; Separator.
+ "<text:p text:style-name=\"OrgSubtitle\"/>\n"))))
(cond
((and author (not email))
;; Author only.
diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el
index 140e217..e2708c7 100644
--- a/lisp/ox-texinfo.el
+++ b/lisp/ox-texinfo.el
@@ -570,9 +570,13 @@ holding export options."
(concat
(format "@title %s\n" (or (plist-get info :texinfo-printed-title) title ""))
(let ((subtitle (plist-get info :subtitle)))
- (and subtitle
- (org-element-normalize-string
- (replace-regexp-in-string "^" "@subtitle " subtitle))))))
+ (when subtitle
+ (format "@subtitle %s\n"
+ (org-export-data
+ (org-element-parse-secondary-string
+ subtitle
+ (org-element-restriction 'keyword))
+ info))))))
(when (plist-get info :with-author)
(concat
;; Primary author.
--
2.3.4
next prev parent reply other threads:[~2015-04-01 22:34 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-27 14:19 [ox, patch] #+SUBTITLE Rasmus
2015-03-27 15:08 ` Andreas Leha
2015-03-27 15:12 ` Rasmus
2015-03-27 15:35 ` Andreas Leha
2015-03-28 15:40 ` Nicolas Goaziou
2015-03-28 15:55 ` Rasmus
2015-03-28 17:15 ` Thomas S. Dye
2015-03-29 9:44 ` Nicolas Goaziou
2015-03-29 11:50 ` Rasmus
2015-03-29 13:05 ` Nicolas Goaziou
2015-03-29 13:13 ` Rasmus
2015-03-30 7:39 ` Nicolas Goaziou
2015-03-30 10:35 ` Rasmus
2015-03-31 10:18 ` Nicolas Goaziou
2015-03-31 10:35 ` Rasmus
2015-03-31 10:47 ` Nicolas Goaziou
2015-03-31 15:50 ` [org.texi] New keywords tables (was: [ox, patch] #+SUBTITLE) Rasmus
2015-03-31 20:33 ` [org.texi] New keywords tables Nicolas Goaziou
2015-03-31 21:57 ` Rasmus
2015-04-01 11:53 ` Rasmus
2015-04-01 19:37 ` Nicolas Goaziou
2015-04-01 21:55 ` Rasmus
2015-04-01 22:34 ` Rasmus [this message]
2015-04-08 21:25 ` [ox, patch] #+SUBTITLE Rasmus
2015-03-29 11:16 ` Rasmus
2015-03-31 10:21 ` Nicolas Goaziou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871tk3scji.fsf@gmx.us \
--to=rasmus@gmx.us \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).