texファイルを動的にインポートします

texファイルを動的にインポートします

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を含む を作成し、すべてのバージョンに対してこれを実行できます。\inputver2

LaTeX では、このようにコマンドを「ネスト」できることに注意してください\input。つまり、\inputメインの LaTeX ファイルに、追加のコマンドを含むファイルを入力するがあるとします\input。 では問題ありません\input。ただし、 コマンドではこのタイプのネストは使用できません\include

ver1file1.texメインの LaTeX ファイルが、およびその他のファイルと同じフォルダーにない場合はver1files.tex、コマンドのパスを更新して、\inputそれらのファイルが実際に存在する場所を指すようにしてください。ここでは簡単な例として、「./」(現在のディレクトリ) を使用しました。

関連情報