%3F.png)
Структура моего документа в основном представляет собой набор других, более мелких документов. Я решил не идти вниз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}