динамически импортирует файлы 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}

Затем в вашем основном документе LaTeX вы можете легко ввести все ваши ver1файлы, просто введя свой ver1files.texфайл, например, так:

\input{./ver1files.tex}

Вы можете создать файл ver2files.tex, содержащий \inputкоманды для всех ver2файлов, и так далее, и тому подобное для всех ваших версий.

Обратите внимание, что LaTeX позволяет вам "вкладывать" \inputкоманды таким образом. То есть, у вас есть \inputв вашем основном файле LaTeX, который вводит файл, содержащий дополнительные \inputкоманды. Это нормально для \input. Однако вы не можете использовать этот тип вложения с \includeкомандой.

Если ваш основной файл LaTeX не находится в той же папке, что и ваши файлы ver1file1.texи ver1files.texт. д., то обязательно обновите путь в \inputкоманде, чтобы указать, где эти файлы на самом деле находятся. Я просто использовал "./" (текущий каталог) для быстрого примера здесь.

Связанный контент