如何在交叉引用中包含书籍/部分名称(如果跨书籍/部分)?

如何在交叉引用中包含书籍/部分名称(如果跨书籍/部分)?

我的文档结构基本上是其他较小文档的集合。我决定不深入研究xr-hyper道路和拥有单独的 PDF 文档,因为最终的要求是单个文件。因此,我决定创建一个大的 LaTeX 文档,其中包含我的子文档,如下所示图书,例如:

\documentclass{memoir}
\renewcommand*{\thebook}{\Alph{book}} % "Book A", "Book B", etc.
\begin{document}
\book{maindoc}
\chapter{maindoc first chapter}
\label{chap:maindoc-first}
\chapter{maindoc second chapter}
\label{chap:maindoc-second}

\book{extradoc}
\setcounter{chapter}{0} % reset chapter counter with each book
\chapter{extradoc first chapter}
\label{chap:extradoc-first}
\chapter{extradoc second chapter}
\label{chap:extradoc-second}
As shown in \ref{chap:maindoc-first}, and further research in \ref{chap:extradoc-first} ...

\book{anotherdoc}
\setcounter{chapter}{0}
\chapter{anotherdoc chapter}
\end{document}

现在,这As shown in \ref{chap:maindoc-first}将呈现为该章节在当前部分的范围内。我想要实现的是这样的:

  • 如主文档第 1 章和第 1 章所示...
  • 如第 1 章(maindoc)和第 1 章所示...
  • 如(1,maindoc)和(1)所示...
  • 如图A-1和1所示...

但是,由于大多数参考资料都在文档本身中,因此我不想在前面加上前缀全部参考文献此问答

我该如何实现这一点?有没有办法确定引用的范围并有条件地包含前缀?

最终,我想对定理、图表、表格等的引用做同样的事情。

答案1

由于您正在使用memoir,因此您应该利用该类提供的交叉引用功能。这些内容在第 16 章中介绍用户手册

memoir但是,它对格式有一些相当明确的想法,因此并不总是提供超出这些想法的灵活性。在这种情况下,它认为对文档其他部分的交叉引用应该大写。如果您希望避免这种情况,则需要提供替代方案。

以下内容基于 提供的版本memoir

\aref% based on \Aref
\bref% \Bref
\cref% \Cref
\sref% \Sref

小写名称由以下提供:

\lcbookrefname% based on \bookrefname
\lcchapterrefname% \chapterrefname
\lcsectionrefname% identical to \sectionrefname
\lcappendixrefname% based on \appendixrefname

\titleref这样,当与提供的命令结合使用时,您就可以根据需要设置引用memoir

为了实现此自动化,\chapref{}提供了一个命令,该命令应根据您列出的第一种可能性生成格式的参考文献。您可以创建其他命令以类似的方式实现其他格式。

笔记:我怀疑我编写命令的方式\chapref至少可能不是最好的方式。买者自负...

\documentclass{memoir}
\renewcommand*{\thebook}{\Alph{book}} % "Book A", "Book B", etc.
\newcommand*{\aref}[1]{\lcappendixrefname\ref{#1}}
\newcommand*{\bref}[1]{\lcbookrefname\ref{#1}}
\newcommand*{\cref}[1]{\lcchapterrefname\ref{#1}}
\newcommand*{\sref}[1]{\lcsectionrefname\ref{#1}}
\newcommand*{\lcbookrefname}{book~}
\newcommand*{\lcchapterrefname}{chapter~}
\newcommand*{\lcsectionrefname}{\S}
\newcommand*{\lcappendixrefname}{appendix~}
\makeatletter
\def\chapref@book#1:#2-#3\@nil{#2}
\newcommand*{\chapref}[1]{%
  \edef\tempa{\expandafter\chapref@book#1\@nil}%
  \edef\tempb{\ref{book:\tempa}}%
  \edef\tempc{\thebook}%
  \ifx\tempb\tempc
  \cref{#1}%
  \else
  \cref{#1} of the \titleref{book:\tempa}%
  \fi}
\makeatother
\begin{document}
  \book{maindoc}
  \label{book:maindoc}
  \chapter{maindoc first chapter}
  \label{chap:maindoc-first}
  \chapter{maindoc second chapter}
  \label{chap:maindoc-second}

  \book{extradoc}
  \label{book:extradoc}
  \setcounter{chapter}{0} % reset chapter counter with each book
  \chapter{extradoc first chapter}
  \label{chap:extradoc-first}
  \chapter{extradoc second chapter}
  \label{chap:extradoc-second}

  Manually using the facilities of the class:

  As shown in \cref{chap:maindoc-first} of the \titleref{book:maindoc}, and further research in \cref{chap:extradoc-first} ...

  \noindent Or using the custom command:

  As shown in \chapref{chap:maindoc-first}, and further research in \chapref{chap:extradoc-first} \dots

  \book{anotherdoc}
  \setcounter{chapter}{0}
  \chapter{anotherdoc chapter}
\end{document}

手动和自动章节参考

相关内容