51471


LaTeX（TeX Live
2018）の環境で、`\csname`を用いてコントロールシーケンストークンを動的に作成したいと考えていますが、思った通りに動作しません。

[code]

    \documentclass[a4paper]{article}
    
    \begin{document}
    
    \def\anaconda{OK}
    \def\a{a}
    % 下記のすべてsnakeと出力させたい
    1. \csname anaconda \endcsname \\ % OKと出力されない
    2. \csname anacond\a \endcsname \\ % OKと出力される
    3. \csname \a naconda \endcsname \\ % OKと出力されない
    
    \end{document}
    
[/code]

`\csname`の使い方が間違っていますでしょうか？  
ネットの情報はほとんどが`\expandafter\def\csname ...
\endcsname`の例であり、`\csname`そのものの挙動について理解したいと思っています。


CC BY-SA 4.0
2018-12-24T04:11:34.887
51469
2018-12-24T11:48:57.130
2018-12-24T06:48:57.267
19110
31566
question
tex
csnameの挙動について


`\csname...\endcsname` を使えば，スペースを含む制御綴を生成できます。よって，1.と3.では，`\anaconda␣`
という制御綴が生成・使用されています。`\csname...\endcsname` の場合，存在しない制御綴が呼び出されても Undefined
control sequence のエラーは出ず，`\relax` と同等に定義されます。

それに対し，2. の例では `\a` の後のスペースが制御綴直後のスペースということで消えるため，`\anaconda`
という制御綴が意図通りに呼び出せています。

1.と3.においては，`a` の後のスペースを消せば，意図通りの動きをするでしょう。


CC BY-SA 4.0
2018-12-24T04:36:41.207
51471
2018-12-24T04:36:41.207
2663
51469
answer


これはつまり、\csname の挙動を理解するという問題というよりは、まずは TeX
が読み込みファイル（文字コードの羅列）からトークン列を生成するプロセスについて理解する必要があるということですよね。  
この辺りの情報はウェブにはあまりないので、『The TeXbook』（邦訳は『TeXブック』）や『TeX by
Topic』などの書籍を読むのが良いでしょう。（絶版のものもありますが、大学図書館などには入っていると思います）  
ウェブでは「TeX Wiki」の「マクロの作成」というページに少し解説があります。  
<https://texwiki.texjp.org/?TeX%E5%85%A5%E9%96%80%2F%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E4%BD%9C%E6%88%90>


CC BY-SA 4.0
2018-12-24T06:21:34.947
51474
2018-12-24T06:21:34.947
31567
51469
answer