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? |
Kleine Minimallösung. Es erfordert das Verwenden von einer EDIT: Optionales Argument zu Ö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} beantwortet 14 Apr '19, 14:13 Skillmon 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
|
Mittels
hyperref
Paket und\hypertarget
+\hyperlink
kann man beliebige Verlinkungen innerhalb eines Dokuments erstellen. Außerdem kann man mittels\label
+\ref
ein Item einerenumerate
Umgebung verlinken (mit geladenemhyperref
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...).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.