我在用潘多克将 .tex 文档转换为 html/epub。在我的文本中,我经常使用自定义命令,
\subchpbreak
其定义如下:
\newcommand{\subchpbreak}{\fancybreak{\rotatebox[origin=c]{90}{\S}}}
我想知道是否有一种简单的方法可以让自定义命令(即字符串\subchpbreak
被转换后的或正则表达式解释为我可以用 css 设置样式的东西替换,例如
<div class='subchpbreak'>&167;</div>
我知道我可以在我的 tex 文件中进行字符串替换,但我宁愿不这样做。
也许我应该编写一个 bash 脚本来执行字符串替换,然后运行 Pandoc?或者有更好的方法吗?
来自评论的解决方案
在评论中,有人建议我使用htlatex
而不是 pandoc。这确实很好地解决了自定义命令问题。但是,我遇到了“and”丢失的问题。
罪魁祸首似乎是\usepackage{paratype}
。下面的示例在没有字体包的情况下按预期工作,但忽略了引号。
\documentclass[12pt, oneside]{memoir}
\usepackage[utf8]{ inputenc }
\usepackage{ graphicx }
\usepackage{lipsum}
% \usepackage{paratype}
\usepackage{xcolor,fix-cm}
\definecolor{numbercolor}{gray}{0.7}
\newcommand{\subchpbreak}{\fancybreak{\rotatebox[origin=c]{90}{\S}}}
\begin{document}
\chapter{A chapter}
\lipsum[1]
``Alas, this is a quote,'' said the idiot.
\lipsum[2]
\subchpbreak
\lipsum[3]
\end{document}
谢谢您的任何回复!
答案1
你可以很容易地使用 支持自定义命令tex4ht
。只需将命令声明移至独立包即可,例如mycommands.sty
:
\newcommand{\subchpbreak}{\fancybreak{\rotatebox[origin=c]{90}{\S}}}
并创建具有相同名称但.4ht
扩展名的文件mycommands.4ht
:
\NewConfigure{subchpbreak}{1}
\renewcommand\subchpbreak{\a:subchpbreak}
\Configure{subchpbreak}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class='subchpbreak'>&\#167;</div>}}
\Css{.subchpbreak{font-size:1.2em;}}
为了实现可配置性,我们需要声明一些将插入 html 代码的钩子。这些钩子将插入到重新定义的命令中。在本例中,我们声明了新配置,其中subchpbreak
包含一个钩子,因为您的命令不带参数。对于一个参数的命令,您需要两个钩子,分别插入在参数之前和之后,对于两个参数,您需要三个钩子,依此类推。
然后将钩子插入到重新定义的命令中,钩子被命名为\a:hookname
、b:hookname
等。在我们的例子中,我们只使用一个钩子,所以它只是\a:subchpbreak
。
钩子配置有
\Configure{subchpbreak}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class='subchpbreak'>&\#167;</div>}}
我们需要使用
\ifvmode\IgnorePar\fi\EndP
因为<p>
元素被插入到每个段落中,但我们不希望它们围绕我们的<div>
您可以.css
使用命令将内容添加到文件\Css
。
生成的 html:
<!--l. 15--><p class="noindent" >“Alas, this is a quote,” said the idiot.
</p>
...
</p>
<div class='subchpbreak'>§</div>
<!--l. 21--><p class="indent" >
关于字体问题,您应该使用\usepackage[T1]{fontenc}
最佳的 unicode 支持。使用paratype
字体时,您可能会在终端输出中看到以下消息:
--- warning --- Couldn't find font `PTSerif-Regular-tlf-t1.htf'
对于每种字体,.htf
文件必须存在。我最近提供了一个解决方案Droid sans,根据您的情况,您可以创建以下PTSerif-Regular-tlf-t1.htf
文件:
.lm-ec
htfcss: PTSerif-Regular-tlf-t1 font-family: 'PT Serif', serif;
有关详细信息,请参阅有关 Droid Sans 的链接答案。如果您使用斜体和粗体字体,可能还需要为它们创建类似的文件。