TeX4ht 无法在 HTML 输出中正确放置部分前言(由 KOMA-Script 定义)

TeX4ht 无法在 HTML 输出中正确放置部分前言(由 KOMA-Script 定义)

我发现我可以方便地通过使用 为 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

在此处输入图片描述

相关内容