%3F.png)
La estructura de mi documento es básicamente una colección de otros documentos más pequeños. Decidí no bajarxr-hipercamino y tener documentos PDF individuales, porque al final el requisito es un solo archivo de todos modos. Entonces, en lugar de eso, decidí crear un gran documento LaTeX con mis subdocumentos comolibros, p.ej:
\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}
Ahora esto As shown in \ref{chap:maindoc-first}
se mostrará como si el capítulo estuviera dentro del alcance de la parte actual. Lo que me gustaría lograr es algo como:
- Como se muestra en el capítulo 1 del documento principal y el capítulo 1...
- Como se muestra en el capítulo 1 (maindoc) y el capítulo 1...
- Como se muestra en (1, documento principal) y (1)...
- Como se muestra en A-1 y 1...
Sin embargo, como la mayoría de las referencias se encuentran dentro de los propios documentos, no quiero anteponertodode las referencias como enestas preguntas y respuestas.
¿Cómo puedo lograr esto? ¿Existe alguna forma de determinar el alcance de la referencia e incluir el prefijo de forma condicional?
En última instancia, me gustaría hacer lo mismo con las referencias a teoremas, figuras, tablas, etc.
Respuesta1
Dado que está utilizando memoir
, debe utilizar las funciones de referencias cruzadas proporcionadas por la clase. Estos se tratan en el capítulo 16 delmanual de usuario.
memoir
Sin embargo, tiene algunas ideas bastante definidas sobre el formato y, por lo tanto, no siempre proporciona mucha flexibilidad más allá de esas ideas. En este caso, considera que las referencias cruzadas a otras partes del documento deberían escribirse con mayúscula. Si prefiere evitar esto, debe proporcionar alternativas.
Lo siguiente se basa en las versiones proporcionadas por memoir
:
\aref% based on \Aref
\bref% \Bref
\cref% \Cref
\sref% \Sref
y los nombres en minúsculas los proporciona:
\lcbookrefname% based on \bookrefname
\lcchapterrefname% \chapterrefname
\lcsectionrefname% identical to \sectionrefname
\lcappendixrefname% based on \appendixrefname
Esto le permite establecer referencias como desee cuando se combina con el \titleref
comando proporcionado por memoir
.
Para automatizar esto, \chapref{}
se proporciona un comando que debería producir referencias formateadas de acuerdo con la primera posibilidad que enumeró. Puede crear otros comandos para lograr otros formatos de manera similar.
Nota:Sospecho que la forma en que he codificado el \chapref
comando, al menos, puede no ser la mejor manera de hacerlo.Advertencia 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}