
Ich arbeite an einem Dokument, das am Anfang des Stils einen Abschnitt mit Querverweisen enthalten muss:
- Beweis 1 findet sich in den Absätzen 1.1, 1.2, 1.3
- Beweis 2 in Absatz 1.2, 2.3, 3.4
usw
\label
Ich habe mein Dokument gut formatiert und kann mit und genau nach Wunsch auf einzelne Absätze verweisen \ref
.
Ich möchte jedoch ein Etikett mehrmals definieren können, sodass beim \ref
Aufruf eine Liste aller Etiketten gedruckt wird – und nicht nur das letzte (wie es derzeit der Fall ist).
Ich habe mir die Verwendung eines Index hierfür angesehen, aber ich schaffe es nicht, ihn im einfachsten Format zum Laufen zu bringen, geschweige denn mit benutzerdefinierten Ausgaben.
Gibt es eine Möglichkeit, \label
eine mehrfache Definition zu ermöglichen?
Antwort1
\documentclass{article}
\makeatletter
\def\@newl@bel#1#2#3{{%
\@ifundefined{#1@#2}%
{\def\tmp{#3}}%
{%
\edef\tmp{%
{\expandafter\expandafter\expandafter\@firstoftwo\csname#1@#2\endcsname,
\@firstoftwo#3}%
{\expandafter\expandafter\expandafter\@secondoftwo\csname#1@#2\endcsname,
\@secondoftwo#3}%
}}%
\expandafter\xdef\csname#1@#2\endcsname{\tmp}%
}}
\def\@testdef #1#2#3{}
\makeatother
\begin{document}
good stuff in section(s) \ref{a}
bad stuff in section(s) \ref{b}
\section{zz}\label{a}
zz
\section{zzz}\label{a}
zzz
\section{zzzz}\label{a}
zzzz
\section{aaa}\label{b}
aaa
\section{zzzzz}\label{a}
zzzzz
\end{document}
Antwort2
Sie müssen nicht unbedingt mehrere Labels zulassen. Zusätzlich zu @DavidCarlisles coolem Low-Level-Hack biete ich diese Lösung an (im Wesentlichen ein benutzerdefiniertes Cross-Ref-Makro namens \eref{<evidence no>}{<label>}
), das eine Schleife über eine intern erstellte Liste durchführt:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{lipsum}
\makeatletter
\newcounter{para}
\renewcommand{\thepara}{\thesection.\@arabic\c@para}
\let\svd@paragraph=\paragraph
\renewcommand{\paragraph}{\refstepcounter{para} \svd@paragraph}
\newcommand{\eref}[2]{%
\ifcsundef{evlist#1}{\@namedef{evlist#1}{}}{}
\def\process{\def\process{,}}%
\def\do##1{\process\ref{##1}}%
\expandafter\listadd\csname evlist#1\endcsname{#2}%
Evidence #1 found at paragraph
\expandafter\dolistloop\csname evlist#1\endcsname}
\makeatother
\begin{document}
\section{First Section}
\paragraph{One}\label{para:1}
\lipsum[1]
\eref{1}{para:1}
\paragraph{Two}\label{para:2}
\lipsum[2]
\eref{1}{para:2}
\paragraph{Three}\label{para:3}
\lipsum[3]
\eref{2}{para:3}
\end{document}
(Beachten Sie, dass Sie die Zeilen 6–9 nicht verwenden müssen, wenn Sie sie nicht \paragraph
in Ihrer Dokumentstruktur verwenden.)