To help users of the placemat software, in this thread will be posted the used parameters of the placemat software. The intention is that placemats made by JDAW can be used as examples of how the software’s features can be invoked.

These placemats were generally made with the then-current version. Later versions of the software have changed the names or usage or defaults or existence of some of the parameters. Hence readers might prefer to start reading at the end.

• Unusual construction of Circlearrays, to simplify creation of Titles.

• The first use of FontSizesTitlesEquivalences, a parameter added for this purpose. Titles with equal elements of FontSizesTitlesEquivalences are forced to the same size. (However, in other circumstances this can interact with FontSizesTitlesNotSmallerIfTitlesNotLonger to force most or all to the same size: be careful.)

• Lots of fiddly details in the Circlearrays etc, as the number of G80s was fixed at six, but the number of other bottles was more variable. This could have been less automatically. Likewise GlassesOnSheets.

• A rare change of GlassesClusteredOnVoteRecorders from the default, as we all knew what the G80s were (G80!), but didn’t know the others.

• Research is ongoing about whether InlineTitlesMaxNumberContours can be set automatically. Some printers handle this slowly, so having this at the minimum would be of use. Can the minimum be computed automagically? That question has been asked on comp.lang.postscript.

Blinding plan. The team decants into properly labelled decanters (labels: “D60”, “D63”, …). Then one person over-staples with pairs of identical cards, other people not seeing (labels: “0”, “0”, “1”, …). Finally a different person over-staples with pairs of Roman/Italic cards, other people not seeing (labels: “a”, “a”, “b”, …).

• Lots going on here. Mostly what is happening is many glasses pages are created, and then now shown. The not shown pages are the decanter labels of the form “D60” and of the form “0”. So /PageOrderingNonDecanterLabelGlasses [ 0 0 0 0 0 0 1 1 1 ] def, these numbers both separating the shown pages for font-size purposes, and also being how many copies are shown: /NonDecanterLabelGlassesNumCopies {PageOrderingNonDecanterLabelGlasses SheetNum get} def.

One other thing was tested, but doesn’t appear in the final PDF. Pre-tube-strike there were more of us, and two pages of glasses. Then there were fewer, and one page. There are circumstances in which editing posts of images would be hard, but removing content from images would be easy. So, to make
the parameters also said, temporarily,

• SheetNums 0 and 1 were the shippers, 2 and 3 were the Greeks. This drove the construction of GlassesOnSheets, of NonDecanterLabelGlassesNumCopies, of GlassesOnTastingNotePages, of the PageOrderings, and of GlassesClusteredOnCorkDisplay.

• Because my eyes are accustomed to Roman text much much more than Greek, I don’t see a Greek letter and automatically know where is its baseline. Hence /VerticalMiddlingTitles /MatchNone def.

• Observe that the shipper names are used for some of the decanter labels, and the cork-display, and nothing else.

• MarginL etc set to be small on the glasses pages, but less small on others. Glasses-page space at a premium. However MarginB is massive on the glasses pages, with the heavy paper to be trimmed.

• As is typical of large tastings, the array PortData holds the information which is then decanted into Circlearrays, Titles, Belowtitles and SubtitlesVoteRecorder.

• The plan was to pre-pour only the first Port of each flight, to set the measure by which people were to self-pour the rest. Hence the complication of PrePourNumCopies.

• /FlightSeparations true def, and, joy!, the most complicated use yet of this feature. Start by observing /FlightSeparationPaintSeparately true def. The first three items of FlightSeparationLines define closed paths, used by FlightSeparationPaintCode (“FlightSeparationLineNum 0 eq”, then 1, then 2) as clipping regions. Decorative lines, very thin, are drawn. The remainder of FlightSeparationLines defines the boundary paths, some with /Curve and some without. FlightSeparationPaintCode does nothing with these until the last one, so these are in effect not …PaintSeparately’d. And that last item paints a thick black line inside a gsave … grestore, and then a less thick white line. The setlinecaps avoid bleed.

Those tracing through the FlightSeparationLines might be helped by the following diagram, showing where stuff is. Observe that the Titles have been replaced with the values of WithinPage, and the Belowtitles with WithinTitles. Also, some text has been moved to keep it on the page, most obviously that referring to the corners.

There is a broader lesson from these complicated parameters. The program is written in PostScript, and is structured to allow, perhaps even encourage, code injection. In almost all parameters the user has full access to the whole of PostScript, and to the values of the variables maintained by the code. E.g., FlightSeparationLineNum is there to seen. That gives great power, but full access to that power requires being able to use PostScript.

• But observe that the default value of TitleAboveBelowOverToFitInCircle is in effect Names length 0 ne. Here Names is of zero length, so the Titles etc can bust out of the circle, even though not out of the circle’s bounding square.

• Having realised that one can see the wine better with more white underneath, by default /InlineTitles true def. That goes rather well with the new complicated default of CrossHatchingBackgroundStrokeCode, so I also /CrossHatchingTitles true def.

• Nobody noticed, not me not anybody else, that Thursday was the 28th not the 27th. This error is regretted.

After making these placemats I realised that it would be neater to define NumberRomanUpperKerned with:

• In populating the list of placemats with some of the earliest examples, it was noticed that the very earliest examples, made by hand in Illustrator, had much larger ‘Circlearrays’ than has recently been usual. Which inspired here setting them to a giant size which was trimmed by /CircletextsMinCopies 2 def.

• The number of glasses flitted back and forth from ≤14 to ≥15. The former, ≤14, fits nicely on one A3. The latter doesn’t. So the parameters acquired conditionality to flit for me. Hence the complexity of GlassesOnSheets, of GlassesOnTastingNotePages, and of Rays. In PermittedPackingStyles the conditionality was implemented with sub-parameters [ … /OnlyIfOrientation /Portrait ].

• Much faffing with TitlesTastingNotes, Titles (into which KerningConstants inserted), and TitlesVoteRecorder.

• Because, eventually, there were too many glasses for A3, Rays was false. But for a while it was true, and a question about setstrokeadjust/currentstrokeadjust was asked on comp.lang.postscript.

• Because TitlesTastingNotes held the long names (e.g. “Rozès” rather than “Rz”), TitlesFont was the CircletextFont on tasting-note and cork-display pages.

• /BackgroundTextsGlasses true def

• The ‘g’ in Morgan’s “Mg” was slightly superscripted, by 0.077 × the font size, to enlarge the Titles. The constant was chosen by interval bisection, done manually. Without this the g would have descended by so much that it would have been the binding constraint on the size of the Titles.

• As previously used, blinding with upper-case Roman numbers, aggressively and semi-automatically kerned in the Titles, but not in the likes of TitlesTastingNotes.

• Then there are three types of item of Titles/TitlesTastingNotes/etc. There are the Roman numbers, appearing on the glasses sheets and vote recorders and decanter labels. There are the four extra circles, names after Teenage Mutant Ninj Turtles (why not?), appearing everywhere. There was to be another of these, “F66”, but plans changed — leaving vestigial lines in the code. And there are the un-blinded names of the Ports: “D70” etc, which appear on the cork display, on the decanter labels, and the sticky labels.

• Unusually, FontSizesTitlesEquivalences set explicitly, such that the Romans are all the same size, the TMNT the same, and the likes of “D70” all the same.