¿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.tex
y 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 ver1
los archivos. O
pdflatex main.tex
si desea que se ejecuten defaultval
los archivos. Usando \def\dynavar{ver1}
como opción "línea de comando", obtendrá el resultado
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 \input
comando 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 ver1
archivos simplemente ingresando su ver1files.tex
archivo, así:
\input{./ver1files.tex}
Puede crear un ver2files.tex
archivo que contenga \input
comandos para todos los ver2
archivos, y así sucesivamente para todas sus versiones.
Tenga en cuenta que LaTeX le permite "anidar" \input
comandos como este. Es decir, tiene un \input
archivo LaTeX principal que ingresa un archivo que contiene \input
comandos adicionales. Está bien hacerlo con \input
. Sin embargo, no puede utilizar este tipo de anidamiento con el \include
comando.
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 \input
comando para señalar dónde están realmente esos archivos. Solo usé "./" (directorio actual) para el ejemplo rápido aquí.