Skip to content

Instantly share code, notes, and snippets.

@zr-tex8r
Forked from anonymous/gist:4292489
Created December 15, 2012 10:17
Show Gist options
  • Save zr-tex8r/4292499 to your computer and use it in GitHub Desktop.
Save zr-tex8r/4292499 to your computer and use it in GitHub Desktop.
TeX: 値の局所化を使ってマクロをネスト可能にする
% 敢えて ToL 文書
\documentclass[a4paper]{jsarticle}
\begin{document}
\makeatletter %!!!!!!!!!!!!!!!!!!!!!!!!!
% 例のアレ
\def\favor#1#2{%
\def\xx@person{#1}%
\def\xx@item{#2}%
わぁい\xx@item\space
\xx@person \xx@item 大好き
}
% ネストなしなら正常
\favor{あかり}{高階述語論理}
%==>[出力] わぁい高階述語論理 あかり高階述語論理大好き
% ネストがあると異常動作
\favor{あかり}{「\favor{あかり}{高階述語論理}」}
%==>[出力] わぁい「わぁい高階述語論理 あかり高階述語論理大好き」 あかり高階述語論理大好き
% 値のローカル化をしてみる
\def\favor#1#2{%
\begingroup
\def\xx@person{#1}%
\def\xx@item{#2}%
わぁい\xx@item\space
\xx@person \xx@item 大好き
\endgroup
}
% ネストがあっても正常
\favor{あかり}{「\favor{あかり}{高階述語論理}」}
%==>[出力] わぁい「わぁい高階述語論理 あかり高階述語論理大好き」 あかり「わぁい高階述語論理 あかり高階述語論理大好き」大好き
%-------------------
\def\favor{%
\begingroup
\@ifnextchar[%
{\xx@favor@a}%
{\xx@favor@a[あかり]}%
%\endgroup
%↑ここにあると \futurelet が拾ってしまうのでダメ
}
\def\xx@favor@a[#1]#2{%
\def\xx@person{#1}%
\def\xx@item{#2}%
わぁい\xx@item\space
\xx@person \xx@item 大好き
\endgroup
}
\favor{「\favor{高階述語論理}」}
%-------------------
% そもそも変数を使わなければよいのだが……
\def\favor#1#2{%
わぁい#2 #1#2大好き
}
\makeatother %!!!!!!!!!!!!!!!!!!!!!!!!!
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment