如何在 TeX4Ht 中获取以下列表结构

如何在 TeX4Ht 中获取以下列表结构

我正在尝试通过 TeX4ht 获取以下 xml 结构

第一个列表应该标记为

<list1 type=""><item1><p><label>1.</label>....</p></item1>

第二个列表应该是

<list2 type=""><item2><p><label>a.</label>....</p></item2>

请参阅下面提到的完整结构:

  <list1 type="numbered">
   <item1><p><label>1.</label>First level item 1st entry</p></item1>
   <item1><p><label>2.</label> First level item 2nd item entry</p>
     <list2 type="alpha">
      <item2><p><label>a.</label> First level item 1st entry</p></item2>
      <item2><p><label>b.</label> First level 2nd item entry</p></item2>
     </list2>
    </item1>
    <item1><p><label>3.</label> First level item 2nd item entry</p></item1>
   </list1>

type中的“ ”的值<list type=" ">应基于 \labelenumi

我正在使用以下 tex 编码

\documentclass{book}
\begin{document}
\begin{enumerate}
\item First level item 1st entry
\item First level item 2nd item entry
\begin{enumerate}
\item second level item 1st entry
\item second level item 2nd entry
\end{enumerate}
\item First level item 3rd item entry
\end{enumerate}

我在 cfg 文件中使用了以下编码

\newcounter{countlist}  

\ConfigureList{enumerate}
          {\stepcounter{countlist}\EndP
            \HCode{<list\thecountlist\space type="numbered">}}
          {\EndP\HCode{</list\thecountlist>}\addtocounter{countlist}{-1}}
          {\HCode{<item\thecountlist><p>}}
          {\HCode{</p></item\thecountlist>}} 

但我无法获得正确的结构,请建议如何解决问题

答案1

第五个参数\ConfigureList插入在项目标签之后,而不是项目末尾。您需要使用一个小技巧来正确关闭项目:

\Preamble{xhtml}
\newcounter{countlist}  

\def\clearfinish{\def\finishitem{}}
\ConfigureList{enumerate}
{\stepcounter{countlist}\EndP
 \HCode{<list\thecountlist\space type="numbered">}%
 \clearfinish%
}
{\EndP\finishitem\HCode{</list\thecountlist>}%
 \addtocounter{countlist}{-1}%
\clearfinish}
{\finishitem\HCode{<item\thecountlist>}\par\ShowPar\HCode{<label>}%
 \def\finishitem{\EndP\HCode{</item\thecountlist>}}
}
{\HCode{</label>}} 

\begin{document}
\EndPreamble

在此示例中,使用了辅助宏\finishitem,它保存了 的结束标记</item[number]>。它用在项目开始处和环境结束时,您要在其中插入结束标记。当列表开始时,它是空的,因为您不想在此时关闭任何项目。它被定义为在项目配置中插入结束标记。

我引入的另一个变化是使用tex4ht \par而不是显式<p>标记。这样,您可以在一个项目中处理多个段落,而使用显式标记则无法做到这一点。

结果:

  <list1 type="numbered"><item1>
     <!--l. 4--><p class="noindent" ><label>
  1. </label>First level item 1st entry
     </p></item1><item1>
     <!--l. 5--><p class="noindent" ><label>
  2. </label>First level item 2nd item entry
         </p><list2 type="numbered"><item2>
         <!--l. 7--><p class="noindent" ><label>
      (a) </label>second level item 1st entry
         </p></item2><item2>
         <!--l. 8--><p class="noindent" ><label>
     (b) </label>second level item 2nd entry</p></item2></list2>
     </item1><item1>
     <!--l. 10--><p class="noindent" ><label>
  3. </label>First level item 3rd item entry</p></item1></list1>

相关内容