マクロツイーター

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

じゃあ \if の抜き打ちテストやるぞー

(元ネタ? →じゃあ this の抜き打ちテストやるぞー

なんか JavaScript の this は難しいらしいな。でも、\if なんて TeX プログラミングの基礎の基礎の話だから、普段 TeX コードを書いてる人だったら \if はみんなばっちりだよな。じゃあ今から抜き打ちテストするぞー。

plain TeX または LaTeX において、起動直後に以下のコードを実行したとする。

\let\a=a
\let\b=a
\def\c{c}
\chardef\d=`d
\let\primA\indent
\chardef\chardefA=42
\newcount\countA \countA=42
\def\macroA{42}
\def\empty{}
\let\X\relax
\catcode`\X=13 \def X{c}
\catcode`\Y=13 \let Y=c
\catcode`\Z=13 \let Z\advance
\catcode`\&=13 \let &\expandafter
\catcode`\?=13 \let ?\undefinedA

\undefinedA\undefinedB は当然未定義です)

この状態において、以下に挙げる \if 文の各々について、条件判定結果が真と偽の何れになるかを答えよ。

  1. \if a\a
  2. \if b\b
  3. \if \a\b
  4. \if 42
  5. \if c\c
  6. \if ""
  7. \if \empty{}
  8. \if \indent\noindent
  9. \if \countA\chardefA
  10. \if \empty\macroA
  11. \if a\noexpand\a
  12. \if b\noexpand\b
  13. \if c\noexpand\c
  14. \if \primA\noexpand\macroA
  15. \if \noexpand\empty\noexpand\macroA
  16. \if \noexpand'\string'
  17. \if \noexpand\undefinedA\noexpand\undefinedB
  18. \if \noexpand$\relax
  19. \if \noexpand\macroA\countA
  20. \if \noexpand\c\noexpand\undefinedA
  21. \if \noexpand\undefinedB\noexpand\a
  22. \if d\d
  23. \if XY
  24. \if \string X\noexpand X
  25. \if \noexpandY\stringY
  26. \if \noexpandX\relax
  27. \if \noexpandX\c
  28. \if \noexpandX\noexpand\c
  29. \if \noexpandX\chardefA
  30. \if \noexpandYc
  31. \if \noexpandY\primA
  32. \if \noexpandY\string c
  33. \if \noexpandY\countA
  34. \if \noexpandZ\multiply
  35. \if \noexpandZ\noexpand\undefinedA
  36. \if \noexpandZ\stringZ
  37. \if \noexpand&\noexpand\futurelet
  38. \if \noexpand&\noexpand\undefinedA
  39. \if \noexpand&\string&
  40. \if \noexpand?\noexpand\undefinedB
  41. \if \noexpandX\noexpandY
  42. \if \noexpand?\noexpand&

評価は以下の通り。

正答数評価
〜23幸せな LaTeX ユーザ
24〜29\if 初心者
30〜35\if 初級者
36〜41\if マスター
42\if 芸人