我使用该命令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.
</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.
</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 厘米: