Como posso importar dinamicamente um arquivo tex?
Basicamente, tenho centenas de arquivos .tex em uma pasta, todos esses arquivos têm várias versões. Não consigo movê-los para fora desta pasta.
Ex:
ver1file1.tex
ver2file1.tex
...
ver8file1.tex
...
ver8file100.tex
Quero poder definir uma variável de ambiente ou passar um argumento de linha de comando para que o látex possa carregar dinamicamente todos os arquivos de uma versão específica.
Exemplo:
pdflatex ver1
or
EXPORT LATEX_VER=ver1
para que apenas o seguinte seja importado no arquivo latex principal.
ver1file1
ver1file2
...
ver1file100
Abaixo está um exemplo do que tentei até agora, mas não consigo, basicamente quero ter 2 arquivos .tex file1.tex
e file2.tex
. Quero poder aceitar um argumento de linha de comando que defina o nome do arquivo a ser importado.
principal.tex
\import{c:\path}{aux}
\import{c:\path}{\dynavar} % should load variable from commandline + added string ex: ver1file1
aux.tex
%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}
Responder1
Aqui está uma pequena maquete do que eu sugeriria:
\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}
Você chamaria o arquivo acima usando
pdflatex \def\dynavar{ver1} \input{main}
para executar ver1
os arquivos. Ou
pdflatex main.tex
se você deseja que ele execute defaultval
os arquivos. Usando \def\dynavar{ver1}
como opção de "linha de comando", você obterá a saída
Responder2
Considere um fluxo de trabalho com git. VeraquiPara maiores informações. Você pode marcar cada versão. Ou seja, após um tipo de commit,
git tag -a "v1" -m "This version has all the bare bones necessary for the project"
Depois, mais commits e mais tags, então tudo que você precisa fazer é
git checkout -b v4_branch tags/v4
e seu diretório de trabalho mudará para o status que estava no momento em que você marcou "v4" anteriormente e você estará em um novo branch chamado v4_branch. Leraquipara saber mais sobre como verificar as tags corretamente (há algumas ideias diferentes sobre a melhor maneira de fazer isso).
Responder3
(agora percebi que esta solução não utiliza entrada de linha de comando conforme especificado pelo pôster)
Outra solução é criar um arquivo tex que use o \input
comando para inserir apenas os arquivos de uma versão específica. Então, por exemplo, você poderia criar um arquivo chamado ver1files.tex
, que consistiria nestas linhas:
\input{./ver1file1.tex}
\input{./ver1file2.tex}
\input{./ver1file3.tex}
...
\input{./ver1file100.tex}
Então, em seu documento LaTeX principal, você pode facilmente inserir todos os seus ver1
arquivos simplesmente inserindo seu ver1files.tex
arquivo, assim:
\input{./ver1files.tex}
Você pode criar um ver2files.tex
que contenha \input
comandos para todos os ver2
arquivos e assim por diante para todas as suas versões.
Observe que o LaTeX permite "aninhar" \input
comandos como este. Ou seja, você tem um \input
arquivo LaTeX principal que insere um arquivo que contém \input
comandos adicionais. Tudo bem com isso \input
. No entanto, não é possível utilizar esse tipo de aninhamento com o \include
comando.
Se o seu arquivo LaTeX principal não estiver na mesma pasta que seus arquivos ver1file1.tex
e ver1files.tex
etc., certifique-se de atualizar o caminho no \input
comando para apontar para onde esses arquivos realmente estão. Acabei de usar "./" (diretório atual) para um exemplo rápido aqui.