Ошибка отладки Scribble (требуется предварительная часть для декодирования)

#racket #scribble

#racket #scribble

Вопрос:

Рассмотрим следующий документ Scribble:

 #lang scribble/manual

@title[#:tag "MyTitle"]{MyTitle}

@(module bq racket/base
    (require scribble/html/html)
    (provide blockquote))
@(require 'bq)

@blockquote{
   "Ho, ho, ho! -- Santa Claus."
}
 

Если я попытаюсь создать это с scribble --dest . test.scrbl помощью, это завершится неудачей с

 /Users/varun/Code/test.scrbl:10:0: not valid in document body (need a pre-part for decode) in: (element 'blockquote '() '(""Ho, ho, ho! -- Santa Claus."") #f)
  context...:
   body of "/Users/varun/Code/test.scrbl"
   .../private/map.rkt:40:19: loop
   .../racket/cmdline.rkt:191:51
   body of "/Applications/Racket v8.0/share/pkgs/scribble-lib/scribble/run.rkt"
 

Я не понимаю ошибки. К какой «предварительной части» это относится? Я нашел сообщение в блоге «Написание статьи в Scribble», в котором описывается аналогичная ошибка; там проблема в том, что число не преобразуется в строку. Однако у меня здесь есть строка, поэтому я не понимаю, в чем проблема.

Ответ №1:

Проблема в том, что scribble/html он не подключен к scribble/manual , а созданный там «элемент» является элементом HTML. Вы не можете использовать функции из scribble/html в документе, подобном этому.

Если вам нужна блочная цитата в scribble, вы, вероятно, захотите использовать nested-flow .

Ответ №2:

Основываясь на том, что сказал Сэм в своем ответе, а также на аналогичном комментарии в Twitter, я в итоге определил цитату из блока как:

 @(require scribble/core scribble/decode)
@(define (blockquote . strs)
      (make-nested-flow (make-style "blockquote" '(command))
                        (decode-flow strs)))
 

(Источник: https://sourcegraph.com/github.com/flock-lab/flock/-/blob/docs/main.scrbl ?L9-L11)

Это можно использовать без кавычек:

 @blockquote{Ho, ho, ho! -- Santa Claus.}