Como repetir texto sem duplicá-lo?

Como repetir texto sem duplicá-lo?

Eu defini um comando para anotar 'requisitos' em meu documento. Ele estiliza e numera automaticamente e cria um rótulo ao qual posso me referir para obter o número - muito bom. Porém, às vezes quero repetir o texto completo do requisito ao me referir a ele, para que o leitor não precise voltar atrás no documento. É claro que não quero reescrevê-lo, porque isso estaria sujeito a erros quando eu o alterasse em um só lugar. Como posso repetir o texto usando um comando?

A forma atual da minha definição de comando é a seguinte:

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

Tentei muitas variações da seguinte tentativa, sem sucesso:

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

Responder1

Existe o \csname <string>\endcsname, que faz um comando \<string>. Você também pode usar as macros do etoolbox, que são muito convenientes de usar.

Se você substituir \newcommand{\req{#2}}{#1}por \expandafter\def\csname req#2\endcsname {#1}, deve funcionar.

\def\namedefine uma macro \name. Não pergunta, ao contrário \newcommand, se já existe. Portanto, ele substitui \name, se \namejá existir. Isso pode ser útil, mas geralmente é prejudicial.

Se você escrever apenas \def\csname req#2\endcsname {<definition>}, ele tentará redefinir \csnamee gerará um erro, porque há um solitário \endcsname(e um ausente \).

Se você colocar \expandafterantes \def,

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

torna-se

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

e tada, está definido. \expandafteratrasa a expansão do próximo token (pode ser uma sequência de comando). Dois expandafters atrasam por dois ciclos.

informação relacionada