将变量从 makefile 传递到 latex 代码

将变量从 makefile 传递到 latex 代码

我编写了一个简单的 makefile 来编译我的 latex 代码。

我在该 makefile 中有一些变量,我想将它们传递给 latex 代码,但我不知道如何做到这一点。

示例 1:

在 makefile 中:

# set Type to A or B
Type = B

在乳胶代码中:

\ifdefined\B
%%%%%%%%%%%%%%%Some LaTeX Code%%%%%%%%%%%%%%%
\else
\ifdefined\A
%%%%%%%%%%%%%%%Some LaTeX Code%%%%%%%%%%%%%%%
\fi
\fi

示例 2:

在 makefile 中:

Version = J

在 LaTeX 代码中:

Some random text \Version

下面是我用于编译的 makefile 中的一行:

latexmk -lualatex -output-directory=$(OUTDIR) --jobname=$(REPORT_PDF) $(REPORT)

有什么帮助吗?

答案1

由于您正在使用 luatex,您可以轻松访问环境

\documentclass{article}

\begin{document}

\directlua{tex.write(os.getenv("FOO"))}

\end{document}

将打印 7 个给定

 FOO=7 lualatex file

这样你就可以使用 Lua 或 TeX 条件代码进行测试/

答案2

你始终可以在 Makefile 中创建 LaTeX 将读取的辅助文件:即在 Makefile 中,

echo "\\def\\foo{$WHATEVER}" > foo.inc

在您的.tex文件中,只需\input{foo.inc}

catchfile另一种选择是,你可以使用将 LaTeX 宏设置为文件内容的包来做一些不那么脆弱的事情:即在 Makefile 中,

echo $WHATEVER > foo.var

在你的.tex文件中,

\usepackage{catchfile}
\CatchFileDef{\foo}{}{foo.var}

(或者,如果您愿意的话,使用\file_get:nnN)。

在这两种情况下,latexmk都会注意到这些辅助文件的变化,并在它们改变时触发重新编译。

相关内容