
\l@part
바람직한 보기를 위해 표준 도서 클래스 매크로를 패치했습니다 . 매크로가 \part
별표 해제된 경우 해당 위치(아래 코드)에 단어를 추가하고 , \part*
. 추가 패키지 없이도 가능한가요? 또는 \g@addto@macro
에서 사용 중일 수 있습니다 .\@part
\@spart
\renewcommand*\l@part[2]{%
\ifnum \c@tocdepth >-2\relax
\addpenalty{-\@highpenalty}%
\addvspace{1em \@plus\p@}%
\setlength\@tempdima{3em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
{\leavevmode
{IF \part IS UNSTARED ADD SOME WORD HERE}\hrulefill\nopagebreak\par\medskip
\large \bfseries \vbox{\centering\sffamily\bfseries#1}%
%\hfil \hb@xt@\@pnumwidth{\hss #2}
}
\nopagebreak\hrulefill\par
\vspace*{1ex}
\nobreak
\global\@nobreaktrue
\everypar{\global\@nobreakfalse\everypar{}}%
\endgroup
\fi
}
내 MWE
아래
\documentclass[a4paper,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\makeatletter
\renewcommand*\l@part[2]{%
\ifnum \c@tocdepth >-2\relax
\addpenalty{-\@highpenalty}%
\addvspace{1em \@plus\p@}%
\setlength\@tempdima{3em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
{\leavevmode
\hrulefill\nopagebreak\par\medskip
\large \bfseries \vbox{\centering\sffamily\bfseries#1}%
%\hfil \hb@xt@\@pnumwidth{\hss #2}
}
\nopagebreak\hrulefill\par
\vspace*{1ex}
\nobreak
\global\@nobreaktrue
\everypar{\global\@nobreakfalse\everypar{}}%
\endgroup
\fi
}
\def\partmark{}
\def\@part[#1]#2{%
\renewcommand\partmark{#1}
\thispagestyle{empty}
\addcontentsline{toc}{part}{#1}%
\markboth{}{}%
{\centering
\interlinepenalty \@M
\vskip 20\p@
\Huge\sffamily\bfseries #2\par
\vskip 20\p@
\hrulefill
}%
\@endpart
}
\def\@spart#1{%
\renewcommand\partmark{#1}
\thispagestyle{empty}
\addcontentsline{toc}{part}{#1}%%
{\centering
\interlinepenalty \@M
\normalfont
\Huge \sffamily\bfseries #1\par}%
\@endpart
}
\makeatother
\begin{document}
\tableofcontents
\part*{Stared}
\chapter{ABC}
\lipsum[1]
\part{UnStared}
\chapter{DEF}
\lipsum[1]
\end{document}
답변1
가장 쉬운 방법은 를 사용하는 것입니다 conditional
. 예를 들어 가 사용 되면 \ifnotstarredversion
로 설정되고 , 그렇지 않으면 로 설정됩니다 .true
\part
false
그러나 조건문의 상태는 etc.가 를 사용할 때가 아니라 가 생성될 때 평가되어야 하므로 를 ToC
사용하여 파일 에 기록해야 합니다 .\addtocontents{toc}{\protect\notstarredtrue}
ToC
\part
\addcontentsline
매크로를 사용하여 \partleadinword
(또는 원하는 대로 호출) 매크로가 사용되는 경우 줄 시작 부분에 배치되어야 하는 단어 등에 대한 내용을 보관하세요 \part
.
\documentclass[a4paper,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\makeatletter
\newif\ifnotstarredversion
\newcommand{\partleadinword}{Please provide a MWE ;-)}
\renewcommand*\l@part[2]{%
\ifnum \c@tocdepth >-2\relax
\addpenalty{-\@highpenalty}%
\addvspace{1em \@plus\p@}%
\setlength\@tempdima{3em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
{\leavevmode
\ifnotstarredversion
\partleadinword%
\fi
\hrulefill\nopagebreak\par\medskip
\large \bfseries \vbox{\centering\sffamily\bfseries#1}%
% \hfil \hb@xt@\@pnumwidth{\hss #2}
}
\nopagebreak\hrulefill\par
\vspace*{1ex}
\nobreak
\global\@nobreaktrue
\everypar{\global\@nobreakfalse\everypar{}}%
\endgroup
\fi
}
\def\partmark{}
\def\@part[#1]#2{%
\renewcommand\partmark{#1}
\thispagestyle{empty}
\addtocontents{toc}{\protect\notstarredversiontrue}
\addcontentsline{toc}{part}{#1}%
\markboth{}{}%
{\centering
\interlinepenalty \@M
\vskip 20\p@
\Huge\sffamily\bfseries #2\par
\vskip 20\p@
\hrulefill
}%
\@endpart
}
\def\@spart#1{%
\renewcommand\partmark{#1}
\thispagestyle{empty}
\addtocontents{toc}{\protect\notstarredversionfalse}
\addcontentsline{toc}{part}{#1}%%
{\centering
\interlinepenalty \@M
\normalfont
\Huge \sffamily\bfseries #1\par}%
\@endpart
}
\makeatother
\begin{document}
\tableofcontents
\part*{Intro}
\chapter{ABC}
\lipsum[1]
\part{One}
\chapter{DEF}
\lipsum[1]
\end{document}