【问题标题】:How to insert values inside latex document using python script?如何使用 python 脚本在乳胶文档中插入值?
【发布时间】:2015-12-03 08:01:20
【问题描述】:

我有乳胶文档,其中有各种字段,并且要动态生成值。所以,我打算让 python 脚本生成与字段相关的值,然后将其插入到乳胶文档中。文档如下:

Project = ABC
Version = 1.0.0
Date = xyz

现在 project , version 和 date 的值将使用 python 脚本填充。所以,请帮助我如何在乳胶文档中获取值。我搜索并从 python 生成了整个乳胶文档,但我希望这两个进程是分开的。所以,请帮忙。我有乳胶文档代码,所以我真的不想玩这些代码,因为它对我来说是全新的,我只想使用 python 在各个字段中提供值。

【问题讨论】:

  • 您能否提供更多关于您期望 python 代码做什么以及您定义什么变量的详细信息?假设在 Python 中您有如下列表,我是否正确:project = ["A", "B", "C"] version = ["1.0.0", "1.1.1"] date = ["x", "y", "z"] 并且您希望将这些列表的所有可能迭代输出为 .tex 文件?

标签: python latex pdflatex


【解决方案1】:

如果我理解您的意图,我会用命名变量替换 LaTeX 源中的值,例如 $project 而不是 ABC$version 而不是 1.0.0 等。然后您可以运行以下命令Python 脚本用它们的实际值替换这些命名变量。这假定 LaTeX 源不包含与变量语法 $xy 冲突的其他文本。如果不是这样,可以选择其他语法。

您没有指定如何将值输入 python 程序。这里我假设你可以在 python 代码中静态定义它们。

当在源文件中找到未定义的变量名(字典中不存在)时,程序将失败。也可以根据您的需要更改为保持此类文本不变或用空字符串替换它。

#!/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:])

【讨论】:

  • 虽然我没有回答或问这个问题。我的解决方案完全不同。您能否就此代码的几个方面提供评论。特别是:sys.stdout.write(regex.sub(lambda m: variables[m.group(1)], line))if __name__ == '__main__': run(sys.argv[1:])
  • @TomasCerha 我按照您的建议在 .tex 中更新了变量,并在控制台上输出显示更新的值,但我希望 .tex 文件使用这些值进行更新。那么,为此可以做些什么呢?而且日期值也没有更新。
  • 这个程序演示了可能的解决方案。您需要根据自己的条件自定义和部署此解决方案。
  • 程序只是替换输入文件中的变量并将结果写入标准输出。例如在 unix 命令行上,您可以输入 substitute.py source_file.tex > target_file.tex。考虑到您将给定的代码保存到文件substitute.py 并使该文件可执行,它将使用替换值创建target_file.tex(标准输出被重定向到该文件)。
  • @Learner 您能否在$date 替换不起作用的地方发布源文件的片段?
猜你喜欢
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2022-08-17
相关资源
最近更新 更多