tex¶
TeX/LaTeX/PDFLaTeX/XeLaTeX support
Example:
def configure(conf):
conf.load('tex')
if not conf.env.LATEX:
conf.fatal('The program LaTex is required')
def build(bld):
bld(
features = 'tex',
type = 'latex', # pdflatex or xelatex
source = 'document.ltx', # mandatory, the source
outs = 'ps', # 'pdf' or 'ps pdf'
deps = 'crossreferencing.lst', # to give dependencies directly
prompt = 1, # 0 for the batch mode
)
Notes:
To configure with a special program, use:
$ PDFLATEX=luatex waf configure
This tool doesn’t use the target attribute of the task generator (
bld(target=...)
); the target file name is built from the source base name and the out type(s)
-
waflib.Tools.tex.
bibunitscan
(self)[source]¶ Parse the inputs and try to find the bibunit dependencies
Returns: list of bibunit files Return type: list of waflib.Node.Node
-
waflib.Tools.tex.
exts_deps_tex
= ['', '.ltx', '.tex', '.bib', '.pdf', '.png', '.eps', '.ps', '.sty']¶ List of typical file extensions included in latex files
-
waflib.Tools.tex.
exts_tex
= ['.ltx', '.tex']¶ List of typical file extensions that contain latex
-
waflib.Tools.tex.
re_tex
= <_sre.SRE_Pattern object at 0x9365960>¶ Regexp for expressions that may include latex files
-
waflib.Tools.tex.
g_bibtex_re
= <_sre.SRE_Pattern object>¶ Regexp for bibtex files
-
waflib.Tools.tex.
g_glossaries_re
= <_sre.SRE_Pattern object>¶ Regexp for expressions that create glossaries
-
class
waflib.Tools.tex.
tex
(*k, **kw)[source]¶ Bases:
waflib.Task.Task
Compile a tex/latex file.
-
exec_command
(cmd, **kw)[source]¶ Override
waflib.Task.Task.exec_command()
to execute the command without buffering (latex may prompt for inputs)Returns: the return code Return type: int
-
scan
()[source]¶ A recursive regex-based scanner that finds latex dependencies. It uses
waflib.Tools.tex.re_tex
Depending on your needs you might want:
to change re_tex:
from waflib.Tools import tex tex.re_tex = myregex
or to change the method scan from the latex tasks:
from waflib.Task import classes classes['latex'].scan = myscanfunction
-
check_status
(msg, retcode)[source]¶ Check an exit status and raise an error with a particular message
Parameters: - msg (string) – message to display if the code is non-zero
- retcode (boolean) – condition
-
bibfile
()[source]¶ Parse the .aux files to find bibfiles to process. If yes, execute
waflib.Tools.tex.tex.bibtex_fun()
-
bibunits
()[source]¶ Parse the .aux file to find bibunit files. If there are bibunit files, execute
waflib.Tools.tex.tex.bibtex_fun()
.
-
makeindex
()[source]¶ Look on the filesystem if there is a .idx file to process. If yes, execute
waflib.Tools.tex.tex.makeindex_fun()
-
run
()[source]¶ Runs the TeX build process.
It may require multiple passes, depending on the usage of cross-references, bibliographies, content susceptible of needing such passes. The appropriate TeX compiler is called until the .aux files stop changing.
Makeindex and bibtex are called if necessary.
-
_
= ['MAKEGLOSSARIES', 'SRCFILE']¶
-
__doc__
= '\n\tCompile a tex/latex file.\n\n\t.. inheritance-diagram:: waflib.Tools.tex.latex waflib.Tools.tex.xelatex waflib.Tools.tex.pdflatex\n\t'¶
-
__module__
= 'waflib.Tools.tex'¶
-
bibtex_fun
(tsk)¶ Execute the program bibtex
-
hcode
= '\tdef run(self):\n\t\t"""\n\t\tRuns the TeX build process.\n\n\t\tIt may require multiple passes, depending on the usage of cross-references,\n\t\tbibliographies, content susceptible of needing such passes.\n\t\tThe appropriate TeX compiler is called until the *.aux* files stop changing.\n\n\t\tMakeindex and bibtex are called if necessary.\n\t\t"""\n\t\tenv = self.env\n\n\t\tif not env[\'PROMPT_LATEX\']:\n\t\t\tenv.append_value(\'LATEXFLAGS\', \'-interaction=batchmode\')\n\t\t\tenv.append_value(\'PDFLATEXFLAGS\', \'-interaction=batchmode\')\n\t\t\tenv.append_value(\'XELATEXFLAGS\', \'-interaction=batchmode\')\n\n\t\t# important, set the cwd for everybody\n\t\tself.cwd = self.inputs[0].parent.get_bld().abspath()\n\n\t\tLogs.info(\'first pass on %s\' % self.__class__.__name__)\n\n\t\t# Hash .aux files before even calling the LaTeX compiler\n\t\tcur_hash = self.hash_aux_nodes()\n\n\t\tself.call_latex()\n\n\t\t# Find the .aux files again since bibtex processing can require it\n\t\tself.hash_aux_nodes()\n\n\t\tself.bibtopic()\n\t\tself.bibfile()\n\t\tself.bibunits()\n\t\tself.makeindex()\n\t\tself.makeglossaries()\n\n\t\tfor i in range(10):\n\t\t\t# There is no need to call latex again if the .aux hash value has not changed\n\t\t\tprev_hash = cur_hash\n\t\t\tcur_hash = self.hash_aux_nodes()\n\t\t\tif not cur_hash:\n\t\t\t\tLogs.error(\'No aux.h to process\')\n\t\t\tif cur_hash and cur_hash == prev_hash:\n\t\t\t\tbreak\n\n\t\t\t# run the command\n\t\t\tLogs.info(\'calling %s\' % self.__class__.__name__)\n\t\t\tself.call_latex()\n'¶
-
makeglossaries_fun
(tsk)¶ Execute the program makeglossaries
-
makeindex_fun
(tsk)¶ Execute the program makeindex
-
-
waflib.Tools.tex.
feature
(*k)¶ Decorator: register a task generator method that will be executed when the object attribute ‘feature’ contains the corresponding key(s):
from waflib.Task import feature @feature('myfeature') def myfunction(self): print('that is my feature!') def build(bld): bld(features='myfeature')
Parameters: k (list of string) – feature names
-
waflib.Tools.tex.
before_method
(*k)[source]¶ Decorator: register a task generator method which will be executed before the functions of given name(s):
from waflib.TaskGen import feature, before @feature('myfeature') @before_method('fun2') def fun1(self): print('feature 1!') @feature('myfeature') def fun2(self): print('feature 2!') def build(bld): bld(features='myfeature')
Parameters: k (list of string) – method names
-
waflib.Tools.tex.
apply_tex
(self)[source]¶ Task generator method
Create
waflib.Tools.tex.tex
objects, and dvips/dvipdf/pdf2ps tasks if necessary (outs=’ps’, etc).Feature: tex
-
waflib.Tools.tex.
configure
(self)[source]¶ Try to find the programs tex, latex and others. Do not raise any error if they are not found.
Features defined in this module: