¿Cómo puedo lograr un comportamiento similar al de un verbo con un xparse argspec?

¿Cómo puedo lograr un comportamiento similar al de un verbo con un xparse argspec?

¿Cómo puedo utilizar un token previamente escaneado como argumento u{}en una xparseargspec?

\documentclass{article}
\usepackage{xparse}

\NewDocumentEnvironment {some-cool-env} {D<>{\stopscan} u{#1}} {%
  Here is the text up until the stopping token: ``#2'' \newline
  Here's the rest of the environment:                  \par
} {}

\begin{document}
\begin{some-cool-env}
  I am a\stopscan teapot
\end{some-cool-env}

(some inner text)

\begin{some-cool-env}<|>
  A custom built|teapot.
\end{some-cool-env}
\end{document}

que daria

Here is the text up until the stopping token: "I am a"
Here's the rest of the environment:

teapot

(some inner text)

Here is the text up until the stopping token: "A custom built"
Here's the rest of the environment:

teapot.

¿Cómo puedo lograr la sintaxis que deseo? (Con suerte, sin entrar en xparselas entrañas de '...)

El enfoque ingenuo anterior produce el siguiente error:

ERROR: Illegal parameter number in definition of \__xparse_grab_arg:w.

--- TeX said ---
<to be read again> 
                   1
l.9 \DumbVerb
             <|>test|
--- HELP ---
This is probably caused by a \newcommand, \renewcommand,
\newenvironment, or \renewenvironment command in which a # is used
incorrectly.  A # character, except as part of the command name \#,
can be used only to indicate an argument parameter, as in #2, which
denotes the second argument. This error is also caused by nesting one
of the above four commands inside another, or by putting a parameter
like #2 in the last argument of a \newenvironment or \renewenvironment
command.

He editado bastante el cuerpo de la pregunta desde la respuesta de @egreg, pero el título de la pregunta sigue siendo el mismo. Cabe señalar que la pregunta que respondió @egreg fue para comandos únicos definidos con xparse. En tal caso, su respuesta funcionaría, pero lamentablemente no es inmediatamente generalizable para definir entornos similares. (Bueno, eso no es cierto; aún puedes definir un entorno auxiliar, pero esto todavía parece una trampa...)

Respuesta1

Probablemente esto sea demasiado extenso xparse, pero como mu{#1}parece funcionar, puedes hacerlo en dos etapas:

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand\DumbVerb{D<>{|}}{\DumbVerbAux{#1}}
\NewDocumentCommand\DumbVerbAux{mu{#1}}{Here's #2}
\begin{document}
\DumbVerb test|

\DumbVerb<x>testx

\DumbVerb<\xyz>test\xyz
\end{document}

Respuesta2

Elrespuesta de egregEs probablemente el mejor enfoque en este momento, pero me gustaría verlo desde el punto de vista de por qué falla el enfoque deseado. Básicamente, esto tiene dos partes.

A nivel técnico, permitir que los argumentos utilicen información obtenida anteriormente es (probablemente) factible, pero sería muy tedioso hacerlo en general: imagine una función con nueve argumentos, aquí debe permitir ocho posibles argumentos capturados previamente. El uso de un auxiliar dedicado, como en la respuesta de egreg, evita esta complejidad pero debe hacerse de forma gradual.ad hocbase.

A nivel conceptual, xparsese pretende crear interfaces a nivel de documento 'similares a LaTeX2e' pero también 'consistentes'. El problema con la solicitud aquí es que la interfazno esconsistente: cada vez que se utiliza el comando se debe buscar un marcador diferente. Idealmente, estos enfoques no deberían aparecer en los documentos, y ciertamente no con regularidad, por lo que la necesidad de respaldarlos xparsedista mucho de estar clara.

información relacionada