我在此链接中找到了如何避免已转换的方程式:避免在 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
转换,如下所示:png
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{"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
此配置转换pdf
为png
使用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