Hacer referencia a un entorno de cotización

Hacer referencia a un entorno de cotización

Actualmente tengo una cita en mi archivo tex como esta:

\begin{quote}
blabla
\end{quote}

Ahora quiero hacer referencia a esta cita en línea. Agregar una etiqueta funciona, pero no puedo hacer que captionfuncione para mostrar que esta cita es en realidad el número xy. Ya que este entorno no parece ser un entorno flotante, lo que aparentemente es un requisito para \caption{}.

Entonces he probado lo siguiente:

\begin{quote}
blabla
\label{quote:one}
\end{quote}

Y el complemento \caption{test}justo antes de la etiqueta no funciona.

Respuesta1

Consulte a continuación la apariencia alternativa. Consulte el ADENDA para conocer la versión que utiliza un archivo auxiliar para permitir referencias futuras.

Como Christian señaló en un comentario, una cita no tiene contador (y por lo tanto no tiene etiqueta de identificación). Sin embargo, podríamos introducir uno en el lquoteentorno, lo que requiere una etiqueta como argumento, a la que se puede hacer referencia mediante \quoteref.

La implementación que se proporciona a continuación puede modificarse para adaptarse a las necesidades de comillas, esquema de numeración y apariencia, etc.

\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}

ingrese la descripción de la imagen aquí

Apariencia alternativa

\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}

ingrese la descripción de la imagen aquí

APÉNDICE:

Por el comentario del OP parecía que podría estar usando la \quoterefdefinición anterior a la etiqueta en el lquoteentorno. Para tener en cuenta eso, en este anexo he implementado un sistema de escritura en el archivo auxiliar para que las etiquetas estén disponibles incluso antes de que se definan.

\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}

ingrese la descripción de la imagen aquí


Nota: la \protected@iwritemacro provino de la respuesta de egreg enEscribir \\ en un archivo.

Respuesta2

Sólo \pagereftiene sentido:

\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}

Respuesta3

La solución aceptada es defectuosa en muchos sentidos. LaTeX ya tiene su propio mecanismo de referencia y eso lo evita, lo que causa problemas, como ha visto.

En cambio, definiría el lquoteentorno de la siguiente manera:

\newcounter{numquote}
\newenvironment{lquote}{%
  \refstepcounter{numquote}%
  \quote}{\unskip~\thenumquote\endquote}

Usarías esto con algo como

\begin{lquote}
  blah blah
  \label{quote:one}
\end{lquote}
...
quote~\ref{quote:one}.

Entonces, si pones

\usepackage{hyperref}

al final del preámbulo obtendrá automáticamente el resultado deseado con hipervínculos en la referencia.

información relacionada