Как можно динамически импортировать 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
команде, чтобы указать, где эти файлы на самом деле находятся. Я просто использовал "./" (текущий каталог) для быстрого примера здесь.