Ссылка на среду цитаты

Ссылка на среду цитаты

В моем 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}

в конце вашей преамбулы вы автоматически получите желаемый результат с гиперссылками на источник.

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