背景
文档中混合了 SVG 和 PNG 图像。
问题
更改参数会\setupexternalfigure
同时影响 SVG 和 PNG 图像。
代码
考虑以下代码:
\setupexternalfigures[
order={svg,pdf,png,jpg},
location={local,default,global},
directory={images},
maxwidth=\textwidth,
maxheight=0.4\textheight
]
我想更改maxheight
PNG 图像的选项,例如:
\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
生成: