diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex-gost/gost-inline.cbx')
-rw-r--r-- | Master/texmf-dist/tex/latex/biblatex-gost/gost-inline.cbx | 448 |
1 files changed, 364 insertions, 84 deletions
diff --git a/Master/texmf-dist/tex/latex/biblatex-gost/gost-inline.cbx b/Master/texmf-dist/tex/latex/biblatex-gost/gost-inline.cbx index 5491eea6a82..1e01516a8ba 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gost/gost-inline.cbx +++ b/Master/texmf-dist/tex/latex/biblatex-gost/gost-inline.cbx @@ -1,5 +1,5 @@ \ProvidesFile{gost-inline.cbx} -[2013/04/03\space v0.8\space biblatex-gost styles] +[2013/07/17\space v0.9\space biblatex-gost styles] \DeclareLabelname [inbook,incollection,inproceedings,inreference,suppbook,suppcollection,suppperiodical,bookinbook] @@ -10,9 +10,11 @@ \DeclareFieldFormat{bibhypertarget}{% \bibhypertarget{\thefield{entrykey}:\the\value{instcount}}{#1}} \providecommand*{\mkibid}[1]{#1} -\newtoggle{cbx:loccit} -\newtoggle{cbx:t:bookibid} % for .. // Ibid. in inbook, incollection,.. -\newtoggle{cbx:f:bookibid} +\renewcommand*{\iffinalcitedelim}{% + \ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}} + +\newtoggle{cbx:loccit} % needed because \blx@loccittracker is executed before 'postnote' +\newtoggle{cbx:xrefloccit} \newtoggle{cbx:opt:inbookibid} \DeclareBibliographyOption{strict}[true]{% @@ -74,9 +76,9 @@ test {\ifnumequal{\value{citecount}}{\value{citetotal}}} and ( - not test {\iffieldundef{pages}} - or - not test {\iffieldundef{pagetotal}} + not test {\iffieldundef{pages}} + or + not test {\iffieldundef{pagetotal}} ) } {\usebibmacro{cite:postnote:pages}} @@ -93,58 +95,292 @@ {\def\blx@mincrossrefs{1}} {}} -\AtEveryCitekey{% - \ifcsdef{abx@field@hyphenation}{% - \edef\blx@languagename{\abx@field@hyphenation}% - \select@language{\abx@field@hyphenation}% - \blx@hyphenreset}% - {}% -} - \DeclareNameAlias{labelname}{author} \DeclareFieldFormat*{citetitle}{#1} \renewcommand{\postnotedelim}{\addperiod\space} \renewcommand{\multicitedelim}{\addsemicolondelim\space} +% two xref trackers below should go before the option execution +% +% xref ibidem tracker + +\appto\blx@ibidtracker@gobal{% + \ifbool{citetracker} + {\blx@imc@iffieldundef{crossref} + {\blx@imc@iffieldundef{xref} + {\global\undef\blx@lastxref@text} + {\blx@imc@savefield{xref}{\blx@lastxref@text}}} + {\blx@imc@savefield{crossref}{\blx@lastxref@text}}} + {}} + +\appto\blx@ibidtracker@context{% + \ifbool{citetracker} + {\iftoggle{blx@footnote} + {\blx@imc@iffieldundef{crossref} + {\blx@imc@iffieldundef{xref} + {\global\undef\blx@lastxref@foot} + {\blx@imc@savefield{xref}{\blx@lastxref@foot}}} + {\blx@imc@savefield{crossref}{\blx@lastxref@foot}}} + {\blx@imc@iffieldundef{crossref} + {\blx@imc@iffieldundef{xref} + {\global\undef\blx@lastxref@text} + {\blx@imc@savefield{xref}{\blx@lastxref@text}}} + {\blx@imc@savefield{crossref}{\blx@lastxref@text}}}} + {}} + +\appto\blx@ibidreset@force{% + \global\undef\blx@lastxref@text% + \global\undef\blx@lastxref@foot} + +\appto\blx@ibidreset@gobal{% + \global\undef\blx@lastxref@text} + +\appto\blx@ibidreset@context{% + \iftoggle{blx@footnote} + {\global\undef\blx@lastxref@foot} + {\global\undef\blx@lastxref@text}} + +\protected\appto\abx@savetrackers{% + \global\let\blx@saved@lastxref@text\blx@lastxref@text% + \global\let\blx@saved@lastxref@foot\blx@lastxref@foot} + +\protected\appto\abx@resttrackers{% + \global\let\blx@lastxref@text\blx@saved@lastxref@text% + \global\let\blx@lastxref@foot\blx@saved@lastxref@foot} + +\protected\appto\abx@cleartrackers{% + \global\undef\blx@saved@lastxref@text% + \global\undef\blx@saved@lastxref@foot} + +% {<true>}{<false>} + +\def\blx@xrefibid@check#1{% + \ifboolexpr{ + test {\blx@imc@iffieldequalcs{crossref}{blx@lastxref@#1}} + or + test {\blx@imc@iffieldequals{xref}{blx@lastxref@#1}} + }} + +\def\blx@ifxrefibid@global{% + \blx@xrefibid@check{text}} + +\def\blx@ifxrefibid@context{% + \iftoggle{blx@footnote} + {\blx@xrefibid@check{foot}} + {\blx@xrefibid@check{text}}} + +\def\blx@ifxrefibid@strict{% + \blx@ifcitesingle + {\blx@ifciteibid@global} + {\@secondoftwo}}% + +\def\blx@ifxrefibid@constrict{% + \blx@ifcitesingle + {\iftoggle{blx@footnote} + {\blx@ifmpfncheck + {\blx@xrefibid@check{foot}} + {\@secondoftwo}} + {\blx@xrefibid@check{text}}} + {\@secondoftwo}}% + +\blx@regimcs{\ifxrefibid} + +\appto\blx@blxinit{% + \appto\blx@TE@hook{% + \def\ifxrefibid{\blx@TE\blx@imc@ifxrefibid}}} + +\appto\blx@opt@ibidtracker@true{% + \let\blx@imc@ifxrefibid\blx@ifxrefibid@global} +\appto\blx@opt@ibidtracker@false{% + \let\blx@imc@ifxrefibid\@secondoftwo} +\appto\blx@opt@ibidtracker@context{% + \let\blx@imc@ifxrefibid\blx@ifxrefibid@context} +\appto\blx@opt@ibidtracker@strict{% + \let\blx@imc@ifxrefibid\blx@ifxrefibid@strict} +\appto\blx@opt@ibidtracker@constrict{% + \let\blx@imc@ifxrefibid\blx@ifxrefibid@constrict} + +% end of xref ibidem tracker code + +% xrefloccit tracker +% {<true>}{<false>} + +\def\blx@ifxrefloccit@global{% + \blx@xrefloccit@check{text}} + +\def\blx@ifxrefloccit@context{% + \iftoggle{blx@footnote} + {\blx@xrefloccit@check{foot}} + {\blx@xrefloccit@check{text}}} + +\def\blx@ifxrefloccit@strict{% + \blx@ifcitesingle + {\blx@xrefloccit@numcheck{text}} + {\@secondoftwo}}% + +\def\blx@ifxrefloccit@constrict{% + \blx@ifcitesingle + {\iftoggle{blx@footnote} + {\blx@ifmpfncheck + {\blx@xrefloccit@numcheck{foot}} + {\@secondoftwo}} + {\blx@xrefloccit@numcheck{text}}} + {\@secondoftwo}} + +\def\blx@xrefloccit@check#1{% + \blx@imc@ifxrefibid + {\blx@imc@iffieldundef{postnote} + {\@secondoftwo} + {\blx@imc@iffieldequalcs{postnote}{blx@xreflastnote@#1}}} + {\@secondoftwo}} + +\def\blx@xrefloccit@numcheck#1{% + \blx@imc@ifxrefibid + {\blx@imc@iffieldundef{postnote} + {\@secondoftwo} + {\expandafter\blx@imc@ifpages + \expandafter{\abx@field@postnote} + {\blx@imc@iffieldequalcs{postnote}{blx@xreflastnote@#1}} + {\@secondoftwo}}} + {\@secondoftwo}} + +\blx@regimcs{\ifxrefloccit} + +% loccit tracker patching + +\appto\blx@loccittracker@gobal{% + \ifbool{citetracker} + {\blx@xrefloccit@tracker{text}} + {}} + +\appto\blx@loccittracker@context{% + \ifbool{citetracker} + {\iftoggle{blx@footnote} + {\blx@xrefloccit@tracker{foot}} + {\blx@xrefloccit@tracker{text}}} + {}} + +\appto\blx@loccittracker@strict{% + \ifbool{citetracker} + {\blx@xrefloccit@stricttracker{text}} + {}} + +\appto\blx@loccittracker@constrict{% + \ifbool{citetracker} + {\iftoggle{blx@footnote} + {\blx@mpfnsave + \blx@xrefloccit@stricttracker{foot}} + {\blx@xrefloccit@stricttracker{text}}} + {}} + +\def\blx@xrefloccit@tracker#1{% + \global\csundef{blx@xreflastnote@#1}% + \blx@imc@iffieldundef{postnote} + {} + {\global\cslet{blx@xreflastnote@#1}\abx@field@postnote}} + +\def\blx@xrefloccit@stricttracker#1{% + \global\csundef{blx@xreflastnote@#1}% + \blx@imc@iffieldundef{postnote} + {} + {\blx@ifcitesingle + {\expandafter\blx@imc@ifpages + \expandafter{\abx@field@postnote} + {\global\cslet{blx@xreflastnote@#1}\abx@field@postnote} + {}} + {}}} + +\apptocmd\blx@loccit@reset{% #1 + \begingroup + \global\csundef{blx@xreflastnote@#1}% + \endgroup} + {} + {} + +\protected\appto\abx@savetrackers{% + \begingroup + \global\csletcs{blx@saved@xreflastnote@text}{blx@xreflastnote@text}% + \global\csletcs{blx@saved@xreflastnote@foot}{blx@xreflastnote@foot}% + \endgroup} + +\protected\appto\abx@resttrackers{% + \begingroup + %\blx@loccit@reset{text}% + \global\csletcs{blx@xreflastnote@text}{blx@saved@xreflastnote@text}% + %\blx@loccit@reset{foot}% + \global\csletcs{blx@xreflastnote@foot}{blx@saved@xreflastnote@foot}% + \endgroup} + +\protected\appto\abx@cleartrackers{% + \begingroup + \global\csundef{blx@saved@xreflastnote@text}% + \global\csundef{blx@saved@xreflastnote@foot}% + \endgroup} + +\appto\blx@blxinit{% + \appto\blx@TE@hook{% + \def\ifxrefloccit{\blx@TE\blx@imc@ifxrefloccit}}} + +\appto\blx@opt@loccittracker@true{% + \let\blx@imc@ifxrefloccit\blx@ifxrefloccit@global} +\appto\blx@opt@loccittracker@false{% + \let\blx@imc@ifxrefloccit\@secondoftwo} +\appto\blx@opt@loccittracker@context{% + \let\blx@imc@ifxrefloccit\blx@ifxrefloccit@context} +\appto\blx@opt@loccittracker@strict{% + \let\blx@imc@ifxrefloccit\blx@ifxrefloccit@strict} +\appto\blx@opt@loccittracker@constrict{% + \let\blx@imc@ifxrefloccit\blx@ifxrefloccit@constrict} + +% end of xrefloccit tracker code + \ExecuteBibliographyOptions{citetracker=constrict,autocite=inline,inbookibid=false, citepages=omit,strict,opcittracker=constrict,labeltitle, citeisbn=false,citeurl=false,citedoi=false,citeeprint=false} +\newbibmacro*{set:cbx:loccit:toggles}{% + \ifloccit + {\global\toggletrue{cbx:loccit}} + {\global\togglefalse{cbx:loccit}}% + \ifxrefloccit + {\global\toggletrue{cbx:xrefloccit}} + {\global\togglefalse{cbx:xrefloccit}}} + \newbibmacro*{cite:seen}{% the same for cite and footcite - \ifciteibid - {\ifloccit{\global\toggletrue{cbx:loccit}}{}% - \usebibmacro{cite:ibid}} - {\ifopcit - {\ifloccit{\global\toggletrue{cbx:loccit}}{}% - \usebibmacro{cite:opcit}} + \iffirstonpage + {\iffieldundef{shorthand} + {\usebibmacro{cite:short}} + {\usebibmacro{cite:shorthand}}} + {\ifciteibid + {\usebibmacro{cite:ibid}} + {\ifopcit + {\usebibmacro{cite:opcit}} {\iffieldundef{shorthand} {\usebibmacro{cite:short}} - {\usebibmacro{cite:shorthand}}}}% -} + {\usebibmacro{cite:shorthand}}}}}} \newbibmacro*{cite}{% \usebibmacro{cite:citepages}% - \global\togglefalse{cbx:loccit}% - \ifboolexpr{% - not test {\ifdefvoid{\cbx@t@lastcrossref}} - and - test {\iffieldequals{crossref}{\cbx@t@lastcrossref}} - }% - {\global\toggletrue{cbx:t:bookibid}} - {\global\togglefalse{cbx:t:bookibid}% - \savefield{crossref}{\cbx@t@lastcrossref}% - \global\xdef\cbx@t@bookref{\thefield{entrykey}:\the\value{instcount}}}% + \usebibmacro{set:cbx:loccit:toggles}% \ifciteseen - {\global\togglefalse{cbx:t:bookibid}% - \global\undef\cbx@t@lastcrossref% - \global\undef\cbx@t@bookref% - \usebibmacro{cite:seen}} + {\usebibmacro{cite:seen}} {\usebibmacro{cite:full}% - \usebibmacro{cite:save}}} + \usebibmacro{cite:save}{t}}} -\newbibmacro*{cite:save}{% - \csxdef{cbx@t@\thefield{entrykey}}{\the\value{instcount}}}% +\newbibmacro*{cite:save:bookref}[1]{% + \usebibmacro{cbx:bookibid:check} + {} + {\iffieldundef{crossref} + {\iffieldundef{xref} + {} + {\csxdef{cbx@#1@bookref@\thefield{xref}}{\thefield{entrykey}:\the\value{instcount}}}} + {\csxdef{cbx@#1@bookref@\thefield{crossref}}{\thefield{entrykey}:\the\value{instcount}}}}} + +\newbibmacro*{cite:save}[1]{% + \csxdef{cbx@#1@\thefield{entrykey}}{\the\value{instcount}}% + \label{cbx@\the\value{instcount}}% what for? + \usebibmacro{cite:save:bookref}{#1}} \newbibmacro{cite:clearfields}{% \renewbibmacro*{series+number}{}% @@ -161,6 +397,8 @@ \usebibmacro{shorthandintro}} \newbibmacro*{cite:short}{% + \global\togglefalse{cbx:loccit}% always print postnote after short citation + \global\togglefalse{cbx:xrefloccit}% \ifnameundef{labelname} {\printfield{label}} {\printnames{labelname}}% @@ -201,33 +439,21 @@ \printfield[bibhyperlink]{shorthand}} \newbibmacro*{cite:postnote:ibidpage}{% - \iftoggle{cbx:loccit} + \ifboolexpr{ + togl {cbx:loccit} + or + togl {cbx:xrefloccit} + } {} {\usebibmacro{postnote}}} \newbibmacro*{footcite}{% \usebibmacro{cite:citepages}% - \global\togglefalse{cbx:loccit}% - \ifboolexpr{% - not test {\ifdefvoid{\cbx@f@lastcrossref}} % undef, \relax, or empty - and - test {\iffieldequals{crossref}{\cbx@f@lastcrossref}} - }% - {\global\toggletrue{cbx:f:bookibid}} - {\global\togglefalse{cbx:f:bookibid}% - \savefield{crossref}{\cbx@f@lastcrossref}% - \global\xdef\cbx@f@bookref{\thefield{entrykey}:\the\value{instcount}}}% + \usebibmacro{set:cbx:loccit:toggles}% \ifciteseen - {\global\togglefalse{cbx:f:bookibid}% - \global\undef\cbx@f@lastcrossref% - \global\undef\cbx@f@bookref% - \usebibmacro{cite:seen}} + {\usebibmacro{cite:seen}} {\usebibmacro{cite:full}% - \usebibmacro{footcite:save}}} - -\newbibmacro*{footcite:save}{% - \csxdef{cbx@f@\thefield{entrykey}}{\the\value{instcount}}% - \label{cbx@\the\value{instcount}}} + \usebibmacro{cite:save}{f}}} \DeclareCiteCommand{\cite} {\usebibmacro{prenote}} @@ -270,35 +496,89 @@ {\multicitedelim} {\usebibmacro{cite:postnote}} -\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}}} +\newbibmacro*{textcite}{% + \ifnameundef{labelname} + {\printfield[citetitle]{labeltitle}} + {\printnames{labelname}}} + +\newbibmacro*{textcite:init}{% + \citetrackerfalse% + \pagetrackerfalse% + \iffirstcitekey + {\global\undef\cbx@lasthash} + {}} -\newrobustcmd{\cbx@textcite}[2]{% - \def\cbx@savedcites{#1}#2\cbx@savedcites} +\newbibmacro*{textcite:count}{% + \stepcounter{textcitetotal}% + \ifnumgreater{\value{labelname}}{\value{textcitemaxnames}} + {\setcounter{textcitemaxnames}{\value{labelname}}} + {}} -\DeclareMultiCiteCommand{\textcites}[\cbx@textcite\footcites]{\textcite}{\multicitedelim} +\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}} + {}} + {}} + {} + {} + +\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}{}}}{}{} \renewbibmacro*{cbx:bookibid:check}[2]{% \ifboolexpr{% - test {\ifcitation} - and - test {\iftoggle{cbx:opt:inbookibid}} - and - ( ( test {\iffootnote} + togl {cbx:opt:inbookibid} and - test {\iftoggle{cbx:f:bookibid}} ) - or - ( not test {\iffootnote} - and - test {\iftoggle{cbx:t:bookibid}} ) - ) - } - {#1} - {#2}} + test {\ifcitation} + and + test {\ifxrefibid} + } + {#1} + {#2}} \endinput |