logo

latex filter

← Back to Filter List

latex


Generates a PDF file from LaTeX source.

Aliases for this filter

  • latex
  • pdflatex

Converts from file formats:

  • .tex
  • .txt

To file formats:

  • .pdf

Available settings:

SettingDescriptionDefault
add-new-filesBoolean or list of extensions/patterns to match.False
added-in-versionDexy version when this filter was first available.
additional-doc-filtersFilters to apply to additional documents created as side effects.{}
additional-doc-settingsSettings to apply to additional documents created as side effects.{}
argsArguments to be passed to the executable.
check-return-codeWhether to look for nonzero return code.True
clargsArguments to be passed to the executable (same as 'args').
command-stringThe full command string.%(prog)s -interaction=nonstopmode -halt-on-error %(args)s %(script_file)s
data-typeAlias of custom data class to use to store filter output.generic
envDictionary of key-value pairs to be added to environment for runs.{}
examplesTemplates which should be used as examples for this filter.[]
exclude-add-new-filesList of patterns to skip even if they match add-new-files.[]
exclude-new-files-from-dirList of directories to skip when adding new files.[]
executableThe executable to be runpdflatex
extFile extension to output.None
extension-mapDictionary mapping input extensions to default output extensions.None
helpHelpstring for plugin.Generates a PDF file from LaTeX source.
initial-timeout10
input-extensionsList of extensions which this filter can accept as input.['.tex', '.txt']
keep-originalsWhether, if additional-doc-filters are specified, the original unmodified docs should also be added.False
make-dummy-outputWhether to make a dummy output file when one is not generated and add-new-files is True.False
mkdirA directory which should be created in working dir.None
mkdirsA list of directories which should be created in working dir.[]
nodocWhether filter should be excluded from documentation.False
outputWhether to output results of this filter by default by reporters such as 'output' or 'website'.True
output-extensionsList of extensions which this filter can produce as output.['.pdf']
override-workspace-exclude-filtersIf True, document will be populated to other workspaces ignoring workspace-exclude-filters.False
path-extensionsstrings to extend path with[]
preserve-prior-data-classWhether output data class should be set to match the input data class.False
record-varsWhether to add code that will automatically record values of variables.False
require-outputShould dexy raise an exception if no output is produced by this filter?True
run-bibtexShould we run bibtex if a .bib file is an input?True
scriptargsArguments to be passed to the executable.
tagsTags which describe the filter.[]
timeout10
times-to-run-latexHow many times to run latex? (Latex is run one additional time if bibtex runs.)2
use-wdWhether to use a custom working directory when running filter.True
variablesA dictionary of variable names and values to make available to this filter.{}
varsA dictionary of variable names and values to make available to this filter.{}
version-commandCommand to call to return version of installed software.None
windows-version-commandCommand to call on windows to return version of installed software.None
workspace-exclude-filtersFilters whose output should be excluded from workspace.['pyg']
workspace-includesIf set to a list of filenames or extensions, only these will be populated to working dir.None
write-stderr-to-stdoutShould stderr be piped to stdout?True
Filter Source Code
class LatexFilter(SubprocessFilter):
    """
    Generates a PDF file from LaTeX source.
    """
    aliases = ['latex', 'pdflatex']
    _settings = {
            'executable' : 'pdflatex',
            'output' : True,
            'input-extensions' : ['.tex', '.txt'],
            'output-extensions' : ['.pdf'],
            'run-bibtex' : ("Should we run bibtex if a .bib file is an input?", True),
            'times-to-run-latex' : ("""How many times to run latex? (Latex is
                run one additional time if bibtex runs.)""", 2),
            'command-string' : "%(prog)s -interaction=nonstopmode -halt-on-error %(args)s %(script_file)s"
            }

    def process(self):
        self.populate_workspace()

        wd = self.parent_work_dir()
        env = self.setup_env()

        latex_command = self.command_string()

        if any(doc.output_data().ext == '.bib' for doc in self.doc.walk_input_docs()):
            bibtex_command = "bibtex %s" % os.path.splitext(self.output_data.basename())[0]
        else:
            bibtex_command = None

        def run_cmd(command):
            self.log_debug("running %s in %s" % (command, os.path.abspath(wd)))
            proc = subprocess.Popen(command, shell=True,
                                    cwd=wd,
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.STDOUT,
                                    env=env)

            stdout, stderr = proc.communicate()
            self.log_debug(stdout)

        if bibtex_command and self.setting('run-bibtex'):
            run_cmd(latex_command) #generate aux
            run_cmd(bibtex_command) #generate bbl

        n = self.setting('times-to-run-latex')
        for i in range(n):
            self.log_debug("running latex time %s (out of %s)" % (i+1, n))
            run_cmd(latex_command)

        if not file_exists(os.path.join(wd, self.output_data.basename())):
            log_file_path = os.path.join(wd, self.output_data.basename().replace(".pdf", ".log"))

            if file_exists(log_file_path):
                msg = "Latex file not generated. Look for information in latex log %s"
                msgargs = log_file_path
            else:
                msg = "Latex file not generated. Look for information in latex log in %s directory."
                msgargs = os.path.abspath(wd)

            raise dexy.exceptions.UserFeedback(msg % msgargs)

        if self.setting('add-new-files'):
            self.log_debug("adding new files found in %s for %s" % (wd, self.key))
            self.add_new_files()

        self.copy_canonical_file()

Content © 2020 Dr. Ana Nelson | Site Design © Copyright 2011 Andre Gagnon | All Rights Reserved.