来自评论的解决方案

来自评论的解决方案

我在用潘多克将 .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:hooknameb: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" >&#8220;Alas, this is a quote,&#8221; 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 的链接答案。如果您使用斜体和粗体字体,可能还需要为它们创建类似的文件。

相关内容