Como incluo o nome do livro/parte nas referências cruzadas (se for um livro/parte)?

Como incluo o nome do livro/parte nas referências cruzadas (se for um livro/parte)?

A estrutura do meu documento é basicamente uma coleção de outros documentos menores. Eu decidi não descerxr-hiperroad e ter documentos PDF individuais, porque o requisito no final é um único arquivo de qualquer maneira. Então, em vez disso, decidi criar um grande documento LaTeX com meus subdocumentos comolivros, por exemplo:

\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}

Agora isso As shown in \ref{chap:maindoc-first}será renderizado como se o capítulo estivesse no escopo da parte atual. O que eu gostaria de realizar é algo como:

  • Conforme mostrado no capítulo 1 do maindoc e no capítulo 1...
  • Conforme mostrado no capítulo 1 (maindoc) e capítulo 1 ...
  • Conforme mostrado em (1, maindoc) e (1) ...
  • Conforme mostrado em A-1 e 1 ...

No entanto, como a maioria das referências está nos próprios documentos, não quero prefixartodosdas referências como emestas perguntas e respostas.

Como posso fazer isso? Existe uma maneira de determinar o escopo da referência e incluir o prefixo condicionalmente?

Em última análise, gostaria de fazer o mesmo com referências a teoremas, figuras, tabelas, etc.

Responder1

Como você está usando o memoir, você deve usar os recursos de referência cruzada fornecidos pela classe. Eles são abordados no capítulo 16 domanual do usuário.

memoirtem, no entanto, algumas ideias bastante definidas sobre formatação e, portanto, nem sempre oferece muita flexibilidade além dessas ideias. Neste caso, considera que as referências cruzadas a outras partes do documento devem ser capitalizadas. Se preferir evitar isso, você precisa fornecer alternativas.

Os itens a seguir são baseados nas versões fornecidas por memoir:

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

e os nomes em letras minúsculas são fornecidos por:

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

Isso permite que você defina referências conforme desejado quando combinado com o \titlerefcomando fornecido por memoir.

Para automatizar isso, \chapref{}é fornecido um comando que deve produzir referências formatadas de acordo com a primeira possibilidade listada. Você pode criar outros comandos para obter outros formatos de maneira semelhante.

Observação:Suspeito que a forma como codifiquei o \chaprefcomando, pelo menos, pode não ser a melhor maneira de fazê-lo.Advertência emptor...

\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}

referências de capítulos manuais e automatizadas

informação relacionada