Racket 球拍涂鸦,如何添加搜索框?

Racket 球拍涂鸦,如何添加搜索框?,racket,scribble,Racket,Scribble,我使用scribble生成包的文档 raco会把我的资料和racket self的文件整合起来, 并在页面左上角添加一个搜索框 当您使用“raco文档”时,您可以看到这一点 现在我想使用scribble作为文档工具来生成我的独立文档 文件 但是当我使用scribble——htmls demo.scribble时,它不能有一个搜索框 在页面的左上角 如何添加搜索框以使我的文档具有搜索功能?有一种方法可以做到这一点,但遗憾的是,目前还不是特别令人愉快。如果你想让我们做得更好,请提交一份(或者如果你有

我使用scribble生成包的文档

raco会把我的资料和racket self的文件整合起来, 并在页面左上角添加一个搜索框

当您使用“raco文档”时,您可以看到这一点

现在我想使用scribble作为文档工具来生成我的独立文档 文件

但是当我使用scribble——htmls demo.scribble时,它不能有一个搜索框 在页面的左上角


如何添加搜索框以使我的文档具有搜索功能?

有一种方法可以做到这一点,但遗憾的是,目前还不是特别令人愉快。如果你想让我们做得更好,请提交一份(或者如果你有雄心壮志的话,我猜是拉请求)关于你希望如何做到这一点。(如果确实有所改进,请有人更新此答案。)

遗憾的是,您不能使用
scribble
命令行应用程序(也不能使用
raco scribble
)使用搜索框呈现scribble页面。相反,您需要使用scribble的函数来呈现文档。不过,一旦您克服了编写自己的脚本来呈现文档的困难,就相当简单了

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

#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关键字参数直接将其传递到render函数:

(require "webpage.scrbl")

(render (list doc)
        (list "webpage.html")
        #:render-mixin search:render-mixin)
在这里,
webpage.scrbl
是您文件的源文件,
webpage.html
是您的目标位置。它们是列表,因此可以同时渲染多个文件

doc
变量来自
网页.scrbl
。(作为参考,scribble文件在编译时定义一个名为
doc
的变量,该变量包含文档的内容。)

另外,请确保
webpage.scrbl
是用
scribble/manual
语言编写的:
#lang scribble/manual
,否则您可能无法在那里找到搜索框


运行此文件时,将生成带有搜索框的
webpage.html
。当您输入并按enter键时,它将转到同一文件夹中的
search/index.html
,并将您的搜索查询作为http参数传入。据我所知,Racket目前没有导出它如何构建内部搜索索引,但你可以在回购协议的源代码中找到它是如何构建的:
pkgs/Racket index/scribbles/main/search.scrbl
。如果您希望该搜索页面附带scribble,请在github上打开一个问题。

您使用的是
#lang scribble/manual
?我在文档中找不到详细信息。我相信你需要使用
#:style
和title:
@title[#:style something]
。但是需要什么呢?如果你在这里没有得到答案,我相信邮件列表会有帮助。simmone先问:完全没有回答。你们中的一个应该把这个写在答案栏里。(否则我很乐意这么做。)