Adjustbox 的框架选项在 tex4ht 中不起作用

Adjustbox 的框架选项在 tex4ht 中不起作用

此 MWE 在 pdf 中有效。它将框架放在图像周围。但在 HTML 中,我看到没有框架产生

\documentclass[12pt]{article}%
\usepackage{graphicx}
\usepackage[export]{adjustbox}%for frame option
\begin{document}
\includegraphics[width=0.5\textwidth,frame=0.1in]{A.png}
\end{document}

使用编译lualatex foo4.tex给出

Mathematica 图形

但使用编译时make4ht foo4.tex会出现这种情况。没有框架,右下角有一些划痕线。

Mathematica 图形

生成的源代码看起来有误

<!DOCTYPE html> 
<html lang="en-US" xml:lang="en-US" > 
<head><title></title> 
<meta  charset="iso-8859-1" /> 
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" /> 
<meta name="viewport" content="width=device-width,initial-scale=1" /> 
<link rel="stylesheet" type="text/css" href="foo4.css" /> 
<meta name="src" content="foo4.tex" /> 
</head><body 
>
<!--l. 10--><p class="noindent" > <img 
src="A.png" alt="PIC"  
 />_
     __
</p>

</body> 
</html>

我知道我可以用来fbox在图像周围放置一个框架,这在 tex4ht 中有效:

 \fbox{\includegraphics[width=0.5\textwidth]{A.png}}

但我想将frame其用于其他目的。我总是可以fbox在 tex4ht 模式下使用,也可以frame在 pdf 模式下使用。因此,我有一个解决方法,但希望避免这种复杂情况,并在可能的情况下对两者使用相同的代码。

有没有办法frame也可以在 tex4ht 中工作?

附言:我无法使用 latex 附带的示例图像来进行上述 MWE,因为出于某种原因,这些图像不适用于 tex4ht。看起来是路径问题,所以我使用了我自己的图像。A.png如果您需要使用它,这里是副本,或者可以使用任何其他图像。

https://www.12000.org/tmp/051119/A.png

答案1

您可以尝试这个版本adjustbox.4ht

\NewConfigure{AdjustboxValignTop}{1}
\NewConfigure{AdjustboxValignMiddle}{1}
\NewConfigure{AdjustboxValignCenter}{1}
\NewConfigure{AdjustboxValignBottom}{1}
\pend:def\adjbox@valign@t{\a:AdjustboxValignTop}
\pend:def\adjbox@valign@t{\a:AdjustboxValignTop}
\pend:def\adjbox@valign@T{\a:AdjustboxValignTop}
\pend:def\adjbox@valign@M{\a:AdjustboxValignMiddle}
\pend:def\adjbox@valign@m{\a:AdjustboxValignMiddle}
\pend:defI\adjbox@valign@c{\a:AdjustboxValignCenter}
\pend:def\adjbox@valign@b{\a:AdjustboxValignBottom}
\pend:def\adjbox@valign@B{\a:AdjustboxValignBottom}

% make an unique ID for each adjustbox environment
\newcounter{adjustbox@4ht}
\def\update:adjustbox:id{\stepcounter{adjustbox@4ht}\def\AdjustboxId{adjustbox-\arabic{adjustbox@4ht}}}

\NewConfigure{Adjustbox}{2}
\def\:tempa#1#2#3#4{\update:adjustbox:id\a:Adjustbox\o:adjbox@@frame:{#1}{#2}{#3}{#4}\b:Adjustbox}
\HLet\adjbox@@frame\:tempa

% suppress trying to draw the frame
\def\adjbox@boxframe#1#2#3{}

% we should redefine all adjustbox environments, they may produce unvanted artifacts, math mode, etc.
% keys are set, so it should be possible to extract  colors or frame size in theory
% I just haven't found a working solution yet
\renewenvironment{adjustbox}[1]{\update:adjustbox:id\adjbox@setkeys{#1}\a:Adjustbox}{\b:Adjustbox}

% definitions for macros
% we don't save any colors and just use one configuration for all box types.  
\def\@bgcolorbox#1{\update:adjustbox:id\a:Adjustbox\BOXCONTENT\b:Adjustbox}
\def\@foregroundbox#1#2#3{\update:adjustbox:id\leavevmode\a:Adjustbox\BOXCONTENT\b:Adjustbox}
\def\@backgroundbox#1#2#3{\update:adjustbox:id\leavevmode\a:Adjustbox\BOXCONTENT\b:Adjustbox}

\Hinput{adjustbox}

它为每个调整框生成唯一的 ID,因此可以使用 CSS 对其进行样式设置。配置如下所示:

\Preamble{xhtml}

\Configure{halignTR}{}
\Configure{AdjustboxValignTop}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:top;}}}
\Configure{AdjustboxValignMiddle}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:middle;}}}
\Configure{AdjustboxValignCenter}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:middle;}}}
\Configure{AdjustboxValignBottom}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:bottom;}}}
\makeatletter
\def\pttoem#1{\strip@pt\dimexpr#1/\f@size em}
\Configure{Adjustbox}
 {\IgnorePar\EndP\IgnorePar\HCode{<div class="adjustbox" id="\AdjustboxId">}}
 {\Css{\#\AdjustboxId{border: \pttoem{\fboxrule} solid black;padding: \pttoem{\fboxsep};}}\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}
\makeatother
\begin{document}
\EndPreamble

有趣的是:

\def\pttoem#1{\strip@pt\dimexpr#1/\f@size em}
\Configure{Adjustbox}
 {\IgnorePar\EndP\IgnorePar\HCode{<div class="adjustbox" id="\AdjustboxId">}}
 {\Css{\#\AdjustboxId{border: \pttoem{\fboxrule} solid black;padding: \pttoem{\fboxsep};}}\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}

它定义了\pttoem将 TeX 尺寸转换为 的命令em,因为在 CSS 中使用相对单位更好。为每个 adjustbox 构建<div class="adjustbox">具有唯一 ID 的\AdjusboxID。为每个框创建具有边框大小和填充的 CSS。

结果如下:

在此处输入图片描述

相关内容