importa dinámicamente archivos tex

importa dinámicamente archivos tex

¿Cómo puedo importar dinámicamente un archivo tex?

Básicamente tengo cientos de archivos .tex en una carpeta, todos estos archivos tienen múltiples versiones. No puedo sacarlos de esta carpeta.

Ex:

ver1file1.tex
ver2file1.tex
...
ver8file1.tex
...
ver8file100.tex

Quiero poder configurar una variable de entorno o pasar un argumento de línea de comando para que latex pueda cargar dinámicamente todos los archivos de una versión particular.

Ejemplo:

pdflatex ver1
or
EXPORT LATEX_VER=ver1

para que solo se importe lo siguiente en el archivo principal de látex.

ver1file1
ver1file2
...
ver1file100

A continuación se muestra un ejemplo de lo que he probado hasta ahora pero no puedo obtenerlo. Básicamente quiero tener 2 archivos .tex file1.texy file2.tex. Quiero poder aceptar un argumento de línea de comando que defina el nombre del archivo a importar.

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}

Respuesta1

Aquí hay una pequeña maqueta de lo que sugeriría:

\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}

Llamarías al archivo anterior usando

pdflatex \def\dynavar{ver1} \input{main}

para ejecutar ver1los archivos. O

pdflatex main.tex

si desea que se ejecuten defaultvallos archivos. Usando \def\dynavar{ver1}como opción "línea de comando", obtendrá el resultado

ingrese la descripción de la imagen aquí

Respuesta2

Considere un flujo de trabajo con git. Veraquípara más información. Podrías etiquetar cada versión. Es decir, después de un tipo de confirmación,

git tag -a "v1" -m "This version has all the bare bones necessary for the project"

Luego más confirmaciones y más etiquetas, entonces todo lo que tienes que hacer es

git checkout -b v4_branch tags/v4

y su directorio de trabajo cambiará al estado que tenía en el momento en que etiquetó "v4" anteriormente y estará en una nueva rama llamada v4_branch. Leeraquípara obtener más información sobre cómo verificar las etiquetas correctamente (hay algunas ideas diferentes sobre la mejor manera de hacerlo).

Respuesta3

(acabo de darme cuenta de que esta solución no utiliza la entrada de línea de comandos como se especifica en el cartel)

Otra solución es crear un archivo tex que use el \inputcomando para ingresar solo los archivos para una versión particular. Entonces, por ejemplo, podrías crear un archivo llamado ver1files.tex, que consistiría en estas líneas:

\input{./ver1file1.tex}
\input{./ver1file2.tex}
\input{./ver1file3.tex}
...
\input{./ver1file100.tex}

Luego, en su documento principal de LaTeX, puede ingresar fácilmente todos sus ver1archivos simplemente ingresando su ver1files.texarchivo, así:

\input{./ver1files.tex}

Puede crear un ver2files.texarchivo que contenga \inputcomandos para todos los ver2archivos, y así sucesivamente para todas sus versiones.

Tenga en cuenta que LaTeX le permite "anidar" \inputcomandos como este. Es decir, tiene un \inputarchivo LaTeX principal que ingresa un archivo que contiene \inputcomandos adicionales. Está bien hacerlo con \input. Sin embargo, no puede utilizar este tipo de anidamiento con el \includecomando.

Si su archivo principal de LaTeX no está en la misma carpeta que sus archivos ver1file1.tex, etc. ver1files.tex, asegúrese de actualizar la ruta en el \inputcomando para señalar dónde están realmente esos archivos. Solo usé "./" (directorio actual) para el ejemplo rápido aquí.

información relacionada