PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "subsection" umdefinieren unter komplizierten Umständen ...



cookie170
05-05-2006, 18:15
Hallo allerseits,

ich möchte Texte schreiben, in denen es Abschnitte, Paragraphen, Absätze und Sätze gibt: Verträge eben.

Dazu definiere ich unter scrartcl die Ebene sections in Abschnitte um und subsections werden zu meinen Paragraphen. Die Paragraphenzählung läuft durch, unabhängig vom Abschnitt.

Außerdem will ich in jedem Paragraphen die Absätze (mit \abs) nummerieren, ausser, der Paragraph hat nur einen Absatz. Der Absatzzähler wird bei jedem neuen Paragraphen zurückgesetzt.

Bei Sätzen (\stz) gilt das gleiche: Hat der Absatz nur einen Zähler, gibt's keine Nummer, ansonsten führt der Befehl \stz vor jedem Satz zu einer hochgestellten Nummer. Der Satzzähler wird bei jedem neuen \abs zurückgesetzt.

Etwas ähnliches gibt es schon als "jrtxnorm.sty" von Friedrich Vosberg, zu finden über dctt. Der hat aber eine Umgebung gebaut, die bei weitem nicht die Flexibilität hat, die ich brauche. Er hat auf die Umdefinition von section und subsection verzichtet mit der Folge, das Verweise nicht so einfach funktionieren, das Inhaltsverzeichnis nicht automatisch erstellt wird, hyperref muss man auch nachhelfen, etc. Alle diese Einschränkungen will ich dadurch lösen, dass ich vorgehe wie oben beschrieben.

Also habe ich eine kleine Vorlage "jrtxnorm3" zusammengebaut, die gegenüber dem Orignal einige Unterschiede aufweist:



\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{jrtxnorm3}
\RequirePackage{ifthen}
\RequirePackage{remreset} % Zum Entkoppeln des Zählers subsection von section
\InputIfFileExists{\jobname.pgf}{}{}

\newwrite\pgfnr
\immediate\openout\pgfnr=\jobname.pgf

\renewcommand\thesection{\Roman{section}. Abschnitt:}

\renewcommand\thesubsection{
\arabic{subsection}}



\newcounter{ABSATZ}[subsection]
\newcounter{SATZ}[ABSATZ]


\@removefromreset{subsection}{section} % Paragraphenzählung geht weiter auch nach neuen Abschnitten
\renewcommand\section{\@startsection
{section}{1}{0em} % LBegl. S. 32: Name, Ebene, Einzug
{\baselineskip}%Vor-Abstand - überprüfen
{0.5\baselineskip}%Nach-Abstand
{\bfseries\centering}}%Fett und Zentriert


\newcommand\ABSATZ{%
\ifnum\theABSATZ>0%
\immediate\write\pgfnr{%
\string\@namedef{hasmanyabsatz\thesubsection}{x}%
}%
\fi%
\stepcounter{ABSATZ}%
\@ifundefined{hasmanyabsatz\thesubsection}{% nur ein Absatz: keine Nummer
}{%
(\arabic{ABSATZ})~%
}%
}%
%
\def\abs{\ABSATZ}
%%
\newcommand\SATZ{%
\ifnum\theSATZ>0%
\immediate\write\pgfnr{%
\string\@namedef{hasmanysatz\theABSATZ-\thesubsection}{x}%
}%
\fi%
\stepcounter{SATZ}%
\@ifundefined{hasmanysatz\theABSATZ-\thesubsection}{% nur ein Satz: keine Nummer
}{%
\textsuperscript{\arabic{SATZ}}\hspace{.2ex}\nolin ebreak%
}%
}
\def\stz{\SATZ}

\AtEndDocument{\immediate\closeout\pgfnr}




Wenn ich jetzt einen kleinen Vertrag aufsetze (ohne Parteien, ohne Unterschriftszeilen, etc, nur ein Minimalbeispiel), funktioniert soweit alles:



\documentclass[a4paper,12pt,ngerman,smallheadings, pointlessnumbers, parskip]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[active]{srcltx} % Bettet Quellinfo in dvi ein
\usepackage{jrtxnorm3}


%opening
\title{Vertrag}
\author{}
\date{}

\begin{document}

\maketitle

\section{Worum geht es}
gagag

\subsection{und}

\abs\stz Jetzt wirds interessant. \stz noch mehr

\abs ddddannn ee


\section{Wasnochalles}

\subsection{zweiter}

\end{document}




Das Problem:

Meine Paragraphenüberschrift soll beispielsweise lauten:

§ 1 Grundlagen

Ich schaffe es nicht, subsection so umzudefinieren, dass ein Paragraphenzeichen in die Überschrift kommt. Wenn man in der obigen Vorlage die Definition



\renewcommand\thesubsection{
\arabic{subsection}}


ergänzt zu



\renewcommand\thesubsection{\S\,
\arabic{subsection}}


