Einschließen von Ressourcen in die Klasse „nicht installiert“

Einschließen von Ressourcen in die Klasse „nicht installiert“

Ich versuche, eine vorhandene Klasse zu ändern, um ihre Verwendung zu vereinfachen. Im Grunde möchte ich nur, dass der Benutzer einen Ordner kopiert, der die .clsDatei und einige Ressourcen enthält (eine PNG-Datei mit einem Logo, einige Schriftarten und eine Textdatei mit einigen Informationen, die von der .clsDatei gelesen werden sollen).

Mein Problem ist, dass ich die .clsDateien nicht finden kann. Ich verwende beispielsweise, \InputIfFileExists{./<nameoftextfile>}{}{\ClassError...}aber das funktioniert nicht (es gibt immer den Fehler aus).

Gibt es eine Möglichkeit, auf eine Datei im selben Ordner wie die .clsDatei zu verweisen?

Übrigens, wenn ich die Klassendatei im texmf-localOrdner „installieren“ würde, wie würde ich dann auf die Ressourcen verweisen (die ich dann in einige Unterordner von texmf-local legen würde)? Es erscheint nicht sinnvoll, den Pfad zum texmf-Ordner in der Datei fest zu codieren .cls.

Antwort1

Normalerweise sollte es problemlos funktionieren, auf eine andere Datei im selben Verzeichnis zu verweisen, wie Sie es getan haben. Es reicht jedoch schon aus, zu sagen \InputIfFileExists{<nameoftextfile>}{}{\ClassError...}. (Aber: <nameoftextfile>wird nicht ausreichen. Die Erweiterung muss da sein!) Um auch in TeX auf ein Verzeichnis eine Ebene darüber zu verweisen, würden Sie verwenden ../<dir>. Die folgende Konfiguration sollte das gewünschte Ergebnis erzielen.

Verzeichnis-Setup

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

Dateien

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}

Antwort2

So wie ich es verstehe, haben Sie ein Verzeichnis mit einer Reihe von Dateien. Eine davon ist die .clsDatei und die anderen sind Dinge, die von der Datei gelesen werden sollen .cls.

Der Benutzer hat vermutlich ein .texDokument, das Ihre Klasse aufruft

\documentclass{fabulousclass}
...

.texDie einfachste Möglichkeit für Benutzer, Ihre Klasse zu verwenden, besteht darin, das Dokument mit allem anderen in das Verzeichnis zu legen .

Ihre Klasse kann einfach sagen:

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

Dann wird alles gefunden.

Wenn Sie nicht möchten, dass Benutzer Ihr Verzeichnis zu ihrem Arbeitsverzeichnis machen müssen, müssen Sie ihnen mitteilen, dass sie die Dateien installieren sollen.

Die Details hängen von Ihrer TeX-Distribution ab. Für TeX Live gibt es zwei Hauptoptionen:

  1. TEXMFHOME
  2. TEXMFLOCAL

Die erste Option ist die einfachste. Benutzer erstellen einfach ein Verzeichnis in ihrem persönlichen TEXMF-Baum. Auf einem Unix-ähnlichen System:

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/

Dann werden die Dateien unabhängig vom Arbeitsverzeichnis gefunden.

Das Verfahren ist dasselbe, allerdings TEXMFLOCALmit einem zusätzlichen Schritt. Dieser Vorgang erfordert normalerweise zumindest auf Unix-ähnlichen Systemen Privilegien.

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)

Das ist alles.

Sie können die Ressourcen in ein anderes Unterverzeichnis von TEXMFLOCALoder ablegen TEXMFHOME, wenn Sie möchten. Aber ich verstehe nicht, warum Sie das tun sollten, und es würde die Leute nur verwirren.

verwandte Informationen