[cl-typesetting-devel] Anyway to measure the size of some text

Marc Battyani marc.battyani at fractalconcept.com
Tue Oct 5 20:54:21 UTC 2004


"Peter Seibel" <peter at javamonkey.com> wrote:
> "Marc Battyani" <marc.battyani at fractalconcept.com> writes:
> > Peter Seibel wrote:
> >
> >
> >> Is there any way to determine the "natural" size of some generated
> >> text?
>
> > META-WEB 20 > (typeset::compute-boxes-natural-size (typeset::boxes
> > *content*) 'typeset::dx)
> > 54.83
> >
> > META-WEB 21 > (typeset::compute-parallel-size (typeset::boxes *content*)
> > 'typeset::dy)
> > 12.0
> > 10
>
> Ah. That's just what I was looking for. So here's how I handled it:
>
>   (defmacro compute-natural-width (&body body)
>     `(typeset::compute-boxes-natural-size
>       (typeset::boxes
>        (typeset:compile-text ()
>          , at body))
>       'typeset::dx))
>
>   (defun compile-header (content-width header-height)
>     (declare (ignore header-height))
>     (let* ((second-col-width (compute-natural-width (page-number-contents
999 999)))
>            (first-col-width (- content-width second-col-width)))
>       (typeset:table
>         (:col-widths (list first-col-width second-col-width)
>                      :border 0
>                      :padding 0
>                      :cell-padding 0)
>         (typeset::row ()
>           (typeset:cell ()
>             (typeset::paragraph
>                 (:h-align :left :font "Times-Italic" :font-size 10)
>               (typeset::put-string
>                (typeset::get-contextual-variable 'chapter-name))))
>           (typeset:cell ()
>             (page-number-contents
>              pdf:*page-number*
>              (typeset:find-ref-point-page-number :the-end)))))))
>
>   (defun page-number-contents (page max)
>     (typeset::paragraph
>         (:h-align :right :font "Times-Italic" :font-size 10)
>       (typeset::put-string (format nil "Page ~d of ~d" page max))))
>
> As you can see I didn't need the code to add the text contents to the
> cell since I "measured" an example, not the actual text I used.

Yep.

I should do something like this to compute the column width if the width is
nil.
This would be dangerous, as it will be wrong when the text is not a simple
line, but it could be useful.

Marc





More information about the cl-typesetting-devel mailing list