使用 htlatex 从 awesomebox 中获取文本颜色

使用 htlatex 从 awesomebox 中获取文本颜色

我正在尝试使用 将使用该包的 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>元素中,并带有iconboxcontent类。

\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.htffa5free1solid.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}

结果如下:

在此处输入图片描述

相关内容