
저는 스타일 시작 부분에 상호 참조 섹션이 필요한 문서를 작업 중입니다.
- 1.1, 1.2, 1.3항에서 발견된 증거 1
- 1.2, 2.3, 3.4항에서 발견된 증거 2
등
\label
문서 형식이 잘 지정되어 있으며 및 를 사용하여 원하는 대로 정확하게 개별 단락을 참조할 수 있습니다 \ref
.
그러나 호출될 때 마지막 레이블뿐만 아니라 모든 레이블 목록을 인쇄하도록 레이블을 여러 번 정의할 수 있기를 원합니다 \ref
(현재 수행됨).
이를 위해 인덱스를 사용해 보았지만 사용자 정의 출력은 물론이고 단순한 형식으로 작동하도록 할 수 없는 것 같습니다.
\label
어쨌든 여러 번 정의할 수 있습니까 ?
답변1
\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}
답변2
반드시 다중 라벨을 허용할 필요는 없습니다. @DavidCarlisle 멋진 저수준 해킹 외에도 \eref{<evidence no>}{<label>}
내부 생성 목록을 반복하는 이 솔루션(본질적으로 호출되는 사용자 정의 상호 참조 매크로)을 제공합니다.
\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}
\paragraph
( 문서 구조에서 사용하지 않는 경우 6-9행을 사용하지 마십시오 .)