
В моем tex-файле сейчас есть такая цитата:
\begin{quote}
blabla
\end{quote}
Теперь я хочу сослаться на эту цитату в строке. Добавление метки работает, но я не могу заставить caption
работать, чтобы показать, что эта цитата на самом деле является числом xy Поскольку эта среда, похоже, не является средой float, что, по-видимому, является требованием для \caption{}
.
Итак, я попробовал следующее:
\begin{quote}
blabla
\label{quote:one}
\end{quote}
А добавление \caption{test}
прямо перед этикеткой не работает.
решение1
См. ниже альтернативный внешний вид. См. ДОПОЛНЕНИЕ для версии, которая использует aux-файл для разрешения будущих ссылок
Как заметил Кристиан в комментарии, цитата не имеет счетчика (и, следовательно, идентифицирующей метки). Однако мы могли бы ввести ее в lquote
среду, которая требует метку в качестве аргумента, на который можно ссылаться с помощью \quoteref
.
Приведенная ниже реализация может быть изменена в соответствии с потребностями в кавычках, схеме нумерации, внешнем виде и т. д.
\documentclass{article}
\newcounter{numquote}
\newenvironment{lquote}[1]{%
\stepcounter{numquote}%
\expandafter\xdef\csname#1\endcsname{\fbox{\thenumquote}}%
\quote``\ignorespaces}{\unskip''\fbox{\thenumquote}\endquote}
\newcommand\quoteref[1]{\csname#1\endcsname}
\begin{document}
Compare this quote
\begin{lquote}{quote:one}
blabla
\end{lquote}
to this one
\begin{lquote}{quote:two}
moreblabla
\end{lquote}
In quotation \quoteref{quote:one}, we see a difference from quote \quoteref{quote:two}.
\end{document}
Альтернативный внешний вид
\documentclass{article}
\newcounter{numquote}
\newenvironment{lquote}[1]{%
\stepcounter{numquote}
\expandafter\xdef\csname#1\endcsname{\thenumquote}%
\quote Quote \thenumquote: ``\ignorespaces}{\unskip''\endquote}
\newcommand\quoteref[1]{\csname#1\endcsname}
\begin{document}
Compare this quote
\begin{lquote}{quote:one}
blabla
\end{lquote}
to this one
\begin{lquote}{quote:two}
moreblabla
\end{lquote}
In quotation \quoteref{quote:one}, we see a difference from quote \quoteref{quote:two}.
\end{document}
ПРИЛОЖЕНИЕ:
Из комментария OP следовало, что он, возможно, использует \quoteref
предварительный вариант определения метки в lquote
среде. Чтобы учесть это, в этом дополнении я реализовал систему записи в файл aux, чтобы сделать метки доступными даже до того, как они будут определены.
\documentclass{article}
\makeatletter
\long\def \protected@iwrite#1#2#3{%
\begingroup
\let\thepage\relax
#2%
\let\protect\@unexpandable@protect
\edef\reserved@a{\immediate\write#1{#3}}%
\reserved@a
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi
}
\newcounter{numquote}
\newenvironment{lquote}[1]{%
\stepcounter{numquote}%
\protected@iwrite\@auxout{\def\nex{\noexpand\noexpand\noexpand}}{%
\nex\expandafter\xdef%
\nex\csname #1%
\nex\endcsname{\thenumquote}%
}%
\quote Quote \thenumquote: ``\ignorespaces}{\unskip''\endquote}
\makeatother
\newcommand\quoteref[1]{\csname#1\endcsname}
\begin{document}
In the future quotation \quoteref{quote:one},
we see a difference from quote \quoteref{quote:two}.
Compare this quote
\begin{lquote}{quote:one}
blabla
\end{lquote}
to this one
\begin{lquote}{quote:two}
moreblabla
\end{lquote}
In quotation \quoteref{quote:one}, we see a difference from quote \quoteref{quote:two}.
\end{document}
Примечание: \protected@iwrite
макрос взят из ответа egreg наЗапись \\ в файл.
решение2
Только a \pageref
имеет смысл:
\documentclass{article}
\usepackage{caption}
\begin{document}
\begingroup
\begin{quote}
blabla
\end{quote}
\captionof*{figure}{Test}\label{quote:one}
\endgroup
See quote on page~\pageref{quote:one}
\end{document}
решение3
Принятое решение во многом дефектно. LaTeX уже имеет свой собственный механизм ссылок, и это обходит его, что вызывает проблемы, как вы видели.
Вместо этого я бы определил lquote
окружающую среду следующим образом:
\newcounter{numquote}
\newenvironment{lquote}{%
\refstepcounter{numquote}%
\quote}{\unskip~\thenumquote\endquote}
Вы бы использовали это как-то так
\begin{lquote}
blah blah
\label{quote:one}
\end{lquote}
...
quote~\ref{quote:one}.
Тогда, если вы поставите
\usepackage{hyperref}
в конце вашей преамбулы вы автоматически получите желаемый результат с гиперссылками на источник.