문제에 대한 일반적인 설명

문제에 대한 일반적인 설명

문제에 대한 일반적인 설명

섹션 이름이 논문 주요 부분의 섹션 이름과 동일해야 하는 부록이 있습니다. 따라서 \nameref패키지의 명령을 사용했습니다 nameref.

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

이것은 작동합니다. 그러나 book 클래스의 왼쪽 페이지 헤더에는 페이지의 첫 번째 섹션 이름이 표시되어야 합니다. 를 사용하면 섹션 이름 대신 \nameref헤더가 표시됩니다 . ??왜 그렇게 행동합니까? 이 문제를 어떻게 해결할 수 있나요?

간단한 예

예를 들어 다음을 main.tex포함하는 새 파일을 만듭니다.

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

. pdflatex main.tex​세 번째 페이지 상단에는 헤더가 0.2 ??대신 표시됩니다 0.2 ALICE IN WONDERLAND.

답변1

기본적으로 book클래스는 모든 헤더를 대문자로 표시합니다. 이 대문자가 작동하는 방식은 \nameref{section:alice}헤더에 기록될 때 실제 데이터가

\nameref{SECTION:ALICE}

이는 MWE 로그에서도 볼 수 있는 알 수 없는 라벨에 대한 참조입니다.

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

더러운 수정은 실제로 \label{SECTION:ALICE}대신 사용하는 것입니다.


요즘에는 순수 대문자 헤더를 사용하는 것이 소리 지르는 것처럼 보일 수 있으므로 보통 자동 대문자를 비활성화합니다.

일반적으로 나는 book클래스를 사용하지 않고 대신 기능이 내장된 memoir클래스를 . 또한 다음을 통해 기본 대문자를 비활성화하는 것이 매우 쉽습니다.nameref\titlerefmemoir

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

수업 memoir은 수업을 대체하여 사용할 수 있습니다 book.

답변2

당신이 사용할 수있는디에고 디아스의 트릭패키지 에서 영감을 받아 만든 것입니다 refcount.

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

여기에 이미지 설명을 입력하세요

답변3

\nameref{}와 유사하게 작동하는 은 명령 \label{}외부에 있어야 합니다 \section{}.

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

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

daleif가 지적한 바와 같이, \label{}\nameref{}대문자를 모두 입력하면 내용을 반환하지 않고도 더러운 해결 방법으로 완벽하게 작동합니다.\label{}

관련 정보