Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Liste dynamisch erstellen und ausgeben

  1. #1
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82

    Liste dynamisch erstellen und ausgeben

    Hallo,

    ich beziehe mich auf diesen Thread.

    Ich möchte eine Liste mit Links dynamisch erstellen. Heißt, wenn ich \AddLink{http...} aufrufe, soll dieser zu einer Liste hinzugefügt werden, diese wird dann am Ende ausgegeben.

    Für die Realisierung gibt es, glaube ich, drei Möglichkeiten:

    Code:
    \documentclass{scrartcl}
    
    \newcommand*{\PrintLinksI}{}
    \newcommand*{\PrintLinksII}{}
    \newcommand*{\PrintLinksIII}{}
    
    % mit expandafter
    \newcommand*{\AddLinkI}[1]{%
    \expandafter\def\expandafter\PrintLinksI\expandafter{\PrintLinksI{} #1}%
    }
    
    % mit \addto
    \makeatletter
    \newcommand*{\AddLinkII}[1]{%
    \g@addto@macro{\PrintLinksII}{#1 }%
    }
    \makeatother
    
    % mit \let
    \newcommand*{\AddLinkIII}[1]{%
    \let\PrintLinksAlt\PrintLinksIII%
    \renewcommand*\PrintLinksIII{\PrintLinksAlt{} #1}%
    }
    
    \begin{document}
    
    Beispieltext fuer mrunix.de\AddLinkI{http://www.mrunix.de/} und fuer die
    Wikipedia\AddLinkI{http://de.wikipedia.org/}.\\
    
    Links:\PrintLinksI{}\\
    
    Beispieltext fuer mrunix.de\AddLinkII{http://www.mrunix.de/} und fuer die
    Wikipedia\AddLinkII{http://de.wikipedia.org/}.\\
    
    Links:\PrintLinksII{}\\
    
    Beispieltext fuer mrunix.de\AddLinkIII{http://www.mrunix.de/} und fuer die
    Wikipedia\AddLinkIII{http://de.wikipedia.org/}.\\
    
    Links:\PrintLinksIII{}\\
    
    \end{document}
    Lösung I und II funktionieren, Lösung III wird beendet mit

    Code:
    ! TeX capacity exceeded, sorry [input stack size=5000].
    \PrintLinksAlt ->\PrintLinksAlt 
                                    {} http://www.mrunix.de/
    l.40 Links:\PrintLinksIII
                             {}\\
    Die Frage ist also, wo mein Rekursionsfehler in Lösung III liegt.


    Nun ist das Problem eigentlich gelöst, aber ich möchte das Ganze auch per tth in HTML exportieren. Leider kommt tth nicht mit Lösung I und II zurecht. Bei Lösung I werden die Links direkt in den Text gesetzt. Bei Lösung II kennt tth das \g@addto@macro nicht und erweitert die Liste daher nicht.

    Meine Hoffnung ist, dass Lösung III nach obiger Fehlerbehebung mit tth klappt.

    Viele Grüße
    Dee

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Was spricht gegen die Verwendung von Bibtex?

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von Dee Beitrag anzeigen
    Ich möchte eine Liste mit Links dynamisch erstellen. Heißt, wenn ich \AddLink{http...} aufrufe, soll dieser zu einer Liste hinzugefügt werden, diese wird dann am Ende ausgegeben.

    Für die Realisierung gibt es, glaube ich, drei Möglichkeiten:

    Die Frage ist also, wo mein Rekursionsfehler in Lösung III liegt.


    Nun ist das Problem eigentlich gelöst, aber ich möchte das Ganze auch per tth in HTML exportieren. Leider kommt tth nicht mit Lösung I und II zurecht. Bei Lösung I werden die Links direkt in den Text gesetzt. Bei Lösung II kennt tth das \g@addto@macro nicht und erweitert die Liste daher nicht.

    Meine Hoffnung ist, dass Lösung III nach obiger Fehlerbehebung mit tth klappt.
    Code:
    \newcommand*{\AddLinkIII}[1]{%
    \edef\PrintLinksIII{\PrintLinksIII #1}}
    Herbert

  4. #4
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    @bischi: Ich bin nicht sicher, ob tth bibtex wirklich korrekt versteht. Ich bräuchte diese Funktion in einem Dokument aber 10 Mal für einzelne Artikel. Ich weiß nicht, ob bibtex das so einfach kann.

    @Herbert: Besten Dank, funktioniert wie üblich perfekt. (Und schade, dass ich nicht nach Dortmund kommen konnte, ggf. sehen wir uns aber in Trier.)

    Edit: Ah, okay, klappt nur für den obigen Fall. Das ist immer der Nachteil von Minimalbeispielen. Sie sind sind oft zu minimal. Ich möchte das ganze nun gerne als echte Liste haben:

    Code:
    \newcommand*{\AddLinkIII}[1]{%
    \edef\PrintLinksIII{\PrintLinksIII \item #1}}
    
    Links:
    \begin{enumerate}
    \PrintLinksIII
    \end{enumerate}
    Das führt zu:

    Code:
    ! Undefined control sequence.
    \enumerate ...ce \@enumdepth \@ne \edef \@enumctr 
                                                      {enum\romannumeral \the \@...
    l.42 ...runix.de\AddLinkIII{http://www.mrunix.de/}
                                                       und fuer die

    Und als Vorwarnung: Das \AddLinkIII kriegt noch einen optionalen Parameter, aber das sollte hoffentlich kein Problem sein.

    Viele Grüße
    Dee
    Geändert von Dee (05-04-2010 um 16:09 Uhr)

  5. #5
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von Dee Beitrag anzeigen
    Edit: Ah, okay, klappt nur für den obigen Fall. Das ist immer der Nachteil von Minimalbeispielen. Sie sind sind oft zu minimal. Ich möchte das ganze nun gerne als echte Liste haben:
    Code:
    \documentclass{scrartcl}
    
    \newtoks\itemToks
    \newcommand\additemtoks[1]{%
      \itemToks\expandafter{\the\itemToks \item #1}}
    \newcommand*\resetitemtoks{\itemToks{}}
    \newcommand*\printitemtoks{\the\itemToks}
    \resetitemtoks
    \begin{document}
    
    Beispieltext fuer mrunix.de\additemtoks{http://www.mrunix.de/} und fuer die
    Wikipedia\additemtoks{http://de.wikipedia.org/}.
    
    Links:
    \begin{enumerate}
    \printitemtoks
    \end{enumerate}
    
    \end{document}
    Herbert

  6. #6
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    Hm, tth ist deprimierend. Es kennt leider kein newtoks, kein itemtoks und mit expandafter hat es ja auch Probleme. Das wäre also Lösung Nummer drei (oder vier, je nach Zählweise), die mit pdflatex funktioniert, mit tth aber nicht.

    Aber ich behelfe mir jetzt mit einer kleinen Notlösung. Da ich nicht für beides die gleiche Lösung brauche, werde ich für tth folgendes Konstrukt nutzen:

    Code:
    \documentclass{scrartcl}
    
    \newcounter{linkcounter}
    \newcommand*{\PrintLinksIII}{}
    \newcommand*{\AddLinkIII}[1]{%
    \edef\PrintLinksIII{\PrintLinksIII{}[\arabic{linkcounter}]\stepcounter{linkcounter} #1\\}}
    
    \begin{document}
    \setcounter{linkcounter}{1}
    
    Beispieltext fuer mrunix.de\AddLinkIII{http://www.mrunix.de/} und fuer die
    Wikipedia\AddLinkIII{http://de.wikipedia.org/}. \AddLinkIII{http://de.wikipedia.org/}\\
    
    Links:\\
    \PrintLinksIII
    
    \end{document}
    Es ist zwar LaTeX-technisch nicht so schön, dass ich aus der Liste normalen Text mache, aber es funktioniert zumindest.

    Sollte jemand eine noch bessere Lösung haben, bin ich für Vorschläge offen.

    Viele Grüße
    Dee

  7. #7
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    Muss doch noch etwas nachfragen. Ich weiß nicht, ob es an tth oder LaTeX liegt, aber scheinbar klappt das \edef nur lokal. Kann das sein?

    So wird bei (man beachte die geschweiften Klammern)

    Code:
    \documentclass{scrartcl}
    
    \newcounter{linkcounter}
    \newcommand*{\PrintLinksIII}{}
    \newcommand*{\AddLinkIII}[1]{%
    \edef\PrintLinksIII{\PrintLinksIII{}[\arabic{linkcounter}]\stepcounter{linkcounter} #1\\}}
    
    \begin{document}
    \setcounter{linkcounter}{1}
    
    \textit{Beispieltext fuer mrunix.de\AddLinkIII{http://www.mrunix.de/} und fuer die
    Wikipedia\AddLinkIII{http://de.wikipedia.org/}.} \AddLinkIII{http://de.wikipedia.org/}\\
    
    Links:\\
    \PrintLinksIII
    
    \end{document}
    nur ein Link aufgelistet - und zwar der letzte. Die anderen beiden innerhalb der \textit{...} fehlen.

    Kann ich das irgendwie global machen, dass es für das ganze Dokument gilt, bis ich es selbst zurücksetzt, und nicht nur in einem Block? Ansonsten brauche ich für tth doch wieder eine andere Lösung.

    Gruß Dee

    PS: Betrifft nicht nur Blöcke, sondern auch Links in Aufzählungen. Auch die erscheinen nicht.
    Geändert von Dee (13-04-2010 um 18:08 Uhr)

  8. #8
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    Keiner mehr eine Idee?

    Gruß Dee

  9. #9
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Ich kann mir ehrlich gesagt überhaupt nicht vorstellen, dass (und wie) dein Code überhaupt funktioniert. \stepcounter ist doch nicht expandierbar und schon \edef\PrintLinksIII{\stepcounter{linkcounter}} gibt Fehler.

    Abgesehen davon: \edef ist lokal, die globale Variante heißt \xdef.

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •