Was bringt mir eine eigene Dokumentenklasse?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


ko3rn3r
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 53
Registriert: Mi 23. Jan 2019, 13:46

Was bringt mir eine eigene Dokumentenklasse?

Beitrag von ko3rn3r »

Hallo,
ich hätte mal eine Frage bezüglich des Schreibens einer eigenen Dokumentenklasse. Auf dieser Seite wurde schön erklärt, wie ich das mache: https://texwelt.de/fragen/1479/wie-erst ... ntenklasse
Aber ich verstehe nicht so ganz, was das für Vorteile mit sich bringt. Ich kann doch einfach alles, was vor \begin{dokument} steht, in eine eigene Datei packen und mit \input{Praeambel} genauso einfach meine Pakete und Definitionen laden wie mit \documentclass{meineKlasse}. Beim Rumspielen ist mir zudem aufgefallen, dass zwar alles ohne Warnung/Fehler funktioniert, aber die Befehle in TexStudio nicht mehr automatisch vervollständigt werden (vermutlich weil er jetzt nicht mehr sieht, welche Pakete geladen werden). Das finde ich ziemlich nervig.

Liebe Grüße


Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von Johannes_B »

Eine eigene Klasse für dich selbst bringt dir vermutlich gar nichts.

TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Gast

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von Gast »

Mit derselben Begründung könnte man auch komplett auf Klassen und Pakete verzichten und alles per \input laden.

Letztlich bringt es eine saubere Unterscheidung zwischen Dokumentarten und Dokumenten, also eine Organisationsfrage und Denkweise beim Herangehen. Dass so etwas sinnvoll ist, verstehen auch viele Word-Benutzer nicht, weshalb sie keine Dokumentvorlagen erstellen und verwenden, sondern entweder ein Dokument kopieren und dann den kompletten Inhalt ersetzen oder jedes Mal von vorn mit den Einstellungen anfangen. Das mündet dann irgendwann darin, dass für jeden Absatz die Schriftgröße neu eingestellt wird.

Natürlich gehört dazu auch, dass man Klassen und Pakete zentral ablegt und nicht jedes Mal wieder ins Dokumentverzeichnis kopiert. Das ist auch einer der Kritikpunkte an irgendwelchen Vorlagen. Statt aus einer Klasse (die idealer Weise ordentlich dokumentiert und auf CTAN hochgeladen wird), bestehen sie meist aus diverse Dateien in irgendwelche Unterverzeichnisse verteilt, die dann jeder für jedes Dokument neu kopiert und abändert.


Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2485
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von Stefan Kottwitz »

Das ist eine sehr gute Frage! Und ich sah sie in vielen Jahren nicht gestellt.

Daher eine Meinung auch von mir.

Für sich selbst privat als gelegentlicher Nutzer ist das Anlegen einer eigenen Dokumentklasse ganz sicher übertrieben. Erst als intensiver Nutzer kann man daraus Gewinn schöpfen, oder eben wenn man eine Klasse nur Mitnutzung für andere erstellt. (Komilitonen, Kollegen, alle)

Ja, Dokumentklassen sammeln das, was Du sonst mit \input einbinden würdest. Doch eine wesentliche Stärke sind Optionen: in einer Vielzahl von Optionen/Parametern kann man die Gestaltung beeinflussen: Schriftarten, Papiergrößen, Überschriften, und sehr vieles mehr. Das würde man privat kaum intensiv programmieren.

Die Verfasser bekannter Dokumentklassen (wie den Klassen im KOMA-Script-Paket) haben enormen Aufwand geleistet und uns Tausenden Nutzern Klassen zur Nutzung geschaffen, die wir mit einer Vielzahl von Optionen und Befehlen persönlich anpassen können, was mit einem \input nicht ginge.

In diesem Sinne, Klassen sind wunderbar und eine Aufgabe für Kenner, weniger für Heimwerker. Ich bin auch nur Heimwerker und Klassen-Nutzer, doch ich weiß, was ich an den tollen Klassen habe.

Stefan


MoeWe
Forum-Meister
Forum-Meister
Beiträge: 801
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von MoeWe »

Ich denke, es kommt sehr stark darauf an, was Dir vorschwebt.

Wenn Du nur vorhast, all Deinen Präambelcode einfach in eine .cls-Datei (oder eine .sty-Datei, das Prinzip wäre ja sehr ähnlich) auszulagern, dann hast Du meiner Meinung nach keine großen Vorteile (außer: aus den Augen, aus dem Sinn – und das kann sich ganz schnell als Nachteil entpuppen). Ich sehe sogar eher Nachteile. Das ist bei TeX.SX wunderbar in https://tex.stackexchange.com/a/544050/35864 und https://tex.stackexchange.com/a/284361/35864 erklärt. Hier nur schnell die meiner Meinung nach relevantesten Punkte

