epros (UPD: я сделал существенные исправления)
Стандартное место, где искать ответы на такие вопросы, -- The TeXBook, by Don Knuth. Я, как уже говорил, не эксперт: отвечаю в меру своего понимания, относитесь ко мне с недоверием.
1) Да. Да.
2) Да (кроме последней итерации).
The TeXBook, chapter 20 писал(а):
How does TeX determine where an argument stops, you ask. Answer: There are two cases. A delimited parameter is followed in the parameter text by one or more non-parameter tokens, before reaching the end of the parameter text or the next parameter token; in this case the corresponding argument is the shortest (possibly empty) sequence of tokens with properly nested {...} groups that is followed in the input by this particular list of non-parameter tokens. (Category codes and character codes must both match, and control sequence names must be the same.) An undelimited parameter is followed immediately in the parameter text by a parameter token, or it occurs at the very end of the parameter text; in this case the corresponding argument is the next nonblank token, unless that token is ‘ { ’, when the argument will be the entire {...} group that follows. In both cases, if the argument found in this way has the form ‘ { <nested tokens> } ’, where <nested tokens> stands for any sequence of tokens that is properly nested with respect to braces, the outermost braces enclosing the argument are removed and the <nested tokens> will remain.
То есть если определить \def\mymacro#1#2\relax{...}
и вызвать \mymacro abcd\relax, то 1-м аргументом будет a, а 2-м bcd;
если вызвать \mymacro{ab}cd\relax или \mymacro{ab}{cd}\relax, то 1-м будет ab, а 2-м cd;
если вызвать \mymacro{ab}{c}d\relax, то 1-м будет ab, а 2-м {c}d;
если вызвать \mymacro{}abcd\relax, то 1-м будет пустое слово, а 2-м abcd,
если вызвать \mymacro{abcd}\relax, то 1-м будет abcd, а 2-м пустое слово,
если вызвать \mymacro\relax\relax, то 1-м будет \relax, а 2-м -- пустое слово.
(Проверьте!)
Можно написать, например, \def\mymacro[#1][#2]{...}, тогда вызывать надо будет в формате \mymacro[ab][cd].
\relax\relax нужно для корректного прохождения последней итерации. В начале предпоследней от "азбуки" останется 1 байт, который подставится в качестве #1, в качестве #2 будет пустое слово, а 1-й из этих 2 \relax'ов будет маркером конца аргументов. В результате предпоследней итерации будет вызвано \makeother\relax\relax, поэтому в качестве #1 подставится 1-й \relax, в качестве #2 пустое слово, а 2-й \relax будет маркером конца.
3) Да, \myfootnoteaux -- это макрос с 2 аргументами.
3а) Нет; но тут как раз определение РАНЬШЕ 1-го вызова, потому что 1-й вызов происходит в самом низу, уже после \begin{document}.
3б) Нет. Нет.
Предположим, написано \myfootnote{AAAA}{BBBB}. Сначала выполняется макрос \myfootnote с аргументом AAAA; после этого шага \myfootnote{AAAA}{BBBB} превращается в \begingroup\expandafter\makeother\azbuka\relax\myfootnoteaux{AAAA}{BBBB} (с BBBB пока вообще ничего не происходит). Далее будет раскрыта \azbuka, потом выполнится \makeother, а потом \myfootnoteaux, в который подставятся 2 аргумента: AAAA и BBBB.
3в) Закрывающая есть, она сразу перед \begin{document}.
4) Это не совсем одно и то же. \begingroup спаривается только с \endgroup, но не с }, а { только с }, но не с \endgroup. При определении макроса с помощью \def "замещающий текст" должен быть между {}, а \begingroup и \endgroup не учитываются как ограничители замещающего текста.