列表,其中 \ref{...} 已制作

列表,其中 \ref{...} 已制作

我想要一个包含不同部分的文档,每个部分都有许多对其他部分的引用,例如

\section{a}
\label{a}
See \nameref{b}

\section{b}
\label{b}
See \nameref{a}

\section{c}
\label{c}
See \nameref{a}

是否可以创建一个函数,或者可能已经有一个我没有找到的模块,来制作类似的东西

\section{b}
\label{b}
See \nameref{a}
\printrefs

结果是这样的:

A

参见 b

已在中引用A(第 n 页)和C(第 m 页)

b

b 已被引用于A(某某页面)

看到

C

看到

...或者类似的东西。

答案1

你可以使用这个mmxref包来实现这一点(是的,它是为这个答案而写的)。感谢 egreg请提供代码的一个良好起点。

下载mmxref.sty这里1并将其放在与文档相同的目录中,或放在您的某个位置TEXINPUTS(在后一种情况下,您可能必须刷新 TeX 可用文件的数据库:这是手动安装的软件包的通常例程)。mmxref 封装页面包含进一步的使用说明。

然后,您的文档看起来会像这样(我们称之为docu.tex)。请注意,通常需要进行两次编译才能使所有内容井然有序(与文件中的引用一样.auxmmxref如果需要更多编译,软件包会发出警告)。

\documentclass{report}
\usepackage{mmxref}
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}

% The default prefix for labels created by mmxref is “mmxref-”. You can easily
% change this prefix:
%\mmxSetLabelPrefix{prefix of your choice (possibly empty)}

\begin{document}
\setlength{\parindent}{0pt}
\setlength{\parskip}{2pt plus 0.5pt minus 0.2pt}

\part{A Great Part}
\mmxlabel{a great part}

Foo bar in the part. All that.

\mmxInsertBackReferences[\emph{This fascinating part was referenced}]{a great
  part}

\chapter{The First Chapter}
\mmxlabel{first chapter}

See~\mmxautoref{another section}, \mmxautoref{section in 2nd chapter},
and~\mmxautoref{a subsection}.

\mmxInsertBackReferences{first chapter}

\section{A Section}
\mmxlabel{a section}

% If the preceding \mmxlabel were to be omitted, the backreference generated
% by the following \mmxautoref command would point to the last \mmxlabel
% issued, which corresponds to the first chapter.
Some text. See~\mmxautoref{a great part}.

\section{Another Section}
\mmxlabel{another section}

See~\mmxautoref{first chapter}.

\mmxInsertBackReferences{another section}

\subsection{A Subsection}
\mmxlabel{a subsection}
See~\mmxautoref{another section}, \mmxautoref{a subsection},
and~\mmxautoref{first chapter}.

%\mmxInsertBackReferences[This marvelous place]{a subsection}
\mmxInsertBackReferences{a subsection}

\chapter{The Second Chapter}
\mmxlabel{second chapter}

\mmxInsertBackReferences{second chapter}

\section{A Section In The Second Chapter}
\mmxlabel{section in 2nd chapter} See~\mmxautoref{a subsection},
\mmxautoref{another section} and also \mmxautoref{third chapter}, which starts
on page~\mmxpageref{third chapter}.

\mmxInsertBackReferences{section in 2nd chapter}

\chapter{The Third Chapter}
\mmxlabel{third chapter}

Text in the third chapter.

\section{And Now For Something Completely Different}
\mmxlabel{Something Completely Different}

Let's point to \mmxautoref[third chapter]{second chapter}, but in way that
makes the back-reference be \mmxautoref{third chapter} instead of
\mmxautoref{Something Completely Different}. That's what the optional argument
of \verb|\mmxref| and \verb|\mmxautoref| is for.
\end{document}

在此处输入图片描述

您可以重新定义以下命令来更改插入短语的措辞(可能是语言)。例如,您可以在和\mmxref之间添加以下命令来讲法语:\usepackage{mmxref}\begin{document}