dann regnet es Fehlermeldungen. Naja, so ist das wohl, wenn man sich Dinge zusammenklaut, die weit über den eigenen Horizont gehen. Aber mein Latex-Begleiter hilft mir hier nicht weiter, mein Blick in source2e ließ den Gedanken an ein Zusatzstudium aufkommen und es wäre schon nett, wenn ich die Vorlage übernächste Woche benutzen könnte.

Hat jemand eine Idee, wie man ein Paragraphenzeichen in die Überschrift kriegt? Falls jemand das ganze Ding radikal anders bauen will, nur zu.

- fragt
Alexander

bischi
05-05-2006, 18:28
Und so was:

\newcommand{\isubsection}[1]{§\subsection{#1}}

MfG Bischi

cookie170
05-05-2006, 18:39
Leider nein,

fügt man

\newcommand{\isubsection}[1]{§\subsection{#1}}

in die Vorlage ein
und greift dann im Text mit

\isubsection{und}

darauf zu, dann ergibt sich folgendes Bild:

§

1 und

...

=> Das Paragraphenzeichen wird also nicht in die Überschrift einbezogen.

Ich habe dies und eine ganze Reihe ähnlicher Dinge probiert, z.B. auch § als \symbol

Gab immer reihenweise Fehlermeldungen.

Alexander

bischi
05-05-2006, 21:56
Und wenn du das ganze noch in ne Box packst?

MfG Bischi

PS: Oder vielleicht den Counter manipulieren...

cookie170
05-05-2006, 23:18
Wie soll ich einen Zähler, auf den ich verweisen will, in eine Box packen?

Mein Verdacht geht dahin, dass die Zeile

\string\@namedef{hasmanysatz\theABSATZ-\thesubsection}{x}

zu einer Berechnung führt, und egal was ich mit \thesubsection anstelle, er funktioniert dann nicht mehr.

Das hier hat halt nicht mehr viel mit Latex zu tun. Seufz.

Aber danke für die Mühe,
Alexander

bischi
06-05-2006, 09:55
Ich habe mehr an so was gedacht:

\newcommand{\isubsection}[1]{\setcounter{subsection}{§ 5} \subsection{#1}}

Das Beispiel müsstest du natürlich insofern noch ausbauen, indem du: Einen eigenen Counter definierst und diesen an Stelle der 5 einfügst und zweitens: Diesen Counter in den entsprechenden section-Commands wieder auf 1 zurücksetzt. Drittens musst du ihn in jeden isubsection-Aufruf raufzählen.

Ich hoffe, du verstehts, was ich meine.

MfG Bischi

cookie170
06-05-2006, 10:30
Hallo,

ein Student, der am Samstagmorgen so früh unterwegs ist?



Ich hoffe, du verstehst, was ich meine.


Ääh, nein?

Also: Ich will doch eigentlich nur subsection umdefinieren, dass vor der Zahl ein Paragraphenzeichen steht.

Das geht unproblematisch, solange subsection nicht - wie hier - in einer ifnum-Schleife (entschuldige, die genaue Bezeichnung ist mir nicht klar - bin kein Informatiker) verwendet wird.

Dein Vorschlag läuft doch darauf hinaus, subsection durch einen anderen Zähler zu ersetzen. Das geht, ich kann einfach subsection durch einen neuen Zähler \PGF ersetzen, und dann funktioniert das Beispiel auch, mit dem Paragraphenzeichen. Das haben wir mehr oder minder schon in der ursprünglichen jrtxnorm-Umgebung.

Tex behandelt subsection anders als andere, neu definierte Zähler. Naja, darauf hatte ich ja gehofft (automatische Kopfzeilen, Inhaltsverzeichnis, Verweise). Nur ist das wohl komplizierter, als ich dachte. Ich werde mal versuchen, die Unterteilung in eine Vorlage und ein Minimalbeispiel zu verändern und sehen, dass ich daraus für die Fehlersuche eine Datei mache, dann fällt das Experimentieren leichter.

Danke nochmal,
Alexander

voss
06-05-2006, 12:11
\renewcommand\thesubsection{\S\,
\arabic{subsection}}





\renewcommand*{\thesection}{\textsection \arabic{section}}
\renewcommand*{\thesubsection}{\textsection \arabic{subsection}}


Herbert

cookie170
06-05-2006, 13:41
in meine Vorlage habe ich aufgenommen:

\RequirePackage{textcomp}

und dann

den von Dir zitierten Befehl mit Deinem Vorschlag ersetzt:

\renewcommand*{\thesubsection}{\textsection \arabic{subsection}}

ergibt 8 Fehler, denn dann sieht Latex bei der Entscheidung, ob es sich um einen Absatz mit nur einem Satz oder mit mehreren handelt, plötzlich \textsection als Parameter an:



[LaTeX] mit Status 1 beendet
./Vertragsvorlage2.pgf:1:Undefined control sequence. \@namedef{hasmanysatz1-\T1\textsection 1}
./Vertragsvorlage2.pgf:1:Missing \endcsname inserted. \@namedef{hasmanysatz1-\T1\textsection 1}
./Vertragsvorlage2.pgf:2:Undefined control sequence. \@namedef{hasmanyabsatz\T1\textsection 1}
./Vertragsvorlage2.pgf:2:Missing \endcsname inserted. \@namedef{hasmanyabsatz\T1\textsection 1}
./Vertragsvorlage2.tex:23:Missing \endcsname inserted. \abs
./Vertragsvorlage2.tex:23:Missing \endcsname inserted. \abs\stz
./Vertragsvorlage2.tex:23:Missing \endcsname inserted. \abs\stz Jetzt wirds interessant. \stz
./Vertragsvorlage2.tex:25:Missing \endcsname inserted. \abs
[LaTeX] 8 Fehler, 0 Warnungen, 0 badboxes


Das Problem ist die spätere Benutzung von \thesubsection bei ifnum.

Ich werde gerade mal umbauen, vielleicht löst eine andere Reihenfolge das Problem.

Danke,
Alexander

cookie170
06-05-2006, 14:15
Auf dctt hat Friedrich Vosberg jetzt eine ähnliche Diskussion angestoßen.

Ich bin inzwischen dabei, mit Hilfe des Pakets titlesec einen Weg zu suchen, vor dem Text der Überschrift Code ausführen zu lassen, in meinem Fall eben \S\,

Mal sehen. Aber wenn jemand noch einen anderen Vorschlag hat ...

Alexander

voss
06-05-2006, 15:20
in meine Vorlage habe ich aufgenommen:

\RequirePackage{textcomp}


brauchst du nicht, wird sowieso geladen.
Angehängt dein Paket, läuft mit deinem obigen Beispiel.

Herbert

cookie170
06-05-2006, 17:20
1. Was hast Du da gemacht?
Was bedeutet

\let\subsec\subsection ? Oder wo lese ich das sinnvoll nach?

2. Leider funktioniert es nicht, denn im Inhaltsverzeichnis werden die Worte Abschnitt und <Abschnittsname> übereinander gedruckt.

Aber vielen Dank bis hierhin.

Gruß,
Alexander

voss
06-05-2006, 17:41
1. Was hast Du da gemacht?
Was bedeutet

\let\subsec\subsection ? Oder wo lese ich das sinnvoll nach?


In jedem besseren LaTeX Buch



2. Leider funktioniert es nicht, denn im Inhaltsverzeichnis werden die Worte Abschnitt und <Abschnittsname> übereinander gedruckt.


das hat nichts mit meinen Änderungen zu tun.
Da hast du schon einen Fehler in dem Paket.

Herbert

cookie170
06-05-2006, 20:50
Naja, der Fehler geht auf eigenes Unvermögen zurück.

Nachlesen: Ich hatte mir mal den Latex-Begleiter (2.A.) gekauft, in der Hoffnung, damit ein Nachschlagewerk für alle Fälle zu haben. Stimmt wohl auch, nur halt für Latex und nicht für Tex.

Also, vielen Dank,
der Mensch braucht ja eine Bastelecke ...

Gruß,
Alexander

bischi
06-05-2006, 22:26
Hallo,

ein Student, der am Samstagmorgen so früh unterwegs ist?


Musste nachher weg - also äusserer Zwang ;)

Noch ein Vorschlag (dürfte wahrscheinlich Fehlermeldungen geben - aber ein Versuch ists wert...):

\newcommand{\isubsection}[1]{\setcounter{subsection}{§ \thesubsection} \subsection{#1}}

MfG Bischi

PS: Oder hat die andere Lösung funktioniert?

voss
06-05-2006, 22:31
\newcommand{\isubsection}[1]{\setcounter{subsection}{§ \thesubsection} \subsection{#1}}


du kannst doch keinen counter mit "§ \thesubsection" setzen; der
erwartet eine Zahl.

Herbert

bischi
07-05-2006, 09:16
der erwartet eine Zahl.


Das hätt ich spontan auch gedacht - da ichs aber nirgendwo explizit so gefunden hab, hab ich mir gedacht - es wär ein Versuch wert...

MfG Bischi

PS: Habs ausprobiert: "missing number"...

cookie170
07-05-2006, 12:10
... noch nicht fertig, sollte aber fehlerlos funktionieren:

Das Paket titlesec stellt alles bereit, was ich brauche, zumindest der Doku nach. Denn bei der von Herbert freundlicherweise bereitgestellten Lösung wirkt sich ein anderer Fehler, wie beschrieben, bei Erstellung des Inhaltsverzeichnisses aus.

Mit titlesec doktere ich gerade daran herum, dass ich nun wieder bei jeder subsection eine vollständige Gliederungsziffer bekomme, also bei § 4, der meintewegen im II. Abschnitt steht, erhalte ich § II.4 ...

Das ist aber sicher lösbar. Immerhin funktioniert das Inhaltsverzeichnis.

Gruß,
Alexander