Hallo,
ich hab ein kleines Problem in Kombination mit dem algorithm2e Paket. Und zwar würde ich gerne, genauso wie es bei dem Abbildungsverzeichnis gemacht wird, jeweils einen kleinen Leerraum in der Liste der Algorithmen zwischen den Algorithmen aus den verschiedenen Kapiteln einfügen.
Ich habe das zwar nun auch hinbekommen, aber leider etwas unschön. Jetzt wollte ich Fragen ob es da nicht eine bessere Lösung gibt. Ich würde ja auch den \chapter Befehl umdefinieren, aber irgendwie kommt mir das so vor wie mit Kanonen auf Spatzen zu schießen.
Hier das leider etwas größer geratene Minimalbeispiel:
\documentclass{scrreprt} %-- Nötige Pakete \usepackage{tocloft} \usepackage[ngerman]{babel} \usepackage[algo2e,dotocloa,german,boxruled,algochapter]{algorithm2e} %-- Initialer Eintrag in der 'loa' Datei \makeatletter \addtocontents{loa}{\protect\select@language{ngerman}} \makeatother \begin{document} %-- Verzeichnisse \tableofcontents \listofalgorithmes %-- Neues Kapitel \chapter{Erstes Kapitel} %-- Abstand zu den Algorithmen des vorherigen Kapitels einfügen \makeatletter \addtocontents{loa}{\protect\addvspace{10\p@}} \makeatother Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. \begin{algorithm2e} \SetKwInOut{Input}{input} \caption{Erster Algorithmus} \Input{\x~- Some variable} \end{algorithm2e} \begin{algorithm2e} \SetKwInOut{Input}{input} \caption{Zweiter Algorithmus} \Input{\y~- Some variable} \end{algorithm2e} %-- Ein zweites Kapitel %-- Genauso wie das erste, nur zur besseren verdeutlichung der Wirkung \chapter{Zweites Kapitel} \makeatletter\addtocontents{loa}{\protect\addvspace{10\p@}}\makeatother Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. \begin{algorithm2e} \SetKwInOut{Input}{input} \caption{Dritter Algorithmus} \Input{\x~- Some variable} \end{algorithm2e} \begin{algorithm2e} \SetKwInOut{Input}{input} \caption{Vierter Algorithmus} \Input{\y~- Some variable} \end{algorithm2e} \end{document}
Das Minimalbeispiel zeigt wie das Algorithmenverzeichnis aussehen soll. Ich würde halt nur gerne die in \makeatletter
ausgeführten Abschnitte durch was vernünftiges/elegantes ersetzen.
Gruß
Oli
float und floatrow machen vor, wie es geht
Zunächst einmal kannst Du Dir
\makeatletter
und\makeatother
sparen, wenn Du\p@
schlicht durchpt
ersetzt.Für die Abstände bzw. auch die Möglichkeit die Kapitelüberschriften in die Verzeichnisses zu schreiben, sind die KOMA-Script-Klassen auf die Mitarbeit der Pakete angewiesen, die diese Verzeichnisse anlegen. KOMA-Script ruft zu diesem Zweck innerhalb von
\chapter
die Anweisung\float@addtolists
mit genau einem Argument auf. Dieses Argument sollte das entsprechende Paket dann direkt als Argument an\addtocontents{
<Kürzel>}
weiterreichen, wobei <Kürzel> im Falle von algorithm2e ebenloa
wäre. Das float-Paket und das floatrow-Paket machen das leider, indem es\float@addtolists
hart definiert. Besser wäre, wenn die Pakete folgenden Beispielcode verwenden würde:Dabei ist <PkgPrefix> durch eine für das Paket eindeutige Kennung zu ersetzen und <extension> durch die Dateierweiterung, die das Paket verwendet. Falls das Paket mehrere Dateierweiterungen verwendet (wie die Pakete float und floatrow) ist das Beispiel entsprechend zu erweitern.
Du kannst ja mal den alogrithm2e-Autor fragen, ob er das nicht einbauen möchte. Anderenfalls kannst Du ein kleines Paket schreiben, das algorithm2e per
\RequirePackageWithOptions
lädt und obigen Code ergänzt.Im Augenblick bin ich übrigens dabei eine neue Schnittstelle dafür zu entwickeln. Dann müssten Paketautoren nur noch etwas wie:
aufrufen. Das macht das Leben leichter. Natürlich wird das ein eigenständiges Paket, auf das man dann auch ohne KOMA-Script zurückgreifen kann (so wie scrlfile nicht nur wie typearea). Ursprünglich wollte ich
\addtotocfiles
einfach bei\@starttoc
einhängen. Aber das würde dann ggf. auch Pakete betreffen, die das gar nicht wollen. Eventuell werde ich das aber optional anbieten.BTW: Brauchst Du tocloft wirklich? Das Paket verträgt sich leider nicht optimal mit KOMA-Script, obwohl der Autor inzwischen ein paar minimale Anpassungen vorgenommen hat (nachdem ihn viele Anwender darum gebeten hatten – meine Versuche einer weit früheren Zusammenarbeit sind leider gescheitert).
Danke, viel besser!
Super, hab das jetzt einfach in meinen Preämble gesetzt. Ist zwar eine nicht so ganz 100%ige Lösung wie die, die Du vorgeschlagen hast. Aber etwas weniger Arbeit.
Aber eine Frage hab ich noch dazu. Es wird jetzt kein
\select@language{ngerman}
am Anfang in die 'loa' Datei eingefügt. Wozu ist das genau da, weil ich hatte mich erstmal maßgeblich an den Ausgaben der anderen Pakete orientiert, als ich das da rein gefrickelt habe. Und die schreiben dass alle halt als erstes in die Datei, es geht aber halt auch so.Und dann noch zu Deiner Frage:
BTW: Brauchst Du tocloft wirklich? Das Paket verträgt sich leider nicht optimal mit KOMA-Script, obwohl der Autor inzwischen ein paar minimale Anpassungen vorgenommen hat (nachdem ihn viele Anwender darum gebeten hatten – meine Versuche einer weit früheren Zusammenarbeit sind leider gescheitert).
Das hab ich leider auch schon gemerkt. Aber ich hatte keinen anderen Weg gefunden, wie ich ein kurzes Tabellenverzeichnis vor ein mehrseitiges Abbildungsverzeichnis setzen kann.
Ich hab dazu noch einmal ein Minimalbeispiel erstellt, dass zeigt, wie ich das im Moment gelöst habe:
Das sieht jetzt zwar genauso aus, wie ich es haben möchte, dafür musste ich aber auch mit dem Abstand tricksen, da ich den genauen Wert nicht kenne.
Würd mich freuen, wenn Du mir da eine eleganter Lösung ohne das Paket nennen könntest.
Zwei Verzeichnisse auf einer Seite
Ich halte absolut gar nichts davon, zwei Verzeichnisse auf einer Seite durch Inkonsistenz zu erkaufen. Kapitel fangen auf neuen Seiten an. Und wenn die Verzeichnisse Kapitel sind, dann fangen die bitte auf neuen Seiten an. Sollen Verzeichnisse ohne neue Seite aufeinander folgen, sollte man sie zu Abschnitten machen:
Warum setzt babel die Sprache für jedes Verzeichnis?
Babel schreibt bei jedem
\selectlanguage
auch bei dem impliziten durch Auswahl der Sprache, eine Umschaltung auf diese neue Sprache in alle ihm bekannten Verzeichnisse, damit die nachfolgenden Einträge auch in der korrekten Sprache, also u. a. auch mit der korrekten Trennung und den benötigten Shortcuts gesetzt werden.Beispiel:
Wenn Du Dir dazu sowohl das Inhaltsverzeichnis als auch die toc-Datei anschaust, wird Dir klar, was das soll. Wenn Du dann noch das Ergebnis von
oder
vergleichst, dann sollte das erst recht klar werden.
Aaaah
...mir geht ein Licht auf ;-)
Hab grad dann mal ein wenig gestöbert und das Babel interne Makro
\bbl@set@language
gefunden, welches bei jedem\selectlanguage
Aufruf diese an die Verzeichnisdateien weiterleitet.Hab das ganze dann mit dem Trick aus Deiner ersten Antwort hier erweitert um das Verhalten für das algorithm2e Paket nachzurüsten.
Macht man das jetzt so wirklich oder bietet das Babel Paket evtl. auch so einen schönen Hook an wie das KOMA-Script? Oder sollte man dem Autor des Babel Paketes einfach schreiben, dass er die weiteren Verezeichnisse 'lol' und 'loa' auch aufnehmen soll?
Man könnte den babel-Autor bitten ...
eine Möglichkeit in babel einzubauen, um babel zu sagen, dass es weitere Dateien behandeln soll. Es spricht aber auch nichts dagegen das einfach wie oben zu machen. Das Paket, an dem ich gerade arbeite, wird wohl ebenfalls
\bbl@set@language
erweitern. Eigentlich würde es bereits ausreichen, wenn hypen.cfg von babel beispielsweise wie folgt geändert würde:Dann könnte man nämlich für eigene Dateien einfach mit
\g@addto@macro
arbeiten, etwa:Vielleicht ist der babel-Autor ja dazu bereit. Wobei AFAIR die babel-Entwicklung derzeit leider stagniert.
Gut zu wissen.
Werd dann mal schauen, dass ich die Autoren der algorithm2e und Babel Pakete mal anschreibe und frage ob Sie bereit wäre die Pakete entsprechend anzupassen.
Danke Dir auf jeden Fall!
Änderung für algorithm2e
Dem algorithm2e-Autor könnte ich ggf. eine Vorabversion von tocbasic.sty zur Verfügung stellen. Wenn er das verwenden würde, müsste er sich um vieles bezüglich des Verzeichnisses nicht mehr selbst kümmern. Sogar die optionale Aufnahme des Verzeichnisses in das Inhaltsverzeichnis könnte er dann für lau haben. Für den vollen Komfort brauche ich noch etwas Zeit, aber
sollte demnächst funktionieren (eigentlich muss es nur noch getestet werden). Er braucht dann auch nicht mehr tocbibind zu laden, sondern kann per
die Aufnahme in das Inhaltsverzeichnis einfach einschalten. Er kann auch per
dafür sorgen, dass das Verzeichnis nummeriert wird. Und mit
wird nicht die oberste Gliederungsebene, sondern eine Ebene tiefer verwendet. Auch das wollen manche Anwender gerne haben.
Will man die Sprachbehandlung von babel für eine von tocbasic behandelte Datei nicht erweitern, so muss man das mit
explizit angeben. Dabei komme ich übrigens auch ohne die vorgeschlagene Änderung von babel aus, indem ich geschickt mit
\expandafter
arbeite.Natürlich kann man auch einfach
schreiben, um auf einen Schlag die Aufnahme in das Inhaltsverzeichnis einzuschalten und die Aufnahme in die babel-Sprachbehandlung zu unterdrücken.
BTW: Wenn Du mir ein Minimalbeispiel für die Verwendung von algorithm2e bereitstellst, kann ich auf Wunsch sogar eine Version von algorithm2e erstellen, die auf tocbasic basiert. Das wäre dann gleichzeitig mein Testfall und ich könnte dem Autor diese Änderung zur Verfügung stellen. Er kann sich dann anschauen, ob er das so machen will oder nicht. Da algorithm2e unter lppl steht, würde ich das geänderte Paket sonst eventuell unter neuem Namen herausbringen oder einen Wrapper schreiben, der irgendwie das Original lädt.
Wenn alles klappt, sollte das neue Paket Mitte des Jahres erscheinen. Ich muss zwischendurch noch die KOMA-Script-Anleitung um diverse Neuerungen ergänzen.
Tschuldige...
hatte leider die letzten Tage recht viel um die Ohren, deswegen erst jetzt meine Antwort.
Ich hab jetzt einfach mal versucht ein Minimalbeispiel zu erstellen. Ich weiß leider nicht so genau, ob Dir das so schon ausreicht. Zur Not einfach bescheid sagen.
Hervorragend
Ich habe jetzt eine Testversion von tocbasic.sty (das neue Paket) und eines daran angepassten algorithm2e unter dem Namen scralfo.sty. Noch ist KOMA-Script selbst nicht an tocbasic.sty angepasst (und ich beabsichtige noch ein bis zwei weitere Features in tocbasic.sty), so dass
\chapter
noch keinen Abstand in die Verzeichnisse einfügt, die tocbasic verwenden. Das ist einer der nächsten Schritte. Aber im Prinzip könnte der Autor von algorithm2e das übernehmen und mit Erscheinen von tocbasic.sty veröffentlichen.Wenn Du magst, kannst Du mir Deine E-Mail-Adresse schicken (an komascript at gmx Punkt info). Dann schicke ich Dir die Testdateien und Du kannst versuchen, den algorithm2e-Autor zu überreden, das zu übernehmen. Weitergegeben werden darf scralgo.sty derzeit aber keinesfalls werden (auch wenn etwas anderes darin steht), weil ich – um den Aufwand für den alogrithm2e-Autor minimal zu halten – bisher noch keinerlei Hinweise darin habe, dass die Datei momentan nicht von algorithm2e-Autor verwaltet wird!