我发现我可以方便地通过使用 为 KOMA-Script 中的部分添加序言\setpartpreamble
。
因此我定义了这样的序言(它应该是一个摘要):
\documentclass{scrbook}
\begin{document}
\setpartpreamble{This is an abstract.}
\part{First Part}
\end{document}
LaTeX 输出看起来像所需的那样 - 序言位于部分标题下:
但是现在如果我通过 TeX4ht (by make4ht MWE.tex
) 生成 HTML,这个序言就不会出现在部分页面上,而是出现在它之前的某个看似随机的位置。
有什么想法可以使 TeX4ht 生成所需的输出?
答案1
似乎在 TeX4ht 重新定义\part
命令时,应该在命令末尾执行的钩子在分段文本本身之前执行。此版本scrbook.4ht
应该可以修复此问题:
% scrbook.4ht (2023-02-25-15:08), generated from tex4ht-4ht.tex
% Copyright 1999-2009 Eitan M. Gurari
% Copyright 2009-2023 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2023-02-25-15:08}
\let\o:maketitle:\maketitle
\let\o:maketitle:\maketitle
\def\maketitle{\bgroup
\gHAdvance\:mpNum by 1
\HAssign\minipageNum=\:mpNum \relax
%
\ifx \EndPicture\:UnDef
\def\sec:typ{title}%
\Configure{HtmlPar}{}{}{}{}%
\Configure{newpage}{}%
\ConfigureEnv{center}{\empty}{}{\empty}{\empty}
\let\a:tabular:sv\a:tabular \let\b:tabular:sv\b:tabular
\let\c:tabular:sv\c:tabular \let\d:tabular:sv\d:tabular
\let\e:tabular:sv\e:tabular \let\f:tabular:sv\f:tabular
\let\before:begintabular:sv\before:begintabular
%
\Configure{HBorder}{}{}{}{}{}{}{}{}{}{}%
\Configure{tabular}{}{}{}{\e:mktl}
{\bgroup \let\a:tabular\a:tabular:sv \let\b:tabular\b:tabular:sv
\let\c:tabular\c:tabular:sv \let\d:tabular\d:tabular:sv
\let\e:tabular\e:tabular:sv \let\f:tabular\f:tabular:sv
\let\before:begintabular\before:begintabular:sv
}{\egroup}
\ConfigureEnv{tabular}{\empty}{}{}{}%
%
\pend:def\@title{\a:ttl}\append:def\@title{\b:ttl}%
\pend:def\@date{\a:date}\append:def\@date{\b:date}%
\pend:def\@author{\a:author}\append:def\@author{\b:author}%
\def\and{\a:and}
%
\fi
\pic:gobble\a:mktl \o:maketitle: \pic:gobble\b:mktl
\egroup \let\maketitle\empty}
\NewConfigure{maketitle}[4]{\c:def\a:mktl{#1}\c:def\b:mktl{#2}%
\c:def\a:ttl{#3}\c:def\b:ttl{#4}}
\NewConfigure{thanks author date and}[8]{%
\c:def\a:thanks{#1}\c:def\b:thanks{#2}\c:def\a:author{#3}\c:def\b:author{#4}%
\c:def\a:date{#5}\c:def\b:date{#6}\c:def\a:and{#7}\c:def\e:mktl{#8}}
\pend:def\titlepage{%
\cfg:maketitle
}
\def\cfg:maketitle{%
\global\let\cfg:maketitle\empty
\ifx\@dedication\@empty \else
\pend:def\@dedication{\a:dedication}%
\append:def\@dedication{\b:dedication}%
\fi
\pend:def\@title{\a:ttl}\append:def\@title{\b:ttl}%
\pend:def\@author{\a:author}\append:def\@author{\b:author}%
\pend:def\@date{\a:date}\append:def\@date{\b:date}%
\def\and{\a:and}
\pend:def\@subtitle{\a:subtitle}
\append:def\@subtitle{\b:subtitle}
}
\NewConfigure{dedication}{2}
\Configure{UndefinedSec}{likepart}
\Configure{UndefinedSec}{likechapter}
\Configure{UndefinedSec}{likesection}
\Configure{UndefinedSec}{likesubsection}
\let\:tempb\chapter
\Def:Section\chapter{\thechapter}{#1}
\let\:chapter\chapter
\let\chapter\:tempb
\def\@makechapterhead#1{}
\let\no@chapter\@chapter
\def\@chapter[#1]#2{%
\gHAdvance\:mpNum by 1
\HAssign\minipageNum=\:mpNum \relax
%
{\SkipRefstepAnchor \let\addcontentsline\:gobbleIII\no@chapter[#1]{}}%
\HtmlEnv \Toc:Title{#1}\:chapter{#2}}
\Def:Section\likechapter{}{#1}
\let\:likechapter\likechapter
\let\likechapter\:UnDef
\let\no@schapter\@schapter
\def\@schapter#1{%
{\let\addcontentsline\:gobbleIII\no@schapter{}}%
\HtmlEnv \:likechapter{#1}}
\let\no@appendix\appendix
\Def:Section\appendix{\thechapter}{#1}
\let\:appendix\appendix
\def\appendix{%
\def\@chapter[##1]##2{%
\gHAdvance\:mpNum by 1
\HAssign\minipageNum=\:mpNum \relax
%
{\def\addcontentsline####1####2####3{}\no@chapter[##1]{}}%
\HtmlEnv \Toc:Title{##1}\:appendix{##2}}%
\no@appendix}
\def\tableofcontents{%
\ifx\contentsname\empty \else
%
\chapter*{\contentsname}%
%
%
\fi
\:tableofcontents}
\edef\:TOC{%
\noexpand\ifx [\noexpand\:temp
\noexpand\expandafter\noexpand\:TableOfContents
\noexpand\else
\noexpand\Auto:ent{\ifnum \c@tocdepth >-2 part,\fi
\expandafter\ifx \csname @chapter\endcsname\relax
\ifnum \c@tocdepth >\z@ section,\fi
\else
\ifnum \c@tocdepth >\m@ne chapter,appendix,addchap,\fi
\ifnum \c@tocdepth>0 section,\fi
\fi
\ifnum \c@tocdepth>1 subsection,\fi
\ifnum \c@tocdepth>2 subsubsection,\fi
\ifnum \c@tocdepth>3 paragraph,\fi
\ifnum \c@tocdepth>4 subparagraph,\fi
UnDFexyz}%
\noexpand\fi}
\def\:tableofcontents{\futurelet\:temp\:TOC}
\def\Auto:ent#1{%
\edef\auto:toc{\noexpand\:TableOfContents[\ifx \auto:toc\:UnDef
#1\else \auto:toc \fi]} \auto:toc
\global\let\auto:toc\:UnDef }
\def\:tocs{\noexpand\:tableofcontents}
\pend:defIII\addcontentsline{%
\def\:temp{##1}\def\:tempa{toc}\ifx \:temp\:tempa
\gHAdvance\TitleCount 1 \fi }
\def\@dottedtocline#1#2#3#4#5{\hbox{\def\numberline##1{\e:listof
##1\f:listof}\c:listof#4\d:listof}\ignorespaces}
\def\@starttoc#1{%
\begingroup
\makeatletter \Configure{cite}{}{}{}{}%
\def\:temp{#1}\def\:tempa{toc}%
\a:listof\par
\@input{\jobname.\ifx \:temp\:tempa 4ct\else #1\fi}%
\b:listof
\if@filesw
\expandafter\expandafter\csname
newwrite\endcsname\csname tf@#1\endcsname
\immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
\fi
\global\@nobreakfalse
\endgroup}
\NewConfigure{tableofcontents*}[1]{%
\def\:tempa{#1}\ifx\empty\:tempa
\ifx \au:StartSec\:UnDef \else \gdef\:StartSec{\au:StartSec}\fi
\else
\edef\auto:toc{#1}%
\ifx \au:StartSec\:UnDef
\let\au:StartSec\:StartSec
\def\:StartSec{\:tableofcontents
\global\let\auto:toc\:UnDef \:StartSec}%
\pend:def\:tableofcontents{\gdef\:StartSec{\au:StartSec}}%
\fi \fi
}
\ifx \@openbib@code\:UnDef \else
\pend:def\@openbib@code{\labelsep\z@}
\fi
\let\:tempc\listoffigures
\pend:def\:tempc{\begingroup \a:listoffigures
\def\@starttoc{\:tableofcontents[lof]\:gobble}}
\append:def\:tempc{\b:listoffigures \endgroup}
\HLet\listoffigures\:tempc
\let\:tempc\listoftables
\pend:def\:tempc{\begingroup \a:listoftables
\def\@starttoc{\:tableofcontents[lot]\:gobble}}
\append:def\:tempc{\b:listoftables \endgroup}
\HLet\listoftables\:tempc
\NewConfigure{listoffigures}{2}
\NewConfigure{listoftables}{2}
\ifx \part\:UnDef\else
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax
\SkipRefstepAnchor \refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
}
\let\:tempb\part
\Def:Section\part{\thepart}{#1}
\let\:part\part
\let\part\:tempb
\let\no@part\@part
\def\@part[#1]#2{%
{\let\addcontentsline\:gobbleIII\no@part[#1]{}}%
\HtmlEnv%
%\ExecuteDoHook{heading/preinit/#1}%
%\ExecuteDoHook{heading/postinit/#1}%
\Toc:Title{#1}\:part{#2}%
\csname @endpart\endcsname%
}
\Def:Section\likepart{}{#1}
\let\:likepart\likepart
\let\likepart\:UnDef
\let\no@spart\@spart
\def\@spart#1{%
{\let\addcontentsline\:gobbleIII\no@spart{}}%
\HtmlEnv \:likepart{#1}}
\fi
\ifx \section\:UnDef\else
\let\no@section\section
\Def:Section\section{\ifnum \c:secnumdepth>\c@secnumdepth \else
\thesection \fi}{#1}
\let\no:section\section
\def\section{\rdef:sec{section}}
\Def:Section\likesection{}{#1}
\let\:likesection\likesection
\let\likesection\:UnDef
\fi
\let\no@subsection\subsection
\Def:Section\subsection{\ifnum \c:secnumdepth>\c@secnumdepth \else
\thesubsection \fi}{#1}
\let\no:subsection\subsection
\def\subsection{\rdef:sec{subsection}}
\Def:Section\likesubsection{}{#1}
\let\:likesubsection\likesubsection
\let\likesubsection\:UnDef
\let\no@subsubsection\subsubsection
\Def:Section\subsubsection{\ifnum \c:secnumdepth>\c@secnumdepth \else
\thesubsubsection \fi}{#1}
\let\no:subsubsection\subsubsection
\def\subsubsection{\rdef:sec{subsubsection}}
\Def:Section\likesubsubsection{}{#1}
\let\:likesubsubsection\likesubsubsection
\let\likesubsubsection\:UnDef
\let\no@paragraph\paragraph
\Def:Section\paragraph{\ifnum \c:secnumdepth>\c@secnumdepth \else
\theparagraph \fi}{#1}
\let\no:paragraph\paragraph
\def\paragraph{\rdef:sec{paragraph}}
\Def:Section\likeparagraph{}{#1}
\let\:likeparagraph\likeparagraph
\let\likeparagraph\:UnDef
\let\no@subparagraph\subparagraph
\Def:Section\subparagraph{\ifnum \c:secnumdepth>\c@secnumdepth \else
\thesubparagraph \fi}{#1}
\let\no:subparagraph\subparagraph
\def\subparagraph{\rdef:sec{subparagraph}}
\Def:Section\likesubparagraph{}{#1}
\let\:likesubparagraph\likesubparagraph
\let\likesubparagraph\:UnDef
\NewConfigure{caption}[4]{\c:def\cptA:{#1}\c:def\cptB:{#2}%
\c:def\cptC:{#3}\c:def\cptD:{#4}}
\long\def\@makecaption#1#2{%
{\cptA: \cap:ref{#1}%
\if :#1:\else\cptB:\fi}{\cptC:{#2}\cptD:}}
\pend:def\caption{\SkipRefstepAnchor}
\append:def\quote{\par\@totalleftmargin\z@}
\long\def\c:theindex:#1#2#3#4#5#6#7#8#9{%
\def\theindex{%
\def\idx:item{\SaveEverypar\ht:everypar{}#1}%
\def\endtheindex{\idx:item#2\RecallEverypar}%
\def\item{\idx:item\def\idx:item{#4}\let\index\@gobble #3}%
\def\subitem{\idx:item\def\idx:item{#6}\let\index\@gobble #5}%
\def\subsubitem{\idx:item\def\idx:item{#8}\let\index\@gobble #7}}%
\def\indexspace{\idx:item#9\let\idx:item\empty}}
\def\warn:idx#1{%
\expandafter\ifx \csname #1warn:idx\endcsname\relax
\expandafter\global
\expandafter\let \csname #1warn:idx\endcsname\def
\writesixteen
{---------------------------------------------------------}%
\:warning{If not done so, the index is to be processed by
^^J\space\space tex '\string\def\string\filename
{{#1}{idx}{4dx}{ind}} \noexpand\input\space idxmake.4ht'
^^J\space\space makeindex -o #1.ind #1.4dx
^^Jinstead of
^^J\space\space makeindex -o #1.ind #1.idx
^^JOn some platforms, the quotation marks ' should be
^^J replaced by double quotation marks " or eliminated.
^^J---------------------------------------------------------
}%
{\Configure{Needs}{File: #1.4idx}\Needs{}}%
\fi}
\ifOption{info}{\Log:Note{
A script of the form
^^Jtex '\def\string\filename{{\%\%1}{idx}{4dx}{ind}}
\string\input\space idxmake.4ht'
^^Jmakeindex -o \%\%1.ind \%\%1.4dx
^^Jin the env file, automatically calls to the revised makeindex
^^Jcommand. An extra compilation of the source LaTeX file is required,
^^Jto get the index correctly into the output.}}{}
\def\ind:defs{\let\LNKidx\empty
\def\LNK##1##2##3##4{\ifx\NewConfigure\:UnDef\else
\def\LNK:number{##4}%
\a:LNK[##1]{##2}{}\gHAdvance\:LNKno1
\def\:THIrd{##3}\ifx\:THIrd\empty
\LNKidx{\ifx\c:LNK\empty\:LNKno\else \c:LNK\fi}\else
\LNKidx{##3}\fi
\global\let\LNKidx\empty
\b:LNK
\fi}%
\def\:LNKno{0}}
\NewConfigure{LNK}{3}
\Configure{LNK}{\Link}{\EndLink}{}
\def\yhbLNK#1{\expandafter\let\expandafter\LNKidx\csname
#1\endcsname\LNK}
\Configure{@begin}{theindex}{\ind:defs}
\NewConfigure{maketitle}[4]{\c:def\a:mktl{#1}\c:def\b:mktl{#2}%
\c:def\a:ttl{#3}\c:def\b:ttl{#4}}
\NewConfigure{thanks author date and}[8]{%
\c:def\a:thanks{#1}\c:def\b:thanks{#2}%
\c:def\a:author{#3}\c:def\b:author{#4}%
\c:def\a:date{#5}\c:def\b:date{#6}\c:def\a:and{#7}\c:def\e:mktl{#8}}
\append:def\quotation{\a:quotation\par\@totalleftmargin\z@}
\NewConfigure{quotation}{1}
\NewConfigure{listof}{6}
\ConfigureToc{likeparagraph} {}{\empty}{}{\newline}
\ConfigureToc{likepart} {}{\empty}{}{\newline}
\ConfigureToc{likesection} {}{\empty}{}{\newline}
\ConfigureToc{likesubparagraph} {}{\empty}{}{\newline}
\ConfigureToc{likesubsection} {}{\empty}{}{\newline}
\ConfigureToc{likesubsubsection} {}{\empty}{}{\newline}
\ConfigureToc{paragraph} {\empty}{\ }{}{\newline}
\ConfigureToc{part} {\empty}{\ }{}{\newline}
\ConfigureToc{section} {\empty}{\ }{}{\newline}
\ConfigureToc{subparagraph} {\empty}{\ }{}{\newline}
\ConfigureToc{subsection} {\empty}{\ }{}{\newline}
\ConfigureToc{subsubsection} {\empty}{\ }{}{\newline}
\ConfigureToc{appendix} {\empty}{\ }{}{\newline}
\ConfigureToc{chapter} {\empty}{\ }{}{\newline}
\ConfigureToc{likechapter} {}{\empty}{}{\newline}
\ifx \@@maybeautodot\:UnDef
\let\add:chap=\@addchap
\def\@addchap{%
\let\chap:addcontentsline=\addcontentsline
\def\addcontentsline{\let\addcontentsline\chap:addcontentsline
\:gobbleIII }%
\add:chap}
\else
\let\no@addchap\@addchap
\def\@addchap[#1]#2{%
\HtmlEnv \Toc:Title{#1}\:addchap{#2}}
\fi
\let\:makeschapterhead=\@makeschapterhead
\def\::makeschapterhead#1{\:makeschapterhead{\normalfont\normalsize
\:addchap {#1}}}
\pend:def\addchap{\let\@makeschapterhead\::makeschapterhead}
\pend:def\chapter{\let\@makeschapterhead\:makeschapterhead}
\let\:tempb=\addchap
\Def:Section\addchap{}{#1}
\let\:addchap=\addchap
\let\addchap=\:tempb
\ConfigureToc{addchap} {\empty}{\ }{}{\newline}
\Def:Section\minisec{}{#1}
\let\:minisec=\minisec
\def\minisec#1{\:minisec{#1}\@afterheading}
\NewConfigure{subtitle}{2}
\pend:defI\@makefntext{\IgnorePar}
\let\scr@defineobsoletefonts\thr@@
\HRestore\maketitle
\renewcommand*\thesection{%
\ifnum \scr@compatibility>\@nameuse{scr@[email protected]}\space
\if@mainmatter\thechapter.\fi
\else
\thechapter.%
\fi
\@arabic\c@section
}
\renewcommand*\theequation{%
\ifnum \scr@compatibility>\@nameuse{scr@[email protected]}\space
\if@mainmatter\thechapter.\fi
\else
\thechapter.%
\fi
\@arabic\c@equation
}
\renewcommand*\thefigure{%
\ifnum \scr@compatibility>\@nameuse{scr@[email protected]}\space
\if@mainmatter\thechapter.\fi
\else
\thechapter.%
\fi
\@arabic\c@figure
}
\renewcommand*\thetable{%
\ifnum \scr@compatibility>\@nameuse{scr@[email protected]}\space
\if@mainmatter\thechapter.\fi
\else
\thechapter.%
\fi
\@arabic\c@table
}
\Hinput{scrbook}
\endinput