summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx')
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx188
1 files changed, 154 insertions, 34 deletions
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
index 1085fb5623..1e2ef627a0 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-mla/mla.cbx
@@ -1,11 +1,11 @@
-% mla.cbx, v2.0 2021/06/07 * compatible with biblatex 3.16
+% mla.cbx, v2.1 2022/02/21 * compatible with biblatex 3.16
% Maintained at <https://github.com/jmclawson/biblatex-mla>.
%
% Feel free to improve, redistribute, and adapt to your own ends. Please share improvements back to the project on GitHub or to James Clawson: <clawson@gmail.com>.
%
% This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
-\ProvidesFile{mla.cbx}[2021/06/07 v2.0 biblatex citation style]
+\ProvidesFile{mla.cbx}[2021/10/31 v2.1 biblatex citation style]
\RequireCitationStyle{mla-footnotes}
@@ -40,7 +40,7 @@
\xdef\split@prev{\the\insertpenalties}%
}}
-\ExecuteBibliographyOptions{citetracker=true,ibidtracker=constrict,opcittracker=constrict,singletitle,autocite=inline,uniquename=init,hyperref=true,useprefix=true,firstlonghand,annotation=false,loccittracker=strict,noremoteinfo=true,date=comp,urldate=long,mancitepar=false,datezeros=false,datecirca=true,eprint=true}%
+\ExecuteBibliographyOptions{citetracker=true,ibidtracker=constrict,opcittracker=constrict,singletitle,autocite=inline,uniquename=init,hyperref=true,useprefix=true,firstlonghand,annotation=false,loccittracker=strict,noremoteinfo=true,date=comp,urldate=long,mancitepar=false,datezeros=false,datecirca=true,dateuncertain=true,eprint=true,abbreviate=false}%
\newbool{cbx@named}%
\newbool{cbx@mlafootnotes}%
@@ -65,7 +65,61 @@
\blx@ibidreset@force
\blx@idemreset@force
\blx@opcitreset@force
- \blx@loccitreset@force}}
+ \blx@loccitreset@force}
+ \global\undef\bbx@lasthash}% 2.1 last part added
+
+% 2.1 adding citeauthor tracking for full / partial names
+\newrobustcmd*{\cbx@nametracker@global}[1]{%
+ \xifinlistcs{#1}{cbx@bseen@names@\the\c@refsection}
+ {}
+ {\listcsxadd{cbx@bseen@names@\the\c@refsection}{#1}}}
+
+\newrobustcmd*{\cbx@nametracker@context}[1]{%
+ \iftoggle{blx@footnote}
+ {\xifinlistcs{#1}{cbx@fseen@names@\the\c@refsection}
+ {}
+ {\listcsxadd{cbx@fseen@names@\the\c@refsection}{#1}}}
+ {\xifinlistcs{#1}{cbx@bseen@names@\the\c@refsection}
+ {}
+ {\listcsxadd{cbx@bseen@names@\the\c@refsection}{#1}}}}
+
+\newrobustcmd*{\cbx@ifnameseen@global}[1]{%
+ \xifinlistcs{#1}{cbx@bseen@names@\the\c@refsection}}
+
+\newrobustcmd*{\cbx@ifnameseen@context}[1]{%
+ \iftoggle{blx@footnote}%
+ {\xifinlistcs{#1}{cbx@fseen@names@\the\c@refsection}}%
+ {\xifinlistcs{#1}{cbx@bseen@names@\the\c@refsection}}}
+
+\DeclareBibliographyOption[string]{nametracker}[true]{%
+ \ifcsdef{blx@opt@nametracker@#1}
+ {\csuse{blx@opt@nametracker@#1}}
+ {\blx@err@invopt{nametracker=#1}{}}}
+
+\def\blx@opt@nametracker@global{%
+ \let\cbx@ifnameseen\cbx@ifnameseen@global
+ \let\cbx@nametracker\cbx@nametracker@global}
+
+\let\blx@opt@nametracker@true\blx@opt@nametracker@global
+
+\def\blx@opt@nametracker@false{%
+ \protected\long\def\cbx@ifnameseen##1##2##3{##3}%
+ \let\cbx@nametracker\relax}
+
+\def\blx@opt@nametracker@context{%
+ \let\cbx@ifnameseen\cbx@ifnameseen@context
+ \let\cbx@nametracker\cbx@nametracker@context}
+
+\appto\blx@secinit{%
+ \ifcsundef{cbx@bseen@names@\the\c@refsection}
+ {\global\cslet{cbx@bseen@names@\the\c@refsection}\@empty}
+ {}%
+ \ifcsundef{cbx@fseen@names@\the\c@refsection}
+ {\global\cslet{cbx@fseen@names@\the\c@refsection}\@empty}
+ {}}
+
+\ExecuteBibliographyOptions{nametracker=context}
+% 2.1 adding citeauthor tracking for full / partial names
\InitializeCitationStyle{%
\usebibmacro{cite:reset}%
@@ -75,7 +129,9 @@
\fi
\long\def\mlasymbolfootnote#1{\begingroup\def%
\thefootnote{\fnsymbol{footnote}}\footnote[0]{#1}\endgroup}%
- \newcounter{mladraftnote}}
+ \newcounter{mladraftnote}%
+ \global\cslet{cbx@bseen@names@\the\c@refsection}\@empty%
+ \global\cslet{cbx@fseen@names@\the\c@refsection}\@empty}
\OnManualCitation{%
\usebibmacro{cite:reset}%
@@ -146,10 +202,11 @@
\newbibmacro*{cite:name}{%
\ifsingletitle%
- {\printtext[bibhyperref]{%
- \printnames{labelname}}%
- \savefield{namehash}{\cbx@lasthash}%
- \global\booltrue{cbx@named}}%
+ {\ifbool{cbx@totalnames}%
+ {\printtext[bibhyperref]{\printnames[][-\value{listtotal}]{labelname}}}%
+ {\printtext[bibhyperref]{\printnames{labelname}}}%
+ \savefield{namehash}{\cbx@lasthash}%
+ \global\booltrue{cbx@named}}%
{\printnames{labelname}%
\savefield{namehash}{\cbx@lasthash}%
\global\booltrue{cbx@named}}}%
@@ -166,7 +223,9 @@
{\printtext[bibhyperref]{\printfield[citetitle:\strfield{entrysubtype}]{labeltitle}}\clearfield{title}}%
{\iffieldequalstr{entrysubtype}{untitled}%
{\printtext[bibhyperref]{\printfield[noformat]{labeltitle}}}%
- {\printtext[bibhyperref]{\printfield[citetitle:\strfield{entrytype}]{labeltitle}}}}}}
+ {\iffieldequalstr{entrytype}{online}% 2.1 format online titles by entrysubtype
+ {\printtext[bibhyperref]{\printfield[citetitle:online:\strfield{entrysubtype}]{labeltitle}}}
+ {\printtext[bibhyperref]{\printfield[citetitle:\strfield{entrytype}]{labeltitle}}}}}}}
\newbibmacro*{cite:mla:title}{%
\ifnameundef{labelname}%
@@ -250,21 +309,27 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\DeclareFieldFormat{citetitle:article}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:inreference}{\mkbibquote{#1}}
\DeclareFieldFormat{citetitle:book}{\mkbibemph{#1}}
\DeclareFieldFormat{citetitle:bookinbook}{\mkbibemph{#1}}% NEW in 2.0
\DeclareFieldFormat{citetitle:booklet}{\mkbibemph{#1}}%
\DeclareFieldFormat{citetitle:collection}{\mkbibemph{#1}}%
-\DeclareFieldFormat{citetitle:reference}{\mkbibemph{#1}}%
-\DeclareFieldFormat{citetitle:incollection}{\mkbibquote{#1}}
+\DeclareFieldFormat{citetitle:dataset}{\mkbibquote{#1}}% NEW in 2.1
+\DeclareFieldFormat{citetitle:image}{#1}% 2.1 finally styled right
\DeclareFieldFormat{citetitle:inbook}{\mkbibquote{#1}}% NEW in 2.0
+\DeclareFieldFormat{citetitle:incollection}{\mkbibquote{#1}}
+\DeclareFieldFormat{citetitle:inproceedings}{\mkbibquote{#1}}
+\DeclareFieldFormat{citetitle:inreference}{\mkbibquote{#1}}
+\DeclareFieldFormat{citetitle:misc}{#1}% 2.1 finally styled right
\DeclareFieldFormat{citetitle:mvbook}{\mkbibemph{#1}}% NEW in 2.0
\DeclareFieldFormat{citetitle:online}{\mkbibquote{#1}}%
-\DeclareFieldFormat{citetitle:inproceedings}{\mkbibquote{#1}}
-\DeclareFieldFormat{citetitle:unpublished}{\mkbibquote{#1}}
+\DeclareFieldFormat{citetitle:online:website}{\mkbibemph{#1}}%
+\DeclareFieldFormat{citetitle:performance}{\mkbibemph{#1}}% NEW in 2.1
+\DeclareFieldFormat{citetitle:reference}{\mkbibemph{#1}}%
+\DeclareFieldFormat{citetitle:review}{\mkbibquote{#1}}%
+\DeclareFieldFormat{citetitle:software}{\mkbibemph{#1}}% NEW in 2.1
\DeclareFieldFormat{citetitle:thesis}{\mkbibquote{#1}}
+\DeclareFieldFormat{citetitle:unpublished}{\mkbibquote{#1}}% fixme still needs work for unstyled types
\DeclareFieldFormat{citetitle:video}{\mkbibemph{#1}}
-\DeclareFieldFormat{citetitle:review}{\mkbibquote{#1}}%
\DeclareFieldFormat{mla:lowercase}{\MakeLowercase{#1}}%
\DeclareFieldFormat[mlasource]{mla:unstyled}{#1\unspace}%
\DeclareFieldFormat[mlasource]{mla:complete}{\mkbibemph{#1}\unspace}%
@@ -405,24 +470,87 @@
{\ifciteindex
{\indexnames{labelname}}
{}%
- \printnames[given-family]{labelname}%FUTURE add check for citeseen (to print first name on first mention)
- }
+ \printnames[citeauthor]{labelname}}%
{\multicitedelim}
{\usebibmacro{postnote}\usebibmacro{cite:save}}
-\DeclareCiteCommand*{\citeauthor}%
+\DeclareCiteCommand*{\citeauthor}% print just the surname
{\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
- \printnames[family]{labelname}%
- % \ifentryseen{labelname}%FUTURE skeleton to check for first mention - doesn't work just now
- % {\printnames{labelname}}% TRUE
- % {\printnames[given-family]{labelname}}% FALSE
- }
+ \printnames[citeauthorstar]{labelname}}%
{\multicitedelim}
{\usebibmacro{postnote}\usebibmacro{cite:save}}
+% 2.1 tracking seen names for citeauthor
+\DeclareNameFormat{citeauthor}{%
+ \cbx@ifnameseen{\thefield{hash}}
+ {\ifcase\value{uniquename}%
+ \usebibmacro{name:family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \or
+ \ifuseprefix
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffixi}}
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefixi}
+ {\namepartsuffixi}}%
+ \or
+ \usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \fi}
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \cbx@nametracker{\thefield{hash}}}%
+ \usebibmacro{name:andothers}}
+
+\DeclareNameFormat{citeauthorstar}{%
+ \ifcase\value{uniquename}%
+ \usebibmacro{name:family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \or
+ \ifuseprefix
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefix}
+ {\namepartsuffixi}}
+ {\usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiveni}
+ {\namepartprefixi}
+ {\namepartsuffixi}}%
+ \or
+ \usebibmacro{name:given-family}
+ {\namepartfamily}
+ {\namepartgiven}
+ {\namepartprefix}
+ {\namepartsuffix}%
+ \fi
+ \cbx@ifnameseen{\thefield{hash}}
+ {}
+ {\cbx@nametracker{\thefield{hash}}}%
+ \usebibmacro{name:andothers}}
+% 2.1 tracking seen names for citeauthor
+
\DeclareCiteCommand{\citetitle}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
@@ -430,11 +558,7 @@
{\ifciteindex
{\indexfield{indextitle}}
{}%
- \ifthenelse{\iffieldequalstr{entrytype}{unpublished}%
- \AND\NOT%
- \iffieldundef{entrysubtype}}%
- {\printfield[citetitle:\strfield{entrysubtype}]{labeltitle}}%
- {\printfield[citetitle]{labeltitle}}}
+ \usebibmacro{just:title:it}}% 2.1 simplified
{\multicitedelim}
{\usebibmacro{postnote}}
@@ -445,11 +569,7 @@
{\ifciteindex
{\indexfield{indextitle}}
{}%
- \ifthenelse{\iffieldequalstr{entrytype}{unpublished}%
- \AND\NOT%
- \iffieldundef{entrysubtype}}%
- {\printfield[citetitle:\strfield{entrysubtype}]{title}}%
- {\printfield[citetitle]{title}}}%
+ \usebibmacro{just:title:it}}% 2.1 simplified
{\multicitedelim}
{\usebibmacro{postnote}}