Racket Scribble,如何添加搜索框?

4
我使用Scribble生成了我的软件包文档。同时,raco将把我的文档集成到Racket自身的文档中,并在页面左上角添加搜索框,您可以在使用"raco docs"时看到。
现在,我想使用Scribble作为文档工具来生成我的独立文档。但是当我使用"Scribble --htmls demo.scribble"时,它不能在页面左上角有搜索框。
如何添加搜索框以使我的文档具有搜索功能?

你是否正在使用 #lang scribble/manual - soegaard
1
我在文档中找不到详细信息。我相信您需要在标题中使用 #:style@title[#:style something]。但是,这里的 something 需要填什么呢?如果您在这里得不到答案,我相信邮件列表会很有帮助。https://groups.google.com/forum/#!forum/racket-users - soegaard
1
完全没听懂。 - soegaard
你们中的一位应该将其写入答案字段中。(否则我很乐意这样做。) - Leif Andersen
我需要你的答案,Leif,谢谢。 - simmone
显示剩余2条评论
1个回答

2

有一种方法可以做到这一点,但遗憾的是,目前它并不特别方便。如果您想让我们改进它,请提交一个问题(或者如果您感到雄心勃勃,可以提交一个拉取请求),说明您希望如何实现这一点。(如果它得到改进,请有人更新这个答案。)

遗憾的是,您不能使用scribble命令行应用程序(也不能使用raco scribble)来呈现带有搜索框的scribble页面。相反,您需要使用scribble的render函数,以及html-render-mixin来呈现您的文档。一旦您克服了编写自己的脚本来呈现文档的障碍,这将变得非常简单。

html-render-mixin生成的类有一个(截至Racket 6.5未记录,我将在Racket 6.6中添加文档)字段:search-box?,默认为#f。您可以构建自己的渲染器mixin,它扩展了html,除了将搜索框更改为#t。您可以这样做:

#lang racket

(require (prefix-in html: scribble/html-render))

(define (search:render-mixin %)
  (class (html:render-mixin %)
    (init [search-box? #t])
    (super-new [search-box? search-box?])))

有了这个,你就可以直接通过在渲染函数中使用 render-mixin 关键字参数来传递它:

(require "webpage.scrbl")

(render (list doc)
        (list "webpage.html")
        #:render-mixin search:render-mixin)

这里,webpage.scrbl 是您的文件源,webpage.html 是您的目标位置。它们都是列表,因此您可以同时渲染多个文件。

doc 变量来自于 webpage.scrbl。(参考资料:编译 scribble 文件时会定义一个名为 doc 的变量,其中包含文档内容。)

还要确保 webpage.scrbl 使用了 scribble/manual 语言:#lang scribble/manual,否则您可能无法在其中获得搜索框。

运行此文件后,将生成带有搜索框的 webpage.html。当您在其中键入内容并按下回车键时,它将进入同一文件夹中的 search/index.html,并将您的搜索查询作为 http 参数传递。据我所知,Racket 目前不导出其构建内部搜索索引的方式,但您可以在 repo 的源代码中的 pkgs/racket-index/scribblings/main/search.scrbl 中找到它的实现方法。如果您希望 scribble 带有该搜索页面,请在 github 上开启一个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接