| Main index | Placemat: main guide | About author |
Julian D. A. Wiseman
Contents: Publication history; Introduction; Type sizes and controls (VerticalMiddling…, Type sizes); CirclesReplaceCircletext.
Publication history: only here. Usual disclaimer and copyright terms apply.
There are some parameters that, in practice, would (or should) never be changed by non-expert users of the the placemat program. To avoid excessive cluttering of the main guide, these are described here.
/MatchNone![]() |
/MatchRow![]() |
/MatchString![]() |
◊ The parameters VerticalMiddling… control the vertical alignment of the Titles, and when OverlapSubtitlesOnTitles is true, of Subtitles. Older versions of this code centred separately each title (and also each overlapped subtitle). This is now done by setting VerticalMiddlingTitles to /MatchNone (see diagram on right, the Titles’ baselines being shown in green). Alternatively the baselines (pedantically: as a proportion of the relevant font size) can be jointly computed with those of some other Titles (/MatchRow, /MatchPage, /MatchAll), or set to a fixed string (VerticalMiddlingStringTitles, defaulting to the port-friendly 4-free 5-free descender-free “08W31T67G92F”). Particularly if there are descenders or accents (especially upper-case accents as might happen in a Burgundy tasting including Échezeaux or Épineuil), it is worth setting VerticalMiddling to a value other than /MatchNone.
There is also the technical and usually irrelevant parameter VerticalMiddlingIncludeBaselineTitles. When computing the middle for a string or collection of strings, it computes the highest of the tops, and lowest of the the bottoms. If these fail to straddle zero, as would happen if a Title/Subtitle were (-), and VerticalMiddlingIncludeBaselineTitles is true, then the nearer boundary is deemed moved to the baseline.
◊ Similar parameters control the vertical placement of overlapped Subtitles: VerticalMiddlingSubtitles, VerticalMiddlingStringSubtitles, and VerticalMiddlingIncludeBaselineSubtitles.
The type sizes of Titles and Subtitles is controlled by a two-stage process. First, one at a time, various maximum-size constraints are applied. Second, all the circles are considered together, and various subsets are required to be the same size, that is, the size of the smallest in that subset.
◊ One-at-a-time constraints include the following.
If TitleSubtitlesToFitInCircle is true, the Titles and Subtitles must fit in the circle. Generally one would want this to be false only if making decanter labels with no glasses pages.
TitleMaxHeightAbsolute and SubtitleMaxHeightAbsolute, being height limits in points.
TitleMaxHeightProportionRadius and SubtitleMaxHeightProportionRadius: constrained to be ≤ these ×radius.
TitleMaxStringwidthAbsolute and SubtitleMaxStringwidthAbsolute, being width limits in points.
TitleMaxStringwidthProportionRadius and SubtitleMaxStringwidthProportionRadius, being width limits as a multiple of the radius.
TitleMaxFontSizeAbsolute and SubtitleMaxFontSizeAbsolute: an upper bound on the notional font size. Since the introduction of the previous parameters, usually set to a large value.
TitleMaxFontSizeProportionRadius and SubtitleMaxFontSizeProportionRadius: these are also superceded by other parameters.
SubtitleMaxFontSizeProportionTitles: applying only to the Subtitles, and ensuring that they aren’t big relative to the Titles. A value between 0.25 and 0.5 is aesthetically pleasing, depending on the relative thickness of the strokes of the typefaces.
DecanterLabelMaxLargerDimension and DecanterLabelMaxSmallerDimension: the usable size of the business cards to which the decanter labels are to be affixed. Ignored unless DecanterLabelsNumCopies ≥ 1. The combined title and subtitle will fit in orientation DecanterLabelAllowedOrientations, this taking values /Landscape, /Portrait, or /Either (the last ensuring it will fit in at least one orientation, but not necessarily both).
TitleMinHeightForSubtitleBelowProportionRadius: ignored unless OverlapSubtitlesOnTitles is false and the relevant item of Subtitles is non-empty. Constrains the size of the title to ensure that its lower bound is at least this proportion of a radius above the bottom.
TitleMaxHeightIfSubtitleBelowProportionDecanterLabelSmaller: ignored unless DecanterLabels is true; OverlapSubtitlesOnTitles is false; and the relevant item of Subtitles is non-empty. If not ignored the maximum title height is TitleMaxHeightIfSubtitleBelowProportionDecanterLabelSmaller×DecanterLabelMaxSmallerDimension.
◊ In general, it looks nicer if most of the Titles (and likewise Subtitles) have matching type sizes. Which of Titles (Subtitles) are the same size is controlled by SameSizeTitlesIfAllOf (SameSizeSubtitlesIfAllOf), being an array of ‘condition flags’, the items of Titles (Subtitles) being the same size if all the conditions are met. So an empty set of conditions is always true: all the Titles (Subtitles) would then be the same size. Permitted conditions are as follows.
◊ /False: always fails, so each of the Titles (Subtitles) is separately scaled to fit its circle, subject to the one-at-a-time constraints.
◊ /SameTitleLength: “W85” and “I85” are the same, but different to “RP85” (this actually applies a slightly stronger condition: ‘length ≥ ⇒ font size ≤’, relevant when comparing Titles such as “II” and “W”).
◊ /SameSubtitleLength: same test, but applied to the Subtitles.
◊ /OnSameSheet: obvious meaning.
◊ /RadiiShrunkToBeSame: passes if ShrinkRadii compels the two sheets to have the same radii.
◊ /OnSheetWithSameRadius: passes if on same sheet, or if on different sheets but those sheets having the same radius. This parameter is equivalent to [0], a special case of the next possible condition.
◊ An array of numbers. Such array is sorted by the code, so, for simplicity, asssume the array is [a b c] with a>b>c. If two items are on sheets with differing radii, this condition is ignored. Otherwise two items match if they both have sizes ≥a×radius. Or two items match if they have sizes <a×radius but ≥b×radius. Or two items match if they have sizes <b×radius but ≥c×radius. Why this complication? Assume that OverlapSubtitlesOnTitles is true, and that the Subtitles have greatly varying lengths: “Dow”, “Taylor”, “Graham”, “Gould Campbell”, and “Offley Boa Vista”. If all these Subtitles were set in the same size type, the size of the “Dow” would be determined by the “Offley Boa Vista”, and would hence appear foolishly small. But if they all had different sizes, it would look messy. So instead SameSizeSubtitlesIfAllOf should contain the condition flag [0.35 0], which would force all the Subtitles that would otherwise be bigger than 0.35 radii to be the same size, and force all those smaller to be the smallest of the font sizes. There would be only two font sizes: looking neat and internally consistent, without over-shrinking the font size of the short names.
◊ /GuessArraySizeBoundaries: this chooses a guess at a suitable array of numbers. This array is of length ≤3 (so there are at most three different font sizes); and if two font sizes would otherwise be within a factor of √2 of each other, they are in the same band.
◊ How big is the circle text? In points, not bigger than CircletextMaxFontSizeAbsolute; and as a proportion of the circles’ radius not bigger than CircletextMaxFontSizeProportionRadius. If, in a font size equal to the lesser of these two, a particular item in Circlearrays is too long to fit at least CircletextsMinCopies times, then the font size is reduced for that circle such that it does. The number of copies is also bounded above by CircletextsMaxCopies; and the minimum separation (measured in space-widths) between the items of the sub-arrays of Circlearrays is CircletextsMinNumSpacesBetween.
◊ Following a suggestion of the author’s father, /CirclesReplaceCircletext true def causes Circlearrays to be ignored, the glass places instead being bounded by a circle of width CirclesLineWidth, and filled according to the PostScript code in CirclesFillColour. But, in the author’s judgement, use of Circlearrays is generally more pleasing to the eye.
| Main index | Top | About author |