避免在 htlatex 中已经转换的数字

避免在 htlatex 中已经转换的数字

我在此链接中找到了如何避免已转换的方程式:避免在 hlatex 中已经转换的方程式。如何在数字转换中使用相同的方法?我的 MWE 是:

\documentclass{book}
\usepackage{graphics}
\begin{document}

Sample Text here.

\begin{figure*}
\includegraphics{Figure1.pdf}
\caption{Figure Caption here.}
\end{figure*}

\begin{figure*}
\includegraphics{Fig2.pdf}
\caption{Figure Caption here.}
\end{figure*}
\end{document}

答案1

我假设您在文件中使用了一些配置进行pdf转换,如下所示:pngcfg

\Preamble{html}
\begin{document}
\makeatletter
% Various helper functions
% default font size
\newcommand\emwidth{16}
\let\emwidth\f@size
% convert pt to rem
\newcommand\CalcRem[1]{\strip@pt\dimexpr(#1)/\emwidth}

\Configure{graphics*}
  {pdf}
   {% you need to coonvert eps to png first
   \Needs{"convert \csname Gin@base\endcsname.pdf  
                           \csname Gin@base\endcsname.png"}% 
    \special{t4ht+@File: \csname Gin@base\endcsname.png}
    \Picture[pict]{\csname Gin@base\endcsname .png
     \space style="width:\CalcRem{\Gin@req@width}em;"
   }%
  }
    \makeatother
\EndPreamble

此配置转换pdfpng使用imagemagick命令convert并包含css用于以em单位计算图像宽度的声明。问题是该命令在每次编译时都会执行。我们可以使用简单的 lua 脚本来检查输入和输出图像的修改时间,并且仅当输入比输出更新时才\Needs执行。convert

文件imgconvert.lua

-- usage: texlua imgconvert input_image output_image
-- this is needed to enable lfs library
kpse.set_program_name("luatex")

-- read file attributes of images to find modification times
local input = arg[1]
local attr_input = lfs.attributes(input)
if not attr_input then 
    print("Cannot read attributes for file: ".. input)
    os.exit(1)
end
local output = arg[2]
local attr_output = lfs.attributes(output) or {}

if attr_input.change > (attr_output.change or 0) then
  -- call convert command
  local command = string.format('convert %s %s', input, output)
  print(command)
  os.execute(command)
else
    print("Converted image ".. output .." is up-to-date")
end

由于这基本上是命令的包装器convert,因此您可以将此脚本用于所支持的所有图像类型imagemagick

现在我们需要修改该cfg文件:

\Preamble{html}
\begin{document}
\makeatletter
% Various helper functions
% default font size
\newcommand\emwidth{16}
\let\emwidth\f@size
% convert pt to rem
\newcommand\CalcRem[1]{\strip@pt\dimexpr(#1)/\emwidth}

\Configure{graphics*}
  {pdf}
   {% you need to coonvert eps to png first
   \Needs{"texlua imgconvert.lua \csname Gin@base\endcsname.pdf  
                           \csname Gin@base\endcsname.png"}% 
    \special{t4ht+@File: \csname Gin@base\endcsname.png}
    \Picture[pict]{\csname Gin@base\endcsname .png
     \space style="width:\CalcRem{\Gin@req@width}em;"
   }%
  }
    \makeatother
\EndPreamble

如果你观察编译日志,你会看到:

System call: texlua imgconvert.lua Fifure1.pdf Fifure1.png
convert Fifure1.pdf Fifure1.png
System return: 0
System call: texlua imgconvert.lua Fig2.pdf Fig2.png
convert Fig2.pdf Fig2.png
System return: 0

在后续运行中:

System call: texlua imgconvert.lua Fifure1.pdf Fifure1.png
Converted image Fifure1.png is up-to-date
System return: 0
System call: texlua imgconvert.lua Fig2.pdf Fig2.png
Converted image Fig2.png is up-to-date
System return: 0

相关内容