tex ファイルを動的にインポートするにはどうすればいいですか?
基本的に 1 つのフォルダーに何百もの .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
。
メイン.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
(このソリューションは、投稿者が指定したようにコマンドライン入力を利用していないことに今気付きました)
もう 1 つの解決策は、 コマンドを使用して特定のバージョンのファイルのみを入力する 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
。
ver1file1.tex
メインの LaTeX ファイルが、およびその他のファイルと同じフォルダーにない場合はver1files.tex
、コマンドのパスを更新して、\input
それらのファイルが実際に存在する場所を指すようにしてください。ここでは簡単な例として、「./」(現在のディレクトリ) を使用しました。