If-Abfrage in Kopfzeile? \leftmark leer

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


wajo
Forum-Newbie
Forum-Newbie
Beiträge: 1
Registriert: Di 19. Jul 2011, 11:40

If-Abfrage in Kopfzeile? \leftmark leer

Beitrag von wajo »

Hallo zusammen,

ich sitz gerade an der Finalisierung meiner Thesis und habe folgendes Problem:

Die Kopfzeile bei Kapiteln ohne Sections (Inhaltsverzeichnis, Anhang, Literaturverzeichnis) haben bei meiner Kopfzeile doppelte Angaben drin.

Also es sieht so aus: Inhaltsverzeichnis (Inhaltsverzeichnis), Logik ist dabei Section (chapter) mit folgendem Code (ich möchte gerne eine if-Abfrage, um dies abzufangen):
\documentclass[12pt, oneside, a4paper]{report}
\usepackage[latin1]{inputenc}
\usepackage{bibgerm}
\usepackage{ngerman}
\usepackage{enumitem}
\usepackage{fancyhdr}
\usepackage{etoolbox}

\pagestyle{fancy}

\lhead{\nouppercase{\rightmark}
\ifstrempty{\leftmark}{(\nouppercase{\leftmark})\}}{\}} 
\chead{} %leeres mittleres Feld
\rhead{} %leeres rechtes Feld
\lfoot{\today} %Für Datum links unten!
\cfoot{}
\rfoot{\thepage}

\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0.5pt}

\renewcommand{\chaptermark}[1]{%
\markboth{#1}{}}

\begin{document}

\tableofcontents

\chapter{Einleitung}
\label{sec:einleitung}

\section{Section 1}
\label{sec:section1}

\section{Section 2}
\label{sec:section2}

\chapter{Hauptteil}
\label{sec:hauptteil}

\section{Section 1}
\label{sec:section1}

\section{Section 2}
\label{sec:section2}

\end{document}
Das Problem ist die If-Abfrage um die Klammern und das Kapitel nur anzuzeigen, falls auch \leftmark etwas enthält.

Hat jemand eine Idee? Bin Neuling und wär auch für jeden anderen Vorschlag dankbar!
Zuletzt geändert von wajo am Mi 20. Jul 2011, 10:05, insgesamt 1-mal geändert.

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

Re: If-Abfrage in Kopfzeile? \leftmark leer

Beitrag von KOMA »

wajo hat geschrieben:Bin Neuling und wär auch für jeden anderen Vorschlag dankbar!
Einen anderen Vorschlag kann ich Dir unterbreiten: http://www.golatex.de/wichtige-hinweise ... t4512.html (ganz besonders den Abschnitt »Wenn Du eine Frage stellst«) bzw. die erste Zeile meiner Signatur beachten.

MMaa

Beitrag von MMaa »

Was für eine beschissene Antwort.
Solche Leute müßte man gleich kicken !!!

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

MMaa hat geschrieben:Was für eine beschissene Antwort.
Solche Leute müßte man gleich kicken !!!
Du siehst das falsch! Einzig deine Antwort gibt Anlass zur Rüge. Bitte unterlasse in Zukunft solche kontraproduktiven Bemerkungen. Wir haben hier klare Anforderungen an Stil und Inhalt des Forums; vergl. [4] und [5]. Wenn du dich außerstande siehst diese Regeln in Zukunft zu befolgen, bitte ich Dich von diesem Forum Abstand zu nehmen.

(Sollten weitere Fragen zu Regeln oder zwischenmenschliche Probleme austreten, bitte PN an mich. Bei weiteren Beleidigungen, off-topic Gesprächen wird der Thread geschlossen.)
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


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

Beitrag von KOMA »

MMaa hat geschrieben:Solche Leute müßte man gleich kicken !!!
Das wäre dann doch etwas übertrieben, nur weil wajo in der ersten Fassung seines/ihres ersten Beitrags hier die Frage in einer Form gestellt hatte, die es nahezu unmöglich machte, sie zu beantworten, ist das noch lange kein Grund wajo deshalb Gewalt anzutun. Da erschien es mir doch besser, ihn/sie darauf hinzuweisen, wie man es besser macht. Das hat ja auch immerhin dazu geführt, dass er/sie seinen/ihren Beitrag nochmals editiert hat. Leider wurde dabei vergessen den Status von "Rückfrage" wieder auf "offen" anzupassen, so dass vermutlich niemand mitbekommen hat, dass die Informationen jetzt den Mindestanforderungen genügen dürften. Ich werde deshalb den Status mal ändern, damit die Frage eine bessere Chance bekommt, doch noch beantwortet zu werden.

@wajo: Danke für die Ergänzung Deines Beitrags!

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

Re: If-Abfrage in Kopfzeile? \leftmark leer

Beitrag von KOMA »

wajo hat geschrieben:Die Kopfzeile bei Kapiteln ohne Sections (Inhaltsverzeichnis, Anhang, Literaturverzeichnis) haben bei meiner Kopfzeile doppelte Angaben drin.
Deine Angabe bezüglich des Anhangs kann ich nicht nachvollziehen. Bei den Verzeichnissen ist es so, dass \@mkboth mit zwei gleichen Argumenten aufgerufen wird. Damit liefern \leftmark und \rightmark dort also gleiche Ergebnisse. Eine Test darauf, ob \leftmark leer ist, wird hier also vermutlich nicht zum Ziel führen. Vielmehr müsste man testen, ob das Ergebnis von \leftmark und \rightmark gleich ist. Alternativ könnte man dafür sorgen, dass \@mkboth das zweite Argument nicht an \markboth weiterreicht, sondern dort tatsächlich ein leeres Argument setzt. In dem Fall wäre dann aber wiederum nicht \leftmark, sondern \rightmark darauf zu testet, ob es leer ist.
wajo hat geschrieben:
\lhead{\nouppercase{\rightmark}
\ifstrempty{\leftmark}{(\nouppercase{\leftmark})\}}{\}}
Hier fehlt auf jeden Fall eine schließende geschweifte Klammer für das Argument von \lhead. Außerdem ist mir nicht klar, wozu Du schließende geschweifte Klammern in der Ausgabe des Kopfes haben willst, was also die \} da sollen. Die erscheinen mir mehr als seltsam.

