Multiplicar definir una etiqueta a propósito

Multiplicar definir una etiqueta a propósito

Estoy trabajando en un documento que necesita tener una sección de referencia cruzada al comienzo del estilo:

  1. Prueba 1 encontrada en el Párrafo 1.1, 1.2, 1.3
  2. Prueba 2 encontrada en el Párrafo 1.2, 2.3, 3.4

etc.

Tengo mi documento bien formateado y puedo hacer referencia a párrafos individuales exactamente como deseo usando \labely \ref.

Sin embargo, deseo poder definir una etiqueta varias veces para que, cuando \refse llame, imprima una lista de todas las etiquetas, no solo la última (como se hace actualmente).

He analizado el uso de índice para esto, pero parece que no puedo hacerlo funcionar en su formato simplista, y mucho menos con salidas personalizadas.

¿Hay alguna forma de permitir \labelque se defina varias veces?

Respuesta1

ingrese la descripción de la imagen aquí

\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}

Respuesta2

No necesariamente es necesario permitir etiquetas múltiples. Además del interesante truco de bajo nivel de @DavidCarlisle, proporciono esta solución (esencialmente una macro de referencia cruzada personalizada llamada \eref{<evidence no>}{<label>}) que recorre una lista interna creada:

\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}

(Tenga en cuenta que no debe utilizar las líneas 6 a 9 si no las utiliza \paragraphen la estructura de su documento).

información relacionada