From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: Re: [PATCH] Compiling multiple times the LaTeX output Date: Tue, 5 Oct 2010 18:26:21 +0200 Message-ID: References: <87zkv0pqyi.fsf@mundaneum.com> <87r5gcshnf.fsf@noorul.maa.corp.collab.net> <874od7uzsa.fsf_-_@mundaneum.com> <30671.1285861145@gamaville.dokosmarshall.org> <87vd5njhm8.fsf@mundaneum.com> <87lj6h1ukw.fsf@mundaneum.com> <87sk0kyfgw.fsf@mundaneum.com> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=ISO-8859-1; format=flowed; delsp=yes Content-Transfer-Encoding: quoted-printable Return-path: Received: from [140.186.70.92] (port=35222 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P3AOG-0004tb-DJ for emacs-orgmode@gnu.org; Tue, 05 Oct 2010 12:29:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P3ALS-0005SS-VS for emacs-orgmode@gnu.org; Tue, 05 Oct 2010 12:26:28 -0400 Received: from mail-ey0-f169.google.com ([209.85.215.169]:64069) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P3ALS-0005SH-Kz for emacs-orgmode@gnu.org; Tue, 05 Oct 2010 12:26:26 -0400 Received: by eyh5 with SMTP id 5so3230387eyh.0 for ; Tue, 05 Oct 2010 09:26:25 -0700 (PDT) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Matthew Leifer Cc: emacs-orgmode Hi Matthew, you are completely right, we are re-inventing wheels here. I have just pushed a fix which will use texi2dvi when available. The echo area will now also give an indication of the kinds of errors that happened during the final pdflatex run. This is a big improvement, thanks to Sebastian for kicking off this discussion, and to all who contributed. Please test the new processing and let me know if there are problems. - Carsten On Oct 5, 2010, at 4:30 PM, Matthew Leifer wrote: > Hi, > > I don't know if you are aware, but there is a utility called =20 > texi2dvi that figures out how many times LaTeX, bibtex, etc. need to =20= > be run and automatically runs them the correct number of times for =20 > you. It also has an option -p that uses pdflatex and generates pdf =20= > instead of dvi. In my opinion, it would be better to make use of =20 > this rather than writing new code to do this, as they have thought =20 > about all the edge cases in far more detail than is possible here. =20= > It is possible that some LaTeX installations do not come with =20 > texi2dvi, but it does come with the full TeXLive installation so =20 > plenty of people are likely to have it installed. If you want to =20 > avoid this breaking on systems that do not have texi2dvi installed =20 > then you could just check for it, use it if it is available and, if =20= > not, give the user a warning message that they may get better =20 > results if they install texi2dvi whilst using the existing code. > > Best, > > Matt Leifer > > 2010/10/5 S=E9bastien Vauban > Hi Carsten, > > Carsten Dominik wrote: > > Thanks for the patch! I would certainly have a better way to =20 > process these > > files. > > Could you make your latest sentence more explicit? > > > > 1. Can we run bibtex only if we have an indication that it might =20 > be needed? > > Maybe by looking at the output of the first LaTeX run? Hmm, =20 > maybe this > > would not work if only the bibtex database file was changed. > > I guess things in that direction are entirely possible. I don't use =20= > bibtex > yet, but will have a look at a better integration. > > > > 2. The contrill structures you are using, are they standard shell =20= > or is bash > > needed for this? > > Good question! Yes, I implicitly wrote in bash. That won't work for =20= > sure in > Windows... > > But, then, how do we do for writing such shells in Emacs? Go to =20 > Emacs's > builtin shell? I have no experience with it, but I can have a look, =20= > except: > how would we be sure that the preferred shell of the user is that one? > > > > 3. Maybe we can extract a useful error message if the last =20 > PDFLaTeX run > > still contains problems? Maybe even load the log file in this =20 > case? > > For sure, such behaviors would be a great, in case of failures. > > Best regards, > Seb > > >> Here is my (much) better proposition: > >> > >> --8<---------------cut here---------------start------------->8--- > >> diff --git a/lisp/org-latex.el b/lisp/org-latex.el > >> index 9a62457..0a2c5fe 100644 > >> --- a/lisp/org-latex.el > >> +++ b/lisp/org-latex.el > >> @@ -455,25 +455,35 @@ allowed. The default we use here =20 > encompasses both." > >> :group 'org-export-latex > >> :group 'org-export) > >> > >> +(defcustom org-latex-pdf-max-runs 3 > >> + "Maximum number of times PDFLaTeX is run after BibTeX." > >> + :group 'org-export-pdf > >> + :type 'int) > >> + > >> (defcustom org-latex-to-pdf-process > >> - '("pdflatex -interaction nonstopmode -output-directory %o %f" > >> - "pdflatex -interaction nonstopmode -output-directory %o %f") > >> + `("pdflatex -interaction nonstopmode -output-directory %o %f" > >> + "bibtex %b" > >> + ,(concat "let COUNTER=3D0; while (grep -e \"Rerun .* cross- > >> references\" %b.log > /dev/null); do if [ $COUNTER -eq " > >> + (int-to-string org-latex-pdf-max-runs) > >> + " ]; then break; fi; pdflatex -interaction =20 > nonstopmode > >> -output-directory %o %f; let COUNTER=3DCOUNTER+1; done")) > >> "Commands to process a LaTeX file to a PDF file. > >> This is a list of strings, each of them will be given to the shell > >> as a command. %f in the command will be replaced by the full =20 > file name, %b > >> by the file base name (i.e. without extension) and %o by the base =20= > directory > >> of the file. > >> The reason why this is a list is that it usually takes several =20 > runs of > >> -pdflatex, maybe mixed with a call to bibtex. Org does not have =20= > a clever > >> -mechanism to detect which of these commands have to be run to =20 > get to a > >> stable > >> -result, and it also does not do any error checking. > >> +pdflatex, mixed with a call to bibtex. Org does now have a clever > >> mechanism > >> +to detect how many times the document has to be compiled to get =20= > to a stable > >> +result for the cross-references. Moreover, the number of =20 > compilations > >> after > >> +bibtex is limited to 3 by default (see `org-latex-pdf-max-runs' =20= > for more). > >> +Though, it does not do any error checking. > >> > >> Alternatively, this may be a Lisp function that does the =20 > processing, so you > >> could use this to apply the machinery of AUCTeX or the Emacs =20 > LaTeX mode. > >> This function should accept the file name as its single argument." > >> :group 'org-export-pdf > >> :type '(choice (repeat :tag "Shell command sequence" > >> - (string :tag "Shell command")) > >> + (string :tag "Shell command")) > >> (function))) > >> > >> (defcustom org-export-pdf-logfiles > >> --8<---------------cut here---------------end--------------->8--- > >> > >> Enhancements: > >> > >> - variable to limit the number of PDFLaTeX runs (3, by default) > >> > >> Though, the way it is evaluated, you need to set it before calling > >> org-latex > >> (before defining org-latex-to-pdf-process). Not a problem, IMHO. =20= > Maybe > >> there > >> are better ways, though? > >> > >> - real standard sequence to compile the doc: > >> > >> + one call to PDFLaTeX > >> + one call to BibTeX > >> + as many calls as needed to PDFLaTeX (max 3) > > -- > S=E9bastien Vauban > > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode