From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?Q?S=C3=A9bastien_Vauban?= Subject: Re: [PATCH] Compiling multiple times the LaTeX output Date: Tue, 05 Oct 2010 14:46:39 +0200 Message-ID: <87sk0kyfgw.fsf@mundaneum.com> 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> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: 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-mXXj517/zsQ@public.gmane.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org-mXXj517/zsQ@public.gmane.org To: emacs-orgmode-mXXj517/zsQ@public.gmane.org Hi Carsten, Carsten Dominik wrote: > Thanks for the patch! I would certainly have a better way to 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 be neede= d? > Maybe by looking at the output of the first LaTeX run? Hmm, 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 bibtex yet, but will have a look at a better integration. > 2. The contrill structures you are using, are they standard shell or is b= ash > needed for this? Good question! Yes, I implicitly wrote in bash. That won't work for sure in Windows... But, then, how do we do for writing such shells in Emacs? Go to Emacs's builtin shell? I have no experience with it, but I can have a look, 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 PDFLaTeX run > still contains problems? Maybe even load the log file in this 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 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 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 file name,= %b >> by the file base name (i.e. without extension) and %o by the base direct= ory >> of the file. >> The reason why this is a list is that it usually takes several runs of >> -pdflatex, maybe mixed with a call to bibtex. Org does not have a clever >> -mechanism to detect which of these commands have to be run to 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 to a st= able >> +result for the cross-references. Moreover, the number of compilations >> after >> +bibtex is limited to 3 by default (see `org-latex-pdf-max-runs' for mor= e). >> +Though, it does not do any error checking. >> >> Alternatively, this may be a Lisp function that does the processing, so = you >> could use this to apply the machinery of AUCTeX or the Emacs 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. 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) --=20 S=C3=A9bastien Vauban _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode-mXXj517/zsQ@public.gmane.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode