4

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

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

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

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

4

2 回答 2

3

虽然它有点杂乱无章,但您可以结合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。)

于 2016-09-29T14:07:49.597 回答
2

我接管了某人的代码库,他们使用Leif Andersen 提供的上面/下面的解决方案解决了这个问题。但是,当链接到属于源目录中子文件夹的文件时,这会导致问题。有问题的文件已移至输出目录的根目录,而超链接未正确更新。相反,我发现了以下更少的 hack-y 解决方案。

您可以利用模块的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"只是我给风格起的名字。

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

于 2018-05-16T16:47:45.800 回答