importa dinamicamente arquivos tex

importa dinamicamente arquivos tex

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.texe 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 ver1os arquivos. Ou

pdflatex main.tex

se você deseja que ele execute defaultvalos arquivos. Usando \def\dynavar{ver1}como opção de "linha de comando", você obterá a saída

insira a descrição da imagem aqui

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 \inputcomando 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 ver1arquivos simplesmente inserindo seu ver1files.texarquivo, assim:

\input{./ver1files.tex}

Você pode criar um ver2files.texque contenha \inputcomandos para todos os ver2arquivos e assim por diante para todas as suas versões.

Observe que o LaTeX permite "aninhar" \inputcomandos como este. Ou seja, você tem um \inputarquivo LaTeX principal que insere um arquivo que contém \inputcomandos adicionais. Tudo bem com isso \input. No entanto, não é possível utilizar esse tipo de aninhamento com o \includecomando.

Se o seu arquivo LaTeX principal não estiver na mesma pasta que seus arquivos ver1file1.texe ver1files.texetc., certifique-se de atualizar o caminho no \inputcomando para apontar para onde esses arquivos realmente estão. Acabei de usar "./" (diretório atual) para um exemplo rápido aqui.

informação relacionada