如何将非涂鸦文件添加到基于涂鸦的网站

时间:2016-09-29 14:00:50

标签: html racket scribble

我可以使用image在我的涂鸦文档中嵌入图像,渲染功能会将其复制到目标目标。现在,我还希望包含我的文档不是图像的文件,例如可以下载的MP3或PDF文件。

此外,我不能将该文件包含在源文件夹中并链接到该文件夹​​,因为如果我将文档呈现到不同的目标文件夹中,则不会将其复制。

最后,我知道我可以手动创建目标目录,并将文件粘贴到那里。或者我可以修改我用来构建文档以复制文件的任何文件。这并不令人满意,因为现在我必须在两个地方跟踪图像。 .scrbl源文件,目标目录或构建文件。

那么,在涂鸦中是否有一种方法可以包含一个非涂鸦(或图像)文件,如MP3或PDF,以便渲染功能知道抓取它并将其包含在文档中?

2 个答案:

答案 0 :(得分:3)

虽然它有点像kludge,但您可以将imagehyperlink结合使用,以获得所需的结果。您可以使用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"只是我给风格的名字。

这可确保文件都移动到根输出文件夹并正确链接。

相关问题