Помогите с перекрестными ссылками на уравнение

Помогите с перекрестными ссылками на уравнение

Я пытаюсь научиться использовать \eqrefкоманды, а не просто делать tag{1.1}, чтобы не возвращаться и не перенумеровывать. У меня проблема: в задаче 3b я говорю

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

(\eq — это аббревиатура, которую я определил, это \newcommand{\eq}[1]{\begin{align*}#1\end{align*}}). Позже я возвращаюсь и пишу So we can fill in \eqref{eq:aa}, и проблемы

  1. Он не маркирует уравнение
  2. Когда он возвращается к нему, он называет его (1.2), хотя это первое помеченное уравнение.

Вот ссылка на мой код, если он поможет вам в диагностике.https://www.writelatex.com/read/zjhhjpndjpkz

Я ценю вашу помощь!

решение1

хорошо. вот некоторые проблемы с вашим определением.

любойСреда отображения математических данных со звездочками предназначена для подавления нумерации. Вы можете поместить ее \tag{...}в среду со звездочками, но число не будет автоматически увеличиваться. Однако,\label в таком тегеволябыть учтен оператором \refили \eqref. (на \eqrefсамом деле он просто форматирует аргумент так, \refчтобы он был прямым и заключался в скобки.)

next. alignпредназначен для использования в многострочных выражениях, где каждая строка имеет левую и правую часть. Хотя многие используют его \alignдля однострочных дисплеев, это плохая идея, поскольку вертикальное расстояние вокруг многострочного дисплея намеренно отличается от такового вокруг однострочного дисплея. И если в строке нет двух частей (разделенных &), структура не будет центрирована по горизонтали.

наконец, превращение окружения в команды значительно усложняет чтение и расшифровку вашего ввода для других людей и приводит к плохим привычкам ввода — например, к тому, что отображаемый материал превращается в длинные строки. Поверьте, это приводит к серьезной потере волос у редакторов журналов.

Если вам действительно нужен однострочный, пронумерованный дисплей с использованием такого сокращения, это можно сделать, например, так:

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

но лучше дважды подумать, прежде чем делать это. кто-то предложил убедить вашу среду ввода/редактор использовать «дополнение». это делаетмногоболее понятные файлы и более эффективная отладка и обслуживание в долгосрочной перспективе.

решение2

Я посмотрел на код, который вы предоставили по ссылке. Основная проблема, как мне кажется, в том, что вы используете окружение align*в определении макроса \eq.align* Окружение, по замыслу, ненетинкрементировать или печатать номера уравнений. Следовательно, любая \labelинструкция, связанная с этим уравнением (или группой уравнений), не будет указывать на то, что сгенерировано \eq.

В результате последующая инструкция \refor \eqrefне будет указывать на эту структуру. Вместо этого (??)будет выведено либо что-то, либо перекрестная ссылка будет указывать на объект, связанный с которым счетчик был увеличен последним перед утерянной \labelинструкцией. Этот объект может быть разделом, теоремой, каким-то другим уравнением, которое было сгенерировано "нормальным" способом (т. е. не через \eq), и т. д.

Вы сможете добиться лучшего результата, определив \eqмакрос следующим образом:

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

и прикрепите \labelк нему инструкцию, например

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

Обратите внимание, что при такой настройке вам следует переименовать все \tagинструкции внутри \eqоператора с помощью \label.

Связанный контент