我正在尝试做类似的事情这篇关于使用 htlatex 配置小页面的文章。但是,我的小页面不在图形环境中,因此应用float: right
css 的策略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\%;}}
结果如下: