我正在使用修改后的verbose-ibid
citestyle(按照建议这里)。如果我使用\cite
,它不会使用短版本,这可能很好,但现在我需要使用短版本(cite:short
)。那么我如何使用\cite
并强制使用短格式?
答案1
由于标题(以及一般的浮动字)很少被视为文本流的一部分(毕竟浮动字的位置非常不稳定,而且更难预测读者何时会看浮动字),因此在这些环境中跟踪器是被禁用的。
这biblatex
文档§4.11.5 浮标和 TOC/LOT/LOF 中的跟踪器中的状态,第 232 页
如果在浮动体中给出引文(通常在图表或表格的标题中),学术反向引用(如“ibidem”)或基于页面跟踪器的反向引用将变得含糊不清,因为浮动体是(物理和逻辑上)位于文本流之外的对象,因此此类引用的逻辑不太适用于它们。为了避免任何此类歧义,所有浮动体中的引文和页面跟踪器都暂时禁用。此外,这些跟踪器以及反向引用跟踪器(
backref
)在目录、图表列表和表格列表中都暂时禁用。
所以这种行为确实是有意图的,如果你想强制使用简短的引用,你可以定义一个“执行者”
\makeatletter
\newcommand{\captshort}{\let\blx@imc@ifciteseen\@firstoftwo}
\makeatother
如果在标题中使用它(例如\caption{\captshort\cite{foo}}
),则会强制使用简短引用。
\documentclass{article}
\usepackage[style=verbose]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\newcommand{\captshort}{\let\blx@imc@ifciteseen\@firstoftwo}
\makeatother
\begin{document}
\cite{geer} \cite{geer}
\begin{table}[!h]
\caption{\captshort\cite{geer}}
\end{table}
\cite{wilde} \cite{wilde}
\end{document}
或者,我们可以定义一个新的 cite 命令\shrtcite
,它总是打印简短格式,并使用它
\newbibmacro*{shrtcite}{%
\usebibmacro{cite:citepages}%
\iffieldundef{shorthand}
{\usebibmacro{cite:short}}
{\usebibmacro{cite:shorthand}}}
\DeclareCiteCommand{\shrtcite}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{shrtcite}}
{\multicitedelim}
{\usebibmacro{cite:postnote}}
平均能量损失
\documentclass{article}
\usepackage[style=verbose]{biblatex}
\addbibresource{biblatex-examples.bib}
\newbibmacro*{shrtcite}{%
\usebibmacro{cite:citepages}%
\iffieldundef{shorthand}
{\usebibmacro{cite:short}}
{\usebibmacro{cite:shorthand}}}
\DeclareCiteCommand{\shrtcite}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{shrtcite}}
{\multicitedelim}
{\usebibmacro{cite:postnote}}
\begin{document}
\cite{geer} \cite{geer}
\begin{table}[!h]
\caption{\shrtcite{geer}}
\end{table}
\cite{wilde} \cite{wilde}
\end{document}