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
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=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)