絵もいいけど、文字もいいよ♪

TeX & LaTeX Advent Calendar : ATNDTeX で騒げ、TeX で笑え
5 日目です!
12/4 は neruko3114 さん http://neruko3114.blogspot.jp/2012/12/numerical-calculation-packages-for-tex.html
12/6 は peccul さん = Excelに嫌気がさしてLaTeXで書き直した話 #texadvent - ぺっくブログミラー@peccul

[2012-12-05 追加]このネタの features、このネタにまつわるお話を加筆。


GitHub - munepi/iamjatex: LaTeX package to make "Just another TeXnician" work で絵を描くのも楽しいけど、文字を出すのも楽しかったです*1

では、どうぞ!

%#!platex bmpchar && dvipdfmx -l bmpchar
\documentclass[landscape,a4paper]{jsarticle}
\makeatletter
\def\hex@digits#1{%
  \if 0#10000\else\if 1#10001\else\if 2#10010\else\if 3#10011%
  \else\if 4#10100\else\if 5#10101\else\if 6#10110\else\if 7#10111%
  \else\if 8#11000\else\if 9#11001\else\if A#11010\else\if B#11011%
  \else\if C#11100\else\if D#11101\else\if E#11110\else\if F#11111%
  \else\errmessage{unknown number: #1}%
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

\def\x@xx@bmp@z{ }%
\def\x@xx@bmp@ne{}%
\def\x@xx@bmp#1{\expandafter\@x@xx@bmp#1}
\def\@x@xx@bmp#1#2#3#4#5#6#7#8{%
  \@for\reserved@bin:={#1,#2,#3,#4,#5,#6,#7,#8}\do{%
    \if 0\reserved@bin\x@xx@bmp@z\else\x@xx@bmp@ne\fi}%
}

\def\x@xx#1{\expandafter\@x@xx#1}
\def\@x@xx#1#2{%
  \hex@digits#1\hex@digits#2}

\def\bmpchar#1{%
  \edef\x@xxlist{\zap@space#1 \@empty}%
  \leavevmode
  \vbox{\baselineskip\z@
    \@for\reserved@hex:=\x@xxlist\do{%
      \edef\@reserved@hex{\x@xx\reserved@hex}%
      \hbox{\x@xx@bmp{\@reserved@hex}}}}}
\makeatother

\pagestyle{empty}

\begin{document}
\parindent0zw

\bmpchar{00,00,88,88,88,88,F8,88,88,88,88,00,00}%
\bmpchar{00,00,00,00,00,70,08,78,88,88,78,00,00}%
\bmpchar{00,00,00,00,00,F0,88,88,88,F0,80,80,80}%
\bmpchar{00,00,00,00,00,F0,88,88,88,F0,80,80,80}%
\bmpchar{00,00,00,00,00,88,88,88,88,78,08,88,70}%

\bmpchar{00,00,F8,20,20,20,20,20,20,20,20,00,00}%
\bmpchar{00,00,00,00,00,70,88,F8,80,88,70,00,00}%
\bmpchar{00,00,88,88,50,50,20,50,50,88,88,00,00}%
\bmpchar{00,20,00,00,00,60,20,20,20,20,70,00,00}%
\bmpchar{00,00,00,00,00,B0,C8,88,88,88,88,00,00}%
\bmpchar{00,00,00,00,00,78,88,88,88,78,08,88,70}%
\bmpchar{00,00,20,20,20,20,20,20,00,00,20,00,00}%

\vfill

\textit{\TeX\ \& \LaTeX\ Advent Calendar 2012}
\end{document}

STARTFONT 2.1
COMMENT This font is a free software.
COMMENT Unlimited permission is granted to use, copy, and distribute it,
COMMENT with or without modification, either commercially and noncommercially.
COMMENT THIS FONT IS PROVIDED "AS IS" WITHOUT WARRANTY.
FONT -mplus-fxd-medium-R-semicondensed--12-120-75-75-C-60-iso8859-1
SIZE 13 75 75
FONTBOUNDINGBOX 6 13 0 -2
STARTPROPERTIES 23
FONTNAME_REGISTRY ""
FOUNDRY "mplus"
FAMILY_NAME "fxd"
WEIGHT_NAME "medium"
SLANT "R"
SETWIDTH_NAME "semicondensed"
ADD_STYLE_NAME ""
PIXEL_SIZE 12
POINT_SIZE 120
RESOLUTION_X 75
RESOLUTION_Y 75
SPACING "C"
AVERAGE_WIDTH 60
CHARSET_REGISTRY "iso8859"
CHARSET_ENCODING "1"
COPYRIGHT "Copyright (C) 2002-2004 COZ"
WEIGHT 10
X_HEIGHT 11
QUAD_WIDTH 6
DEFAULT_CHAR 0
FONT_DESCENT 2
FONT_ASCENT 11
_XMBDFED_INFO "Edited with xmbdfed 4.5."
ENDPROPERTIES
CHARS 224

なお、上記 TeX 文章中の bitmap 文字データは、M+ BITMAP FONTS を利用しました。感謝いたします。

このネタの features

  • グレースケールぐらいの色情報を付加して、文字のアンチエリアスっぽいこともできなくもない。
  • 上記の TeX 文章をもう少し真面目に作り込むと、TeX 文章中に即席で書いた bitmap 風(形式)データを、その TeX 文章中に絵文字として使える。
  • フルカラー対応(^^;;

このネタにまつわるお話

EuroTeX 2012 の 3 日目、Excursion でバス移動をしていたとき、僕は GitHub - munepi/iamjatex: LaTeX package to make "Just another TeXnician" work においている Breskens のアスキーアートを作っていた。その作成模様を見ていた、となりに座っていたドイツ人の方がこのアスキーアートに興味を持ってくれた。

僕のつたない英語で、iamjatex.sty の原理と元ネタ辺りを必死で説明した(笑 すると、その方がこんなことを言ってくれた。「読み込んだ画像を bitmap 化して、そのデータから何か表示すれば面白いんじゃないか?」と。なるほど、読み込んだ画像を ImageMagick などの外部ツールで bitmap 化し、一定の処理を意味も無く TeX で処理して、何かを出すのも面白いかもしれない。

ちなみに、そのドイツ人の方は、ぼくの EuroTeX 2012 の発表後、「iamjatex.sty で書かれた KnuthアスキーアートTeX ユーザの集い 2011 LT で発表した例の絵)を見つけたぞ!」と言って、笑ってくださった。

*1:えっ、\expandafter をあまり使ってへんって?そんなんで満足してよいのかって?(笑