我想配置 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
文件。
带边框的结果: