[Top][All Lists]

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

[Orgmode] Re: [PATCH] Compiling multiple times the LaTeX output

From: Sébastien Vauban
Subject: [Orgmode] Re: [PATCH] Compiling multiple times the LaTeX output
Date: Tue, 05 Oct 2010 14:46:39 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

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 needed?
>    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 bash
>    needed for this?

Good question!  Yes, I implicitly wrote in bash. That won't work for sure in

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,

>> 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=0; 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=COUNTER+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 directory
>> 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 stable
>> +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 more).
>> +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)

Sébastien Vauban

reply via email to

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