PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \listoffoobar ohne float



foobar
14-09-2007, 21:09
hallo zusammen
bin seit langem mal wieder auf ein latex-problem gestoßen das ich nicht selbst lösen kann

ich hab mit \newcommand einen neuen befehl definiert der einen simplen text als parameter erhält
jetzt brauche ich eine liste die alle diese parameter enthält zusammen mit der seitenangabe für jedes auftreten meines befehls
also im prinzip das selbe wie ein \listoffigures oder ähnliche

eine simple lösung wäre die float-umgebung zu verwenden allerdings geht das in meinem fall nicht da der text an der stelle des befehls nicht untebrochen werden darf und weil in meinem fall ein \begin{} \end{} block auch völlig überflüssig ist

also muss ich das ganze irgendwie manuell hinkriegen
zu dem zweck hab ich mal in die float.sty reingeschaut


\newcommand*{\listof}[2]{%
\@ifundefined{ext@#1}{\float@error{#1}}{%
\@namedef{l@#1}{\@dottedtocline{1}{1.5em}{2.3em}}%
\float@listhead{#2}%
\begingroup\setlength{\parskip}{\z@}%
\@starttoc{\@nameuse{ext@#1}}%
\endgroup}}

ich hab versucht den \listof-befehl zu kopieren und nach meinen wünschen zu verändern
aber da ich mit der syntax nicht klarkomme bzw. im schreiben eigener pakete überhaupt keine erfahrung habe wollte ich euch mal fragen ob ihr eine idee habt wie ich das hinbekomme?

ich bin natürlich auch für alternativen offen :)

danke schon mal

bischi
14-09-2007, 23:15
Schau dir mal das floatrow-Package an (http://www.ctan.org/tex-archive/macros/latex/contrib/floatrow/floatrow.pdf). Da kannst du dir neue Umgebungen definieren (Abschnitt 3). Das sollte eventuell weiterhelfen...

MfG Bischi

sommerfee
15-09-2007, 10:11
Ansonsten kann man auch das float-Paket (bzw. floatrow) dazu mißbrauchen, um den \listof Befehl zu definieren, die Einträge ins Verzeichnis macht man dann selber.

Hier hatte ich mal sowas im Ansatz hingeschludert:

http://www.mrunix.de/forums/showpost.php?p=245654&postcount=8

Gruß,
Axel

foobar
15-09-2007, 12:55
erstmal danke für eure antworten!
leider verstehe ich noch nicht ganz worauf ihr hinaus wollt...

@bischi
mit floatrow kann man ähnlich wie mit float neue float-umgebungen definieren richtig?
das problem ist das ich gar keine neue umgebung haben will
man könnte zwar den neuen befehl so definieren das er die umgebung selbst setzt - ich also keinen \begin{} \end{} block brauche
aber dann habe ich noch immer das problem das an dieser stelle im text die \caption usw. erscheint - an dieser stelle soll aber gar nichts von dem befehl zu sehen sein

@sommerfee
wenn ich den vorschlag aus deinem post aufnehme komme ich zu folgendem minmalbeispiel:


\documentclass[12pt, a4paper]{scrbook}

\usepackage{float}

\newfloat{formel}{H}{for}
\newcommand*\equationlistentry[1]{%
\addcontentsline{for}{equation}%
{\protect\numberline{\theequation}{\ignorespaces#1 }}%
}

\begin{document}
\chapter{Testkapitel}
\equationlistentry{test}
blabla
\chapter{bla}
\listof{formel}{formelliste}
\end{document}

im ersten durchgang läuft noch alles gut ab - ihm fehlt natürlich die "mini.for"
im zweiten durchgang bekomme ich dann:


tmp/mini.for:3: LaTeX Error: Something's wrong--perhaps a missing item.

See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...

l.3 addvspace {10p@ }

tmp/mini.for:3: ==> Fatal error occurred, the output PDF file is not finished!
Transcript written on tmp/mini.log.

und der inhalt von mini.for


\addvspace {10\p@ }
\contentsline {equation}{\numberline {1.0}{\ignorespaces test}}{1}
\addvspace {10\p@ }

leider kann ich damit jetzt nicht wirklich viel anfangen...
weiß jemand weiter?

sommerfee
15-09-2007, 13:39
Der zweite Eintrag von \addcontentsline war falsch, mea culpa. So sollte es klappen:



\documentclass[12pt, a4paper]{scrbook}

\usepackage{float}

\newfloat{formel}{htb}{for}
\newcommand*\equationlistentry[1]{%
\addcontentsline{for}{formel}%
{\protect\numberline{\theequation}{\ignorespaces#1 }}%
}

\begin{document}
\chapter{Testkapitel}
\refstepcounter{equation}
\equationlistentry{test}
blabla
\chapter{bla}
\listof{formel}{formelliste}
\end{document}


Wenn man das mit einem eigenen Zähler machen will (und nicht mit einem vorhandenen, wie "equation"), geht es noch mehr geradeaus:



\documentclass[12pt, a4paper]{scrbook}

\usepackage{float}

\newfloat{formel}{htb}{for}
\newcommand*\formellistentry[1]{%
\addcontentsline{for}{formel}%
{\protect\numberline{\theformel}{\ignorespaces#1}} %
}

\begin{document}
\chapter{Testkapitel}
\refstepcounter{formel}
\formellistentry{test}
blabla
\chapter{bla}
\listof{formel}{formelliste}
\end{document}


Gruß,
Axel

foobar
15-09-2007, 15:30
super das funktioniert fast perfekt :)
an der stelle wo ich den befehl einfüge ensteht noch ein überflüssiger white space aber fürs erste reicht es mir so

danke nochmal für deine mühe sommerfee :)

sommerfee
15-09-2007, 16:30
an der stelle wo ich den befehl einfüge ensteht noch ein überflüssiger white space

Stimmt. Entweder immer


\formellistentry{test}%

schreiben oder besser ein \ignorespaces am Ende von \formellistentry einbauen, z.B. so:


\newcommand*\formellistentry[1]{%
\addcontentsline{for}{formel}%
{\protect\numberline{\theformel}{\ignorespaces#1}} %
\ignorespaces
}


Gruß,
Axel

foobar
16-09-2007, 23:14
das mit dem abschließenden kommentarzeichen hatte ich auch schon probiert aber das behebt das problem leider nicht ganz
mit \ignorespaces ist es das selbe - es bleibt immer ein überflüssiger abstand

aber das ist nicht tragisch der befehl ist nur in einer entwurfs-version enhalten
in der finalen wird er dann sowieso entfernt