Descripción general del problema.

Descripción general del problema.

Descripción general del problema.

Tengo un apéndice cuyos nombres de secciones deben ser idénticos a los nombres de las secciones de la parte principal de la disertación. Por lo tanto utilicé el \namerefcomando del paquete nameref.

[...]
\mainmatter
\section{My section name}
\label{mySection}
[...]
\appendix
\section{\nameref{mySection}}
[...]

Esto funciona. Sin embargo, se supone que el encabezado de la página izquierda en la clase de libro muestra el nombre de la primera sección de la página. Al usar \nameref, se muestra el encabezado ??en lugar del nombre de la sección. ¿Por qué se comporta así? ¿Cómo puedo solucionar eso?

Ejemplo sencillo

Como ejemplo, cree un nuevo archivo main.texque contenga

\documentclass[10pt,a4paper]{book}
\usepackage{nameref}

\begin{document}

\section{Alice in wonderland}
\label{section:alice}

\pagebreak
a %Dummy text otherwise calling \pagebreak twice only skips one page
\pagebreak %Need to skip two pages, not just one because only the header of the left page of the book class displays the section name, not the one of the right page

%\section{Alice in wonderland} %Writes the header correctly
\section{\nameref{section:alice}} %Header shows "??"

\end{document}

Compilar con pdflatex main.tex. En la parte superior de la tercera página, se muestra el encabezado 0.2 ??en lugar de 0.2 ALICE IN WONDERLAND.

Respuesta1

De forma predeterminada, la bookclase escribe en mayúsculas todos los encabezados. La forma en que funcionan estas mayúsculas significa que cuando \nameref{section:alice}se escribe en el encabezado, los datos reales se

\nameref{SECTION:ALICE}

que es una referencia a una etiqueta desconocida, que también vemos en el log del MWE

LaTeX Warning: Reference `SECTION:ALICE' on page 3 undefined on input line 17

Una solución sucia sería usarla en \label{SECTION:ALICE}su lugar.


Hoy en día, usar encabezados exclusivamente en mayúsculas puede verse como un grito, por lo que normalmente desactivo las mayúsculas automáticas.

Normalmente nunca uso la bookclase, sino que uso la memoirclase, que tiene la namerefcaracterística incorporada, como \titleref. También memoires muy fácil desactivar las mayúsculas predeterminadas a través de

\nouppercaseheads
\pagestyle{headings} % reactivate the page style (\nou.. changes an internal macro in the headers, thus the header macros has to be applied again)

La memoirclase se puede utilizar como reemplazo directo de la bookclase.

Respuesta2

Puedes usarEl truco de Diego Dias aquíeso está inspirado en el refcountpaquete.

\documentclass[10pt,a4paper]{book}
\usepackage{nameref}

\makeatletter
\newcommand{\getnamereftext}[1]{%
  \@ifundefined{r@#1}{}{%
    \unexpanded\expandafter\expandafter\expandafter{%
      \expandafter\expandafter\expandafter\@thirdoffive\csname r@#1\endcsname
    }%
  }%
}
\makeatother

\begin{document}

\section{Alice in wonderland}
\label{section:alice}

\clearpage
a %Dummy text otherwise calling \pagebreak twice only skips one page
\clearpage %Need to skip two pages

\section{\getnamereftext{section:alice}}

\end{document}

ingrese la descripción de la imagen aquí

Respuesta3

Tu \nameref{}, que funciona de manera similar, \label{}tiene que estar fuera del \section{}comando:

\section{\nameref{section:alice}} %Header shows "??"

\section{ Alice in Wonderland} \nameref{section:alice} %works, returns label

Como señaló daleif: poner ambos \label{}y \nameref{}en mayúsculas funciona perfectamente como una solución sucia sin devolver el contenido de\label{}

información relacionada