scriblib/figure: more configuration of style

This commit is contained in:
Matthew Flatt 2017-09-26 08:13:03 -06:00
parent ad6deb7366
commit 84f5301ac0
4 changed files with 58 additions and 17 deletions

View File

@ -15,21 +15,29 @@
@defproc[(figure [tag string?] [caption content?] @defproc[(figure [tag string?] [caption content?]
[p pre-flow?] ... [p pre-flow?] ...
[#:style style style? center-figure-style] [#:style style style? center-figure-style]
[#:label-sep label-sep pre-content? ": "]
[#:label-style label-style element-style? #f]
[#:continue? continue? any/c #f]) [#:continue? continue? any/c #f])
block?] block?]
@defproc[(figure* [tag string?] [caption content?] @defproc[(figure* [tag string?] [caption content?]
[p pre-flow?] ... [p pre-flow?] ...
[#:style style style? center-figure-style] [#:style style style? center-figure-style]
[#:label-sep label-sep pre-content? ": "]
[#:label-style label-style element-style? #f]
[#:continue? continue? any/c #f]) [#:continue? continue? any/c #f])
block?] block?]
@defproc[(figure** [tag string?] [caption content?] @defproc[(figure** [tag string?] [caption content?]
[p pre-flow?] ... [p pre-flow?] ...
[#:style style style? center-figure-style] [#:style style style? center-figure-style]
[#:label-sep label-sep pre-content? ": "]
[#:label-style label-style element-style? #f]
[#:continue? continue? any/c #f]) [#:continue? continue? any/c #f])
block?] block?]
@defproc[(figure-here [tag string?] [caption content?] @defproc[(figure-here [tag string?] [caption content?]
[pre-flow pre-flow?] ... [pre-flow pre-flow?] ...
[#:style style style? center-figure-style] [#:style style style? center-figure-style]
[#:label-sep label-sep pre-content? ": "]
[#:label-style label-style element-style? #f]
[#:continue? continue? any/c #f]) [#:continue? continue? any/c #f])
block?] block?]
)]{ )]{
@ -52,8 +60,18 @@ By default, @racket[style] is set so that the content of the figure is
centered. Use @racket[left-figure-style], @racket[center-figure-style], centered. Use @racket[left-figure-style], @racket[center-figure-style],
or @racket[right-figure-style] to specify the alignment. or @racket[right-figure-style] to specify the alignment.
The @racket[label-sep] and @racket[label-style] arguments adjust the
way that the caption's label is shown. By default, the label is the
word ``Figure'' followed by a space, the figure number, ``:'', and a
space, but @racket[label-sep] can specify an alternative to the ``:''
and ending space. The composed label is given the style specified by
@racket[label-style].
If @racket[continue?] is a true value, then the figure counter is not If @racket[continue?] is a true value, then the figure counter is not
incremented.} incremented.
@history[#:changed "1.24" @elem{Added the @racket[#:label-sep] and
@racket[#:label-style] arguments.}]}
@deftogether[( @deftogether[(
@defthing[left-figure-style style?] @defthing[left-figure-style style?]

View File

@ -23,4 +23,4 @@
(define pkg-authors '(mflatt eli)) (define pkg-authors '(mflatt eli))
(define version "1.23") (define version "1.24")

View File

@ -66,30 +66,40 @@
figure-style-extras)) figure-style-extras))
c)) c))
(define default-label-sep ": ")
(define (figure tag caption (define (figure tag caption
#:style [style center-figure-style] #:style [style center-figure-style]
#:label-sep [label-sep default-label-sep]
#:label-style [label-style #f]
#:continue? [continue? #f] #:continue? [continue? #f]
. content) . content)
(figure-helper figure-style style tag caption content continue?)) (figure-helper figure-style style label-sep label-style tag caption content continue?))
(define (figure-here tag caption (define (figure-here tag caption
#:style [style center-figure-style] #:style [style center-figure-style]
#:label-sep [label-sep default-label-sep]
#:label-style [label-style #f]
#:continue? [continue? #f] #:continue? [continue? #f]
. content) . content)
(figure-helper herefigure-style style tag caption content continue?)) (figure-helper herefigure-style style label-sep label-style tag caption content continue?))
(define (figure* tag caption (define (figure* tag caption
#:style [style center-figure-style] #:style [style center-figure-style]
#:label-sep [label-sep default-label-sep]
#:label-style [label-style #f]
#:continue? [continue? #f] #:continue? [continue? #f]
. content) . content)
(figure-helper figuremulti-style style tag caption content continue?)) (figure-helper figuremulti-style style label-sep label-style tag caption content continue?))
(define (figure** tag caption (define (figure** tag caption
#:style [style center-figure-style] #:style [style center-figure-style]
#:label-sep [label-sep default-label-sep]
#:label-style [label-style #f]
#:continue? [continue? #f] #:continue? [continue? #f]
. content) . content)
(figure-helper figuremultiwide-style style tag caption content continue?)) (figure-helper figuremultiwide-style style label-sep label-style tag caption content continue?))
(define (figure-helper figure-style content-style tag caption content continue?) (define (figure-helper figure-style content-style label-sep label-style tag caption content continue?)
(make-nested-flow (make-nested-flow
figure-style figure-style
(list (list
@ -101,15 +111,23 @@
(list (make-element (if continue? (list (make-element (if continue?
legend-continued-style legend-continued-style
legend-style) legend-style)
(list (Figure-target tag #:continue? continue?) caption))))))) (list (Figure-target tag
#:label-sep label-sep
#:label-style label-style
#:continue? continue?)
caption)))))))
(define figures (new-counter "figure" (define figures (new-counter "figure"
#:target-wrap make-figure-target #:target-wrap make-figure-target
#:ref-wrap make-figure-ref)) #:ref-wrap make-figure-ref))
(define (Figure-target tag #:continue? [continue? #f]) (define (Figure-target tag
#:continue? [continue? #f]
#:label-sep [label-sep ": "]
#:label-style [label-style #f])
(counter-target figures tag (counter-target figures tag
"Figure" "Figure"
(if continue? " (continued): " ": ") #:label-suffix (list (if continue? " (continued)" "") label-sep)
#:label-style label-style
#:target-style figure-target-style #:target-style figure-target-style
#:continue? continue?)) #:continue? continue?))

View File

@ -21,6 +21,8 @@
(define (counter-target counter tag label (define (counter-target counter tag label
#:target-style [target-style #f] #:target-style [target-style #f]
#:label-style [label-style #f]
#:label-suffix [label-suffix '()]
#:continue? [continue? #f] #:continue? [continue? #f]
. content) . content)
(let ([content (decode-content content)]) (let ([content (decode-content content)])
@ -34,10 +36,13 @@
(make-delayed-element (make-delayed-element
(lambda (renderer part ri) (lambda (renderer part ri)
(let ([n (resolve-get part ri (tag->counter-tag counter tag "value"))]) (let ([n (resolve-get part ri (tag->counter-tag counter tag "value"))])
(let ([l (cons (format "~a" n) content)]) (cons
(make-element label-style
(let ([l (cons (format "~a" n) (decode-content (list label-suffix)))])
(if label (if label
(list* label 'nbsp l) (list* label 'nbsp l)
l)))) l)))
content)))
(lambda () (if label (lambda () (if label
(list* label 'nbsp "N" content) (list* label 'nbsp "N" content)
(cons "N" content))) (cons "N" content)))