2010-10-14 22 views
36

Uso algunos .sty-files que no son parte de texlive y quiero tenerlos en un subdirectorio de la carpeta con mi main.tex. He utilizado la siguiente línea para cargar el paquete:Cómo cargar archivos .sty de látex desde un subdirectorio?

\usepackage{sty/prettythesis} 

Esto funciona, pero la compilación de la main.tex con XeLaTeX y el uso de rubber me da una advertencia:

sty/prettythesis.sty: You have requested package `sty/prettythesis', 
but the package provides `prettythesis'. (page 1) 

¿Hay una manera de evitar que esto advirtiendo o manejando este caso sin tener que incluir "sty \" en todos los comandos .sty-files '\ ProvidesPackage o establecer la variable de entorno TEXINPUTS (que parece no ser posible desde main.tex).

Respuesta

13

Creo que este hilo aquí:

habla precisamente lo mismo: lo que parece, las únicas alternativas son o bien utilizando TEXINPUTS variable de entorno; o usando el import package. (nota, hay una variante en el paquete import en ...Including tex files pg 3.)

Un poco más sobre TEXINPUTS:

Espero que esto ayude;
¡Salud!

 

EDIT: la esperanza de que se podría establecer la ruta TEXINPUTS directamente en el archivo tex (utilizando \write18 - y la nota, algunas versiones de LaTeX utilizan --enable-write18, la mía utiliza -shell-escape para permitir \write18; véase también this) - pero parece que no es posible:

"... esto no es posible ... la variable de entorno del proceso está puesto, pero esto no tiene un efecto. a su proceso principal (TeX). ".

...así, ahora acabo de llamar pdflatex en mi Linux bash así:

TEXINPUTS=.//:$TEXINPUTS pdflatex ./myfile.tex

y luego se resolverá directamente \usepackage{mypackage} en el archivo myfile.tex - incluso si mypackage.sty está en un subdirectorio, por ejemplo ./subdir/mypackage.sty.

2

línea de pocas palabras siguientes antes de la llamada a pdflatex (o látex) en su makefile o Creación de un script:

export TEXINPUTS=".:./sty:" 

después hacer referencia a su paquete como:

\usepackage{prettythesis} 
+1

Al hacerlo, no puede encontrar otros paquetes, en mi caso. ¿Cómo saber qué directorios predeterminados también se agregarán a la variable de entorno? – gigabytes

+1

De acuerdo con la documentación oficial, _debe encontrar paquetes de sistema. ("man pdftex" en mi sistema lo dice). ¿No te faltan los dos puntos finales (":")? –

+0

sí, ese fue el error – gigabytes

0

Como se descubrió, poniendo el paquete en un subdirectorio (por ejemplo, ./sty/prettythesis.sty con respecto a su archivo principal .tex en ./) y llamando al paquete a través de

\usepackage{sty/prettythesis} 

se cargue correctamente el paquete, pero se producirá el aviso

sty/prettythesis.sty: You have requested package `sty/prettythesis', 
but the package provides `prettythesis'. (page 1) 

Si lo que quieres es para deshacerse de esta advertencia, y que estás bien con modificaciones menores en el archivo .sty , entonces puede simplemente cambiar el nombre del paquete que se informa, cambiando el comando \ProvidesPackage a

\ProvidesPackage{sty/prettythesis} 

Esto puede ser un inconveniente si vas a moverlo entre cargas, pero la carga de modificaciones tampoco es tan mala.

Aún mejor, si tiene una versión específica modificada de un paquete TeX estándar (como, por ejemplo, this patch of natbib), el cambio en el nombre del paquete indica claramente qué paquete proporciona, y si reutiliza el archivo, entonces (lo más probable) volverá a generar una advertencia para que se asegure de que sabe lo que está haciendo.

Cuestiones relacionadas