goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Direktlinks:
Zuletzt aktive Beiträge
Unbeantwortete Beiträge
[Erweitert]

Forenstatistik:
Beiträge: 99389
Top-Poster: Johannes_B (5059)

Wir begrüßen unseren neuesten Benutzer Maggie Bobby.

Links:


Mit Unterstützung von DANTE e.V.: Deutschsprachige Anwendervereinigung TeX. Danke den Mitgliedern!





Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Listen automatisch beim Schreiben erstellen

 

Flame
Forum-Newbie
Forum-Newbie

Beiträge: 2
Anmeldedatum: 06.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2019, 22:33     Titel: Listen automatisch beim Schreiben erstellen
  Antworten mit Zitat      
Hallo zusammen,

es gibt ja schon viele fertige Pakete in LaTeX, mit denen Listen automatisch erstellt werden, wie beispielsweise \tableofcontents etc.

Ich habe zwar via Google schon einiges gefunden, was in die Richtung geht, wonach ich suche, aber es war dann doch ein anderes Problem, das nicht ganz zu meinem passte. Oder es war dann so umfangreich, dass ich den hunderten Seiten nicht die drei für mich wesentlichen Befehle entnehmen konnte.

Ich möchte, dass LaTeX beim kompilieren eine oder mehrere Listen mit Punkten erstellt, die ich beim Schreiben im Text festlege. In etwa so:

Code • Öffne in Overleaf

...Präambel...

%Die Liste definieren (muss vielleicht auch gar nicht in die Präambel)
\def{\list}

\begin{document}

\section{TOP 1}

\begin{itemize}
\item Item 1
\item Item 2
...
%zum nächsten Item möchte ich einen Eintrag in meiner Liste erstellen
\item Item n \put_in_list{Das ist der Text, der zu diesem Item in der Liste erscheinen soll}
\item Weitere Items
\end{enumerate}

\section{TOP2}

... usw.

Hier kommen dann noch viele weitere TOPs.

%Hier soll LaTeX dann die Liste im Text einfügen.
\insert_list_here

\end{document}
 


Ich hoffe, damit wird einigermaßen klar, was ich will. Ich habe das Gefühl, dass es dafür eine sehr einfache Lösung gibt. Es gibt sicher eine Möglichkeit, eine Liste \list zu definieren und einen dazugehörigen Befehl \put_in_list{}, welcher diese Liste dann füllt. Dann braucht es natürlich noch einen Befehl wie \insert_list_1, der LaTeX dann sagt, wo im Text er diese Liste einfügen soll. Mit optionalen Argumenten ließ sich ggf. noch eine Referenz einfügen, dass man den Eintrag in der Liste auch dem entsprechenden Abschnitt im Text zuordnen kann.

Ich hätte gerne eine Lösung, die ohne copy und paste auskommt. Wenn ich den Eintrag im Text ändere und dann auch 10 verschiedene Listen erstelle, wird es schnell unübersichtlich und überall steht dann etwas anderes. Daher soll LaTeX da quasi mitdenken und die Liste automatisch mit anpassen.

Gruß
Flame
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2019, 23:53     Titel:
  Antworten mit Zitat      
Ich kapiere zwar nur die Hälfte von dem, was Du da von Dir gibst, aber drei Dinge:
  • Du solltest in LaTeX \def vermeiden, weil Du damit leicht Dinge umdefinieren kannst, ohne es zu merken. Verwende besser \newcommand etc.
  • \list gibt es schon. Das ist die mehr oder weniger interne Listen-Umgebung, die für itemize, enumerate, description etc. verwendet wird.
  • Wenn ich halbwegs verstehe, was Du willst, dann suchst Du nach der Möglichkeit, ein Vewzeichnis zu erstellen. Das ginge mit Paketen wie tocbasic, caption etc. Es kann aber auch sein, dass Du etwas wie ein Glossar oder eine Nomenklatur suchst. Das ginge dann mit nomencl oder glossaries oder acro oder ähnlichen Paketen.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2019, 08:41     Titel:
  Antworten mit Zitat      
Je nach Anwendung gibt es wesentlich bessere Ideen, aber prinzipiell kann man so etwas mit expl3 und sequences recht leicht basteln. Auch mit etoolbox und seinen Listen wäre das möglich. Der Nachteil der naiven Lösung ist, dass nur die Elemente in der Liste ausgegeben werden können, die vor dem Aufrufen des Ausgabebefehls zu Liste hinzugefügt wurden. Ansonsten müsste man die Liste sammeln und in der .aux-Datei zwischenspeichern.

Code • Öffne in Overleaf
\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\seq_new:N \g_flame_list_seq

\NewDocumentCommand{\addtoflamelist}{m}{
  \seq_gput_left:Nn \g_flame_list_seq {#1
}
}

\NewDocumentCommand{\clearflamelist}{}{
  \seq_gclear:N \g_flame_list_seq
}

\msg_new:nnn { flamelist } { emptylist }
  { Empty~list.~Items~can~be~added~using~\token_to_str:N\addtoflamelist. }

\keys_define:nn { flame-list-printlist }
{
  env     .code:n    = \tl_set:Nn \l_flame_listenv_tl {#1
},
  env     .initial:n = itemize,
 
  heading .code:n    = \cs_set:Npn \l_flame_heading_cs {#1},
  heading .initial:n = \section,
 
  title   .code:n    = \tl_set:Nn \l_flame_listtitle_tl {#1},
  title   .initial:n = Flame-Liste,
}


\NewDocumentCommand{\printflamelist}{O{}}{
  \seq_if_empty:NTF \g_flame_list_seq
    {
      \msg_warning:nn { flamelist
} { emptylist }
    }
    {
      \group_begin:
      \keys_set:nn { flame-list-printlist
} { #1 }
      \l_flame_heading_cs{\l_flame_listtitle_tl}
      \begin{\l_flame_listenv_tl}
        \seq_map_function:NN \g_flame_list_seq \item
      \end{\l_flame_listenv_tl}
      \group_end:
    }
}
\ExplSyntaxOff

\begin{document}

\section{TOP 1}

\begin{enumerate}
\item Item 1
\item Item 2
\item Item n\addtoflamelist{Das ist der Text, der zu diesem Item in der Liste erscheinen soll}
\item Weitere Items
\end{enumerate}

\section{TOP2}
Item n\addtoflamelist{Blob}

Hier kommen dann noch viele weitere TOPs.

\printflamelist

\clearflamelist

\addtoflamelist{Das ist der Text, der zu diesem Item in der Liste erscheinen soll}
\addtoflamelist{Das ist der Text, der zu diesem Item in der Liste erscheinen soll}

\printflamelist[env=enumerate,heading=\section*,title=Foo]
\end{document}

Flame
Forum-Newbie
Forum-Newbie

Beiträge: 2
Anmeldedatum: 06.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2019, 22:08     Titel:
  Antworten mit Zitat      
Danke schon mal fürs Reindenken und die Antworten! Das klingt schon mal nach einem konstruktiven Vorschlag, den ich selbst nicht hinbekommen hätte Wink. Ich muss das mal ausprobieren und vermutlich noch etwas darüber nachdenken. Ich hatte schon vermutet, dass es nicht so trivial ist.

Ich melde mich nochmal, ob es funktioniert.

Was mir beim ersten drüberschauen noch nicht klar ist, wozu \clearflamelist gut sein soll?

Gruß
Flame
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2019, 07:10     Titel:
  Antworten mit Zitat      
Das Grundprinzip ist recht simpel, da es in expl3 den seq-Typen gibt, der eine einfache Liste ist. \addtoflamelist fügt einen Eintrag am Ende der Liste zu. \printflamelist iteriert über die ganze Liste, wenn sie nicht leer ist, und gibt innerhalb einer Listenumgebung jeden Eintrag in einem \item aus. Kompliziert wird der Code nur durch die zusätzlichen Anpassungsmöglichkeiten (und eventuell durch die etwas ungewöhnliche expl3-Syntax).

\clearflamelist ist dazu da, die bis jetzt aufgebaute Liste zu löschen. Das war vor allem in dem Beispiel ganz praktisch, da ich dann ohne viel Aufwand nacheinander zwei Listen mit unterschiedlichem Inhalt erstellen konnte. Wenn in der Anwendung mehrere Listen gewünscht sind, wäre es wohl besser, das über eine Erweiterung der Makros zu lösen, die es erlaubt, mehrere unabhängige Listen nebeneinander zu nutzen.

Bevor Du Dich auf diese von mir eigentlich mehr zum Spaß in einer halben Stunde zum expl3-Lernen zusammengeschusterte Lösung stürzt, möchte ich Dich warnen, dass es für bestimmte Arten von Listen, wie bereits von dem Gast am 6. April angesprochen, fertige und wesentlich ausgeklügeltere Systeme gibt als das hier. Wenn Du uns ein bisschen mehr über Deinen eigentlichen Plan verraten kannst, dann bekommst Du vielleicht Hinweise auf passendere Dinge.

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de


  Datenschutzerklärung | Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2019 goLaTeX.de