Ich habe Arbeitsblätter, die aus einer übergeordneten Enumerate-Umgebung bestehen. Kann man etwas wie ein table of content erstellen, dass direkt zu der jeweiligen Aufgabennummer verlinkt? Die Aufgaben haben keine Namen.

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{enumerate}
\item Berechne die Summe.
\begin{enumerate}
\item 3+5
\item 5+7
\end{enumerate}
\item Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\end{enumerate}
\end{document}

Bevor die Aufgaben beginnen, sollte in diesem Fall 1. und 2. auftauchen, wenn man darauf klickt, soll man genau zur entsprechenden Aufgabe springen. Edit: Kann man die items der obersten Ebene so umdefinieren, das sie ein hyperref-label bekommen, welches sich automatisch durchnummeriert? Und dann als "Inhaltsverzeichnis" eine Schleife, die durch diese ganzen Labels durchläuft?

Aussehen soll es ungefähr so: alt text

gefragt 13 Apr '19, 15:46

Astrina's gravatar image

Astrina
37181925
Akzeptiert-Rate: 50%

bearbeitet 20 Sep '21, 17:58

gast3's gravatar image

gast3
(ausgesetzt)

Mittels hyperref Paket und \hypertarget + \hyperlink kann man beliebige Verlinkungen innerhalb eines Dokuments erstellen. Außerdem kann man mittels \label + \ref ein Item einer enumerate Umgebung verlinken (mit geladenem hyperref sollten auch diese Verweise clickbar sein). Das stellt zwar keine automatisierte Lösung dar, doch sollte erste Lösungen skizzieren können (ehrlich gesagt, habe ich gerade keine Lust, etwas automatisiertes zu basteln...).

(14 Apr '19, 11:04) Skillmon

Entschuldigung, das habe ich vergessen dazuzuschreiben, das sind mehrere hundert Aufgaben, per Hand möchte ich das wirklich nicht machen... Meine Suche im Netz war leider nicht erfolgreich, weil ich immer nur Lösungen bekommen habe, wie man das Inhaltsverzeichnis an sich nummeriert oder eben nicht, aber nicht wie man die erste Ebene des enumerate darin aufnehmen kann. Das einzige was ich gefunden habe, ist das hier: https://tex.stackexchange.com/questions/275502/add-list-items-to-table-of-contents und dass erfüllt meine Anforderung nicht, weil meine Fragen keinen Namen haben.

(14 Apr '19, 11:31) Astrina

Kleine Minimallösung. Es erfordert das Verwenden von einer aufgaben-Umgebung, die allerdings letztendlich eine enumerate ist. Und anstelle von \item ist \aufgabe zu verwenden. Falls Erklärungen zum Code erwünscht sind, kann ich diese gerne nachreichen.

EDIT: Optionales Argument zu \listofaufgaben hinzugefügt, mit dem ein Bereich angegeben werden kann. Außerdem optionales Argument zu aufgaben hinzugefügt, das an enumerate weitergegeben wird.

Öffne in Overleaf
\documentclass[10pt,a4paper]{article}

\usepackage[utf8]{inputenc}
\usepackage{enumitem}

\usepackage[]{hyperref}

\makeatletter
\@ifdefinable\hooklistcount{\newcount\hooklistcount}
\newlength\hooklistlength
\newcommand*\sethook@appendlist
  {%
    \global\advance\hooklistcount1
    \label{aufgabe:\the\hooklistcount}%
  }
\newcommand*\write@hooklistcount@to@aux
  {%
    \immediate\write\@auxout{\gdef\noexpand\aufgaben@max{\the\hooklistcount}}%
  }
\def\listofaufgaben@from#1-#2;{#1}
\def\listofaufgaben@to#1-#2;{#2}
\newcommand*\listofaufgaben[1][1-\aufgaben@max]
  {%
    \begingroup
    \section*{Aufgabenliste}%
    \ifdefined\aufgaben@max
      \raggedright
      \hooklistcount=\listofaufgaben@from#1;
      \advance\hooklistcount-1
      \settowidth\hooklistlength{\aufgaben@max.}%
      \loop\ifnum\hooklistcount<\listofaufgaben@to#1;\relax
        \ifnum\hooklistcount<\aufgaben@max
          \advance\hooklistcount1
          \makebox[\hooklistlength][r]{\ref{aufgabe:\the\hooklistcount}.}
          \quad
        \fi
      \repeat
      \par
    \fi
    \endgroup
  }

\newenvironment{aufgaben}[1][]
  {%
    \newcommand\aufgabe[1][]
      {%
        \if\relax\detokenize{##1}\relax\item\else\item[##1]\fi
        \sethook@appendlist
      }%
    \begin{enumerate}[#1]%
  }
  {%
    \end{enumerate}%
  }
\AtEndDocument{\write@hooklistcount@to@aux}
\makeatother

\begin{document}
\listofaufgaben
\begin{aufgaben}
\aufgabe Berechne die Summe.
\begin{enumerate}
\item 3+5
\item 5+7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\end{aufgaben}
\listofaufgaben[4-10]
\begin{aufgaben}[start=3]
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\aufgabe Berechne die Differenz.
\begin{enumerate}
\item 3-5
\item 5-7
\end{enumerate}
\end{aufgaben}
\end{document}

alt text

Permanenter link

beantwortet 14 Apr '19, 14:13

Skillmon's gravatar image

Skillmon
1.2k6
Akzeptiert-Rate: 47%

bearbeitet 16 Apr '19, 12:52

Funktioniert wunderbar und hat den Vorteil, dass ich die item Stück für Stück ersetzen kann, weil es im enumerate bleibt und item weiterhin funktioniert! Nur halt ohne ins Verzeichnis aufgenommen zu werden. Ich gestehe, dass mir nicht jeder Befehl völlig klar ist, aber das generelle Vorgehen verstehe ich. Anschlussfrage: kann man die Definition von listofaufgaben so erweitern, dass man von bis angeben kann? Also Teilinhaltsverzeichnisse an beliebiger Stelle? Zeile 27, um das bis-Element festzulegen: loopifnumhooklistcount<aufgaben@#1relax mit #1 statt max wirft aber leider einen Fehler

(15 Apr '19, 21:20) Astrina
1

@Astrina Ich hab den Code modifiziert, um das zu ermöglichen. Im Übrigen sagt man in der Regel danke, indem man den Daumen hoch drückt...

(16 Apr '19, 13:05) Skillmon

Genial! jetzt werden meine Arbeitsblätter endlich mit einer sinnvollen Verlinkung ausgestattet. Vielen Dank!

(16 Apr '19, 16:50) Astrina
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×77
×17
×16

gestellte Frage: 13 Apr '19, 15:46

Frage wurde gesehen: 3,849 Mal

zuletzt geändert: 16 Apr '19, 16:50