Как включить название книги/части в перекрестные ссылки (если это перекрестная книга/часть)?

Как включить название книги/части в перекрестные ссылки (если это перекрестная книга/часть)?

Структура моего документа в основном представляет собой набор других, более мелких документов. Я решил не идти внизxr-гипердорога и иметь отдельные 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) ...
  • Как показано на рисунках А-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}

ручные и автоматизированные ссылки на главы

Связанный контент