背景

背景

背景

许多图形(插图和图表)都保存为 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

使用您自己的图像覆盖pdfdefault转换器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

相关内容