나는 내 논문을 위해 설정 중이며 biblatex
단순히 표시되는 저자를 참고문헌의 특정 값(예: \maxbibnames=5
& \minbibnames=5
)으로 제한한다는 것을 알고 있습니다. 그러나 (연도)를 포함한 저자 줄이 숫자=X(표시된 저자 5명)로 제한되지만 첫 번째 줄을 초과하지 않도록 하고 싶습니다. 따라서 "authors incl. (year)"가 문서에서 1줄 이상을 요구한다면 biblatex는 원래 \maxbibnames
/ 로 정의된 것보다 더 많은 bibname을 잘라냅니다 \minbibnames
(물론 이 항목에만 해당).
지금 예:
아인슈타인, A., 테슬라, N., 존스, I., 제퍼슨, T. 및 후드, R.
외. (1980).정말 좋은 종이네요.자연 1: 100-150.
new로 축약된 예:
Einstein, A., Tesla, N., Jones, I. 및 Jefferson, T. 등. (1980).
정말 좋은 종이네요.자연 1: 100-150.
답변1
다음 코드는 단순히 이름 수를 세고 한 줄에 맞는지 확인합니다.
매크로의 원래 정의는 에서 가져왔습니다 authoryear.bbx
. 카운트다운하고 출력 길이를 측정하는 얇은 래퍼만 추가합니다.
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear, maxbibnames=999, dashed=false]{biblatex}
\usepackage{hyperref}
\addbibresource{biblatex-examples.bib}
\makeatletter
\newcounter{namecountdown}
\newlength{\bbx@namelength}
\newbibmacro*{bbx:measure:outer}[2]{%
\settowidth{\bbx@namelength}{\usebibmacro*{#1}{#2}}%
\ifboolexpr{test {\ifdimgreater{\bbx@namelength}{\linewidth}}
and test {\ifnumgreater{\value{namecountdown}}{1}}}
{\advance\c@namecountdown\m@ne
\usebibmacro{bbx:measure:outer}{#1}{#2}}
{\usebibmacro*{#1}{#2}}}
\renewbibmacro{author}{%
\ifnumless{\value{maxnames}}{\value{author}}
{\c@namecountdown\c@maxnames}
{\c@namecountdown\c@author}%
\usebibmacro{bbx:measure:outer}{bbx:measure:author:inner}{}}
\newbibmacro*{bbx:measure:author:inner}{%
\ifboolexpr{
test \ifuseauthor
and
not test {\ifnameundef{author}}
}
{\usebibmacro{bbx:dashcheck}
{\bibnamedash}
{\usebibmacro{bbx:savehash}%
\printnames[][1-\the\value{namecountdown}]{author}%
\iffieldundef{authortype}
{\setunit{\printdelim{nameyeardelim}}}
{\setunit{\printdelim{authortypedelim}}}}%
\iffieldundef{authortype}
{}
{\usebibmacro{authorstrg}%
\setunit{\printdelim{nameyeardelim}}}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\printdelim{nonameyeardelim}}}%
\usebibmacro{date+extradate}}
\renewbibmacro*{bbx:editor}[1]{%
\ifnumless{\value{maxnames}}{\value{editor}}
{\c@namecountdown\c@maxnames}
{\c@namecountdown\c@editor}%
\usebibmacro{bbx:measure:outer}{bbx:measure:editor:inner}{#1}}
\newbibmacro*{bbx:measure:editor:inner}[1]{%
\ifboolexpr{
test \ifuseeditor
and
not test {\ifnameundef{editor}}
}
{\usebibmacro{bbx:dashcheck}
{\bibnamedash}
{\printnames[][1-\the\value{namecountdown}]{editor}%
\setunit{\printdelim{editortypedelim}}%
\usebibmacro{bbx:savehash}}%
\usebibmacro{#1}%
\clearname{editor}%
\setunit{\printdelim{nameyeardelim}}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\printdelim{nonameyeardelim}}}%
\usebibmacro{date+extradate}}
\renewbibmacro*{bbx:translator}[1]{%
\ifnumless{\value{maxnames}}{\value{translator}}
{\c@namecountdown\c@maxnames}
{\c@namecountdown\c@translator}%
\usebibmacro{bbx:measure:outer}{bbx:measure:translator:inner}{#1}}
\newbibmacro*{bbx:measure:translator:inner}[1]{%
\ifboolexpr{
test \ifusetranslator
and
not test {\ifnameundef{translator}}
}
{\usebibmacro{bbx:dashcheck}
{\bibnamedash}
{\printnames[][1-\the\value{namecountdown}]{translator}%
\setunit{\printdelim{translatortypedelim}}%
\usebibmacro{bbx:savehash}}%
\usebibmacro{#1}%
\clearname{translator}%
\setunit{\printdelim{nameyeardelim}}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\printdelim{nonameyeardelim}}}%
\usebibmacro{date+extradate}}
\makeatother
\begin{document}
\cite{companion,aksin,herrmann,sigfridsson,jaffe}
\printbibliography
\end{document}