引用报价环境

引用报价环境

我的 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}

在序言的末尾,您将通过参考文献的超链接自动获得所需的结果。

相关内容