动态导入 tex 文件

动态导入 tex 文件

我如何动态导入 tex 文件?

我实际上在一个文件夹中有数百个 .tex 文件,所有这些文件都有多个版本。我无法将它们移出此文件夹。

前任:

ver1file1.tex
ver2file1.tex
...
ver8file1.tex
...
ver8file100.tex

我希望能够设置一个环境变量或传递一个命令行参数,以便 latex 能够动态加载特定版本的所有文件。

例子:

pdflatex ver1
or
EXPORT LATEX_VER=ver1

只在主 latex 文件中导入下列内容。

ver1file1
ver1file2
...
ver1file100

下面是我到目前为止尝试过的一个例子,但我无法获得我基本上想要有 2 个 .tex 文件,file1.tex并且file2.tex。我希望能够接受定义要导入的文件名称的命令行参数。

主文本

\import{c:\path}{aux}

\import{c:\path}{\dynavar} % should load variable from commandline + added string ex: ver1file1

辅助文本

%accept a command line argument
\ifdefined\myflag
  \newcommand\dynavar[1]{\emph{#1}}
\else
  \newcommand\dynavar[1]{defaultval}
\fi


\expandafter\def\expandafter\dynavar\expandafter{\dynavar { }file1}

答案1

以下是我建议的一个小模型:

\documentclass{article}
\usepackage{filecontents,multido}
\begin{filecontents*}{dynavar.tex}
\makeatletter
\@ifundefined{dynavar}{%
  \newcommand{\dynavar}{defaultval}%
  \typeout{No command-line value specified for \string\dynavar. Using 'defaultval'.}%
}{}
\makeatother
\end{filecontents*}

% ========== You would not need this
\begin{filecontents*}{ver1file1.tex}
ver1file1
\end{filecontents*}
\begin{filecontents*}{ver1file2.tex}
ver1file2
\end{filecontents*}
% ========== You would not need this

\begin{document}

\input{dynavar}

\multido{\i=1+1}{2}{% Update '2' to (say) '100' if you have 100 files
  File \texttt{\dynavar file\i}: \endgraf \input{\dynavar file\i}\endgraf}

\end{document}

你可以使用以下方式调用上述文件

pdflatex \def\dynavar{ver1} \input{main}

运行ver1文件。或者

pdflatex main.tex

如果你想让它运行defaultval这些文件。使用\def\dynavar{ver1}“命令行”选项,你将获得输出

在此处输入图片描述

答案2

考虑使用 git 的工作流程。请参阅这里了解更多信息。您可以标记每个版本。也就是说,在提交类型之后,

git tag -a "v1" -m "This version has all the bare bones necessary for the project"

然后更多的提交和更多的标签,那么你所要做的就是

git checkout -b v4_branch tags/v4

您的工作目录将更改为您之前标记“v4”时的状态,并且您将位于一个名为 v4_branch 的新分支上。阅读这里有关正确检查标签的更多信息(关于执行此操作的最佳方法有几种不同的想法)。

答案3

(刚刚意识到这个解决方案没有利用海报所指定的命令行输入)

另一个解决方案是创建一个 tex 文件,使用\input命令仅输入特定版本的文件。例如,您可以创建一个名为 的文件ver1files.tex,其中包含以下几行:

\input{./ver1file1.tex}
\input{./ver1file2.tex}
\input{./ver1file3.tex}
...
\input{./ver1file100.tex}

ver1然后,在您的主 LaTeX 文档中,您只需输入文件即可轻松输入所有文件ver1files.tex,如下所示:

\input{./ver1files.tex}

您可以创建一个ver2files.tex包含\input所有ver2文件的命令,等等,适用于所有版本。

请注意,LaTeX 允许您\input像这样“嵌套”命令。也就是说,您\input的主 LaTeX 文件中有一个,它输入一个包含其他\input命令的文件。这可以用 来做\input。但是,您不能将这种类型的嵌套用于\include命令。

ver1file1.tex如果您的主 LaTeX 文件与您的等文件不在同一文件夹中ver1files.tex,请确保更新命令中的路径\input以指向这些文件的实际位置。我在这里仅使用了“./”(当前目录)作为快速示例。

相关内容