¿Cómo repetir texto sin duplicarlo?

¿Cómo repetir texto sin duplicarlo?

He definido un comando para escribir "requisitos" en mi documento. Automáticamente le da estilo, lo numera y crea una etiqueta a la que puedo referirme para obtener el número, realmente agradable. Sin embargo, a veces quiero repetir el texto completo del requisito al hacer referencia a él, para que el lector no tenga que retroceder en el documento. Por supuesto, no quiero reescribirlo, porque sería propenso a errores cuando lo cambie en un solo lugar. ¿Cómo puedo repetir el texto usando un comando?

La forma actual de mi definición de comando es la siguiente:

\newcommand{\requirement}[2]{
    \vspace{10pt}
    \noindent
    \textbf{
        \refstepcounter{reqnum}
        \label{req:#2}
        R\thereqnum: #1
    }
}

Probé muchas variaciones del siguiente intento, sin éxito:

\newcommand{\requirement}[2]{
    \vspace{10pt}
    \noindent
    \textbf{
        \refstepcounter{reqnum}
        \label{req:#2}
        R\thereqnum: #1
    }
    \newcommand{\req{#2}}{#1}
}

Respuesta1

Está el \csname <string>\endcsname, que emite un comando \<string>. También puede utilizar las macros de etoolbox, que son muy cómodas de utilizar.

Si lo reemplaza \newcommand{\req{#2}}{#1}con \expandafter\def\csname req#2\endcsname {#1}, debería funcionar.

\def\namedefine una macro \name. No pregunta, al contrario de \newcommand, si ya existe. Entonces sobrescribe \name, si \nameya existe. Esto puede resultar útil, pero normalmente es perjudicial.

Si escribe solo \def\csname req#2\endcsname {<definition>}, intenta redefinir \csnamey arroja un error, porque hay uno solo \endcsname(y falta un \).

Si pones \expandafterantes \def,

\expandafter\def\csname req#2\endcsname {<definition>}

se convierte

\def\req<argument2> {<definition>}

y tada, está definido. \expandafterretrasa la expansión del siguiente token (puede ser una secuencia de comando). Dos expandafters se retrasan durante dos ciclos.

información relacionada