Carregar fonte do diretório do pacote usando fontspec

Carregar fonte do diretório do pacote usando fontspec

Estou trabalhando em um pacote LaTeX (na verdade, é uma classe de documento) que desejo disponibilizar para que outros instalem em seu diretório texmf. Neste pacote estou definindo uma configuração padrão para o comando \lstset com uma determinada fonte. Se eu, por exemplo, quiser usar Droid Sans Mono como fonte, o seguinte comando funciona se a fonte estiver instalada no sistema:

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

No entanto, se a fonte não estiver instalada no sistema, é claro que isso falhará. Por causa disso, gostaria de distribuir a fonte junto com o pacote LaTeX. Eu testei a opção Path do fontspec

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

o que funciona perfeitamente bem, exceto que eu teria que saber o nome de usuário de antemão.

Existe uma maneira de especificar caminhos relativos ao meu pacote no fontspec? Ou para obter o caminho para o diretório inicial?

(A maioria dos usuários deste pacote usará o Ubuntu como sistema operacional principal).

Responder1

Há uma série de coisas a considerar aqui

  1. Ao carregar fontes armazenadas na árvore texmf, você deve usar nomes de arquivos e não nomes de fontes, pois os nomes das fontes não funcionam em todos os sistemas operacionais imediatamente. Então use \newfontfamily\listingsfont[Scale=0.85]{droidsansmono.ttf}em vez de \newfontfamily\listingsfont[Scale=0.85]{Droid Sans Mono}.
  2. fonts pertencem à fontspasta de uma árvore texmf - fonts\opentypepara otf-fonts e fonts\truetypepara a ttf. Mesmo se você encontrar um método para manter a fonte próxima ao seu pacote: um sistema grande como uma distribuição TeX só pode funcionar se todos seguirem alguns padrões.

  3. Raramente faz sentido distribuir uma fonte automaticamente junto com uma classe ou pacotes. Há exceções quando você tem controle total sobre a fonte, se ela for realmente especial e utilizável apenas com a classe, ou se não for gratuita. Mas no caso do Droid Sans Mono já existe um pacote com esta fonte e um CTAN e adicionar uma segunda versão à árvore texmf só pode causar problemas. Por exemplo, o xelatex não gosta se houver mais de uma versão de uma fonte no caminho de pesquisa.

Então, se você teme que alguns de seus usuários não tenham uma fonte Droid Sans Monoque esteja no CTAN: diga a eles para atualizarem seu sistema TeX ou instalarem a fonte manualmente no CTAN.

Se você realmente precisar distribuir a fonte junto com o pacote, diga aos usuários para instalá-las nas pastas corretas (se você distribuir seu pacote através do CTAN, eles cuidarão disso).

Responder2

Dê uma olhada na classe de documento "nova". Pode estar na sua distribuição TeXlive 2016 ou, se não, no CTAN. A classe inclui sua própria fonte personalizada, que é instalada no local apropriado (fonts/opentype/novel/) quando você instala o pacote (que na verdade é uma classe de documento).

Funciona quando instalado via tlmgr (instalador de distribuição). Também funciona se baixado como TDS e instalado em um diretório TEXMF-LOCAL. Observe que em alguns casos, pode ser necessário reconstruir o luatex-cache.

Observe que a fonte personalizada não é carregada "do diretório do pacote". Em vez disso, o pacote instalado coloca a fonte em um diretório adequado onde as fontes deveriam estar. Faz isso automaticamente.

Quando comecei a construir esta classe de documento, imaginei fazer exatamente o que você pediu na pergunta: Coloque a fonte onde o arquivo do pacote *.sty está localizado. Mas isso não funciona facilmente e, na verdade, não é necessário, pois o instalador do pacote também pode instalar uma fonte.

EDIT: Recentemente, fontspecfoi adicionada a capacidade de detectar se uma fonte pode ou não ser encontrada e executar ações diferentes com base na presença ou não da fonte. Portanto, é possível escrever uma macro que solicite a fonte A, mas use B se A não for encontrada, ou use C se nem A nem B, e finalmente parar com uma mensagem se nenhuma delas for encontrada. Veja a fontspecdocumentação recente.

informação relacionada