Seite 1 von 1
Vorhandensein von Subsections in aktueller Section prüfen
Verfasst: So 13. Nov 2011, 15:14
von McFraggle
Hallo Forum! Ein offenbahr ungooglebares Problem lässt mich heute hier meinen ersten Post schreiben...
Problem: Ich muss feststellen, ob in der aktuellen Section Subsections vorhanden sind.
Kontext: Ich schreibe an einem Beamer-(Outer-)Theme, in dem eine vertikale Subsectionnavigation eingeblendet werden soll, allerdings nur dann wenn auch Subsections vorhanden sind.
Ich hoffe, jemand kann mir einen Hinweis oder eine Lösung geben...

Verfasst: Mo 14. Nov 2011, 00:07
von guy.brush™
Also mein Programm (Kile) hat eine Strukturübersicht, dort müsste das stehen. Ansonsten versuche doch einmal folgendes:
Gehe mit dem Cursor zu der Stelle, dessen section du meinst. Dann durchsuche das Dokument nach "subsections". Bei mir startet er dann i.d.R. an der Cursorstelle und nicht ganz am Anfang des Dokuments.
Ansonsten: Kopiere doch kurz das ganze chapter in irgendeine beliebige (am besten .txt oder neue .tex Datei) und durchsuche die Datei dort nach "subsection".
Sorry, Frage missverstanden...
Verfasst: Mo 14. Nov 2011, 23:21
von McFraggle
Ui! Konnte man die Frage so falsch verstehen?
Ich meine nicht, dass ich als Person dies feststellen muss. Vielmehr muss ich
im Code überprüfen, ob die aktuelle Section eine oder mehrere Subsections besitzt. Also in Pseudo-Code so etwas:
if currentSection.hasSubsection then
\meineSubsectionNavigation
else
\kleinerAbstand
fi
Ich suche die hier angedeutete if-Abfrage.
Ich hoffe, es ist so etwas verständlicher.
Danke trotzdem und Grüße...
Verfasst: Di 15. Nov 2011, 00:39
von Hagbard Celine
Du könntest section und subsection entsprechend umdefinieren:
\newif\ifsub
\let\tmpsection\section
\def\section{\subfalse\tmpsection}
\let\tmpsubsection\subsection
\def\subsection{\subtrue\tmpsubsection}
Mit \ifsub kannst du jetzt abfragen, ob es eine subsection gibt.
Je nach dem, was du vor hast, musst du evtl. auch noch die Sternvarianten umdefinieren.
Re: Vorhandensein von Subsections in aktueller Section prüfe
Verfasst: Di 15. Nov 2011, 09:44
von localghost
McFraggle hat geschrieben:[…] Problem: Ich muss feststellen, ob in der aktuellen Section Subsections vorhanden sind. […]
Das könnte auch über die Prüfung des Zählers »subsection« funktionieren. Wenn der ungleich Null ist, sind folglich Unterabschnitte vorhanden.
Thorsten
Verfasst: Di 15. Nov 2011, 22:40
von McFraggle
Lösung von localghost:
Ich denke das wird nicht funktionieren, da ich auch dann den Zählerwert 0 habe, wenn ich innerhalb einer Section VOR der ersten Subsection bin. Oder bin ich da falsch informiert?
Hagbard Celine:
Das sollte funktionieren! Sieht mir zwar etwas gebastelt aus, aber bislang ist mir kein Fall eingefallen, wo das knallen könnte. Auch wenn weitere Pakete den section-Befehl substituieren sollte das gehen... So oder so ist das übrigens ein lehrreiches Code-Schnippselchen für mich! Danke!

Ich werde es spätestens am WE ausprobieren.
Verfasst: Mi 16. Nov 2011, 00:03
von Hagbard Celine
Das Problem, das du bei localghosts Lösung hast, hast du bei meiner aber auch:
\documentclass{beamer}
\begin{document}
\newif\ifsub
\let\tmpsection\section
\def\section{\global\subfalse\tmpsection}
\let\tmpsubsection\subsection
\def\subsection{\global\subtrue\tmpsubsection}
\newcommand{\test}{\ifsub Ja!\else Nein!\fi}
\begin{frame}{}
\section{blub}
\test
\subsection{bla}
\test
\end{frame}
\end{document}
Der erste Test liefert ein "Nein!". Aber wenn ich dich richtig verstanden habe, möchtest du an dieser Stelle ein "Ja!".
Das wäre möglicherweise machbar, wenn man sich eines weiteren LaTeX-Durchlaufs bedient. Allerdings macht das die Sache nicht gerade einfacher.
PS: Ich habe noch zwei mal \global ergänzt (s.o.), damit es "sicherer" wird, sonst hast du Probleme bei der nächsten Folie.
Verfasst: Mi 16. Nov 2011, 20:05
von McFraggle
Hm, ja, Du hast mein Anliegen genau richtig verstanden. Und natürlich hast Du Recht, dass Deine Lösung genau den gleichen Mangel hat. Hatte wohl meinen Kopf nicht ganz bei der Sache... Das auf die Ergebnisse eines vorherigen Laufs zurückgegriffen werden musst, erscheint logisch. Ich habe schon im Code von Beamer nachgeschaut, werde aber nicht schlau daraus, wie es Beamer beim Aufbau der Subsection-Navigation schafft, zu jeder Section durch alle Subsections zu iterieren. Möglich muss es also sein.
Hat jemand eine weiterführende Idee oder versteht sogar die Logik hinter dem Aufbau der Beamer Subsection-Navigationen?
PUSH
Verfasst: Mi 30. Nov 2011, 09:35
von McFraggle
Wirklich niemand eine Idee??
Verfasst: Mi 30. Nov 2011, 10:17
von Sepp99