racket/scribble

Empty lines for grouping in `scribble/example` `@examples`

sschwarzer opened this issue · 0 comments

Sometimes I want to group lines in an @examples form, i.e. insert empty lines between groups of inputs and outputs.

Here's an example from the documentation of define-syntax to show what I mean:

Examples:

    > (define-syntax foo
        (syntax-rules ()
          ((_ a ...)
           (printf "~a\n" (list a ...)))))
    > (foo 1 2 3 4)
    (1 2 3 4)
    > (define-syntax (bar syntax-object)
        (syntax-case syntax-object ()
          ((_ a ...)
           #'(printf "~a\n" (list a ...)))))
    > (bar 1 2 3 4)
    (1 2 3 4)

However, since the foo and bar examples are independent, these examples would look clearer as

Examples:

    > (define-syntax foo
        (syntax-rules ()
          ((_ a ...)
           (printf "~a\n" (list a ...)))))
    > (foo 1 2 3 4)
    (1 2 3 4)

    > (define-syntax (bar syntax-object)
        (syntax-case syntax-object ()
          ((_ a ...)
           #'(printf "~a\n" (list a ...)))))
    > (bar 1 2 3 4)
    (1 2 3 4)

Note the empty line after the (foo 1 2 3 4) output.

I tried a lot to achieve this with scribble/example, but didn't succeed. Things that almost worked:

  • (code:comment "") still prints the semicolon
  • code:blank and (code:line) add a prompt in front of the otherwise empty line
  • (eval:no-prompt code:blank) adds two or three empty lines
  • (eval:no-prompt (code:line)) gives an exception because (code:line) doesn't seem to be recognized inside (eval:no-prompt).
  • (eval:no-prompt) adds a tiny gap. I was (kinda) able to get an "empty line" with a sequence of (eval:no-prompt), but that's quite a dirty hack, isn't it? ;-)
  • Split the @examples[...] invocations into several, one for each group. This requires #:label #f for the groups after the first and duplication of possible setup / keyword arguments from the first @examples[...] of the group.

I found a few examples in the Racket documentation that do use empty lines as shown above, but they use mz-examples, or examples from the legacy scribble/eval module.