\part, \chapter oder \section Thema ist als GELÖST markiert

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Gora

\part, \chapter oder \section

Beitrag von Gora »

Hallo an alle,

ich habe gerade folgendes Problem. Ich möchte einen Kapitel meiner Arbeit schreiben, da drin sollen mehrere gleiche Bezeichnungen wie Kapitel vorkommen. Nun habe ich mich noch nicht genau entschieden welche Dokumentenklasse ich benutzen werde oder der Text den ich geschrieben habe auch an die gedachte Stelle kommt. Sprich Kapitel könnte sich in Abschnitt oder Unterabschnitt wandeln. Ich will es aber nicht jedes mal per Hand ändern, sonder Latex sollte automatisch erkennen in welchen Teil des Textes sich das jeweilige Wort (oder Befehl) befindet.

Gibt es einen Befehl mit dem man es bewerkstelligen kann?

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

Du definierst dir eigenen Gliederungskommandos
\newcommand{\ebeneEins}[1] {
    \part{#1} }

\newcommand{\ebeneZwei}[1] {
    \chapter{#1} }
Und wenn dir das nicht mehr passt, veränderst du einfach die Definition deiner Kommandos entsprechend.
XeLaTeX, TeX Live, vim-latexsuite

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

MoonKid hat geschrieben:Du definierst dir eigenen Gliederungskommandos
\newcommand{\ebeneEins}[1] {
    \part{#1} }

\newcommand{\ebeneZwei}[1] {
    \chapter{#1} }
Und wenn dir das nicht mehr passt, veränderst du einfach die Definition deiner Kommandos entsprechend.
Damit zerstörst du die Sternvarianten (\chapter*} und die optionalen Argumente. Außerdem löst es nicht das Problem wie Referenzen zu benennen sind ("siehe Kapitel 1").

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

u_fischer hat geschrieben:Damit zerstörst du die Sternvarianten (\chapter*} und die optionalen Argumente.
Naja, er schreibt ja kein Package. Er könnte ja auch so
\newcommand{\ebeneDreiV1}[1] {
    \section*{#1} }
Aber wie würde man es den sauber lösen?
Außerdem löst es nicht das Problem wie Referenzen zu benennen sind ("siehe Kapitel 1").
Das würde ich gerne nachlesen. Wo finde ich dieses "Kapitel 1"?

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

MoonKid hat geschrieben:
u_fischer hat geschrieben:Damit zerstörst du die Sternvarianten (\chapter*} und die optionalen Argumente.
Naja, er schreibt ja kein Package. Er könnte ja auch so
\newcommand{\ebeneDreiV1}[1] {
    \section*{#1} }
Zahlen in Befehlsnamen gehen auch nicht.


Aber wie würde man es den sauber lösen?
Das hängt von vielen Dingen ab. Aber ich würde auf jeden Fall mit \let arbeiten.
Außerdem löst es nicht das Problem wie Referenzen zu benennen sind ("siehe Kapitel 1").
Das würde ich gerne nachlesen. Wo finde ich dieses "Kapitel 1"?
Im laufenden Text. Gora muss sich ja entscheiden, was er/sie schreiben will: siehe Kapitel 1 oder siehe Abschnitt 1 oder siehe Unterabschnitt 1?

Noch so einer

Beitrag von Noch so einer »

Das bringt aber nur etwas, wenn man aus allen \ebeneZwei später beispielsweise Abschnitte statt Kapitel machen will. So wie ich den OP verstanden habe, will er aber später noch "chaotisch" umordnen. Das wird nie komplett automatisch funktionieren, weil man zumindest angeben muss, ob eine konkrete Überschrift auf einer höheren oder tieferen Ebene als die letzten oder auf derselben Ebene wie die letzte angeordnet werden soll. Wenn man dazu bereit ist, ginge immerhin (mangels vollständigen Minimalbeispiels ungetestet):
\newcounter{currentlevel}% Zähler für Gliederungsebenen
\newcommand*{\currentlevelheading}{% Überschrift der aktuellen Ebene einfügen
  \ifcase \value{currentlevel}\relax
    \expandafter\chapter% Ebene 0
  \or
    \expandafter\section% Ebene 1
  \or
    \expandafter\subsection% Ebene 2
  \or
    \expandafter\subsubsection% Ebene 3
  \or
    \expandafter\paragraph% Ebene 4
  \or
    \expandafter\subparagraph% Ebene 5
  \else
    \expandafter\part% Ebene -1
  \fi
}
\newcommand*{\sublevelheading}{%
  \ifnum \value{currentlevel}<5\relax % Nur so lange tiefer gehen, bis 5=subparagraph erreicht ist
    \stepcounter{currentlevel}%
  \fi
  \currentlevelheading
}
\newcommand*{ancestorlevelheading}[1]{% Das erste Argument gibt zwingend an, wieviele Ebenen nach oben gegangen werde soll!
  \addtocounter{currentlevel}{-#1}%
  \ifnum \value{currentlevel}<-1\relax \setcounter{currentlevel}{-1}\fi
  \currentlevelheading
}
\newcommand*{\levelheading}[1]{% Das erste Argument gibt zwingend an, welche Ebenennummer verwendet werden soll
  \ifnum #1<-1\relax
    \setcounter{currentlevel}{-1}%
  \else \ifnum #1>5\relax
      \setcounter{currentlevel}{5}%
    \else
      \setcounter{currentlevel}{#1}%
    \fi
  \fi
  \currentlevelheading
}
Der Befehl \currentlevelheading hat dieselben Argumente wie die normalen Gliederungsbefehle (also ein optionales für Inhaltsverzeichnis und Kolumnentitel und ein obligatorisches für die Überschrift). Er erstellt eine Überschrift derselben Ebene, wie die letzte mit obigen Befehlen erstellte Überschrift.

\sublevelheading funktionier genauso erstellt aber eine Unterüberschrift zur letzten Überschrift.

\ancestorlevelheading erwartet als erstes Argument eine Nummer, die angibt, wieviele Ebenen man nach oben will. Die nächsten beiden Argumente wie gehabt.

\levelheading schließlich erwartet als erstes Argument ebenfalls eine Nummer. Diese gibt die Überschriftenebene an (wobei \part=-1 ist und \subparagraph=5).

Die normalen Ebenen dürfen nicht verwendet werden.

Wenn eine Klasse ohne chapter verwendet wird, müssen die Definitionen so angepasst werden, dass 0=section und 4=subparagraph.

Ob das dann letztlich komfortabler ist, als beim Verschieben von Abschnitten in eine andere Ebene, die Überschriftenbefehle für den verschobenen Teil anzupassen, muss der OP selbst entscheiden. Obige Befehle mit den normalen Befehlen mischen sollte man jedenfalls nicht. Weil dann currentlevel nicht mehr stimmt.

Ich würde wirklich beim Verschieben einfach per Suchen/Ersetzen, die Gliederungsbefehle austauschen. Dasselbe gilt, wenn man von einer Klasse ohne \chapter zu einer Klasse mit \chapter oder umgekehrt tauscht. Das ist so schnell erledigt, dass sich die Verwirrung mit den level-Befehlen nicht lohnt.

Noch so einer

Beitrag von Noch so einer »

u_fischer hat geschrieben:Im laufenden Text. Gora muss sich ja entscheiden, was er/sie schreiben will: siehe Kapitel 1 oder siehe Abschnitt 1 oder siehe Unterabschnitt 1?
Ich schreibe eigentlich nie "Unterabschnitt~1", sondern nur "Kapitel~1" und darunter "Abschnitt~1". Alles, was Untergliederungen von "Abschnitt" sind, wird ebenfalls "Abschnitt" genannt und an der Nummer erkannt, dass es Unter(…)abschnitte sind.

Wie dem auch sei: Das Problem kann man mit hyperref und \autoref lösen.

Antworten