Wenn einfach der gesamte Präambelcode ausgelagert wird, dann wird das Konzept einer Dokumentenklasse oder auch eines Pakets womöglich überstrapaziert. Für mich soll eine Dokumentenklasse die Möglichkeit bieten, das Aussehen einer bestimmten Art von Dokument (z.B. Paper, Bachelorarbeit, Seminararbeit, ...) nach Bestimmten Vorstellungen einzustellen. Multi-Purpose-Klassen auf CTAN wie KOMA-Script oder Memoir bieten natürlich wesentlich mehr Einstellungsmöglichkeiten und sind für einen weiteren Begriff von "Art" anwendbar und letztendlich ist es nicht ganz einfach, den Begriff von "Art" vollständig festzunageln. Meiner Meinung nach gehört aber zum Beispiel die bei pdfLaTeX mit dem Paket inputenc eingestellte Eingabecodierung nicht zur "Dokument-Art", sie ist immer eine Eigenschaft der .tex-Datei und gehört daher nicht in die Klasse oder ein Paket, sondern immer direkt in die Präambel. Aber andere Fälle könnten weniger klar sein. Pakete stellen idealerweise eine bestimmte Funktion für das Dokument bereit (z.B. Acronymlisten, Glossar, Literaturverzeichnis, ...), auch hier fände ich es irgendwann zu viel des Guten, wenn ein Paket "alles" bündelt.

Oft bietet das Auslagern auch die Gefahr, dass sich über die Zeit immer mehr Pakete und Code dort ansammeln, sodass man schnell den Überblick verliert. Irgendwann ist der Code dann nicht mehr handhabbar (so entstehen einige der gruseligen Vorlagen, die bisweilen im Internet ihr Unwesen treiben). Wenn Du jedes Mal, wenn Du für ein neues Dokument ein neues Paket brauchst, dieses Paket sofort in die ausgelagerte Datei schreibst, dann lädst Du unter Umständen eine Vielzahl an Paketen, die Du gar nicht benötigst. Das braucht (etwas mehr) Zeit und erschwert die Fehlersuche, wenn mal etwas schief geht. Ich finde es viel sinnvoller, wenn nur die wirklich benötigten Pakete in der Präambel geladen werden, dann weißt Du immer, was Du gerade in diesem Dokument zur Verfügung hast und hast möglicherweise einen Ansporn die Liste von geladenen Paketen so kurz wie möglich zu halten, da Du sie immer siehst.

Es muss durchaus keine schlechte Idee sein, eine Dokumentklasse im engeren Sinne zu bauen, wenn man sich dabei Gedanken zur Trennung von Layout und Inhalt sowie Paket-Funktionen macht. Für ein Dokument, das man nur einmal schreibt (Bachlorarbeit, Masterarbeit) lohnt sich das aber wohl nicht unbedingt. Wenn Du allerdings immer wiederkehrende Dokumentarten hast, dann ist es vielleicht nicht verkehrt. Ich sehe es ähnlich wie Stefan, dass die meisten Menschen die Dinge, die Klassen von einfachen mit \input eingebundenen .tex-Dateien absetzen (Optionen), wahrscheinlich eher im geringeren Maße nutzen werden, wenn es um ein eigenes kleines Projekt geht. Aber das heißt nicht, dass es per se unsinnig wäre, eine eigene Dokumentenklasse zu schreiben. Wenn Du aber die TeXnischen Möglichkeiten nicht ausnutzt, dann besteht natürlich kein größer materieller Vorteil gegenüber \input.


Ing

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von Ing »

MoeWe hat geschrieben:
Do 14. Mai 2020, 18:17

Meiner Meinung nach gehört aber zum Beispiel die bei pdfLaTeX mit dem Paket `inputenc` eingestellte Eingabecodierung nicht zur "Dokument-Art", sie ist immer eine Eigenschaft der `.tex`-Datei und gehört daher nicht in die Klasse oder ein Paket, sondern immer direkt in die Präambel.

Und eben auch nicht in eine per \input ausgelagerte Datei.

MoeWe hat geschrieben:
Do 14. Mai 2020, 18:17

Aber andere Fälle könnten weniger klar sein. Pakete stellen idealerweise eine bestimmte Funktion für das Dokument bereit (z.B. Acronymlisten, Glossar, Literaturverzeichnis, ...), auch hier fände ich es irgendwann zu viel des Guten, wenn ein Paket "alles" bündelt.

Was aber natürlich genauso für eine Bündelung in einer Datei gilt, die man dann bei jedem Dokument unbesehen lädt.

MoeWe hat geschrieben:
Do 14. Mai 2020, 18:17

Oft bietet das Auslagern auch die Gefahr, dass sich über die Zeit immer mehr Pakete und Code dort ansammeln, sodass man schnell den Überblick verliert.

Und auch das gilt natürlich ebenso, wenn man statt einer Klasse oder eines Pakets einfach eine Präambeldatei, die man immer wieder verwendet, zumüllt. Bei einer Klasse oder einem Paket gibt es wenigstens die Chance, per Optionen bestimmte Teile quasi ein- und auszuschalten. In diesen Präambeldateien stehen dagegen oftmals Kommentare wie: "auskommentieren, wenn nicht gebraucht". Das ist für eine zentrale Datei natürlich unsinnig und bei Präambel-Dateien, die man immer wieder kopiert, wird überflüssiges allzu oft nicht gelöscht. Stattdessen wird nur immer neues dazu gebastelt und dabei allzu häufig übersehen, dass ein Paket inzwischen mehrfach geladen wird oder Paketreihenfolgen nicht mehr stimmen oder Pakete eigentlich inkompatibel sind.

