Cargue la fuente desde el directorio del paquete usando fontspec

Cargue la fuente desde el directorio del paquete usando fontspec

Estoy trabajando en un paquete LaTeX (de hecho, es una clase de documento) que quiero que otros puedan instalar en su directorio texmf. En este paquete estoy configurando una configuración predeterminada para el comando \lstset con una fuente determinada. Si, por ejemplo, quisiera usar Droid Sans Mono como fuente, el siguiente comando funciona si la fuente está instalada en el sistema:

\newfontfamily\listingsfont[Scale=0.85]{Droid Sans Mono}
\lstset {
    basicstyle=\footnotesize\listingsfont
}

Sin embargo, si la fuente no está instalada en el sistema, esto, por supuesto, fallará. Por este motivo, me gustaría distribuir la fuente junto con el paquete LaTeX. He probado la opción Ruta de fontspec

\newfontfamily\listingsfont[Path=/home/username/texmf/tex/latex/mypackage/,Scale=0.85]{Droid Sans Mono}

lo cual funciona perfectamente bien, excepto que tendría que saber el nombre de usuario de antemano.

¿Hay alguna manera de especificar rutas relativas a mi paquete en fontspec? ¿O para obtener la ruta al directorio de inicio?

(La mayoría de los usuarios de este paquete utilizarán Ubuntu como sistema operativo principal).

Respuesta1

Hay una serie de cosas a considerar aquí.

  1. Al cargar fuentes almacenadas en el árbol texmf, debe usar nombres de archivos y no nombres de fuentes, ya que los nombres de fuentes no funcionan en todos los sistemas operativos. Así que úsalo \newfontfamily\listingsfont[Scale=0.85]{droidsansmono.ttf}en lugar de \newfontfamily\listingsfont[Scale=0.85]{Droid Sans Mono}.
  2. Las fuentes pertenecen a la fontscarpeta de un árbol texmf: fonts\opentypepara otf-fonts y fonts\truetypepara ttf. Incluso si encuentra un método para mantener la fuente cerca de su paquete: un sistema grande como una distribución TeX sólo puede funcionar si todos cumplen con algunos estándares.

  3. Rara vez tiene sentido distribuir una fuente automáticamente junto con una clase o paquetes. Hay excepciones cuando tienes control total sobre la fuente, si es realmente especial y solo se puede usar con la clase, o si no es gratuita. Pero en el caso de Droid Sans Mono ya existe un paquete con esta fuente y un CTAN y añadir una segunda versión al árbol texmf sólo puede dar problemas. Por ejemplo, a xelatex no le gusta que haya más de una versión de una fuente en la ruta de búsqueda.

Entonces, si teme que algunos de sus usuarios no tengan una fuente Droid Sans Monoque esté en CTAN: dígales que actualicen su sistema TeX o instalen la fuente manualmente desde CTAN.

Si realmente necesita distribuir la fuente junto con el paquete, dígales a los usuarios que las instalen en las carpetas correctas (si distribuye su paquete a través de CTAN, ellos se encargarán de esto).

Respuesta2

Eche un vistazo a la clase de documento "novedosa". Podría estar en tu distribución TeXlive 2016, o si no, CTAN. La clase incluye su propia fuente personalizada, que se instala en el lugar apropiado (fonts/opentype/novel/) cuando instala el paquete (que en realidad es una clase de documento).

Funciona cuando se instala a través de tlmgr (instalador de distribución). También funciona si se descarga como TDS y se instala en un directorio TEXMF-LOCAL. Tenga en cuenta que, en algunos casos, es posible que necesite reconstruir luatex-cache.

Tenga en cuenta que la fuente personalizada no se carga "desde el directorio del paquete". Más bien, el paquete instalado coloca la fuente en un directorio adecuado donde se supone que deben estar las fuentes. Lo hace automáticamente.

Cuando comencé a crear esta clase de documento, imaginé hacer exactamente lo que usted pidió en la pregunta: colocar la fuente donde se encuentra el archivo *.sty del paquete. Pero eso no funciona fácilmente y, de hecho, no es necesario, ya que el instalador del paquete también puede instalar una fuente.

EDITAR: Recientemente, fontspecse agregó la capacidad de detectar si se puede encontrar o no una fuente y realizar diferentes acciones en función de si la fuente está allí o no. Entonces, es posible escribir una macro que solicite la fuente A, pero use B si no se encuentra A, o use C si no se encuentra ni A ni B, y finalmente detenerse con un mensaje si no se encuentra ninguno de ellos. Consulte la fontspecdocumentación reciente.

información relacionada