Переопределение команд с параметрами с помощью \newenvironment

В соответствии с этим вопросом:

Переопределение команд в новой среде

Как переопределить (или определить с помощью \def) макрос, использующий параметры? Я продолжаю получать ошибку illegal parameter definition in \foo. Поскольку мне нужны настраиваемые разделители, я не могу использовать \newcommand или \renewcommand.

Общий вид моего кода выглядит так:

\newenvironment{foo}{% 
    ...spacing stuff and counter defs...
    \def\fooitem#1. #2\endfooitem{%
        ...stuff...
    }
    \def\endfooitem{endfoo}
}
{...after material (spacing)...}

Это должно быть возможно. Прямо сейчас я использую определения простого TeX (как я уже упоминал в вопросе выше), но мне бы очень хотелось, чтобы они соответствовали системе LaTeX.


person gvkv    schedule 30.01.2009    source источник


Ответы (1)


Вам нужно удвоить количество символов # для каждого вложенного определения. Внутри \newcommand или \newenvironment вызывает \def.

\newenvironment{foo}{% 
  ...
  \def\fooitem##1. ##2\endfooitem{%
    ...

Кроме того, это способ сделать то, что вы пытаетесь сделать; не существует чисто LaTeX-метода для определения макроса с аргументами с разделителями.

person Will Robertson    schedule 30.01.2009