配置 tex4ht/oolatex 输出

配置 tex4ht/oolatex 输出

我使用该命令mk4ht oolatex将简单的 latex 文档转换为 odt。到目前为止,它对基本文档的转换效果很好。但是,tex4ht 会在某些环境之前和之后插入分节符,例如,\begin{quote}\end{quote}产生分节符。<text:section ...>转换后的 odt 文件中的标签(或更准确地说是 content.xml)似乎是造成这种情况的原因。

最小示例:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}
This is a normal paragraph.

\begin{quote}
This is an blockquote.
\end{quote}

Another paragraph.
\end{document}

如果我们编译它,mk4ht oolatex我们最终会得到这个(在 content.xml 中):

<text:p text:style-name="Text-body">This is a normal paragraph.&#xD;
   </text:p> 
<text:section
 text:style-name="begin-end-env" text:name="begin-end-env-1"><text:p text:style-name="begin-env-p"/>
     <!--l. 10
--><text:p text:style-name="quote">This is an blockquote.</text:p>
<text:p text:style-name="end-env-p"/></text:section>
<!--l. 13
--><text:p text:style-name="First-line-indent">   Another paragraph.&#xD;
   </text:p> 

相比之下,用 Libreoffice 编写的类似文档中的这些段落如下所示(在 content.xml 中):

<text:p text:style-name="P1">This is a normal paragraph.</text:p>
<text:p text:style-name="Quotations">This is an blockquote. </text:p>
<text:p text:style-name="P1">Another normal paragraph.</text:p>

在 ooffice.4ht 中,我们发现以下定义似乎是造成这种行为的原因:

\ConfigureEnv{quote}
   {\ifvmode \IgnorePar\fi \EndP
\ifnum \BegEnd:D=0
   \gHAdvance\BegEnd:N by 1
\HCode{<text:section
        text:style-name="begin-end-env"
        text:name="begin-end-env-\BegEnd:N"
       >%
       <text:p text:style-name="begin-env-p" ></text:p>}%
%
\else
   \gHAdvance\BegEnd:N by 1
\hbox{\HCode{<text:p><draw:frame
                draw:name="begin-end-env-\BegEnd:N"
                 draw:style-name="env-frame"
                 text:anchor-type="as-char"
%                 fo:min-width="0.14in"
                 svg:width="90\%"
                 draw:z-index="0"
       >
       <draw:text-box
%           fo:min-height="0.14in"
       >}}%
%
\fi
\gHAdvance\BegEnd:D by 1
}
   {\gHAdvance\BegEnd:D by -1
\ifvmode \IgnorePar\fi\EndP
\ifnum \BegEnd:D=0
   \HCode{<text:p text:style-name="end-env-p" ></text:p></text:section>}%
%
\else
   \hbox{\HCode{</draw:text-box>
</draw:frame></text:p> }}%
%
\fi
\par\ShowPar}
   {\EndP \ifvmode \IgnorePar\fi
    \bgroup \Configure{HtmlPar}
   {\EndP \HCode{<!--l. \the\inputlineno-->%
%
                 <text:p text:style-name="quote\if@rl-rtl\fi
"
                         >}}
   {\EndP \HCode{<!--l. \the\inputlineno-->%
%
                 <text:p text:style-name="quote\if@rl-rtl\fi
"
                          >}}
   {\HCode{</text:p>}}
   {\HCode{</text:p>}}%
%
   }
   {\IgnorePar\EndP \egroup \ShowPar \ShowIndent}

所以,我想我们应该改变这个定义,但该怎么做呢?我们怎样才能取消那些不需要的分节符呢?

答案1

\ConfigureEnv{quote}配置主要做两件事。它在整个环境的内容周围插入部分并配置为每个段落HtmlPar插入<text:p text:style-name="quote">。因此,解决您的问题很简单:只需删除插入部分的代码并保留段落配置。

将以下代码保存为myconfig.cfg

\Preamble{xhtml}

  \makeatletter
\ConfigureEnv{quote}
   {\ifvmode \IgnorePar\fi \EndP}
   {\ifvmode \IgnorePar\fi\EndP\par\ShowPar}
   {\EndP \ifvmode \IgnorePar\fi
    \bgroup \Configure{HtmlPar}
   {\EndP \HCode{<!--l. \the\inputlineno-->%
   <text:p text:style-name="quote\if@rl-rtl\fi">}}
   {\EndP \HCode{<!--l. \the\inputlineno-->%
   <text:p text:style-name="quote\if@rl-rtl\fi">}}
   {\HCode{</text:p>}}
   {\HCode{</text:p>}}%
   }
   {\IgnorePar\EndP \egroup \ShowPar \ShowIndent}
\makeatother
\begin{document}

\EndPreamble

并使用编译文档

mk4ht oolates filename myconfig

它将产生以下结果:

<!--l. 5--><text:p text:style-name="Text-body">This is a normal paragraph.
  </text:p>
 <!--l. 8--><text:p text:style-name="quote">This is an blockquote.</text:p>
<!--l. 11--><text:p text:style-name="First-line-indent">   Another paragraph. </text:p>

要配置您的引文的外观,您可以修改\ConfigureOO{quote}其中的内容ooffice.4ht。您也可以在配置文件中进行以下修改:

\Preamble{xhtml}

  \makeatletter
\ConfigureEnv{quote}
   {\ifvmode \IgnorePar\fi \EndP}
   {\ifvmode \IgnorePar\fi\EndP\par\ShowPar}
   {\EndP \ifvmode \IgnorePar\fi
    \bgroup \Configure{HtmlPar}
   {\EndP \HCode{<!--l. \the\inputlineno-->%
   <text:p text:style-name="quote\if@rl-rtl\fi">}}
   {\EndP \HCode{<!--l. \the\inputlineno-->%
   <text:p text:style-name="quote\if@rl-rtl\fi">}}
   {\HCode{</text:p>}}
   {\HCode{</text:p>}}%
   }
   {\IgnorePar\EndP \egroup \ShowPar \ShowIndent}
\ConfigureOO{quote}{\Hnewline
<style:style style:name="quote"
             style:family="paragraph"
             style:parent-style-name="Text-body"
             style:next-style-name="Text-body">\Hnewline
<style:paragraph-properties  fo:margin-left="2cm"
             fo:margin-right="1cm"
             fo:margin-top="0.199cm"
             fo:margin-bottom="0.199cm"
             fo:text-indent="0cm"
             style:auto-text-indent="false"/>\Hnewline
</style:style>
\Hnewline <style:style style:name="quote-trl"
             style:family="paragraph"
             style:parent-style-name="Text-body-trl"
             style:next-style-name="Text-body-trl">\Hnewline
<style:paragraph-properties  fo:margin-left="1cm"
             fo:margin-right="1cm"
             fo:margin-top="0.199cm"
             fo:margin-bottom="0.199cm"
             fo:text-indent="0cm"
             style:auto-text-indent="false"
             fo:text-align="end"
             style:writing-mode="rl-tb"  />\Hnewline
</style:style>
\Hnewline
}
\makeatother
\begin{document}

\EndPreamble

在此示例中,我将左边距设置为 2 厘米:

在此处输入图片描述

相关内容