Incluindo recursos na classe "não instalado"

Incluindo recursos na classe "não instalado"

Estou tentando modificar uma classe existente para simplificar seu uso. Basicamente gostaria apenas que o usuário copiasse uma pasta que contém o .clsarquivo e alguns recursos (um arquivo png com logotipo, algumas fontes e um arquivo de texto com algumas informações para serem lidas pelo .clsarquivo).

Meu problema é que não consigo fazer com que o .clsarquivo encontre os arquivos. Por exemplo, estou usando, \InputIfFileExists{./<nameoftextfile>}{}{\ClassError...}mas isso não funciona (sempre gera o erro).

Existe uma maneira de se referir a um arquivo na mesma pasta que o .clsarquivo?

Aliás, se eu "instalasse" o arquivo de classe na texmf-localpasta, como me referiria aos recursos (que depois colocaria em algumas subpastas do texmf-local)? Não parece razoável codificar o caminho para a pasta texmf no .clsarquivo.

Responder1

Normalmente, referir-se a outro arquivo no mesmo diretório que você fez deve funcionar perfeitamente. No entanto, já é suficiente dizer \InputIfFileExists{<nameoftextfile>}{}{\ClassError...}. (Mas: <nameoftextfile>não será suficiente. A extensão deve estar lá!) Para se referir a um diretório um nível acima também no TeX você usaria ../<dir>. A configuração a seguir deve atingir o que você está procurando.

Configuração de diretório

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

arquivos

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}

Responder2

Pelo que entendi, você tem um diretório com vários arquivos. Um é o .clsarquivo e os outros são coisas a serem lidas pelo .clsarquivo.

O usuário, presumivelmente, possui um .texdocumento que chama sua classe

\documentclass{fabulousclass}
...

A maneira mais fácil para os usuários usarem sua classe é colocar o .texdocumento no diretório com todo o resto.

Sua turma pode apenas dizer:

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

Então tudo será encontrado.

Se você não deseja que os usuários tornem seu diretório seu diretório de trabalho, você precisa instruí-los a instalar os arquivos.

Os detalhes dependem da sua distribuição TeX. Para TeX Live, existem duas opções principais:

  1. TEXMFHOME
  2. TEXMFLOCAL

A primeira opção é a mais direta. Os usuários simplesmente criam um diretório em sua árvore TEXMF pessoal. Em um 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/

Então os arquivos serão encontrados independentemente do diretório de trabalho.

O procedimento é o mesmo TEXMFLOCALcom uma etapa adicional. Este processo normalmente exigirá privilégios em sistemas Unix, pelo menos.

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)

Isso é tudo.

Você pode colocar os recursos em um subdiretório diferente TEXMFLOCALou TEXMFHOMEse desejar. Mas não vejo por que você faria isso e isso apenas confundiria as pessoas.

informação relacionada