Created
January 6, 2016 19:36
-
-
Save kmaed/c443384bb9a3add86e20 to your computer and use it in GitHub Desktop.
\scantokens の使い方
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%% 眠れないので書いた.etoolbox.sty を読むと勉強になるなあ(つらい). | |
%% まずは基本形で準備運動. | |
%% 一度保存された,パラメータ文字を含むトークン列を定義とする, | |
%% パラメータをとるマクロを定義したいとする. | |
\def\a{##2##1} % カテゴリコードが6である限り,# は二重にせざるをえない. | |
\expandafter\def\expandafter\b\expandafter#\expandafter1\expandafter#\expandafter2\expandafter{\a} | |
\show\b % #1#2->#2#1 | |
%% これはひどい.\edef 使いましょうよ. | |
\edef\b{% | |
\unexpanded{\def\b#1#2}{\expandafter\unexpanded\expandafter{\a}}}% etoolbox があれば \expandonece を使う. | |
\show\b % ->\def \b ##1##2{##2##1}. | |
\b | |
\show\b % #1#2->#2#1 | |
%% しかし,# を ## にいちいち変換して置換テキストを受け渡すのは美しくない. | |
%% そこで,カテゴリコードを12にして保存し,\scantokens で読み直す. | |
\catcode`\#=12 | |
\def\a{#2#1} | |
\catcode`\#=6 | |
\edef\b{% | |
\unexpanded{\def\b#1#2}{\expandafter | |
\scantokens\expandafter{\expandafter\unexpanded\expandafter{\a}\noexpand}}} | |
\show\b % ->\def \b ##1##2{##2##1}. | |
\b | |
\show\b % #1#2->#2#1 | |
%% すごい(つらい)!! | |
\bye |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment