![Wie füge ich ausgewertete Referenzen in diese Sortierroutine ein?](https://rvso.com/image/298810/Wie%20f%C3%BCge%20ich%20ausgewertete%20Referenzen%20in%20diese%20Sortierroutine%20ein%3F.png)
Unten ist ein Code, den ich aus Beispielen aus dem Internet zusammengeschustert habe. Ich möchte, dass die Routine für sortierte Listen die Ergebnisse der Auswertung von \ref verwendet, anstatt das wörtliche Argument von \ref zu verwenden.
Leider geschieht dies nicht in der richtigen Reihenfolge oder die Sortierroutine merkt sich die Ergebnisse der Auswertung mehrerer \ref-Instanzen nicht.
Gedanken?
\documentclass{report}
\newcounter{TableNoteCounter}
\renewcommand{\theTableNoteCounter}{\alph{TableNoteCounter}}
\newcommand{\tablenotelabel}[1]{\refstepcounter{TableNoteCounter}\alph{TableNoteCounter}\label{#1}}
\usepackage{datatool}% http://ctan.org/pkg/datatool
\newcommand{\sortitem}[2]{%
\DTLnewrow{list}%
\DTLnewdbentry{list}{label}{\ref{#1}}%
\DTLnewdbentry{list}{description}{#2}%
}
\newenvironment{sortedlist}%
{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}%
}%
{%
\DTLsort{label}{list}%
\begin{description}%
\DTLforeach*{list}{\theLabel=label,\theDesc=description}{%
\item[\theLabel] \theDesc
}%
\end{description}%
}
\begin{document}
\tablenotelabel{stars}
\tablenotelabel{galaxies}
\tablenotelabel{planets}
\begin{sortedlist}
\sortitem{planets}{Some planets are inhabited.}
\sortitem{galaxies}{Some galaxies are grand.}
\sortitem{stars}{All stars ``burn'' hydrogen.}
\end{sortedlist}
\end{document}
Antwort1
Sie können verwenden, um in \dtlexpandnewvalue
zu erweitern . Dies ist jedoch nur möglich, wenn definiert wurde und zwar erst, nachdem die .aux-Datei erstellt wurde. Daher ist das Folgende die Ausgabe nach dem\ref
\sortitem
\ref
zweiter Lauf:
Während dererster LaufDies wird wie folgt angezeigt:
Anmerkungen:
- Um die Verwendung mit zu ermöglichen,
hyperref
überprüfe ich jetzt, ob\HyPsd@@@ref
definiert ist (welches Medium dashyperref
verwendet wird) und verwende es ggf.\HyPsd@@@ref
anstelle von\ref
.
Code:
\documentclass{report}
\usepackage{alphalph}
\usepackage{datatool}% http://ctan.org/pkg/datatool
\usepackage{hyperref}
\newcounter{TableNoteCounter}
\renewcommand{\theTableNoteCounter}{\alphalph{\value{TableNoteCounter}}}
\newcommand{\tablenotelabel}[1]{\refstepcounter{TableNoteCounter}\alphalph{\value{TableNoteCounter}}\label{#1}}
\makeatletter
\newcommand{\sortitem}[2]{%
\ifcsname r@#1\endcsname% Only expand once the \ref has been defined
\dtlexpandnewvalue% <-- Added
\fi
\DTLnewrow{list}%
\ifdefined\HyPsd@@@ref
\DTLnewdbentry{list}{label}{\HyPsd@@@ref{#1}}%
\else
\DTLnewdbentry{list}{label}{\ref{#1}}%
\fi
\DTLnewdbentry{list}{description}{#2}%
}
\makeatother
\newenvironment{sortedlist}%
{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}%
}%
{%
\DTLsort{label}{list}%
\begin{description}%
\DTLforeach*{list}{\theLabel=label,\theDesc=description}{%
\item[\theLabel] \theDesc
}%
\end{description}%
}
\begin{document}
\tablenotelabel{stars}
\tablenotelabel{galaxies}
\tablenotelabel{planets}
\begin{sortedlist}
\sortitem{planets}{Some planets are inhabited.}
\sortitem{galaxies}{Some galaxies are grand.}
\sortitem{stars}{All stars ``burn'' hydrogen.}
\end{sortedlist}
\end{document}