背景

背景

背景

文档中混合了 SVG 和 PNG 图像。

问题

更改参数会\setupexternalfigure同时影响 SVG 和 PNG 图像。

代码

考虑以下代码:

\setupexternalfigures[
  order={svg,pdf,png,jpg},
  location={local,default,global},
  directory={images},
  maxwidth=\textwidth,
  maxheight=0.4\textheight
]

我想更改maxheightPNG 图像的选项,例如:

\setupexternalfigure[
  method=png,
  maxwidth=\textwidth,
  maxheight=\textheight,
]

然而,这也会影响 SVG 图像。

问题

如何根据图像类型应用不同的外部图形设置?

答案1

我们可以使用定义一个新的外部图形类型文件\defineexternalfigure,然后覆盖\externalfigure以在选定的文件为文件时使用新的图形类型png

% Requires LMTX/MkXL!
\setupexternalfigure[
    width=1em,
    height=1em,
    order={svg,pdf,png,jpg},
    location={local,default,global},
]

\defineexternalfigure[png][
    width=\textwidth,
    height=\textheight,
]

\unprotect

\let\old_externalfigure=\externalfigure

\tolerant\def\externalfigure[#1]#,[#2]#,[#3]{%
    \doifelseinstring{.png}{#1}{%
        \old_externalfigure[#1][png][#2]%
    }{%
        \doifelsefileexists{#1.png}{%
            \old_externalfigure[#1.png][png][#2]%
        }{%
            \old_externalfigure[#1][#2][#3]%
        }%
    }%
}
\protect

\starttext
    \externalfigure[cow]
    \externalfigure[cow.pdf]
    \externalfigure[mill]
    \externalfigure[mill.png]
    \externalfigure[mill.png][width=5em]
    \externalfigure[cow][png][width=5em]
\stoptext

如果您在 ConTeXt 邮件列表上询问,其他人可能有更简洁的方法来执行此操作。

答案2

来自邮件列表

\setupexternalfigures[
  location={local,global,default},
  width=\textwidth
]
\defineexternalfigure[svg][width=1cm]
\defineexternalfigure[jpg][width=2cm]
\defineexternalfigure[png][width=4cm]

% Won't be applied because there's no process action.
% Default (\textwidth) is used, as defined above.
\defineexternalfigure[pdf][width=6cm]

\starttexdefinition includegraphics #1
  \splitfilename{#1}

  \processaction[\splitofftype][
    jpg=>{\externalfigure[#1][jpg]},
    png=>{\externalfigure[#1][png]},
    svg=>{\externalfigure[#1][svg][conversion=mp]},
    default=>{\externalfigure[#1]},
    unknown=>{\externalfigure[#1]}
  ]
\stoptexdefinition

\starttext
  \includegraphics{kitten.jpg}
  \includegraphics{mill.png}
  \includegraphics{cow.pdf}
  \includegraphics{tiger.svg}
\stoptext

生成:

输出图像

相关内容