![背景](https://linux22.com/image/282941/%E8%83%8C%E6%99%AF.png)
背景
希望重新创建以下精美的目录,其中从文档中包含的所有图形中随机选择目录中有限数量的图像,而不会重复:
这只是用户可以生成的众多主题中的一个;其他主题在目录中不包含缩略图(即图像仅出现一次)。另一个主题可能引用索引或后记部分中的图像。还有一个主题可能引用章节页面上的图像(提供在该章节后面找到的随机图像选择)。
注意:以上是一个简单的例子;我知道这四幅图像是重复的......
例子
\setupexternalfigures[
order={svg,pdf,png,jpg},
location=global,
wfactor=fit,
]
\setupcaptions[location=,]
\define[1]\Photograph{%
\placefigure[]{}{%
\externalfigure[#1][
%width=\dimexpr.25\paperwidth
]
}
}
\starttext
% Thumbnail versions of referenced images are placed above the ToC.
Table of Contents
\placecontent
\startchapter
Final board position:
\Photograph{http://warp.povusers.org/pics/GobanPic.jpg}
\stopchapter
\startchapter
Opening problem #1:
\Photograph{http://fc00.deviantart.net/fs14/i/2007/091/c/8/Goban_Wall_by_zipper.jpg}
\stopchapter
\startchapter
Opening problem #2:
\Photograph{http://upload.wikimedia.org/wikipedia/commons/3/38/Goban2.png}
\stopchapter
\startchapter
Close up:
\Photograph{http://www.bengozen.com/wp-content/uploads/2014/01/leathergoban05.jpg}
\stopchapter
\stoptext
想法
该算法可能需要 Lua:
externalfigure
创建文档中所有用法的数组。- 从文档中随机删除一个图形。
- 更新文档以嵌入图像(缩放和裁剪)。
另一个想法是在每个文档的开头(文本之前)创建图像列表。例如:
\def\photo1{http://warp.povusers.org/pics/GobanPic.jpg}
\def\photo2{http://fc00.deviantart.net/fs14/i/2007/091/c/8/Goban_Wall_by_zipper.jpg}
\def\photo3{http://upload.wikimedia.org/wikipedia/commons/3/38/Goban2.png}
\def\photo4{http://www.bengozen.com/wp-content/uploads/2014/01/leathergoban05.jpg}
\definenumber[photos][way=bytext,prefix=no]
\getnumber[photos]
% Embeds the images in order
\define\Photograph{%
\placefigure[]{}{%
\incrementnumber[photos]
\externalfigure[\photo\getnumber[photos]][
]
}
}
\starttext
% Thumbnail versions of referenced images are placed above the ToC.
Table of Contents
\placecontent
\startchapter \Photograph \stopchapter
\startchapter \Photograph \stopchapter
\startchapter \Photograph \stopchapter
\startchapter \Photograph \stopchapter
\stoptext
问题
如何在第一次引用文档之前嵌入图像的缩略图版本?
答案1
这更像是一个评论,而不是一个完整的答案,但我将其写为答案,以便代码易于理解。
首先,除了\def\photo1{....}
和之外\Photograph
,我建议执行以下操作:
\useexternalfigure[photo1][http://warp.povusers.org/pics/GobanPic.jpg]
\starttext
...
\externalfigure[photo1]
...
\stopexternalfigure
现在,如果您愿意预先列出所有图形,那么一个可能的解决方案是创建所有图形的 lua 表。
\startluacode
userdata = userdata or {}
userdata.figures = {
["photo1"] = {http://warp.povusers.org/pics/GobanPic.jpg},
["photo2"] = {...},
...
}
\stopluacode
然后创建一个 lua 函数,该函数接受一个数字表并进行调用\useexternalfigure
(伪代码,未经测试)
\startluacode
userdata.initializefigures = function(figures)
for key, value in pairs(figures) do
context.useexternalfigure( {key}, {value})
end
end
\stopluacode
接下来定义一个缩放并包含图形的 lua 函数:
\startluacode
userdata.includefigures = function(figures)
for key,value in pairs(figures) do
-- randomly select images, if needed
context.startplacefigure()
context.externalfigure{key}
context.stopplacefigure()
end
end
\stopluacode
在主文档中(即目录之外),使用:
\externalfigure[photo1]