Изменить межбуквенный интервал в PostScript

При написании файла postscript можно выбрать такой шрифт:

/Courier-Bold findfont 16 scalefont setfont
(bar baz) show

Я хотел бы изменить межбуквенный интервал моего шрифта - есть ли способ сделать это? Либо непосредственно как оператор шрифта, либо, возможно, просто имея возможность вставлять произвольные команды постскриптума между рендерингом глифа?


person qdot    schedule 04.04.2012    source источник


Ответы (1)


Да, есть несколько вариантов оператора show, которые можно использовать для таких вещей:

  • ax ay строка показать -
    добавить (ax, a y) к ширине каждого символа при отображении string

  • cx cy char string widthshow -
    добавить (cx, cy) до ширины char при отображении string

  • cx cy char ax ay string widthshow -
    объединить эффекты ashow и widthshow

  • proc string kshow -
    выполнить proc между символами, показанными из string

Несколько советов. Поскольку в постскриптуме нет символьных литералов, распространенной идиомой является извлечение целочисленного значения из 1-байтового строкового литерала для предоставления аргумента char для widthshow и awidthshow. Например.

( ) 0 get %the space char, aka 32 or 16#20

И если вы не собираетесь использовать эффект лестницы, все значения y должны быть равны 0.

Процедура, выполняемая kshow между каждым символом, получает в качестве аргументов только что показанный символ и символ, который должен быть показан, в указанном порядке. Предположительно, это позволит вам найти пару в какой-то «таблице кернинга». Но я никогда не видел, чтобы это было сделано. Но не забудьте вытолкнуть их, если они не нужны (обычно).


Что касается создания производного шрифта, я отсылаю вас к этому моему ответу на codegolf.SE, который создает шрифт кроссворда, рисуя прямоугольники вокруг Times-Roman. Ширина символа задается оператором setcachedevice в процедуре /BuildChar. Для меня мне просто нужна была постоянная ширина, поэтому я использовал 1, чтобы привязать ее непосредственно к размеру шрифта.

person luser droog    schedule 05.04.2012