emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] [PATCH] latex export - title placement


From: Sebastian Hofer
Subject: Re: [O] [PATCH] latex export - title placement
Date: Fri, 03 Jun 2011 10:11:36 +0200
User-agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (Gojō) APEL/10.8 Emacs/24.0.50 (x86_64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO)

At Fri, 03 Jun 2011 00:23:25 -0400,
Nick Dokos wrote:
> 
> Sebastian Hofer <address@hidden> wrote:
> 
> > At Thu, 02 Jun 2011 11:57:07 -0400,
> > Nick Dokos wrote:
> > > 
> > > > At Wed, 01 Jun 2011 18:05:28 -0400,
> > > > Nick Dokos wrote:
> > > > > 
> > > > > An empty
> > > > > 
> > > > > #+AUTHOR:
> > > > > 
> > > > > disables the insertion of author (assuming that TITLE is not empty -
> > > > > see below.)
> > > > > 
> > > > > 
> > > > > > >       - with-date (wdate)
> > > > > 
> > > > > An empty
> > > > > 
> > > > > #+DATE:
> > > > > 
> > > > > disables the insertion of date (same assumption.)
> > > > > 
> > > > > > >       - with-maketitle (wmtitle)
> > > > > 
> > > > > An empty
> > > > > 
> > > > > #+TITLE:
> > > > > 
> > > > > disables the insertion of \maketitle.
> > > > 
> > > > To be honest, I didn't try setting empty author and date (which of
> > > > course makes sense) I just tried not setting them at all, which gives
> > > > default values. The main reason I submitted this patch, however, is
> > > > having better control of \maketitle. Personally I would like to be
> > > > able to have the title and author at the beginning of the file, just
> > > > for the looks, and still be able to produce a customized title. Of
> > > > course it is highly debatable if this is a sound reason to introduce
> > > > new options (I would argue yes).
> > > > 
> > > 
> > > Before anybody else wastes their time on this: I'm not sure whether I
> > > was in an alternative universe yesterday, or I am in one today, but
> > > I can't even reproduce my own results. I'll start again and try to get it
> > > right this time, but I'm not going to be able to do that immediately.
> > > 
> > > Apologies for the confusion.
> > 
> > Concerning confusion: What I actually wanted to say above was that the
> > main focus of the patch was to provide means for controlling the
> > placement of \author, \date, \email etc., not \maketitle.
> > 
> > Apologies for the confusion :)
> > 
> 
> OK, let me restate my current conclusions (or confusions, as the case may be).
> First, I have to correct the empty cases:
> 
>   o an empty #+TITLE: generates a \title{} (in the preamble currently)
>     but does not generate a \maketitle.
> 
>   o an empty #+AUTHOR generates an \author{}.
> 
>   o an empty #+DATE   generates a  \date{}.
> 
> I don't know what I was smoking yesterday, but I was definitely hallucinating.
> 
> Then the absent cases:
> 
>   o an absent #+TITLE: generates a \title{foo} where "foo" is
>     heuristically obtained either from the buffer (it grabs the first
>     "text" (i.e. not starting with | or #) line before the first
>     headline - this seems a somewhat random heuristic to me) or from the
>     filename.
> 
>   o an absent #+AUTHOR generates an \author{foo} where foo is generated
>     from the user-full-name variable (and optionally additional email info).  
> 
>   o an absent #+DATE: generates a \date{\today}.
> 
> The author info can be suppressed by using
> 
> #+OPTIONS: author:nil
> 
> but the other two cannot - if Sebastian wants to modify his patch,
> suppressing these two might be useful.  For a model to imitate, look
> for :auth-info in org-exp.el and org-latex.el, and add e.g. :title-info
> and :date-info. I would make them generic, not specific to latex. Only
> the latex exporter will use them to begin with, but the other exporters
> can do so in the future. 
> 
> I hope that I have described things correctly, but I'd be happy to
> get corrections.
> 
> OTOH, none of this is necessary for revtex4-1. The main constituent of
> the solution to that problem is that \maketitle is not hardcoded into
> the latex exporter: it is instead the value of the variable
> org-export-latex-title-command. By redefining this variable, you can put
> all the frontmatter stuff where revtex wants it. That does not solve the
> whole problem since the exporter puts frontmatter stuff in the preamble as
> well and revtex chokes on that. So here's the plan:
> 
> - you have a file, ff2.tex, with the front page stuff: \title, \author,
>   \affiliation etc.
> 
> - you have a file, abstract2.tex, with the abstract - this is not
>   strictly necessary, but I like the separation of the two files
>   and it's as easy to deal with two files as it is to deal with one.
> 
> - you redefine the above variable to be
>   "\\input{ff2}\\input{abstract2}\\maketitle", so that they all end up
>   inside the document body and revtex is happy - well, almost.
> 
> - there is still the matter of all the stuff (\title, \author, \date)
>   that the exporter puts in the preamble. But since they are all
>   redefined later, they don't matter.
> 
> - except that revtex still chokes on them because they are in the
>   "wrong" place. But that is easily dealt with, with the revtexbug.sty
>   trick I sent out yesterday.
> 
> Originally, I had the two files above (then named ff.tex and abstract.tex)
> as separate files, but since you mentioned that you were tangling them, I
> assume you wanted everything in the same file. So I tacked on the "2" suffix
> to distinguish the tangled files from the originals.
> 
> Here's the org file:
> 
> --8<---------------cut here---------------start------------->8---
> #+LaTeX_CLASS: revtex4-1
> 
> #+TITLE: foo
> #+OPTIONS: author:nil
> 
> #+LaTeX_HEADER: \usepackage{revtexbug}
> 
> #+BIND: org-export-latex-title-command 
> "\\input{ff2}\\input{abstract2}\\maketitle"
> 
> #+begin_src latex :tangle ff2.tex :exports none :results silent
>  \title{{{{title}}}}
>  \author{First author}
>  \affiliation{First affiliation}
>  \affiliation{Second affiliation}
>  \author{Second author}
>  \affiliation{Third affiliation}
>  \keywords{optional keywords}
>  \pacs{optional pacs}
>  \date{{{{date(%Y-%m-%d)}}}}
> #+end_src
> 
> #+begin_src latex :tangle abstract2.tex :exports none :results silent
>  \begin{abstract}
>   some blabla
>  \end{abstract}
> #+end_src
> 
> * Bar
> 
> Hunoz, hukerz?
> 
> * Baz
> 
> Euler says:
> 
> #+begin_latex
> \[
> \int_0^\infty e^{-x^2} dx = {{\sqrt{\pi}} \over {2}}
> \]
> #+end_latex
> 
> ## Local Variables:
> ## org-export-allow-BIND: t
> ## End:
> --8<---------------cut here---------------end--------------->8---
> 
> The #+BIND construct redefines the org-export-latex-title-command to get
> the front matter stuff and the abstract and put them just before the
> \maketitle.
> 
> The local variables section at the end allows the use of BIND with no
> questions asked.
> 
> The first latex block uses the {{{title}}} and {{{date(...)}}} macros to
> get the title from the #+TITLE construct and the current date (see
> section 11.4 of the Org manual). That requires the use of a hook:
> 
> (add-to-list 'org-babel-tangle-body-hook (lambda () 
> (org-export-preprocess-apply-macros)))
> 
> in order to expand the macros in the body of the source block when
> tangling.  Eric Schulte describes this in
> 
>      http://thread.gmane.org/gmane.emacs.orgmode/39350/focus=39355
> 
> Alternatively, you can put the actual title and date in there and
> dispense with the macros.
> 
> The final thing is to make sure to tangle before exporting in order to
> produce the two files that are \input. You can do that manually or you
> can use an export hook:
> 
> (add-to-list 'org-export-first-hook (lambda () (org-babel-tangle)))
> 
> When you export, the first thing that's done is the tangling of the
> two files.
> 
> For completeness, here is the revtexbug.sty file again:
> 
> --8<---------------cut here---------------start------------->8---
> \makeatletter
> address@hidden
> \makeatother
> --8<---------------cut here---------------end--------------->8---
> 
> and here's a minimal.emacs file that contains all of the stuff that's
> needed (modulo the pathname  in load-path of course):
> 
> --8<---------------cut here---------------start------------->8---
> ;;; -*- mode: emacs-lisp -*-
> (add-to-list 'load-path (expand-file-name "~/src/emacs/org/org-mode/lisp"))
> (add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . 
> org-mode))
> (require 'org-install)
> (global-set-key "\C-cl" 'org-store-link)
> (global-set-key "\C-ca" 'org-agenda)
> 
> (require 'org-latex)
> (require 'ob)
> 
> ;; revtex4-1 latex class
> (setq revtex-class
>       '("revtex4-1" "\\documentclass[11pt]{revtex4-1}"
>         ("\\section{%s}" . "\\section*{%s}")
>         ("\\subsection{%s}" . "\\subsection*{%s}")
>         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
>         ("\\paragraph{%s}" . "\\paragraph*{%s}")
>         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
> 
> (add-to-list 'org-export-latex-classes revtex-class t)
> 
> ;; hooks
> (add-to-list 'org-babel-tangle-body-hook (lambda () 
> (org-export-preprocess-apply-macros)))
> (add-to-list 'org-export-first-hook (lambda () (org-babel-tangle)))
> 
> ;; mark the org-export-allow-BIND variable as safe to forego the questioning
> (setq safe-local-variable-values '((org-export-allow-BIND . t)))
> 
> --8<---------------cut here---------------end--------------->8---
> 
> Note that there are a couple of questionable security practices in the
> above: the marking of the org-export-allow-BIND variable as safe and the
> setting of this variable in the org file. I did that to avoid the
> nagging questions, but you should of course evaluate the convenience against
> the potential damage for yourself.
> 
> To summarize:
> 
> o copy the org file and the revtexbug.sty file into some directory.
> 
> o Start emacs with ``emacs -Q -l minimal.emacs'', visit the file and
> export to PDF.
> 
> Comments, questions, corrections and suggestions for improvement are
> welcome.
> 
> Nick

Hi Nick,

this all is very interesting and I certainly will learn a few tricks
from that once I have the time to try it (hopefully later today). I
will get back to you then. In the meantime I have two quick
remarks/questions:

- Do you think that this is the most elegant solution? There is
certainly a lot of additional configuration required to get this to
work and I would still prefer a solution where you can just set a
variable and be done with it (and certainly many users who are new to
org feel the same)

- You probably missed my follow-up to your second post yesterday, I
forgot to forward it to you directly - sorry for that. Please read
here: http://article.gmane.org/gmane.emacs.orgmode/42468.
The main problem for me is, that I can't patch the revtex class as I
want to submit the tex file to APS, which won't access the revtexbug
solution I guess.

Regarding my patch, I certainly agree to modify it in the way you
proposed. Still I think it would be good to go one step further.

Sebastian




reply via email to

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