Incluir recursos en la clase "no instalada"

Incluir recursos en la clase "no instalada"

Estoy intentando modificar una clase existente para simplificar su uso. Básicamente, solo me gustaría que el usuario copie una carpeta que contenga el .clsarchivo y algunos recursos (un archivo png con un logotipo, algunas fuentes y un archivo de texto con información para que el .clsarchivo lea).

Mi problema es que no puedo hacer que el .clsarchivo encuentre los archivos. Por ejemplo, lo estoy usando \InputIfFileExists{./<nameoftextfile>}{}{\ClassError...}pero no funciona (siempre arroja el error).

¿Hay alguna manera de hacer referencia a un archivo en la misma carpeta que el .clsarchivo?

Por cierto, si tuviera que "instalar" el archivo de clase en la texmf-localcarpeta, ¿cómo me referiría a los recursos (que luego colocaría en algunas subcarpetas de texmf-local)? No parece razonable codificar la ruta a la carpeta texmf en el .clsarchivo.

Respuesta1

Normalmente, consultar otro archivo en el mismo directorio como lo hizo usted debería funcionar perfectamente. Sin embargo, ya basta con decirlo \InputIfFileExists{<nameoftextfile>}{}{\ClassError...}. (Pero: <nameoftextfile>no será suficiente. ¡La extensión debe estar ahí!) Para hacer referencia a un directorio de un nivel superior también en TeX, usarías ../<dir>. La siguiente configuración debería lograr lo que busca.

Configuración del directorio

texmf-local
 |
 +-- dir myclass
 |  |
 |  +-- file myclass.cls
 |  +-- file myexternalfile.tex
 |
 +-- dir resources
 |  |  
 |  +-- file resource.tex

Archivos

main.tex

\RequirePackage{filecontents}
\begin{filecontents}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2017/01/22 Example LaTeX class]
\LoadClass{article}
\InputIfFileExists{myexternalfile.tex}{}{\ClassError{myclass}{file not found}{}}
\InputIfFileExists{../resources/resource.tex}{}{\ClassError{myclass}{file not found}{}}
\end{filecontents}
\documentclass{myclass}

\begin{document}
\mymacro{} \myothermacro
\end{document}

myexternalfile.tex

\def\mymacro{hello}

resource.tex

\def\myothermacro{world}

Respuesta2

Según tengo entendido, tienes un directorio con un montón de archivos. Uno es el .clsarchivo y los otros son cosas que el .clsarchivo debe leer.

El usuario, presumiblemente, tiene un .texdocumento que llama a su clase.

\documentclass{fabulousclass}
...

La forma más sencilla para que los usuarios utilicen su clase es colocar el .texdocumento en el directorio con todo lo demás.

Tu clase puede simplemente decir:

\input{extensionfile}% extensionfile.tex
\input{configfile.cfg}% configfile.cfg
\includegraphics{logo}% logo.png

Entonces todo será encontrado.

Si no desea que los usuarios tengan que convertir su directorio en su directorio de trabajo, debe indicarles que instalen los archivos.

Los detalles dependen de su distribución TeX. Para TeX Live, hay dos opciones principales:

  1. TEXMFHOME
  2. TEXMFLOCAL

La primera opción es la más sencilla. Los usuarios simplemente crean un directorio en su árbol TEXMF personal. En un sistema Unix:

mkdir -p $(kpsewhich -var TEXMFHOME)/tex/latex
# where fabulousclassdirectoryname is the name of the directory containing your class and resources
mv -n fabulousclassdirectoryname $(kpsewhich -var TEXMFHOME)/tex/latex/

Entonces los archivos se encontrarán independientemente del directorio de trabajo.

El procedimiento es el mismo TEXMFLOCALcon un paso adicional. Este proceso normalmente requerirá privilegios al menos en sistemas Unix.

mkdir -p $(kpsewhich -var TEXMFLOCAL)/tex/latex
# where fabulousclassdirectoryname is the name of the directory containing your class and resources
mv -n fabulousclassdirectoryname $(kpsewhich -var TEXMFLOCAL)/tex/latex/
mktexlsr $(kpsewhich -var TEXMFLOCAL)

Eso es todo.

Puede colocar los recursos en un subdirectorio diferente de TEXMFLOCALo TEXMFHOMEsi lo desea. Pero no veo por qué querrías hacer eso y solo confundirás a la gente.

información relacionada