Ich denke, man kann mit einer Klasse oder einem Paket genau denselben Unsinn treiben wie mit einer Präambeldatei und umgekehrt. Wichtiger ist, in der Tat, dass man sich über die Struktur etwas Gedanken macht und sich bei wiederkehrenden Tätigkeiten fragt ob sie typisch für das Dokument oder für eine bestimmte Art von Dokumenten sind.

Schönes Beispiel, wo so etwas wie eine Klasse oder ein Paket Sinn ergibt, ist ein immer wieder verwendeter Aufbau des Titels. Dagegen wäre das für einen einmal verwendeten Titel vollkommener Blödsinn.

Ich muss hier in erster Linie zwei Arten von Dokumenten erstellen. Die einen sind für den internen Gebrauch, die andere gehen auch an Kunden raus. Im Prinzip sehen die ganz ähnlich aus. Sie unterscheiden sich hauptsächlich im Deckblatt bzw. Titel (externe Dokumente haben beides, interne kommen ohne Deckblatt aus), Kopf- und Fußzeilen. Ich habe dafür ein Paket geschrieben, das eine Option intern und eine Option extern kennt und dann die Einstellungen entsprechend vornimmt und beispielsweise auch eine Fehlermeldung erzeugt, wenn bestimmte, je nach Dokumentart zwingende Felder für den Titel und den Fuß nicht gesetzt wurden. Natürlich könnte ich auch zwei verschiedene Präambeldateien dafür verwenden. Aber das meiste ist doch gleich. So muss ich nicht, wenn ich etwas gleiches ändere, in zwei Dateien ändern. Natürlich könnte ich den Unterschied auch nur per boolschem Schalter lösen, der dann in der Dokumentpräambel gesetzt wird. Paket und zwei Optionen, die dann natürlich auch einen Schalter umlegen, erschien mir aber eleganter.

Inzwischen gibt es in dem Paket auch noch Optionen v1, v2 und v3, weil ein paar Dinge mit der Zeit im Aussehen geändert wurden (beispielsweise war die Seitenzahl ursprünglich weiß auf schwarz, ist jetzt aber nur noch mit einem schwarzen vertikalen Strich getrennt) und ich manchmal eben doch noch eine alte Fassung haben will.

Und ja, natürlich hat das alles nicht direkt als Paket begonnen. Ganz am Anfang war das auch einmal eine Ansammlung von Code, den ich von Dokument zu Dokument kopiert habe. Daraus vor ein paar Jahren ein Paket zu machen, war eine gute Gelegenheit aufzuräumen. Und wenn sich in meinen Dokumenten von Zeit zu Zeit wieder viel Code ansammelt, dann denke ich tatsächlich darüber nach, ob davon irgend etwas besser in ein Paket wandern sollte. Stattdessen habe ich aber ein private Sammlung mit (meist) gut dokumentierten Codeschnipseln erstellt. Daraus kopiere ich dann individuell je nach Dokument etwas heraus. Ein Paket oder eine Klasse mit unzähligen Schaltern daraus zu machen, lohnt sich nicht.


Ulf
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 24. Jun 2020, 12:37

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von Ulf »

Hi, ich hänge mich hier mal mit drauf. Gibt es jemanden, der nach einer Vorlage eine schöne Vorlage/Klasse bauen kann, mit Logo, Corporate Design, eigener Schriftart und allem Schnickschnack?

Für Hinweise bin ich dankbar,
Gruß,
Ulf


Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2485
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von Stefan Kottwitz »

Hallo Ulf,

willkommen im Forum!

Ulf hat geschrieben:
Mi 24. Jun 2020, 12:41

Hi, ich hänge mich hier mal mit drauf.

Da brauchst Du vllt. Glück, dass jemand das alte Thema vom Mai wieder liest bis nach hier unten. Und dann noch ein eigentlich anderes Thema als in der Frage steht. (Vor-/Nachteile gesucht)

Mach gern bei weiteren Fragen ein neues Thema auf mit auf Anhieb sichtbarem Titel.

Ulf hat geschrieben:
Mi 24. Jun 2020, 12:41

Gibt es jemanden, der nach einer Vorlage eine schöne Vorlage/Klasse bauen kann, mit Logo, Corporate Design, eigener Schriftart und allem Schnickschnack?

Hier findest Du Leute, die das anbieten:

Arbeit kostet natürlich. Falls Du selber etwas erarbeitest (etwa aufbauend auf anderen Templates), dann kannst Du konkrete Fragen hier gern stellen. Während man echte Arbeitsstunden für den Lebensunterhalt hat, werden spezifische Fragen werden hier gern nebenbei beantwortet.

Stefan


Ulf
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 24. Jun 2020, 12:37

Re: Was bringt mir eine eigene Dokumentenklasse?

Beitrag von Ulf »

Wow, danke für die schnelle Hilfe. Ich check die Leute mal.

Grüße,
Ulf


Antworten