我的文档结构基本上是其他较小文档的集合。我决定不深入研究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}