
Я пытаюсь научиться использовать \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), хотя это первое помеченное уравнение.
Вот ссылка на мой код, если он поможет вам в диагностике.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
.
В результате последующая инструкция \ref
or \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
.