マクロツイーター

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

TeX で行取りするアレをテストしてみた

アレについてだけど。

リンク先の記事を見ると、どこかの ZR さんが「コード中の空白」についてなんか重箱の隅を突いているようであるが、それは気にしないことにして、「行取り」の処理が正しく行われているかを調べてみた。特に一番肝心な、「行の垂直方向(横組みなら縦、縦組みなら横)の位置を正確に合わせる」ことについて、幾つかのテストケースを試すことにした。

以下が、「行取りマクロをテストするための」文書。

% pLaTeX 文書
% ↓もし当該のマクロが特殊な文書レイアウトを要求するなら,
% ↓それに適宜書き換える.
\documentclass[a4paper]{jsarticle}
\usepackage[papersize={100mm,60mm},margin=10mm]{geometry}
% ↓↓↓↓ 以下で, "テスト対象のマクロ"を利用する形で,
% "2行取りで出力する"ための命令 \InTwoLines を定義する.
%\usepackage{some-package}% パッケージ読むとか
\makeatletter %!!!!!!!!!!!!!!!!!!!!!!!!!
% TeX コードを張り付けるとか
\makeatother  %!!!!!!!!!!!!!!!!!!!!!!!!!
% \InTwoLines{<テキスト>} : テキストを2行取りで出力.
\newcommand{\InTwoLines}[1]{....}
% ↑↑↑↑準備終わり
\usepackage{ifthen}
\newcommand*{\xExpr}{$\sqrt{x(t)^2+y(t)^2}$}
\newcommand*{\testCase}[3]{%
  \newpage
  \ifthenelse{#1>0}{%
    \ifthenelse{#1=1}{%
      ページの途中にある場合。
      \ifthenelse{\equal{#2}{Y}}{\xExpr}{Excel}はアレ。\par
    }{}%
    \InTwoLines{{\LARGE Excel はアレ}}\par
    \ifthenelse{#1=2}{%
      ページの先頭にある場合。
      \ifthenelse{\equal{#3}{Y}}{\xExpr}{Excel}はアレ。\par
    }{}%
    \ifthenelse{\equal{#3}{Y}}{\xExpr}{Excel}はアレ。\par
  }{%
    比較の規準として、行どりの無い場合。\par
    \ifthenelse{\equal{#3}{Y}}{\xExpr}{Excel}はアレ。\par
    \ifthenelse{\equal{#3}{Y}}{\xExpr}{Excel}はアレ。\par
    \ifthenelse{\equal{#3}{Y}}{\xExpr}{Excel}はアレ。\par
  }%
  □←この位置が変動しないことを確かめます。
}
\usepackage{yacshowd}
\begin{document}
\testCase{0}{N}{N}
\testCase{0}{N}{Y}
\testCase{1}{N}{N}
\testCase{1}{N}{Y}
\testCase{1}{Y}{N}
\testCase{1}{Y}{Y}
\testCase{2}{N}{N}
\testCase{2}{N}{Y}
\end{document}

この文書を通常通り pLaTeX組版して以下の点を検査する。

  • まず、テストの前提条件が満たされていることを確認する。1 ページ目と 2 ページ目で最終行の〈□〉の位置が全く同じであれば OK。そうでないなら、そもそもこのテストは「使えない」ことになる。*1
  • 3〜8 ページ目で、最終行の〈□〉の位置が 1 ページ目のものと全く同じであるかを調べる。同じであれば、行取りのマクロは(テストの範囲内では)正しく実装されている。そうでないなら、「少なくとも一部の状況では正しく動作しない」ことが解る。

さて、前述の記事の \linespace 命令をテスト対象にした文書コンパイルして、結果を見てみると……、

全てのテストケースで OK でした。

というわけで、その記事のコードは安心して自分の文書で使えますね。あっでもソースコード中の空白文字が…(以下略

*1:レイアウトを変更していないなら OK になるはず。