
Atualmente tenho uma cotação em meu arquivo tex como esta:
\begin{quote}
blabla
\end{quote}
Agora quero me referir a esta citação inline. Adicionar um rótulo funciona, mas não consigo fazê-lo caption
funcionar, para mostrar que esta citação é na verdade o número xy. Como esse ambiente não parece ser um ambiente flutuante, o que aparentemente é um requisito para \caption{}
.
Então eu tentei o seguinte:
\begin{quote}
blabla
\label{quote:one}
\end{quote}
E adicionar \caption{test}
logo antes do rótulo não funciona.
Responder1
Veja abaixo a aparência alternativa. Consulte o ADENDO para versão que usa arquivo aux para permitir referências futuras
Como Christian observou em um comentário, uma citação não tem contador (e, portanto, nenhum rótulo de identificação). No entanto, poderíamos introduzir um no lquote
ambiente, que requer um rótulo como argumento, que pode ser referenciado por \quoteref
.
A implementação fornecida abaixo pode ser alterada para atender às necessidades de aspas, esquema de numeração e aparência, 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}
Aparência 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}
TERMO ADITIVO:
Pelo comentário do OP, parece que ele pode estar usando a \quoteref
definição anterior ao rótulo no lquote
ambiente. Para explicar isso, implementei neste adendo um sistema de gravação no arquivo aux para disponibilizar os rótulos antes mesmo de serem definidos.
\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}
Nota: a \protected@iwrite
macro veio da resposta do egreg emEscrevendo \\ em um arquivo.
Responder2
Apenas a \pageref
faz 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}
Responder3
A solução aceita apresenta falhas em vários aspectos. O LaTeX já possui seu próprio mecanismo de referência e isso o ignora, o que causa problemas como você viu.
Em vez disso, eu definiria o lquote
ambiente da seguinte forma:
\newcounter{numquote}
\newenvironment{lquote}{%
\refstepcounter{numquote}%
\quote}{\unskip~\thenumquote\endquote}
Você usaria isso por algo como
\begin{lquote}
blah blah
\label{quote:one}
\end{lquote}
...
quote~\ref{quote:one}.
Então, se você colocar
\usepackage{hyperref}
no final do preâmbulo você obterá automaticamente o resultado desejado com hiperlinks na referência.