Ajuda com referência cruzada de uma equação

Ajuda com referência cruzada de uma equação

Estou tentando aprender como usar os \eqrefcomandos em vez de apenas fazer tag{1.1}, para não precisar voltar e renumerar. Estou tendo problemas: no problema 3b, eu digo

Now \eq{y(t, \epsilon)= y_0(t) + \epsilon y_1(t) + O(\epsilon^2), \label{eq:aa}}

(\eq é uma abreviatura que defini, é \newcommand{\eq}[1]{\begin{align*}#1\end{align*}}). Mais tarde volto e escrevo So we can fill in \eqref{eq:aa}, e os problemas são

  1. Não rotula a equação
  2. Quando se refere a ela, chama-se (1.2), embora seja a primeira equação marcada.

Aqui está um link para o meu código, se isso ajudar você a diagnosticar.https://www.writelatex.com/read/zjhhjpndjpkz

Eu aprecio sua ajuda!

Responder1

OK. aqui estão alguns problemas com sua definição.

qualquerO ambiente de exibição matemática com estrela destina-se a suprimir a numeração. você pode colocar \tag{...}um ambiente com estrela, mas o número não será incrementado automaticamente. no entanto, um \labelem tal tagvaiser homenageado por \refou \eqref. (tudo \eqrefo que realmente faz é formatar o argumento de a \refpara ficar na vertical e entre parênteses).

próximo. aligndestina-se a ser usado para expressões de múltiplas linhas, com cada linha tendo uma parte esquerda e uma parte direita. embora muitas pessoas usem \aligntelas de uma linha, é uma má ideia, já que o espaçamento vertical em torno de uma tela de múltiplas linhas é intencionalmente diferente daquele em torno de uma tela de uma linha. e se não houver duas partes em uma linha (separadas por &), a estrutura não será centralizada horizontalmente.

finalmente, transformar ambientes em comandos torna sua entrada muito mais difícil de ser lida e decifrada por outra pessoa, e leva a maus hábitos de entrada - como colocar material de exibição em longas filas. acredite, isso leva a uma grave perda de cabelo por parte dos editores de periódicos.

se você realmente deseja uma exibição numerada de uma linha usando uma abreviação como esta, isso pode ser feito, talvez assim:

\newcommand{\eq}[1]{\begin{equation} #1\end{equation}}

mas é melhor pensar duas vezes antes de fazer isso. alguém sugeriu persuadir seu ambiente/editor de entrada a usar "conclusão". isso faz paramuitoarquivos mais examinados e depuração e manutenção mais eficientes no longo prazo.

Responder2

Dei uma olhada no código que você fornece no link. O principal problema, ao que parece, é que você usa o align*ambiente na definição da \eqmacro. O align*ambiente, por design, nãonãoincrementar ou imprimir números de equações. Conseqüentemente, qualquer \labelinstrução associada a esta equação (ou grupo de equações) não apontará para o que é gerado por \eq.

Como resultado, uma instrução \refou subseqüente \eqrefnão apontará para essa estrutura. Em vez disso, (??)será impressa ou a referência cruzada apontará para o objeto que teve seu contador associado incrementado mais recentemente antes da \labelinstrução perdida. Este objeto poderia ser uma seção, um teorema, alguma outra equação que foi gerada da maneira “normal” (ou seja, não via \eq), etc.

Você deve conseguir um resultado melhor definindo a \eqmacro da seguinte forma:

\newcommand{\eq}[1]{\begin{equation}\begin{split} #1 \end{split}\end{equation}}

e afixar uma \labelinstrução nele, como em

\eq{y(t, \epsilon)= y_0(t) + \epsilon y_1(t) + O(\epsilon^2),} \label{eq:aa}

Observe que com esta configuração, você deve renomear todas \tagas instruções dentro de uma \eqinstrução com \label.

informação relacionada