
양면 book
문서가 있는데 장 이름이 바깥쪽에 오도록 헤더 형식을 지정하고 싶습니다. 모든 것이 잘 작동하지만 한 가지가 나를 짜증나게 합니다. 일부 소스 코드 목록( listings
패키지)과 의사 코드( algorithmicx
패키지) 가 있습니다 . 모든 장 이름은 "일반적으로" 지정되지만 목록 목록("Listings"로 명명)과 알고리즘 목록은 헤더에 모두 대문자로 표시됩니다.
아마도 이러한 패키지에 대한 일부 설정을 재정의해야 할 것 같지만 어떤 설정인지는 알 수 없습니다. "목록" 및 "알고리즘 목록"이 명령에 의해 입력되는 방식을 어떻게 변경할 수 있습니까 \chaptermark
(올바른 경우)?
다음은 문제를 보여주는 작은 예입니다.
\documentclass[a4paper,twoside]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{listings}
\fancypagestyle{fancyplain}{%
\renewcommand{\headrulewidth}{0pt}
\fancyhf{}%
\renewcommand{\footrulewidth}{0pt}
\fancyfoot{\fancyplain}{}
}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{thesection\ #1}{}}
\renewcommand{\lhead}[1]{\fancyhead[OL,ER]{\fancyplain{}\chaptermark{#1}}}
\fancyhead[OR,EL]{\fancyplain{}\thepage}
\begin{document}
\chapter{My chapter}
\begin{lstlisting}[caption={My listing},label=lst:my_listing,language=C++]
std::cout << "Hello World!" << std::endl;
\end{lstlisting}
\cleardoublepage
\lstlistoflistings
\addcontentsline{toc}{chapter}{Listings}
\thispagestyle{empty}
\cleardoublepage
\end{document}
답변1
한 가지 방법은 제거 하거나 \tableofcontents
.\MakeUppercase\contentsname
\documentclass[a4paper,twoside]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{listings}
\usepackage{xpatch}
\makeatletter
\newcommand{\othertableofcontents}{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname
\@mkboth{%
\contentsname}{\contentsname}}%
\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}
\makeatother
\xpatchcmd{\lstlistoflistings}{%\
\tableofcontents}{%
\othertableofcontents}{}{}
%\lst@UserCommand\lstlistoflistings{\bgroup
% \let\contentsname\lstlistlistingname
% \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
% \othertableofcontents \egroup}
\fancypagestyle{fancyplain}{%
\renewcommand{\headrulewidth}{0pt}
\fancyhf{}%
\renewcommand{\footrulewidth}{0pt}
\fancyfoot{\fancyplain}{}
}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{thesection\ #1}{}}
\renewcommand{\lhead}[1]{\fancyhead[OL,ER]{\fancyplain{}\chaptermark{#1}}}
\fancyhead[OR,EL]{\fancyplain{}\thepage}
\begin{document}
\chapter{My chapter}
\begin{lstlisting}[caption={My listing},label=lst:my_listing,language=C++]
std::cout << "Hello World!" << std::endl;
\end{lstlisting}
\cleardoublepage
\lstlistoflistings
\addcontentsline{toc}{chapter}{Listings}
\thispagestyle{empty}
\cleardoublepage
\end{document}
업데이트
ToC
OP는 등에 대해 대문자가 아닌 제목을 갖도록 요청했기 때문에 패키지 에서 LoT
사용하는 것이 좋습니다 .\cftmarkX
tocloft
나는 이 작업을 수행하고 \markboth{...}{...}
페이지의 양쪽 여백을 사용하여 관련 명령을 재정의했습니다. 어쨌든 OP는 나중에 재정의하기 때문에 괜찮습니다.
\documentclass[a4paper,twoside]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{listings}
\usepackage{tocloft}
\renewcommand{\cftmarktoc}{\markboth{\contentsname}{\contentsname}}
\renewcommand{\cftmarklof}{\markboth{\listfigurename}{\listfigurename}}
\renewcommand{\cftmarklot}{\markboth{\listtablename}{\listtablename}}
\fancypagestyle{fancyplain}{%
\renewcommand{\headrulewidth}{0pt}
\fancyhf{}%
\renewcommand{\footrulewidth}{0pt}
\fancyfoot{\fancyplain}{}
}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{thesection\ #1}{}}
\renewcommand{\lhead}[1]{\fancyhead[OL,ER]{\fancyplain{}\chaptermark{#1}}}
\fancyhead[OR,EL]{\fancyplain{}\thepage}
\begin{document}
\tableofcontents
\cleardoublepage
\listoffigures
\cleardoublepage
\listoftables
\chapter{My chapter}
\begin{lstlisting}[caption={My listing},label=lst:my_listing,language=C++]
std::cout << "Hello World!" << std::endl;
\end{lstlisting}
\cleardoublepage
\lstlistoflistings
\addcontentsline{toc}{chapter}{Listings}
\thispagestyle{empty}
\cleardoublepage
\end{document}