![使用 htlatex 从 awesomebox 中获取文本颜色](https://linux22.com/image/414817/%E4%BD%BF%E7%94%A8%20htlatex%20%E4%BB%8E%20awesomebox%20%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%96%87%E6%9C%AC%E9%A2%9C%E8%89%B2.png)
我正在尝试使用 将使用该包的 TeX 文档转换awesomebox
为 HTML htlatex
。虽然我没想到它能立即使用,可能需要我自己配置一些环境,但它目前给我的错误让我感到惊讶:
! Undefined control sequence.
\n:@textcolor: ...e {\protect \a:textcolor \color
#1{#2}#3\protect \b:textco...
l.14 \notebox{test}
基于此,似乎该\textcolor
命令导致了问题(或者至少这似乎是文本颜色定义?)
但如果我\textcolor
直接使用,那么一切都很好(即注释掉\notebox
下面文件中的行)。
最小(不)工作示例:
\documentclass[a4paper,twoside,openright]{book}
\usepackage[greek,british]{babel}
\usepackage{xcolor}
\usepackage{awesomebox}
\setlength{\aweboxleftmargin}{9mm}
\setlength{\aweboxsignraise}{-5mm}
\makeatletter
\begin{document}
\textcolor{green}{hi}
\notebox{test} % Comment out this line and it works just fine, but with it you get an error for textcolor
\end{document}
有什么想法我可以做些什么来解决这个问题?
答案1
使用当前的 TeX Live 2020 时我没有收到此错误。这可能是过去已修复的一些包冲突。
无论如何,TeX4ht 不支持awesomebox
,所以这需要一些工作。我想出了以下解决方案。将其另存为awesomebox.4ht
:
\NewConfigure{awesomebox}{3}
\newcounter{awesomebox@cnt}
\RenewDocumentCommand \awesomebox { O{abvrulecolor} O{} o m m m +m }{%
\stepcounter{awesomebox@cnt}
\def\awesomebox@id{awesomebox-\arabic{awesomebox@cnt}}
\extractcolorspec{#1}{\tsf@color}%
\expandafter\convertcolorspec\tsf@color{HTML}\tsf@color%
\a:awesomebox
\IfValueTF {#3}
{ #3 \\ #2 \textcolor{#6}{\Huge#5}\b:awesomebox #7 #2}
{ #2 \textcolor{#6}{\Huge#5}\b:awesomebox #7 #2}
\c:awesomebox
}
\Configure{awesomebox}{%
\Css{\#\awesomebox@id\space .icon{border-right:4px solid \#\tsf@color;}}
\ifvmode\IgnorePar\fi\EndP%
\HCode{<div class="awesomebox" id="\awesomebox@id"><div class="icon">}%
\Picture+{}%
}{\EndPicture%
\HCode{</div><div class="boxcontent">}%
\par%
}{%
\ifvmode\IgnorePar\fi\EndP%
\HCode{</div></div>}%
}
\Css{.awesomebox{display:grid; grid-template-columns: 90px auto;margin-top:1rem;margin-bottom:1rem;}}
\Css{.awesomebox .icon{padding-right:0.5rem;margin-right:0.5rem;text-align:center;}}
\Css{.awesomebox .boxcontent{vertical-align:top;}}
它重新定义\awesomebox
命令以插入 HTML 标签而不是默认代码。重新定义还为每个框生成唯一 ID - 我们需要它才能将颜色规则应用于每个框。规则颜色转换为可在 CSS 中使用的 RGB 值并保存在\tsf@color
宏中。\a:awesomebox
和\b:awesomebox
是\c:awesomebox
用于插入 HTML 代码的宏。它们使用 声明\Configure{awesomebox}
。
\Css{\#\awesomebox@id\space .icon{border-right:4px solid \#\tsf@color;}}
这声明了彩色条。
\HCode{<div class="awesomebox" id="\awesomebox@id"><div class="icon">}%
这将插入<div>
包含整个框的元素。图标和文本都包含在另一个<div>
元素中,并带有icon
和boxcontent
类。
\Picture+{} ... \EndPicture
这会将包含的所有代码转换为图像。它会将图标转换为图像。
\Css{.awesomebox{display:grid; grid-template-columns: 90px auto;margin-top:1rem;margin-bottom:1rem;}}
\Css{.awesomebox .icon{padding-right:0.5rem;margin-right:0.5rem;text-align:center;}}
\Css{.awesomebox .boxcontent{vertical-align:top;}}
这为框设置了样式。我们使用 CSS 网格将框显示为表格。图标宽度为 90px,文本内容根据需要调整大小。
还有一个小问题,TeX4ht 中没有 Fontawesome 字体的支持文件,我们需要提供一些虚拟文件来抑制错误信息,将以下内容保存到 和fa5free1solid.htf
中fa5free1solid.htf
:
.lm-ec
这是我添加更多示例框的示例:
\documentclass[a4paper,twoside,openright]{book}
\usepackage[greek,british]{babel}
\usepackage{xcolor}
\usepackage{awesomebox}
\setlength{\aweboxleftmargin}{9mm}
\setlength{\aweboxsignraise}{-5mm}
\usepackage{lipsum}
\makeatletter
\begin{document}
\textcolor{green}{hi}
\notebox{test} % Comment out this line and it works just fine, but with it you get an error for textcolor
\tipbox{\lipsum[1-2]}
\warningbox{\lipsum[3]}
\end{document}
结果如下: