配置 minipage 环境以合并宽度

配置 minipage 环境以合并宽度

我想配置 tex4ht,使其根据 LaTeX 源中指定的宽度设置 minipage div 类的宽度。以下是我目前所做的:

该 tex 文件是:

\documentclass{article}
\begin{document}
\begin{minipage}[c]{0.6\textwidth}
  Some text
\end{minipage}
\hfill
\begin{minipage}[c]{0.3\textwidth}
  some more text
\end{minipage}
\end{document}

和我的 cfg 文件(灵感来自https://www.mail-archive.com/[电子邮件保护]/msg00764.html) 是:

\Preamble{html}
\Configure{HtmlPar}
{\EndP\Tg<p>}
{\EndP\Tg<p>}
{\HCode{</p>\Hnewline}}
{\HCode{</p>\Hnewline}}
\ConfigureEnv{minipage}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="minipage" align="center" style="width:INSERT WIDTH HERE;">}}{\ifvmode\IgnorePar\fi\EndP\HCode{</div>\Hnewline}}{}{}
\Css{div.minipage {
 float: left; 
 margin: 1ex 1em 1ex 0;
 } 
}
\Css{div.minipage:last-child {
 clear: none; 
 float: right; 
 margin: 1ex 0 1ex 1em;
 }
}
\begin{document}
\EndPreamble

例如,我希望上述 tex 示例中的第一个小页面(宽度为 0.6\textwidth)产生一个宽度为 60% 的对应 div。因此,本质上,参考此示例,我正在寻找一种方法来:

  • 仅从 \begin{minipage}[c]{0.6\textwidth} 中提取“0.6”
  • 乘以 0.6*100 = 60
  • 在 div 的宽度中插入 60 和一个 % 符号

我可能对此有点不适应;我一直在疯狂地学习 tex4ht,但感觉自己对大多数方面都只是一知半解。这个社区的问题和答案对我帮助很大,我真诚地感谢任何有关这个问题的指导。

答案1

这有点复杂,因为minipage这不是通常的环境,而是由几个处理可选参数的宏组成的系统。这是修改后的cfg文件:

\Preamble{html}
\Configure{HtmlPar}
{\EndP\Tg<p>}
{\EndP\Tg<p>}
{\HCode{</p>\Hnewline}}
{\HCode{</p>\Hnewline}}
\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
\xdef\miniwidth{\strip@pt\dimexpr(\striptextwidth#4pt)*100\relax\%}
\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
\Css{\#minipage\the\mini@count{width:\miniwidth;}}%
}{}{}
\makeatother
\Css{div.minipage {
 float: left; 
 margin: 1ex 1em 1ex 0;
 } 
}
\Css{div.minipage:last-child {
 clear: none; 
 float: right; 
 margin: 1ex 0 1ex 1em;
 }
}
\begin{document}
\EndPreamble

我们可以minipage从宏中获取所有参数\@iiiminipage,因此我们必须重新定义它,\textwidth从参数中剥离width,计算百分比并将其保存到宏中,以便我们以后使用它。

不幸的是,我们不能在打开标签中直接使用这个计算值,因为这些是在@iiiminipage调用之前写入的,所以我们必须id为每个生成唯一的属性minipage并将宽度写入css文件。

带边框的结果:

在此处输入图片描述

相关内容