
Estou tentando modificar uma classe existente para simplificar seu uso. Basicamente gostaria apenas que o usuário copiasse uma pasta que contém o .cls
arquivo e alguns recursos (um arquivo png com logotipo, algumas fontes e um arquivo de texto com algumas informações para serem lidas pelo .cls
arquivo).
Meu problema é que não consigo fazer com que o .cls
arquivo 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 .cls
arquivo?
Aliás, se eu "instalasse" o arquivo de classe na texmf-local
pasta, 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 .cls
arquivo.
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 .cls
arquivo e os outros são coisas a serem lidas pelo .cls
arquivo.
O usuário, presumivelmente, possui um .tex
documento que chama sua classe
\documentclass{fabulousclass}
...
A maneira mais fácil para os usuários usarem sua classe é colocar o .tex
documento 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:
TEXMFHOME
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 TEXMFLOCAL
com 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 TEXMFLOCAL
ou TEXMFHOME
se desejar. Mas não vejo por que você faria isso e isso apenas confundiria as pessoas.