\usepackage{xparse}           % only necessary if you use it for customization
\ExplSyntaxOn
\RenewDocumentCommand \mmxSeparatorBetweenTwo { }
  { ~et~ }

\RenewDocumentCommand \mmxSeparatorBetweenMoreThanTwo { }
  { ,~ }

\RenewDocumentCommand \mmxSeparatorBetweenFinalTwo { }
  { ~et~ }

\RenewDocumentCommand \mmxFormatSimpleRef { m }
  {
    \str_case:nnF {#1}
      {
        { part } { partie }
        { chapter } { chapitre }
        { section } { section }
        { subsection } { section } % intentional: “subsection” is too ugly here
        { subsubsection } { section } % ditto
        { paragraph } { paragraphe }
        { subparagraph } { paragraphe } % ditto
      }
      {
        \msg_error:nnn { mmxref } { main/undefined-ref-format-for-counter } {#1}
      }
  }

\RenewDocumentCommand \mmxFormatStartOfInsertionPhrase { m }
  {
    \str_case:nnF {#1}
      {
        { part } { Cette~partie~a~été~référencée }
        { chapter } { Ce~chapitre~a~été~référencé }
        { section } { Cette~section~a~été~référencée }
        % Intentional: “subsection” is too ugly here
        { subsection } { Cette~section~a~été~référencée }
        { subsubsection } { Cette~section~a~été~référencée } % ditto
        { paragraph } { Ce~paragraphe~a~été~référencé }
        { subparagraph } { Ce~paragraphe~a~été~référencé } % ditto
      }
      {
        \msg_error:nnn { mmxref } { main/undefined-ref-format-for-counter } {#1}
      }
  }

\tl_new:N \l__myprefix_mmxFormatBackRef_ref_tl

\RenewDocumentCommand \mmxFormatBackRef { m m m m }
  {
    \tl_set:Nn \l__myprefix_mmxFormatBackRef_ref_tl
      { \mmxref_insert_ref:nn {#4} {#2} }

    \str_case:nnF {#1}
      {
        { part }
        { à~la~partie \nobreakspace \l__myprefix_mmxFormatBackRef_ref_tl
          \c_space_tl page \nobreakspace #3 }
        { chapter }
        { au~chapitre \nobreakspace \l__myprefix_mmxFormatBackRef_ref_tl
          \c_space_tl page \nobreakspace #3 }
        { section }
        { à~la~section \nobreakspace \l__myprefix_mmxFormatBackRef_ref_tl
          \c_space_tl page \nobreakspace #3 }
        % Intentional: “subsection” is too ugly here
        { subsection }
        { à~la~section \nobreakspace \l__myprefix_mmxFormatBackRef_ref_tl
          \c_space_tl page \nobreakspace #3 }
        % Ditto
        { subsubsection }
        { à~la~section \nobreakspace \l__myprefix_mmxFormatBackRef_ref_tl
          \c_space_tl page \nobreakspace #3 }
        { paragraph }
        { au~paragraphe \nobreakspace \l__myprefix_mmxFormatBackRef_ref_tl
          \c_space_tl page \nobreakspace #3 }
        % Ditto
        { subparagraph }
        { au~paragraphe \nobreakspace \l__myprefix_mmxFormatBackRef_ref_tl
          \c_space_tl page \nobreakspace #3 }
      }
      {
        \msg_error:nnn { mmxref } { main/undefined-ref-format-for-counter } {#1}
      }
  }
\ExplSyntaxOff

这是对上一个docu.tex文件第 3 页所做的操作(保留英文的部分已输入照原样在 中docu.tex,这只是一个例子!):

在此处输入图片描述


脚注

  1. 如果你不知道如何下载,请mmxref.sty点击mmxref.stymmxref 封装页面,然后在生的按钮并使用一些菜单项,例如文件 → 保存在您的 Web 浏览器中。(另一种方法是克隆 Git 存储库,但您需要Git为了那个原因。)

相关内容