В базовом движке TeX, на котором написан LaTeX, количество аргументов, которые может принять команда, является фиксированным. То, что вы сделали со значением по умолчанию [\@empty]
, - попросите LaTeX проверить следующий токен, чтобы увидеть, является ли он открытой квадратной скобкой [
. Если это так, LaTeX принимает содержимое квадратных скобок в качестве аргумента, если нет, то следующий токен помещается обратно во входной поток и вместо него используется аргумент \@empty
по умолчанию. Таким образом, чтобы ваша идея сработала, вы должны использовать квадратные скобки, чтобы разграничить необязательный аргумент, когда он присутствует:
\optarg
\optarg[]
\optarg[test]
Тебе повезло больше с этой записью.
Досадно, что вы не можете использовать те же скобки для необязательного аргумента, что и для обязательного аргумента, но это так.