マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

LaTeX 上で色々と実装してみる話(ナベアツ編-5)

前回の続き)

ここからは場外乱闘コーナー。

dvips で PostScript
(参照:アレ

DVI ウェアとして dvips を使用する場合、PostScript special 命令を使って比較的自由に PostScript 言語のコードを書くことができる。そして周知の通り、PostScript でナベアツを実装するのは比較的容易である。ということは、次のようなことができることになる。

[nabeazz-ps.tex]
\documentclass{article}
\newcommand*\NabeAzz[1]{%
{\setlength{\unitlength}{1pt}%
\makebox(216,68)[bl]{\special{" #1 NabeAzz}}}}
  % Outputs literal header to the PS file
\special{! %!!!!!!!!!!!!!!!!!!!!!!!!!!!! BEGIN  PostScript code
  /NA-norm-font /Palatino-Roman findfont 10 scalefont def
  /NA-funny-font /ZapfChancery-MediumItalic findfont 20 scalefont def
  /NA-leading 18 def
  /NA-space-width 5 def
  /NA-line-item-count 10 def
  /NA-put-space {
    NA-space-width 0 rmoveto
  } def
  /NA-form-line {
    gsave exec grestore
    0 NA-leading neg rmoveto
  } def
  /NA-requires-funny {
    dup 3 mod 0 eq
    exch mark exch
    10 string cvs (3) search
    { cleartomark pop true } { cleartomark } ifelse
  } def
  /NabeAzz { 4 dict begin
    /limit exch def
    /c 0 def
    /line-count limit NA-line-item-count div ceiling cvi def
    /one-line {
      {
        NA-line-item-count {
          /c c 1 add def
          c NA-requires-funny
          { NA-funny-font } { NA-norm-font } ifelse
          setfont
          c 10 string cvs show NA-put-space
        } repeat
      } NA-form-line
    } def
    gsave
    0 NA-leading line-count 1 sub mul moveto
    line-count { one-line } repeat
    grestore
    end
  } def
}          %!!!!!!!!!!!!!!!!!!!!!!!!!!!! END PostScript code
\begin{document}
\NabeAzz{40}
\end{document}

コンパイル手順は以下の通りで、出力は PostScript 文書である。PDF への変換はいつも通り。

latex nabeazz-ps
dvips nabeazz-ps

結果として以下の出力が得られる。

ただし、これはナベアツ問題の条件を厳密には満たしていない。何故なら、「Zapf Chancery」は「素敵なフォント」ではあるが残念ながら「アホなフォント」では決してないからである。

(まだ続いたりして)