Biblatex: изменить textcite для autocite = footnote
Aug 20 2020
Можно ли переопределить \textcite
при использовании, autocite=footnote
чтобы имена авторов помещались в текст, а остальная часть цитаты помещалась в сноску? В его нынешнем виде \textcite
печатаются имена авторов вместе с годом в тексте. Мне кажется, что стиль, который я предлагаю, будет более последовательным.
Для дополнительной информации, можно ли исключить имена авторов из сносок, созданных этой новой версией \textcite
?
Вот минимальный пример:
\documentclass{article}
\usepackage[style=authoryear, autocite=footnote]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
A citation\autocite{knuth:ct:a} in a sentence.
Important works are those by \textcites{bertram}{markey}.
Another important work is by \textcite{knuth:ct:b}.
\textbf{Instead, I would like the output to be:}
A citation\autocite{knuth:ct:a} in a sentence.
Important works are those by \citeauthor{bertram} and \citeauthor{markey}\autocites{bertram}{markey}.
Another important work is by \citeauthor{knuth:ct:b}\autocite{knuth:ct:b}.
\end{document}
Ответы
2 moewe Aug 20 2020 at 12:59
\textcite
Реализация verbose
стилей делает что - то подобное, так что мы можем просто скопировать о \textcite
связанном коде с verbose.cbx
.
\documentclass{article}
\usepackage[style=authoryear, autocite=footnote]{biblatex}
\makeatletter
\renewbibmacro*{textcite}{%
\ifnameundef{labelname}
{\printfield[citetitle]{labeltitle}}
{\printnames{labelname}}}
\newbibmacro*{textcite:init}{%
\citetrackerfalse%
\pagetrackerfalse%
\iffirstcitekey
{\global\undef\cbx@lasthash}
{}}
\newbibmacro*{textcite:count}{%
\stepcounter{textcitetotal}%
\ifnumgreater{\value{uniquelist}}{\value{maxnames}}
{\ifnumgreater{\value{uniquelist}}{\value{textcitemaxnames}}
{\setcounter{textcitemaxnames}{\value{uniquelist}}}
{}}
{\ifnumless{\value{labelname}}{\value{maxnames}}
{\ifnumgreater{\value{labelname}}{\value{textcitemaxnames}}
{\setcounter{textcitemaxnames}{\value{labelname}}}
{}}
{\ifnumgreater{\value{maxnames}}{\value{textcitemaxnames}}
{\setcounter{textcitemaxnames}{\value{maxnames}}}
{}}}}
\DeclareCiteCommand{\cbx@textcite}
{\usebibmacro{textcite:init}}
{\iffieldequals{namehash}{\cbx@lasthash}
{}
{\iffirstcitekey
{}
{\textcitedelim}%
\stepcounter{textcitecount}%
\usebibmacro{textcite}%
\savefield{namehash}{\cbx@lasthash}}}
{}
{}
\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite\footcite]
{\usebibmacro{textcite:init}%
\gdef\cbx@savedkeys{}%
\DeferNextCitekeyHook}
{\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
{\protected@xappto\cbx@footcite@args{%
(\thefield{multiprenote})(\thefield{multipostnote})}}
{}%
\xappto\cbx@savedkeys{\thefield{entrykey},}%
\iffieldequals{namehash}{\cbx@lasthash}
{}
{\usebibmacro{textcite:count}%
\savefield{namehash}{\cbx@lasthash}}%
\ifnumequal{\value{citecount}}{\value{citetotal}}
{\protected@xappto\cbx@textcite@args{{\cbx@savedkeys}}%
\protected@xappto\cbx@footcite@args{%
[\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}%
\iflastcitekey
{\protected@xappto\cbx@textcite@args{\thefield{postpunct}}%
\protected@xappto\cbx@footcite@args{\nopunct}}
{}}
{}}
{}
{}
% textcite has nested \DeclareCiteCommand definitions for textcite and we want to use
% the normal textcite context
\DeclareDelimcontextAlias{cbx@textcite}{textcite}
\newrobustcmd{\cbx@textcite@init}[3]{%
\setcounter{textcitetotal}{0}%
\setcounter{textcitecount}{0}%
\setcounter{textcitemaxnames}{0}%
\def\cbx@textcite@args{#1}\def\cbx@footcite@args{#2}#3%
\cbx@textcite@args\empty\cbx@footcite@args\empty}
\DeclareMultiCiteCommand{\cbx@textcites}{\cbx@textcite}{}
\DeclareMultiCiteCommand{\textcites}
[\cbx@textcites@init\cbx@textcites\footcites]{\textcite}{}
\let\cbx@textcites@init\cbx@textcite@init
\pretocmd{\cbx@textcites@init}{%
\UseNextMultiCiteHook%
\AtNextMultiCite{%
\renewbibmacro{multiprenote}{}%
\renewbibmacro{multipostnote}{}}}{}{}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\null\vfill % only for this example!
A citation\autocite{knuth:ct:a} in a sentence.
Important works are those by \textcites{bertram}{markey}.
Another important work is by \textcite{knuth:ct:b}.
\textbf{Instead, I would like the output to be:}
A citation\autocite{knuth:ct:a} in a sentence.
Important works are those by \citeauthor{bertram} and \citeauthor{markey}\autocites{bertram}{markey}.
Another important work is by \citeauthor{knuth:ct:b}\autocite{knuth:ct:b}.
\end{document}
