PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wrapper-Klasse



André25
09-01-2012, 20:22
Hallo Freunde!

Die hilfsbereiten Kollegen Schweinebacke und sommerfee haben mich vor nicht allzu langer Zeit davon überzeugt wie wenig sinnvoll es ist Dokumentklassen anzupassen und statt dessen eine Wrapper-Klasse anzulegen.

Allerdings bin ich damit noch nicht sehr weit gekommen. Deshalb hier einfach mal die Frage, wie ich in den folgenden zwei Code-Beispielen aus der Dokumentenklasse...


\captionsetup[table]{position=above,skip=0pt,labelformat=tablelabel,la belsep=newline,textformat=tabletext}

...einmal den Wert von "skip=0pt" auf "skip=10pt"...


\def\TPT@doparanotes{\par\vspace{0\baselineskip}

...und das andere Mal von "\vspace{-.5\baselineskip}" auf "\vspace{0\baselineskip}" setzen kann?! Das geht doch sicher auch in meiner Präambel? Was muss ich dafür eingeben? Geht das so einfach (wie ich mir das denke)?

Wenn ich einmal ein Beispiel habe, kann ich das gut auf andere Fälle adaptieren...

Falls irgendjemand zu dem Thema einen Link hat od. eine Dokumentation kennt, kann mir das auch helfen.

Vielen Dank und liebe Grüße,

André :)

sommerfee
09-01-2012, 20:39
...einmal den Wert von "skip=0pt" auf "skip=10pt"...


\captionsetup[table]{skip=10pt}

(Werte, die mit \captionsetup gesetzt worden sind, kann man mit einem erneuten \captionsetup überschreiben. Alternativ kann man auch gesetzte Werte u.U. mit \clearcaptionsetup entfernen. Siehe Beschreibung von \captionsetup, die in der caption-Paketdoku zu finden ist.)


...und das andere Mal von "\vspace{-.5\baselineskip}" auf "\vspace{0\baselineskip}" setzen kann?!


\def\TPT@doparanotes{\par\vspace{0\baselineskip}.. .

oder besser


\renewcommand\TPT@doparanotes{\par\vspace{0\baseli neskip}...

(Eine Definition mit \def oder \newcommand kann man mit \def oder \renewcommand überschreiben. Ggf. kann man alte Definitionen mit \let sichern, damit man sie innerhalb seiner eigenen Umdefinitionen verwenden kann.)


Geht das so einfach (wie ich mir das denke)?

Um das zu beantworten, müssten wir erstmal wissen, wie du dir das denkst. ;)

Zur Doku: 1. clsguide ("texdoc clsguide") 2. Ein LaTeX-Buch, wo auch \newcommand, \newenvironment etc. beschrieben ist. 3. Ggf. ein TeX-Buch, was auch für Entwickler taugt, z.B. "TeX by Topic", welches als PDF im Netz gibt und auch TeXlive beiliegt ("texdoc texbytopic").

André25
09-01-2012, 22:15
Hallo sommerfee!

Danke für die Tipps!


Um das zu beantworten, müssten wir erstmal wissen, wie du dir das denkst. ;)

Das meinte ich mit "so einfach". ;) Und "so einfach" geht es ja auch - sprich einfach überschreiben.



\captionsetup[table]{skip=10pt}


Das geht ja echt wunderbar - "so einfach" wie ich mir das erhofft/gedacht hatte.



\def\TPT@doparanotes{\par\vspace{0\baselineskip}.. .

oder besser


\renewcommand\TPT@doparanotes{\par\vspace{0\baseli neskip}...

Aber das funktioniert nicht. Da erhalte ich "! LaTeX Error: \TPT undefined." Auch wenn ich größere Teile aus der Dokumentenklasse nehme (falls noch irgendwelche Teile fehlen), kommen Fehlermeldungen.

Danke auch für die Literaturempfehlungen. Ich habe mir ja auf Anraten von Schweinebacke den LaTeX-Begleiter (http://www.pearson-studium.de/main/main.asp?page=bookdetails&ProductID=179313) zugelegt und darin werde ich sicher auch (irgendwann mal) fündig. Aber der ist ja sooo dick - ob ich das in diesem Leben noch schaffe, wer weiß, wer weiß.

Grüße, André :)

sommerfee
09-01-2012, 22:41
Aber das funktioniert nicht.

Das funktioniert nur innerhalb einer Dokumentenklasse oder eines Paketes. Ansonsten muß man \makeatletter davor und \makeatother dahinterschreiben:



\makeatletter
\renewcommand\TPT@doparanotes{...}
...
\makeatother


Siehe auch: http://projekte.dante.de/DanteFAQ/Verschiedenes#53

Hintergrund ist der, daß Befehlsnamen mit @ nur innerhalb von Dokumentenklassen und Paketen verwendet und (um)definiert werden sollten. (Mit \makeatletter...\makeatother klappt es aber auch in einem Dokument.) Damit ist quasi eine Zweiteilung des Namensraumes der Makros vorgesehen: Diejenigen mit @ als interne Makros einer Dokumentenklasse bzw. eines Paketes, und diejenigen ohne @ als Makros, die den Benutzern zur Verfügung gestellt werden bzw. von Benutzern innerhalb des Dokumentes definiert werden. Damit sollen einerseits Namenskonflikte zwischen Klassen/Paketen und Definitionen in den Dokumenten vermieden werden, außerdem soll vermieden werden, daß Dokumente die internen Makros verwenden. Denn anders als die dokumentierten Makros (ohne @) möchte man sich als Autor gerne die Möglichkeit offenhalten, interne Makros in der nächsten Version nach Bedarf zu ändern, ohne daß deswegen vorhandene Dokumente nicht mehr übersetzbar sind. (Manche internen Makros sind aber auch in der Code-Dokumentation zum Gebrauch durch andere Pakete bzw. Dokumentenklassen dokumentiert. Im Zweifelsfalle am besten beim Autor der Dokumentenklasse bzw. des Paketes nachfragen.)

Und damit es zwischen Dokumentenklassen/Paketen und anderen Paketen keine Konflikte gibt, hat es sich eingebürgert, den Namen der Klasse bzw. des Paketes dem @ in irgendeiner Form voranzustellen. So heißen die internen Makros des caption-Paketes \caption@..., diejenigen von KOMA-Script \scr@... usw. \TPT@... dürfte für ein internes Makro des ThreePartTable-Paketes stehen, nehme ich zumindest an.

André25
09-01-2012, 23:31
Ansonsten muß man \makeatletter davor und \makeatother dahinterschreiben

Tausend Dank - nun läuft es so, wie es laufen soll - und (so einfach) wie ich mir das gedacht habe. Zudem kann ich, sollte ich weitere Dinge anpassen wollen, dank Deiner hervorragenden Erklärung die Beispiele adaptieren.


\TPT@... dürfte für ein internes Makro des ThreePartTable-Paketes stehen, nehme ich zumindest an.

Ja, so isses. ;)

DANKE sagt André :)