我的 tex 文件中目前有这样的引文:
\begin{quote}
blabla
\end{quote}
现在我想内联引用此引文。添加标签有效,但我无法让caption
工作,以显示此引文实际上是数字 xy 因为此环境似乎不是浮动环境,这显然是 的要求\caption{}
。
因此我尝试了以下方法:
\begin{quote}
blabla
\label{quote:one}
\end{quote}
并且\caption{test}
在标签前添加不起作用。
答案1
请参阅下文了解替代外观。请参阅附录了解使用辅助文件以供将来引用的版本
正如 Christian 在评论中指出的那样,引言没有计数器(因此也没有识别标签)。但是,我们可以将引言引入环境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
。为了解释这一点,我在本附录中实施了一个写入辅助文件的系统,以便在定义标签之前就可以使用它们。
\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
只有一个\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}
在序言的末尾,您将通过参考文献的超链接自动获得所需的结果。