背景
许多图形(插图和图表)都保存为 CMYK TIFF 文件。ConTeXt 会自动将 TIFF 文件转换为 PDF 文件,然后再将其嵌入到它生成的 PDF 文档中。此任务使用 GraphicsMagick 执行。GraphicsMagick 中有一个错误,会损坏某些 TIFF 文件。
问题
插图以几种不同的方式嵌入到文档中:
\inline*externalfigure[../path/to/file]
\externalfigure[../\BookIllustrationNumber/illustration]
其中\BookIllustrationNumber
是将当前节号用零填充的宏。邮件列表展示了一种使用 ImageMagick 进行转换的方法:https://mailman.ntg.nl/pipermail/ntg-context/2019/096583.html
\startluacode
figures.converters["jpg"]["lowres.jpg"] =
function( oldname, newname, resolution)
os.execute(
string.format(
'convert -density %ix%i "%s" "%s"',
resolution, resolution, oldname, newname
)
)
end
\stopluacode
\starttext
\externalfigure
[cat.jpg]
[conversion=lowres.jpg,resolution=50,width=5cm]
\stoptext
这是可行的,但需要修改现有的外部图形 TeX 代码(\inline
和\externalfigure
)来调用自定义。
问题
如何在不更改宏的情况下指示 ConTeXt 对 TIFF 文件使用 ImageMagick 而不是 GraphicsMagick \externalfigure
?
答案1
使用您自己的图像覆盖pdf
和default
转换器tif
。(实际上覆盖pdf
转换器可能就足够了,但是为了确保我default
也覆盖了转换器)
默认的 ConTeXt cow 是 ab/w 图像,非常适合此测试。我使用 GIMP 生成了一个 tiff 版本。您也可以从此处下载:https://transfer.sh/IRl93/cow.tiff(14 天后过期)。
您还可以通过检查参数是否为空来在转换器中设置默认分辨率。
\startluacode
local function converter(oldname, newname, resolution)
if not resolution or resolution == "" then
resolution = 50
end
os.execute(string.format(
'convert -density %ix%i "%s" "%s"',
resolution, resolution, oldname, newname)
)
end
figures.converters.tif.pdf = converter
figures.converters.tif.default = converter
\stopluacode
\starttext
\externalfigure[cow.tiff]
\stoptext