帮助开发 \textcite 命令,用于 Biblatex 中的详细引用样式(\DeclareCiteCommand 帮助)

帮助开发 \textcite 命令,用于 Biblatex 中的详细引用样式(\DeclareCiteCommand 帮助)

这个问题引出了包中的一个新功能:
biblatex

我想要一个\textcite命令来与 Biblatex 中的详细引用样式一起使用。它应该执行如下操作:

我在文中使用它来替换句子的主语:

As \textcite[4]{JohnDoe} said...

结果可能类似于

正如 John Doe¹ 所说......

。 。 。

__

  1. 约翰·多伊。书名地址:出版社,2011年,第4页。

或者,如果这不是第一次引用:

正如 John Doe² 所说......

。 。 。

__

  1. 多伊,书名,第 4 页。

我尝试使用以下命令执行此操作:

\renewcommand{\textcite}[2][]{\citename{#2}{author}\footcite[#1]{#2}}

但我知道这不是最好的方法(只是开始,它完全忽略了标点符号跟踪器),因为有些是\DeclareCiteCommand专门设计来做这样的事情的 --- 我只是不明白如何使用它们......

答案1

Philipp Lehman 针对此问题提出的优雅解决方案(在 Marco 的回答中给出)已纳入 biblatex 1.7。从 biblatex 2.7a 开始,已进行了一些改进:

  • and在最后的分隔符中使用字符串
  • multiprenotemultipostnote参数的正确输出
  • 正确输出\tvolcite
  • 避免在初次运行 LaTeX 时将尾随标点符号解析为引用键
  • 移动名称标签和脚注标记之间的任何“自动”尾随标点

这是一个例子。

\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=verbose]{biblatex}
\addbibresource{biblatex-examples.bib}

\begin{document}
\null\vfill
What can we learn from \textcite{cicero}?
Following \textcite{cicero}, we adapt some related findings from
\textcites[See][29--30]{kant:ku}{companion}.
We obtain results from various authors---namely:
\textcites(See)(for example)[10--15]{cicero}{companion,knuth:ct:a,knuth:ct:b}.
\end{document}

在此处输入图片描述

第三个引文表明,内联名称标签和作品之间的对应关系可能不明确。只要(压缩)列表有两个以上的名称标签,并且其中至少一个标签使用连续逗号\finalandcomma,列表就会用分号分隔。这种情况在最后一个引文中显示。

答案2

编辑:Philipp 改进了自己的解决方案。他将以详细格式添加此功能。

\documentclass{article}
\usepackage[style=verbose,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter

\DeclareCiteCommand{\textcite}[\cbx@textcite\footcite]
  {\gdef\cbx@savedkeys{}}
  {\printnames{labelname}%
   \xappto\cbx@savedkeys{\thefield{entrykey},}}
  {\multinamedelim}
  {\protected@xappto\cbx@savedcites{%
     [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}

\newrobustcmd{\cbx@textcite}[2]{%
  \def\cbx@savedcites{#1}#2\cbx@savedcites}

\DeclareMultiCiteCommand{\textcites}[\cbx@textcite\footcites]{\textcite}{\multinamedelim}

\makeatother
\begin{document}

\textcite{augustine} claims that \textellipsis

\textcite[55]{augustine} claims that \textellipsis

\textcite[Cf.][]{augustine} claims that \textellipsis

\textcite{augustine,hammond,cotton} show that \textellipsis

\textcites{augustine,hammond,cotton} show that \textellipsis

\textcites{augustine}{hammond}{cotton} show that \textellipsis

\textcites[55]{augustine}[33]{hammond}[99]{cotton} show that \textellipsis

\end{document}

Philipp Lehmann 向我解释了以下解决方案:

\textcite非常不言自明。\cbx@textcites执行等效的操作\citeauthor(与循环同步),但也收集所有参数以供日后使用。\cbx@textcitewrapper使用这些数据发出一个\footcites命令,将所有引用放在一个脚注中。\DeclareMultiCiteCommand提供用户界面。

\documentclass{article}
\usepackage[style=verbose,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter

\renewrobustcmd*{\textcite}{\blx@citeargs\cbx@textcite}
\newcommand{\cbx@textcite}[3]{%
  \citeauthor{#3}\footcite[#1][#2]{#3}}

\DeclareCiteCommand{\cbx@textcites}
  {\gdef\cbx@savedkeys{}}
  {\printnames{labelname}%
   \xappto\cbx@savedkeys{\thefield{entrykey},}}
  {\multicitedelim}
  {\protected@xappto\cbx@savedcites{%
     [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}

\newrobustcmd{\cbx@textcitewrapper}[1]{%
  \gdef\cbx@savedcites{\footcites}#1\cbx@savedcites}

\DeclareMultiCiteCommand{\textcites}[\cbx@textcitewrapper]{\cbx@textcites}{\multicitedelim}

\makeatother
\begin{document}

\textcite{augustine} claims that \textellipsis

\textcite[55]{augustine} claims that \textellipsis

\textcite[Cf.][]{augustine} claims that \textellipsis

\textcite{augustine,hammond,cotton} show that \textellipsis

\textcites{augustine,hammond,cotton} show that \textellipsis

\textcites{augustine}{hammond}{cotton} show that \textellipsis

\textcites[55]{augustine}[33]{hammond}[99]{cotton} show that \textellipsis

\end{document}

相关内容