RSS

LaTeXでラベル印刷的なもの

    付与されたタグ:
  • LaTeX

LaTeXでラベル印刷のようなことをした。多少マクロをごちゃごちゃする必要があった。次のような処理が必要だった。

  • 個々の要素を繰り返す
  • 繰り返しの数は紙の高さから自動計算

まず要素を作るところから。\frameboxとか並べると紙の横にはみでてしまった。\fboxだと幅の指定などができないのでminipage環境を\fboxで囲むというやり方にする。その内容をマクロとして定義する。

\newcommand{\infobox}{\fbox{
\begin{minipage}[l]{91mm}
\mbox{TANIGUCHI Takaki}
\mbox{takaki@asis.media-as.org} 
\mbox{https://takaki-web.media-as.org/}
\mbox{Facebook https://facebook.com/taniguchi.takaki}
\end{minipage}
}
}

繰り返す高さを計算するにはこの\fboxの高さを計算しなくてはならない。\setboxを使って箱を保存して高さを出す。

\setbox0=\hbox{\infobox}

これで\ht0と\dp0から箱の高さが計算できる。

ifthenパッケージを使うことで \whiledo が使える。これでループを回しながら高さを計算していく。一つのボックスの幅が91mmなので二つで改行されることになる。二つ印刷するごとに高さを増やしていき,それが\textheight を越えるまで繰り返すという手順になる。

\newlength{\boxH}
\setlength{\boxH}{\ht0}
\addtolength{\boxH}{\dp0}

\newlength{\Ylen}
\setlength{\Ylen}{\boxH}

これで高さのためのカウンターの準備。\boxHはここのボックスの高さ,\Ylenはこれまで出力した高さの合計。

\whiledo{\Ylen < \textheight}
{\ifthenelse{\isodd{\theIfcounter}}{\addtolength{\Ylen}{\boxH}}{}%
\infobox\stepcounter{Ifcounter}
}

これでループを回すごとにカウンターをインクリメント。\ifthenelseでカウンターが偶数のとき,つまり改行されたタイミングで高さの合計である\Ylenを\boxHだけ増やしている。これが \textheight の範囲内であるかぎりループを回す。このような手順になる。