Я использую ntheorem для набора ряда условий. В моей преамбуле я имею:
\theoremstyle{empty}
\newtheorem{Condtion}{Condtion}
Когда я хочу набрать условие, я пишу:
\begin{Condtion}[name]
\label{cnd:nm}
foo foo foo
\end{Condition}
Имя кажется полужирным на той же строке как запуск текста условия без числа или чего-либо.Прекрасно.
Что я хочу сделать, теперь, относятся к условию некоторым вариантом \ref
команда, \ref называет число [который не отображен больше нигде] \thref, записи "Условие n" для энного условия \nameref написал имя РАЗДЕЛА маркировки. zref решение было предложено здесь, но кажется неудовлетворительным и громоздким.
Какие-либо предложения на простом способе сделать это? (Даже более простое zref решение было бы хорошо), В данный момент, я только что определил a \newcommand
для каждого условия и использования это вместо того, чтобы цитировать само условие. Это является семантически непрозрачным и просто неудовлетворяющим...
(редактирование: Я послал по электронной почте одному автору ntheorem, Wolfgang May, и он объяснил, что нет действительно способа сделать это в ntheorem, начиная с [имя], опция не зарегистрирована.)
(редактирование: Это не простофиля, как предложено в комментарии, так как я интересуюсь ссылкой на среду ее дополнительной командой имени, не ссылаясь на раздел/главу, в котором это находится.)
Я думаю, что следующие могут делать то, что вы хотите.
\makeatletter
\def\namedlabel#1#2{\begingroup
\def\@currentlabel{#2}%
\label{#1}\endgroup
}
\makeatother
Затем вы используете его как
\begin{theorem}
\namedlabel{thm:seamus}{Seamus' Theorem}
Here is Seamus' Theorem.
\end{theorem}
Here I reference~\ref{thm:seamus}.
К сожалению, тогда на него можно ссылаться только по имени, хотя я полагаю, вы также можете использовать обычный \ label
(с другим ключом, конечно).
Для сред amsthm
вы можете использовать
\makeatletter
\let\@old@begintheorem=\@begintheorem
\def\@begintheorem#1#2[#3]{%
\gdef\@thm@name{#3}%
\@old@begintheorem{#1}{#2}[#3]%
}
\def\namedthmlabel#1{\begingroup
\edef\@currentlabel{\@thm@name}%
\label{#1}\endgroup
}
\makeatother
вы можете ознакомиться с пакетом nameref
, который распространяется вместе с hyperref
. В документации nameref
есть раздел о ссылках на "вещи".
Больше о ссылках можно найти в разделе TeX FAQ Ссылка на вещи по их имени.