Learner
Learner

Reputation: 483

How to insert values inside latex document using python script?

I have latex document in which there are various fields and there values are to be generated dynamically. So, what i am planning is to have python script which will generate values related to field and then insert it inside the latex document. The document looks as follows:

Project = ABC
Version = 1.0.0
Date = xyz

Now the values of project , version and date are to be filled by using python script. So, please help me how can i have the values inside latex document. I searched and have got generating the whole latex document from python but i want the two processes to be seperate. So, please help. I have with me the latex document code so, i realy don't want to play around with the code as its completly new to me, i just want to feed values inside the various fields using python.

Upvotes: 2

Views: 1701

Answers (1)

Tomáš Cerha
Tomáš Cerha

Reputation: 309

If I understand your intention, I would just replace the values within the LaTeX source by named variables, such as $project instead of ABC, $version instead of 1.0.0 etc. Then you can run the following Python script to substitute these named variables by their actual values. This assumes that the LaTeX source doesn't contain other occurrences of text conflicting with the variable syntax $xy. If it is not the case, other syntax can be chosen.

You didn't specify how you get the values into the python program. Here I assume you can define them statically within the python code.

The program will fail when an undefined variable name (not present in the dictionary) is found within the source file. It could also be changed to leave such text unchanged or replace it by empty string depending on your needs.

#!/usr/bin/env python

import sys
import re

variables = {
    'project': 'ABC',
    'version': '1.0.0',
    'date': 'xyz',
}

def run(args):
    if len(args) == 1:
        filename = args[0]
    else:
        sys.stderr.write("Filename must be passed as argument.\n")
        sys.exit(1)

    regex = re.compile(r"\$([a-zA-Z][a-zA-Z_]*)")
    with open(filename) as f:
        for line in f:
            sys.stdout.write(regex.sub(lambda m: variables[m.group(1)], line))

if __name__ == '__main__':
    run(sys.argv[1:])

Upvotes: 4

Related Questions