名前: 北見 けん 日時: 2004-05-07 17:12:44 IPアドレス: 211.128.71.*
LaTeX では \@sptoken というコントロールシークエンスがあって、 let代入によって空白トークンと等しく定められています。 (要するに、\let\@sptoken=<空白トークン> というわけです。) 困っているのは、 1. \@sptoken と本物の空白トークンを区別できないか 2. \@sptoken と本物の空白トークンを入力バッファから取り除くには という二点です。 お知恵をお借りできれば幸いです。 以下のソースをお試しください。 \everypar{} \makeatletter \message{まず、\string\ifx で\string\@sptoken と比較します。 とまったら Enterキーを押してください。}\read-1to\ \def\\{\ifx\next\@sptoken\show\spacetoken\else\show\notspacetoken\fi} \futurelet\next\\ \relax \futurelet\next\\\@sptoken\relax \futurelet\next\\@\relax \message{次に、本物の空白トークンと比較します。}\read-1to\ \def\\{\ifx\& \show\spacetoken\else\show\notspacetoken\fi} \futurelet\&\\ \relax \futurelet\&\\\@sptoken\relax \futurelet\&\\@\relax \message{というわけで、区別できませんでした。}\read-1to\ \message{今度は、後に続く空白を除去します。} \message{うまくマッチしなかった場合\string\par で止まってエラーに なるので、そのまま Enterキーを押してください。} \message{まず、マクロの区切り引数として\string\@sptoken を 使った場合...}\read-1to\ \def\\{\ifx\next\@sptoken\remove@sptoken\else\show\notspacetoken\fi} \def\remove@sptoken#1\fi\@sptoken{\show\removed} \futurelet\next\\ \par \futurelet\next\\\@sptoken\par \futurelet\next\\@\par \message{続いて、本物の空白トークンを使った場合...}\read-1to\ \def\\{\def\removespacetoken##1\fi}\\ {\show\removed} \def\\{\ifx\next\@sptoken\removespacetoken\else\show\notspacetoken\fi} \futurelet\next\\ \par \futurelet\next\\\@sptoken\par \futurelet\next\\@\par \message{という具合に区別されてしまうので、うまく除去するには 後に続くトークンが本物の空白トークンなのか \string\@sptoken なのか判別したくなるわけです。} \message{ご協力ありがとうございました。}\read-1to\ \@@end
この書き込みへの返事: