我可以使用image
在我的涂鸦文档中嵌入图像,渲染功能会将其复制到目标目标。现在,我还希望包含我的文档不是图像的文件,例如可以下载的MP3或PDF文件。
此外,我不能将该文件包含在源文件夹中并链接到该文件夹,因为如果我将文档呈现到不同的目标文件夹中,则不会将其复制。
最后,我知道我可以手动创建目标目录,并将文件粘贴到那里。或者我可以修改我用来构建文档以复制文件的任何文件。这并不令人满意,因为现在我必须在两个地方跟踪图像。 .scrbl
源文件,目标目录或构建文件。
那么,在涂鸦中是否有一种方法可以包含一个非涂鸦(或图像)文件,如MP3或PDF,以便渲染功能知道抓取它并将其包含在文档中?
答案 0 :(得分:3)
虽然它有点像kludge,但您可以将image
与hyperlink
结合使用,以获得所需的结果。您可以使用image
函数获取render
函数来复制文件,使用hyperlink
添加链接。您的文档将类似于:
Here is a @image{file.mp3}@hyperlink["file.mp3"]{file}.
这是有效的,因为image
函数还希望尝试嵌入扩展列表,但此列表默认为空列表,并且它不会嵌入文件,而只是将其复制到目标中。然后,您可以使用hyperlink
链接到现在复制的file.mp3
文件。
您可以使用以下功能将其合并为一个操作:
(define (embed-file file . content)
(list
(image file)
(apply hyperlink file content)))
现在,您可以在自己的文档中使用embed-file
:
Here is a @embed-file["file.mp3"]{file}.
(我应该注意到这个想法来自Ben Lerner。)
答案 1 :(得分:1)
我接管了某人的代码库,他们使用Leif Andersen提供的solution above/below mine解决了这个问题。但是,这会在链接到源目录中的子文件夹的文件时导致问题。有问题的文件被移动到输出目录的根目录,而超链接没有正确更新。相反,我发现了以下较少的黑客解决方案。
您可以使用link-resource
模块的scribble/html-properties
结构。这需要原始文件的路径。您将此link-resource
放入style
模块的scribble/core
结构中。最后,此样式作为参数传递给hyperlink
。
总而言之,embed-file
功能变为
(define (embed-file file . content)
(apply hyperlink
file
content
#:style (style "place-resources-in-output-folder" ; name
(list (link-resource file)))))
"place-resources-in-output-folder"
只是我给风格的名字。
这可确保文件都移动到根输出文件夹并正确链接。