Eigenes Paket erstellen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Eigenes Paket erstellen

Beitrag von sLy »

Hallo,

ich habe selbst einige makros geschrieben und würde daraus gerne ein Paket, das zu miktex hinzugefügt werden kann, erstellen.
Leider habe ich nichts nützliches im Internet dazu gefunden.

Meine Makros bauen auf einigen anderen paketen (pst-circ,multido,etoolbox) auf.

Kann mir jemand sagen wie das geht?

mfg
sLy

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

Siehe clsguide und dtxtut.

sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Beitrag von sLy »

danke zunächst mal für den tipp.

allerdings ist das nicht ganz das was ich suche: mir wäre eine anleitung lieber, wie ich ein .sty file schreiben muss.
Deine Tutorials gehen davon aus, dass ich auch noch eine userdocumentation schreib will usw. (deswegen zuers ein .ins file und dann noch ein .dtx file erstellen)

Mein Ziel ist es jedoch, nur eine sty datei zu erstellen, diese manuell über miktex einzubinden, sodass meine makros und die dafür erforderlichen anderen pakete geladen werden wenn ich den befehl \usepackage{meinpaket} gebe.
Kann mir jemand sagen wie das geht?

mfg
sLy

EDIT:
hab es selbst geschafft: einfach ein anderes .sty file (Pfad bei mir: C:\Programme\TeX\MiKTeX 2.8\tex\latex) als vorbild genommen, umeditiert und dann noch meinen eigentlichen code als .tex unter C:\Programme\TeX\MiKTeX 2.8\tex\generic\Paketname gespeichert.

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

sLy hat geschrieben: allerdings ist das nicht ganz das was ich suche: mir wäre eine anleitung lieber, wie ich ein .sty file schreiben muss.
Genau dafür ist das erste Dokument da.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2650
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Ergänzend sei noch darauf hingewiesen, dass in Anhang B des KOMA-Script-Buches bei der Entwicklung eines Wrapper-Pakets ganz bewusst auch ein paar wichtige Anweisungen für das Schreiben von Paketen erklärt werden. Darüber hinaus werden in Anhang B und E ein paar wichtige Vorgehensweisen wie das Aufstellen einer Liste von Anforderungen, also einer Art minimalen Spezifikation, vorgeführt.

Ich habe das damals gemacht, weil ich der Meinung war, dass es vom fortgeschrittenen Anwender zum Autor von kleinen Paketen oder Wrapper-Paketen nicht weit ist, aber genau diese Punkte oftmals eine Hürde darstellen. Auch hat eine Kontrolle von ein paar Paketen gezeigt, dass wichtige Hinweise aus dem clsguide, beispielsweise dass hinter \ProcessOptions immer ein \relax gehört, oftmals nicht beachtet werden.

Was in Anhang B fehlt, ist der Hinweis, dass sich alternativ zum dort beschriebenen Vorgehen auch die Verwendung von \RequirePackageWithOptions angeboten hätte.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2650
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

sLy hat geschrieben:hab es selbst geschafft: einfach ein anderes .sty file (Pfad bei mir: C:\Programme\TeX\MiKTeX 2.8\tex\latex) als vorbild genommen, umeditiert und dann noch meinen eigentlichen code als .tex unter C:\Programme\TeX\MiKTeX 2.8\tex\generic\Paketname gespeichert.
Zum einen sollte man eigene Erweiterungen nicht im primären TEXMF-Baum ablegen. Stattdessen sollte man einen eigenen TEXMF-Baum anlegen und dessen Wurzelverzeichnis als weitere Root im MikTeX-Setup eintragen.

Desweiteren ist nach dem manuellen Einfügen von Dateien in einen TEXMF-Baum ggf. die Filename Database neu zu erzeugen. Auch das geht mit dem MikTeX-Setup-Werkzeug.

Außerdem ist eine Datei mit Endung ".tex" im "tex/generic"-Zweig des TEXMF-Baums kein LaTeX-Paket. LaTeX-Pakete haben die Endung ".sty", sollten im "tex/latex"-Zweig abgelegt werden und werden per \usepackage geladen. Dateien im "tex/generic"-Zweig sollten mit unterschiedlichen Formaten funktionieren und dürfen auch mit \input - oder unter LaTeX alternativ mit \InputIfFileExists - geladen werden. Konkret definiert die tds-Anleitung:
generic, for input files that are useful across a wide range of formats (examples: null.tex, path.sty). Generally, this means any format that uses the category codes of Plain TEX and does not rely on any particular format. This is in contrast to those files which are useful only with Plain TEX (which go under texmf/tex/plain), e.g., testfont.tex and plain.tex itself.
Demnach sollte eine Datei im Bereich "tex/generic" also keine Anweisungen aus dem LaTeX-Kernel voraussetzen und auch keine LaTeX-Pakete laden, die das ihrerseits tun, bevor das Paket diese Anweisungen nicht ggf. in äquivalenter Weise bereitstellt. Für erste Schritte ist es daher sicher leichter ein echtes LaTeX-Paket zu schreiben und das unterhalb von "tex/latex", als in "tex/latex/eigenesVerzeichnis", abzulegen.

sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Beitrag von sLy »

KOMA hat geschrieben:
sLy hat geschrieben:hab es selbst geschafft: einfach ein anderes .sty file (Pfad bei mir: C:\Programme\TeX\MiKTeX 2.8\tex\latex) als vorbild genommen, umeditiert und dann noch meinen eigentlichen code als .tex unter C:\Programme\TeX\MiKTeX 2.8\tex\generic\Paketname gespeichert.
Zum einen sollte man eigene Erweiterungen nicht im primären TEXMF-Baum ablegen. Stattdessen sollte man einen eigenen TEXMF-Baum anlegen und dessen Wurzelverzeichnis als weitere Root im MikTeX-Setup eintragen.

Desweiteren ist nach dem manuellen Einfügen von Dateien in einen TEXMF-Baum ggf. die Filename Database neu zu erzeugen. Auch das geht mit dem MikTeX-Setup-Werkzeug.

Außerdem ist eine Datei mit Endung ".tex" im "tex/generic"-Zweig des TEXMF-Baums kein LaTeX-Paket. LaTeX-Pakete haben die Endung ".sty", sollten im "tex/latex"-Zweig abgelegt werden und werden per \usepackage geladen. Dateien im "tex/generic"-Zweig sollten mit unterschiedlichen Formaten funktionieren und dürfen auch mit \input - oder unter LaTeX alternativ mit \InputIfFileExists - geladen werden. Konkret definiert die tds-Anleitung:
generic, for input files that are useful across a wide range of formats (examples: null.tex, path.sty). Generally, this means any format that uses the category codes of Plain TEX and does not rely on any particular format. This is in contrast to those files which are useful only with Plain TEX (which go under texmf/tex/plain), e.g., testfont.tex and plain.tex itself.
Demnach sollte eine Datei im Bereich "tex/generic" also keine Anweisungen aus dem LaTeX-Kernel voraussetzen und auch keine LaTeX-Pakete laden, die das ihrerseits tun, bevor das Paket diese Anweisungen nicht ggf. in äquivalenter Weise bereitstellt. Für erste Schritte ist es daher sicher leichter ein echtes LaTeX-Paket zu schreiben und das unterhalb von "tex/latex", als in "tex/latex/eigenesVerzeichnis", abzulegen.
danke für die erklärung.
Leider weis ich nicht, wie ich einen neuen TEXMF-Baum anlege, von daher habe ich es (schon vorher) so gemacht, wie du es danach beschrieben hast: die .sty ins \tex\latex\EigenesPaket verzeichnis, die .tex in \generic\EigenesPaket und dann die FNDB erneuert.

mfg
sLy

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2650
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

sLy hat geschrieben:Leider weis ich nicht, wie ich einen neuen TEXMF-Baum anlege,
MiKTeX hat eine Anleitung und eine FAQ. Da steht das drin. Nein, ich weiß das nicht, weil ich MiKTeX verwende, sondern weil ich einfach mal einen Blick auf die MiKTeX-Homepage geworfen habe.
sLy hat geschrieben:von daher habe ich es (schon vorher) so gemacht, wie du es danach beschrieben hast: die .sty ins \tex\latex\EigenesPaket verzeichnis
Das hast Du mich missverstanden. Das Unterverzeichnis ist zwar grundsätzlich richtig, allerdings nur, wenn es nicht im primären MiKTeX-TEXMF-Baum liegt, sondern in einem eigenen. Der primäre Baum sollte dem MiKTeX-Paketmanager vorbehalten bleiben. Zum einen fackelt der beim Überschreiben von Dateien in seinem Baum nicht lange und zum anderen wirst Du nach einem Upgrade auf eine neue MiKTeX-Version so ggf. Probleme haben, deine Pakete wieder zu finden. Bei Verwendung eines eigenen Baums ist das kein Problem. Den muss man nach dem Upgrade nur in MiKTeX Options wieder eintragen. Welche manuell installierte Pakete in welchen Unterverzeichnissen dort liegen, muss man nicht wissen. Trotzdem hat man auch darüber dann einen guten Überblick.

sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Beitrag von sLy »

KOMA hat geschrieben:
sLy hat geschrieben:Leider weis ich nicht, wie ich einen neuen TEXMF-Baum anlege,
MiKTeX hat eine Anleitung und eine FAQ. Da steht das drin. Nein, ich weiß das nicht, weil ich MiKTeX verwende, sondern weil ich einfach mal einen Blick auf die MiKTeX-Homepage geworfen habe.
sLy hat geschrieben:von daher habe ich es (schon vorher) so gemacht, wie du es danach beschrieben hast: die .sty ins \tex\latex\EigenesPaket verzeichnis
Das hast Du mich missverstanden. Das Unterverzeichnis ist zwar grundsätzlich richtig, allerdings nur, wenn es nicht im primären MiKTeX-TEXMF-Baum liegt, sondern in einem eigenen. Der primäre Baum sollte dem MiKTeX-Paketmanager vorbehalten bleiben. Zum einen fackelt der beim Überschreiben von Dateien in seinem Baum nicht lange und zum anderen wirst Du nach einem Upgrade auf eine neue MiKTeX-Version so ggf. Probleme haben, deine Pakete wieder zu finden. Bei Verwendung eines eigenen Baums ist das kein Problem. Den muss man nach dem Upgrade nur in MiKTeX Options wieder eintragen. Welche manuell installierte Pakete in welchen Unterverzeichnissen dort liegen, muss man nicht wissen. Trotzdem hat man auch darüber dann einen guten Überblick.
Aufgrund der Tatsache, dass ich noch anfänger bin und ein recht komplexes Thema bearbeite, bitte es zu entschuldigen, dass ich nicht wusste, dass ich einen neuen TEXMF-Baum anlegen sollte.
Die FAQ habe ich deswegen nicht konsultiert, weil ich desöfteren bereits stundenlang in so manchen FAQs gelesenhab, ohne eine Lösung für mein Problem zu sehen. Deswegen dachte ich, bevor ich meine zeit dafür opfere, wende ich mich an dieses Forum.
Ich war einfach froh, dass es auch auf meine weise funktioniert hat.

mfg
sLy

Antworten