配置 htlatex 以用于嵌套小页面或浮动环境之外的小页面

配置 htlatex 以用于嵌套小页面或浮动环境之外的小页面

我正在尝试做类似的事情这篇关于使用 htlatex 配置小页面的文章。但是,我的小页面不在图形环境中,因此应用float: rightcss 的策略div.minipage:last-child不再可行。

我正在使用上面答案中的确切.cfg文件,并且我的 LaTeX 文档的格式如下:

\documentclass{article}
\usepackage{blindtext}
\begin{document}
    \noindent Text before.\medskip
    
    \noindent
    \begin{minipage}[t]{0.4\textwidth}
        \blindtext
    \end{minipage}
    \hfill
    \begin{minipage}[t]{0.5\textwidth}
        \blindtext  
    \end{minipage}
    
    \medskip \noindent Text after
\end{document}

当然,第二个小页面不会向右浮动,因为它不是 DOM 中任何元素的子元素。

因此,由于没有更好的主意,我尝试嵌套小页面

\documentclass{article}
\usepackage{blindtext}
\begin{document}
    \noindent Text before.\medskip
    
    \noindent
    \begin{minipage}[t]{1.0\textwidth}
        \begin{minipage}[t]{0.4\textwidth}
            \blindtext
        \end{minipage}
        \hfill
        \begin{minipage}[t]{0.5\textwidth}
            \blindtext  
        \end{minipage}
    \end{minipage}
    
    \medskip \noindent Text after
\end{document}

这几乎与预期一致,只是在生成的 CSS 中,最外层迷你页面 minipage1 与第二个子迷你页面 minipage3 的宽度相同。宽度应该是 100%,但事实并非如此。

#minipage2{width:39.99939%;}
#minipage3{width:50%;}
#minipage1{width:50%;}

答案1

更新:此版本的配置文件包含但可以找到修复版本这里

尝试这个配置文件:

\Preamble{xhtml}
\makeatletter
% to strip fraction from \textwidth
\def\striptextwidth#1\textwidth{#1}
% we must refer to minipage from the css file, because tags are beeing
% written before we know dimensions
\newcount\mini@count
% save original minipage
\let\oldiimini\@iiiminipage
% redefine minipage
\def\@iiiminipage#1#2[#3]#4{%
% calculate dimensions and save it to macro
\edef\miniwidth{\strip@pt\dimexpr(\striptextwidth#4pt)*100\relax\%}
\Css{\#minipage\the\mini@count{width:\miniwidth;}}%
\oldiimini{#1}{#2}[#3]{#4}
}

\ConfigureEnv{minipage}{\advance\mini@count by 1\relax\ifvmode\IgnorePar\fi\EndP\HCode{<div class="minipage" align="center" id="minipage\the\mini@count" style="border:1px solid black;">}}
{\ifvmode\IgnorePar\fi\EndP\HCode{</div>\Hnewline}%
% we must write dimension here to the css file
}{}{}
\makeatother
\Css{div.minipage {
 float: left; 
 } 
}
\Css{div.minipage:last-child {
 clear: none; 
 float: right; 
 }
}
\Css{ div.minipage + :not(.minipage) {clear:both;overflow:auto;width:100\%;}}
\begin{document}
\EndPreamble

我只改变了两件事:

当前小页面的尺寸已预先写入CSS文件中:

\def\@iiiminipage#1#2[#3]#4{%
% calculate dimensions and save it to macro
\edef\miniwidth{\strip@pt\dimexpr(\striptextwidth#4pt)*100\relax\%}
\Css{\#minipage\the\mini@count{width:\miniwidth;}}%
\oldiimini{#1}{#2}[#3]{#4}
}

原始版本的问题在于该\miniwidth命令是全局的,因此当您嵌套了小页面时,定义为最后一个小页面的值会覆盖应该用于顶部小页面的值。现在不会发生这种情况,因为它会尽快使用。

将页面布局从浮动切换到正常的 CSS 代码现在使用:not选择器,因此它适用于 minipage 之后的所有元素,只要它不是另一个 minipage:

 \Css{ div.minipage + :not(.minipage) {clear:both;overflow:auto;width:100\%;}}

结果如下:

在此处输入图片描述

相关内容