タイトルはそのうち決める

艦これのおぼえがきとか実験装置とかLaTexのメモとか。

メモ LaTex 文字列を一つずつ取り出す \@tfor

コマンドの外形はこう

\newcommand{\foo}[1]{\@tfor\bar:=#1\do{(一文字ごとに実行する内容)}}

 

  • \newcommandで\fooという、引数が一個のコマンドを定義。
  • \barに#1の中から一文字ずつ代入されて、\doの中身を実行する。
  • \makeatletterと\makeatotherに挟まれた区間に書かないと正常に動作しない。

 

特に最後のお作法を知らなくて何のエラーか全くわからなかった。
オマケにこの書き方で変な事を書くと、正常に動作しなくできるらしい。
そういう根幹に手を加えうるような記法でしかこういうことは実現できないのだろうか?

 

あと、いまさらだけれど、行末の%で改行を殺すかで結構動作が違う。
結局、半角スペースも改行も雑に気にしないで良いわけではない。
当然か。

 

実行例

\documentclass[dvipdfmx,a4j,12pt]{jreport}

%------------------------
\makeatletter
%
\newcommand{\ZenbuOnpu}[1]{%
\@tfor\moji:=#1\do{\moji♪}
}
%
\newcommand{\BadExample}[1]{%
\@tfor\moji:={#1}\do{\moji♪}
}
%
\makeatother
%------------------------

\begin{document}

たとえば、「りおれうす」をこのコマンドに入れると、
\ZenbuOnpu{りおれうす}
となり、うっとおしい。

なお、変なところに括弧を入れると、意図しない動作になる。
やってみると、
\BadExample{りおれうす}
となる。

\end{document}

出力はこんな感じ。

f:id:kurosakiworks:20180211200208p:plain

 

参考

TeXの記憶(19) — 文字列を分解する(\@tfor) – 寝坊した