fancyhdr을 사용하여 모든 섹션에 다른 그림을 추가하세요.

fancyhdr을 사용하여 모든 섹션에 다른 그림을 추가하세요.

LaTex에서 XX번을 fancyhdr정의하지 않고 를 사용하여 모든 섹션 헤더에 다른 그림을 추가할 수 있는 방법이 있는지 궁금합니다 .\fancypagestyle

섹션과 해당 그림에 동일한 이름을 부여하는 것이 좋은 출발점이 될 수 있다고 생각합니다. 그런 다음 \fancypagestyle변수/자리 표시자를 사용하여 정의하는 방법은 무엇입니까? (죄송합니다. 아직 작동하는 코드가 없습니다.)

정말 감사합니다!

답변1

\section와 같은 관련 그림의 파일 이름을 전달하기 위한 추가 선택적 인수가 있다고 가정합니다 \section(<image file>)[<toc name>]{<full name>}. 이 추가 정보가 매크로라는 매크로에 저장된다고 가정하면 \headerpic다음과 같이 헤더를 한 번만 선언하는 것이 가능합니다.

\fancyhead[C]{\includegraphics[width=\textwidth]{\headerpic}}

가능한 구현은 다음과 같습니다.

\let\ltx@section\section
\def\section{\kernel@ifnextchar(%
  {\@section@HP}%
  {\@section@HP(\@headerpic@default)}%
}
\def\@section@HP(#1){%
  \clearpage\xdef\headerpic{#1}\ltx@section
}

이미지를 전달하지 않으면 로 되돌아가게 되며 \@headerpic@default, 보기 좋게 만들려면 수동으로 설정하거나 래퍼를 통해 설정해야 합니다.

\def\SetHeaderpicDefault#1{%
  \xdef\headerpic{#1}
  \xdef\@headerpic@default{#1}
}

\headerpic이는 또한 섹션이 존재하지 않고 첫 번째 헤더가 조판되는 경우 중요한 초기화 입니다.

출력0

출력1

완전한 코드

% arara: pdflatex: { shell: true }
\documentclass[11pt]{article}
% This is just to make sure that the the demo pictures used are present
\write18{wget https://i.picsum.photos/id/388/2000/200.jpg}
\write18{wget https://i.picsum.photos/id/495/2000/200.jpg}
\write18{wget https://i.picsum.photos/id/520/2000/200.jpg}
\usepackage{graphicx}
\usepackage{fancyhdr}
  \pagestyle{fancy}
  \fancyhf{}
  \fancyhead[C]{\includegraphics[width=\textwidth]{\headerpic}}

\usepackage{lipsum}

\makeatletter
\let\ltx@section\section
\def\section{\kernel@ifnextchar(%
  {\@section@HP}%
  {\@section@HP(\@headerpic@default)}%
}
\def\@section@HP(#1){%
  \clearpage\xdef\headerpic{#1}\ltx@section
}
\def\SetHeaderpicDefault#1{%
  \xdef\headerpic{#1}
  \xdef\@headerpic@default{#1}
}
\makeatother

\renewcommand*\headrulewidth{0pt}
\setlength\headheight{40pt}
\SetHeaderpicDefault{388-2000x200.jpg}

\begin{document}
\section{Lorem Ipsum}
\lipsum
\section(495-2000x200.jpg){Lorem Ipsum}
\lipsum
\section(520-2000x200.jpg){Dolor Sit}
\lipsum
\section{Dolor Sit}
\lipsum
\end{document}

그러나 주요 주의 사항은 매크로 \@section@HP가 올바른 그림이 해당 섹션과 연결되어 있는지 확인하기 위해 새 페이지를 강제로 적용한다는 것입니다.

위의 Soultion의 구문 설탕을 피하려면 물론 다음과 같이 갈 수 있습니다.

\section[<toc name>]{<full name>}
\SetHeaderpic{<file name>}

와 함께 \def\SetHeaderpic#1{\xdef\headerpic{#1}}.

관련 정보