Descrição geral do problema
Tenho um apêndice cujos nomes das seções devem ser idênticos aos nomes das seções da parte principal da dissertação. Portanto usei o \nameref
comando do pacote nameref
.
[...]
\mainmatter
\section{My section name}
\label{mySection}
[...]
\appendix
\section{\nameref{mySection}}
[...]
Isso funciona. No entanto, o cabeçalho da página esquerda na classe book deve exibir o nome da primeira seção da página. Ao usar \nameref
, o cabeçalho é exibido ??
em vez do nome da seção. Por que se comporta assim? Como posso contornar isso?
Exemplo simples
Por exemplo, crie um novo arquivo main.tex
contendo
\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}
Ajuntar com pdflatex main.tex
. Na parte superior da terceira página, o cabeçalho é exibido 0.2 ??
em vez de 0.2 ALICE IN WONDERLAND
.
Responder1
Por padrão, a book
classe coloca todos os cabeçalhos em maiúsculas. A maneira como esse maiúsculo funciona significa que quando \nameref{section:alice}
é gravado no cabeçalho, os dados reais são
\nameref{SECTION:ALICE}
que é uma referência a um rótulo desconhecido, que também vemos no log do MWE
LaTeX Warning: Reference `SECTION:ALICE' on page 3 undefined on input line 17
Uma solução suja seria realmente usar \label{SECTION:ALICE}
.
Hoje em dia, usar cabeçalhos maiúsculos puros pode ser visto como um grito, então normalmente apenas desativo o uso automático de maiúsculas.
Normalmente eu nunca uso a book
classe, em vez disso uso a memoir
classe, que tem o nameref
recurso integrado, como \titleref
. Também memoir
é muito fácil desativar a caixa alta padrão via
\nouppercaseheads
\pagestyle{headings} % reactivate the page style (\nou.. changes an internal macro in the headers, thus the header macros has to be applied again)
A memoir
classe pode ser usada como substituto da book
classe.
Responder2
Você pode usarO truque de Diego Dias aquiisso é inspirado no refcount
pacote.
\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}
Responder3
Seu \nameref{}
, que funciona de forma semelhante \label{}
tem que estar fora do \section{}
comando:
\section{\nameref{section:alice}} %Header shows "??"
\section{ Alice in Wonderland} \nameref{section:alice} %works, returns label
Conforme apontado por daleif: Colocar ambos \label{}
e \nameref{}
em letras maiúsculas funciona perfeitamente como uma solução alternativa suja sem retornar o conteúdo de\label{}