Wenn ich richtig verstanden habe, was Du suchst, dann müsste Dir
\documentclass[12pt, oneside, a4paper]{report}
\usepackage[ngerman]{babel}% wird im Gegensatz zu ngerman nicht gepflegt
\usepackage{blindtext}% für \blinddocument im Beispiel unten
\usepackage{fancyhdr}

\pagestyle{fancy}

\lhead{\nouppercase{\leftmark\ \rightmark}}
\chead{} %leeres mittleres Feld
\rhead{} %leeres rechtes Feld
\lfoot{\today} %Datum links unten!
\cfoot{}
\rfoot{\thepage}
\renewcommand*{\sectionmark}[1]{\markright{(\thesection~#1)}}% Eventuell auch
                                % ohne "\thesection~"
\makeatletter
\renewcommand*{\@mkboth}[2]{\markboth{#1}{}}
\makeatother

\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0.5pt}

\renewcommand{\chaptermark}[1]{\markboth{#1}{}}

\begin{document}

\tableofcontents

\blinddocument\blinddocument% Damit überhaupt eine Kopfzeile sichtbar wird!
\blinddocument\blinddocument% Damit das Inhaltsverzeichnis lang genug wird

\chapter{Kapitel}
\blindtext[5]

\blindtext[5]

\section{Abschnitt}

\blindtext[10]

\end{document}
weiter helfen.

BTW: Vielleicht willst Du Dir einmal die KOMA-Script-Klassen (beispielsweise scrreprt statt report) anschauen. Damit entfällt dann beispielsweise das \nouppercase, weil die Klassen bereits in der Voreinstellung keine Versalien in den Kolumnentiteln verwenden. Bei konsequenter Verwendung von KOMA-Script schrumpft das Beispiel zusammen auf:
\documentclass[12pt,headsepline,footsepline]{scrreprt}
\usepackage[ngerman]{babel}% wird im Gegensatz zu ngerman nicht gepflegt
\usepackage{blindtext}% für \blinddocument im Beispiel unten
\usepackage[automark]{scrpage2}

\pagestyle{scrheadings}
\clearscrheadfoot

\ihead{\leftmark\ \rightmark}
\ofoot[\pagemark]{\pagemark}
\renewcommand*{\sectionmark}[1]{\markright{(\thesection~#1)}}% Eventuell auch
                                % ohne "\thesection~"
\makeatletter
\renewcommand*{\@mkboth}[2]{\markboth{#1}{}}
\makeatother

\renewcommand{\chaptermark}[1]{\markboth{#1}{}}

\begin{document}

\tableofcontents

\blinddocument\blinddocument% Damit überhaupt eine Kopfzeile sichtbar wird!
\blinddocument\blinddocument% Damit das Inhaltsverzeichnis lang genug wird

\chapter{Kapitel}
\blindtext[5]

\blindtext[5]

\section{Abschnitt}

\blindtext[10]

\end{document}

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Re: If-Abfrage in Kopfzeile? \leftmark leer

Beitrag von Xenara »

KOMA hat geschrieben:Eine Test darauf, ob \leftmark leer ist, wird hier also vermutlich nicht zum Ziel führen. Vielmehr müsste man testen, ob das Ergebnis von \leftmark und \rightmark gleich ist.
Den Ansatz hatte ich mir auch überlegt, ich habs aber nicht hinbekommen. Wie würde das funktionieren?

Hier hab ichs mal probiert, mit selbstdefinierten Befehlen funktioniert es, aber mit \leftmark und \rightmark nicht mehr. Z.B. für "Contents" und "Contents" gibt es mir false aus, obwohl es imho true sein sollte?
Wo ist mein Denkfehler?
\documentclass{report} 
\usepackage{fancyhdr} 
\usepackage{etoolbox} 

\pagestyle{fancy} 

\begin{document} 

% Testen, ob der Befehl mit \ifdefequal prinzipiell funktioniert:

\newcommand{\mya}{A}
\newcommand{\myb}{A}

\ifdefequal{\mya}{\myb}{True}{False}

\clearpage

\tableofcontents 
\leftmark \qquad \rightmark

\ifdefequal{\rightmark}{\leftmark}{True}{False}


\chapter{Chapter}
\section{Section}
\leftmark \qquad \rightmark

\ifstrequal{\rightmark}{\leftmark}{True}{False}

\addtocontents{toc}{\newpage}
\chapter{Chapter}
\leftmark \qquad \rightmark

\ifstrequal{\rightmark}{\leftmark}{True}{False}

\end{document} 

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

Beitrag von KOMA »

\rightmark und \leftmark sind ja nicht einfach nur Makros, die einen Text enthalten. Entscheidend ist hier zu was diese bis zum Vergleich expandieren. \ifstrequal macht zunächst für die beiden zu vergleichenden Argumente ein \edef\foo{\detokenize{#1}}. Dabei wird aus \leftmark und \rightmark wieder nur \leftmark und \rightmark. Als nächstes werden die beiden dann mit \ifx verglichen. Letzlich ist das also nur ein \ifx\leftmark\rightmark und das ist nun einmal immer FALSE, weil \leftmark und \rightmark auch dann unterschiedliche definiert sind, wenn sie dieselbe Expansion in der Ausgabe besitzen. Man müsste also eigentlich die \detokenize weg lassen. Das funktioniert dann aber auch wieder nicht, weil \leftmark und \rightmark nicht voll expandierbar sind (erst recht, wenn \MakeUppercase drin vor kommt!).

Übrigens würden Deine Vergleiche ohnehin nicht funktionieren, da der Inhalt der Marken zur Verarbeitungszeit (also zum Zeitpunkt des Vergleichs) und zur Ausgabezeit (innerhalb der output-Routine) unterschiedlich ist. Die ganze Marken-Geschichte ist nicht so trivial, wie sie vielleicht auf den ersten Blick erscheinen mag. Ebenso Vergleiche in TeX.

Deshalb habe ich auch eine Lösung vorgeschlagen, bei der man solche Vergleiche gar nicht erst benötigt.
Zuletzt geändert von KOMA am Mo 22. Aug 2011, 15:56, insgesamt 1-mal geändert.

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag von Xenara »

Vielen Dank für die ausführliche Erläuterung!

Antworten