
어떤 경우에는 장 번호에 문자를 추가하고 싶지만 모든 곳에서 그런 것은 아닙니다. 변경 사항은 목차에도 반영되어야 합니다. 장 번호 매기기는 다음과 같아야 합니다.
1
2a
2b
삼
이 작업을 어떻게 수행할 수 있나요?
답변1
내 대답의 변형특정 번호가 있는 장(1, 1b, 2, 2b, 3, 4)
\documentclass{book}
\usepackage{hyperref} % optional
\makeatletter
\newcounter{repchapter}
\let\latex@chapter\chapter
\renewcommand{\chapter}{\@ifstar{\latex@chapter*}{\guuk@chapter}}
\newcommand{\guuk@chapter}{\@ifnextchar+{\repeat@chapter}{\restorechapter\latex@chapter}}
\newcommand{\repeat@chapter}[1]{% #1 is +
\ifnum\value{repchapter}>0
\addtocounter{chapter}{-1}%
\fi
\stepcounter{repchapter}%
\latex@chapter
}
\newcommand{\restorechapter}{%
\setcounter{repchapter}{0}%
}
\def\thechapter{\arabic{chapter}\alph{repchapter}}
% this is for hyperref (it does nothing if not loaded)
\def\theHchapter{\arabic{chapter}\alph{repchapter}}
\makeatother
\begin{document}
\tableofcontents
\chapter{Title}
x
\chapter+{First part}
x
\chapter+{Second part}
x
\chapter{Normal}
x
\end{document}
다음과 같은 것이 필요하다면
1
2a
2b
3a
3b
\restorechapter
보조 카운터를 0으로 재설정하려면 3a장 이전에 발행해야 하므로
\chapter{One}
<text>
\chapter+{Two A}
<text>
\chapter+{Two B}
<text>
\restorechapter
\chapter+{Three A}
<text>
\chapter+{Three B}
<text>
키-값 구문을 사용하는 더 나은 인터페이스:
\documentclass{book}
\usepackage{xparse}
\usepackage{hyperref}
\newcounter{repchapter}
\let\latexchapter\chapter
\renewcommand\thechapter{\arabic{chapter}\alph{repchapter}}
% this is for hyperref (it does nothing if not loaded)
\providecommand\theHchapter{}
\renewcommand\theHchapter{\arabic{chapter}\alph{repchapter}}
\ExplSyntaxOn
\RenewDocumentCommand{\chapter}{sO{}m}
{
\IfBooleanTF{#1}
{\latexchapter*{#3}}
{\egreg_complex_chapter:nn { #2 } { #3 }}
}
\keys_define:nn { egreg/complex_chapter }
{
tochead .tl_set:N = \l_egreg_complex_chapter_tochead_tl,
suffix .bool_set:N = \l_egreg_complex_chapter_suffix_bool,
suffix .default:n = { true },
reset .bool_set:N = \l_egreg_complex_chapter_reset_bool,
reset .default:n = { true },
}
\cs_new_protected:Npn \egreg_complex_chapter:nn #1 #2
{
\keys_set:nn { egreg/complex_chapter }
{
tochead = { #2 },
suffix = false,
reset = false,
#1
}
\bool_if:NT \l_egreg_complex_chapter_reset_bool
{
\setcounter{repchapter}{0}
}
\bool_if:NTF \l_egreg_complex_chapter_suffix_bool
{
\int_compare:nT { \value{repchapter} > 0 }
{
\addtocounter{chapter}{-1}
}
\stepcounter{repchapter}
}
{
\setcounter{repchapter}{0}
}
\latexchapter[\l_egreg_complex_chapter_tochead_tl]{#2}
}
\ExplSyntaxOff
\begin{document}
\tableofcontents
\chapter{Title}
x
\chapter[suffix]{First part}
x
\chapter[suffix,tochead=Second part]{Second part with a very long title}
x
\chapter[reset,suffix]{Another first part}
x
\chapter[suffix]{Another second part}
x
\end{document}
reset
새로운 번호가 필요한 분할 장이 다른 분할 장 뒤에 오는 경우에만 키가 필요합니다 .
선택적 인수를 오버로드했기 때문에 키는 tochead
약식 제목을 지정하는 데 사용됩니다.
답변2
빠르고 (더러워요!)
\documentclass{book}
\let\latexthechapter\thechapter
% Helper counter
\newcounter{alphachapter}
\setcounter{alphachapter}{0}
\makeatletter
\newcommand{\DoReallyBadThingsToChapterCounter}{%
\setcounter{alphachapter}{0}%
\stepcounter{chapter}%
% Store chapter command
\let\latexc@chapter\c@chapter%
% Force chapter command to be help counter
\let\c@chapter\c@alphachapter%
% Change output format
\renewcommand{\thechapter}{\the\latexc@chapter\alph{alphachapter}}%
}
\newcommand{\RestoreChapterCounterMethod}{%
% Restore chapter counter command
\let\c@chapter\latexc@chapter%
% Restore chapter counter output format
\let\thechapter\latexthechapter%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{First}
\DoReallyBadThingsToChapterCounter
\chapter{Second A}
\chapter{Second B}
\chapter{Second C}
\RestoreChapterCounterMethod
\chapter{Third}
\chapter{Fourth}
\DoReallyBadThingsToChapterCounter
\chapter{Fifth A}
\chapter{Fifth B}
\chapter{Fifth C}
\RestoreChapterCounterMethod
\chapter{Sixth}
\end{document}