マクロツイーター

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

zxjatype でアレな環境を使うとアレな件(2)

(前回の続き)
対処法

これに対処する方法であるが、挿入されるトークン列の方に細工を施して、そちら側で先読み処理をする、という方法も考えられるが、元々の挿入トークン列の性質によっては困難な可能性がある。恐らく、\end マクロの方を修正する方が簡単であろう。

前回の最後に述べたように、\csname の前に(展開不能な) \relax が置いてあれば問題が起こらない。なので、次のように、\end の定義本体の先頭に \relax を追加すればよい。

\def\end#1{%
  \relax % 追加
  \csname end#1\endcsname\@checkend{#1}%
  …………}

ただし、これだと、\end〜 が実際に定義されている場合にも、その前に展開不能\relax が入ることになる。これが問題になる事例は思いつかないが、何か不安である。そこで、次のようにして、未定義の場合にのみ \relax を入れることにすればよさそうだ。((なお、ここでは e-TeX 拡張の \ifcsname の使用が必須である。\csname を使ってしまうとそこで「\relax 化」が起こってしまって元も子も無くなる。))

\def\end#1{%
  \unless\ifcsname end#1\endcsname\relax\fi % 追加
  \csname end#1\endcsname\@checkend{#1}%
  …………}

とりあえず、この fix をパッケージにしたものを用意しておく。

これで、元々の TeX Forum の投稿の例も通るようになる。

\documentclass{article}
\usepackage{zxjatype}
\usepackage{zxcjkfix1}%fix
\setjamainfont{IPAMincho}
\begin{document}
\begin{Huge}「」\end{Huge}
\end{document

ZXjatype パッケージをどうするかはもう少し考えさせてください……