summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/biblatex-ext/biblatex-ext-oa.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex-ext/biblatex-ext-oa.sty')
-rw-r--r--Master/texmf-dist/tex/latex/biblatex-ext/biblatex-ext-oa.sty331
1 files changed, 331 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/biblatex-ext/biblatex-ext-oa.sty b/Master/texmf-dist/tex/latex/biblatex-ext/biblatex-ext-oa.sty
new file mode 100644
index 00000000000..930a3d1db3d
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/biblatex-ext/biblatex-ext-oa.sty
@@ -0,0 +1,331 @@
+\ProvidesPackage{biblatex-ext-oa}
+ [2018/11/23 v0.6 mark open access in biblatex bibliographies (MW)]
+
+\protected\def\extblx@oa@error#1#2{%
+ \PackageError{biblatex-ext-oa}{#1}{#2.}}
+
+\protected\def\extblx@oa@warning@noline#1{%
+ \PackageWarningNoLine{biblatex-ext-oa}{#1}}
+
+\let\extblx@oa@warning\extblx@oa@warning@noline
+\AtEndOfPackage{%
+ \protected\def\extblx@oa@warning#1{%
+ \PackageWarning{biblatex-ext-oa}{#1}}}
+
+\@ifpackageloaded{biblatex}
+ {}
+ {\extblx@oa@error
+ {biblatex not loaded!\MessageBreak
+ This package must be loaded after biblatex.\MessageBreak
+ This is a fatal error, the package will not\MessageBreak be loaded}
+ {Load biblatex with \string\usepackage{biblatex} before
+ you load 'biblatex-ext-oa'.\MessageBreak
+ Please see the documentation of biblatex-ext for more information}%
+ \endinput}
+
+\newtoggle{extblx@oa@opt@forcedoiapi}
+\DeclareBibliographyOption[string]{openaccess}[true]{%
+ \ifstrequal{#1}{forcedoiapi}
+ {\@firstoftwo}
+ {\ifstrequal{#1}{forceonlydoiapi}
+ {\@firstoftwo}
+ {\@secondoftwo}}
+ {\toggletrue{extblx@oa@opt@forcedoiapi}}
+ {}%
+ \extblx@oa@blxopt@openaccess{#1}}
+\DeclareTypeOption[string]{openaccess}[true]{%
+ \ifstrequal{#1}{forcedoiapi}
+ {\toggletrue{extblx@oa@opt@forcedoiapi}%
+ \csletcs{extblx@oa@url@from}{extblx@oa@url@from@forcedoiapi}}
+ {}%
+ \ifstrequal{#1}{forcedoiapi}
+ {\toggletrue{extblx@oa@opt@forceonlydoiapi}%
+ \csletcs{extblx@oa@url@from}{extblx@oa@url@from@forceonlydoiapi}}
+ {}%
+ \iftoggle{extblx@oa@opt@forcedoiapi}
+ {}
+ {\extblx@oa@blxopt@openaccess{#1}}}
+\DeclareEntryOption[string]{openaccess}[true]{%
+ \iftoggle{extblx@oa@opt@forcedoiapi}
+ {}
+ {\extblx@oa@blxopt@openaccess{#1}}}
+
+\def\extblx@oa@blxopt@openaccess#1{%
+ \ifcsundef{extblx@oa@url@from@#1}
+ {\ifcsundef{extblx@oa@warn@field@\abx@field@entrykey @#1}
+ {\extblx@oa@warning@noline{%
+ Field '#1' not set up for\MessageBreak
+ open access detection.\MessageBreak
+ Ignoring the option\MessageBreak
+ 'openaccess=#1'\MessageBreak
+ for entry '\abx@field@entrykey'}%
+ \global\cslet{extblx@oa@warn@field@\abx@field@entrykey @#1}\@empty}
+ {}}
+ {\csletcs{extblx@oa@url@from}{extblx@oa@url@from@#1}}%
+ \ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@onlydoiapi}
+ {\@firstoftwo}
+ {\ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@doiapi}
+ {\@firstoftwo}
+ {\@secondoftwo}}
+ {\ifextblx@oa@opt@doiapi
+ \else
+ \extblx@oa@error
+ {'openaccess=#1' requires 'doiapi=true'\MessageBreak
+ and LuaLaTeX}
+ {If you want to use 'openaccess=#1', you must load the
+ 'biblatex-ext-oa'\MessageBreak
+ package with the option 'doiapi=true'.
+ That option also requires LuaLaTeX.\MessageBreak
+ Please see the documentation of biblatex-ext for more information}
+ \fi}
+ {}
+}
+
+% define special detection settings
+% auto, all (=:true), none (=:false),
+% doiapi, forcedoiapi (=doiapi, but overrides more specific options)
+% onlydoiapi, forceonlydoiapi
+\csdef{extblx@oa@url@from@auto}{auto}
+\csdef{extblx@oa@url@from@all}{all}
+\csletcs{extblx@oa@url@from@true}{extblx@oa@url@from@all}
+\csdef{extblx@oa@url@from@none}{none}
+\csletcs{extblx@oa@url@from@false}{extblx@oa@url@from@none}
+\csdef{extblx@oa@url@from@doiapi}{doiapi}
+\csdef{extblx@oa@url@from@onlydoiapi}{onlydoiapi}
+\csletcs{extblx@oa@url@from@forcedoiapi}{extblx@oa@url@from@doiapi}
+\csletcs{extblx@oa@url@from@forceonlydoiapi}{extblx@oa@url@from@onlydoiapi}
+
+% {<field_1,...,field_n>}
+\newrobustcmd*{\DeclareOpenAccessUrlFieldPriority}{%
+ \let\extblx@oa@url@autofields\@empty
+ \forcsvlist{\listadd\extblx@oa@url@autofields}}
+
+% {<macroname>}{<field>}{<url spec>}{<openness>}
+\def\extblx@oa@url@definefieldurl#1#2#3#4{%
+ \csdef{extblx@oa@url@from@#2}{#2}%
+ \ifstrequal{#4}{always}
+ {\csdef{extblx@oa@url@getfromfield@#1}{%
+ \iffieldannotation[#2]{closedaccess}
+ {}
+ {\def\extblx@oa@url{#3}}}}
+ {\csdef{extblx@oa@url@getfromfield@#1}{%
+ \iffieldannotation[#2]{closedaccess}
+ {\@secondoftwo}
+ {\iffieldannotation[#2]{openaccess}
+ {\@firstoftwo}
+ {\ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@#2}
+ {\@firstoftwo}
+ {\ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@all}
+ {\@firstoftwo}
+ {\@secondoftwo}}}}
+ {\def\extblx@oa@url{#3}}
+ {}}}}
+
+% [<openness>]{<field>}{<url spec>}
+\newrobustcmd*{\DeclareOpenAccessFieldUrl}[3][conditional]{%
+ \extblx@oa@url@definefieldurl{#2}{#2}{#3}{#1}}
+% [<openness>]{<eprint type>}{<url spec>}
+\newrobustcmd*{\DeclareOpenAccessEprintUrl}[3][conditional]{%
+ \extblx@oa@url@definefieldurl{eprint@#2}{eprint}{#3}{#1}}
+
+\newrobustcmd*{\DeclareOpenAccessEprintAlias}[2]{%
+ \csdef{extblx@oa@url@getfromfield@eprint@#1}{%
+ \csuse{extblx@oa@url@getfromfield@eprint@#2}}}
+
+\def\extblx@oa@url@undefinefieldurl#1#2{
+ \csundef{extblx@oa@url@from@#2}
+ \csundef{extblx@oa@url@getfromfield@#1}}
+
+\newrobustcmd*{\UndeclareOpenAccessFieldUrl}[1]{%
+ \extblx@oa@url@undefinefieldurl{#1}{#1}}
+\newrobustcmd*{\UndeclareOpenAccessEprintUrl}[1]{%
+ \extblx@oa@url@undefinefieldurl{eprint@#1}{eprint}}
+
+
+\def\extblx@oa@url@processfield@@generic#1{%
+ \csuse{extblx@oa@url@getfromfield@#1}}
+
+\def\extblx@oa@url@processfield@eprint#1{%
+ \iffieldundef{eprinttype}
+ {\csuse{extblx@oa@url@getfromfield@#1}}
+ {\csuse{extblx@oa@url@getfromfield@eprint@\thefield{eprinttype}}}}
+
+\def\extblx@oa@url@processfield#1{%
+ \iffieldundef{#1}
+ {}
+ {\ifcsundef{extblx@oa@url@processfield@#1}
+ {\extblx@oa@url@processfield@@generic{#1}}
+ {\csuse{extblx@oa@url@processfield@#1}{#1}}}}
+
+\newcommand*{\extblx@oa@url@getoaurl}{%
+ \ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@onlydoiapi}
+ {\iffieldundef{doi}
+ {}
+ {\extblx@oa@api@getoaurl{\thefield{doi}}}}
+ {\ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@doiapi}
+ {\iffieldundef{doi}
+ {\forlistloop{\extblx@oa@url@processfield}{\extblx@oa@url@autofields}}
+ {\extblx@oa@api@getoaurl{\thefield{doi}}}}
+ {\ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@none}
+ {}
+ {\ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@all}
+ {\@firstoftwo}
+ {\ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@auto}
+ {\@firstoftwo}
+ {\@secondoftwo}}
+ {\forlistloop{\extblx@oa@url@processfield}{\extblx@oa@url@autofields}}
+ {\extblx@oa@url@processfield{\csuse{extblx@oa@url@from}}}}}}}
+
+
+\newrobustcmd*{\LoadTikZOASymbol}[1][plos]{%
+ \@ifpackageloaded{biblatex-ext-oa-tikzsymbols}
+ {\extblx@oa@warning{%
+ TikZ open access symbols already loaded.\MessageBreak
+ Redefining the symbol with\MessageBreak\string\DefineTikZOASymbol}%
+ \DefineTikZOASymbol[#1]}
+ {\RequirePackage[symbol=#1]{biblatex-ext-oa-tikzsymbols}}%
+ \gdef\LoadTikZOASymbol{%
+ \extblx@oa@warning{%
+ TikZ open access symbols can not be\MessageBreak
+ loaded more than once.\MessageBreak
+ I'll now behave like \string\DefineTikZOASymbol\MessageBreak}%
+ \DefineTikZOASymbol}}
+\@onlypreamble\LoadTikZOASymbol
+
+\def\extblx@oa@opt@tikzsymbol@val@false{}
+\def\extblx@oa@opt@tikzsymbol@val@true{\LoadTikZOASymbol[plos]}
+
+\def\extblx@oa@opt@tikzsymbol@process#1{%
+ \begingroup
+ \edef\extblx@oa@tempa{\endgroup
+ \noexpand\extblx@oa@opt@tikzsymbol@process@i{#1}}
+ \extblx@oa@tempa}
+
+\def\extblx@oa@opt@tikzsymbol@process@i#1{%
+ \ifcsundef{extblx@oa@opt@tikzsymbol@val@#1}
+ {\LoadTikZOASymbol[#1]}
+ {\csuse{extblx@oa@opt@tikzsymbol@val@#1}}}
+
+\SetupKeyvalOptions{
+ family=extblx@oa@opt,
+ prefix=extblx@oa@opt@,
+}
+
+\DeclareBoolOption[true]{enable}
+\DeclareBoolOption[false]{doiapi}
+\DeclareStringOption[false]{tikzsymbol}[true]
+
+
+\ProcessKeyvalOptions*
+
+\extblx@oa@opt@tikzsymbol@process{\csuse{extblx@oa@opt@tikzsymbol}}
+
+\ifbool{extblx@oa@opt@doiapi}
+ {\RequirePackage{biblatex-ext-oa-doiapi}}
+ {}
+
+\def\extbl@oa@bbl@fielddef@bestoaurl#1{%
+ \blx@bbl@fielddef{bestoaurl}{#1}}
+
+\AtDataInput{%
+ \undef\extblx@oa@url
+ \extblx@oa@url@getoaurl
+ \ifundef\extblx@oa@url
+ {}
+ {\expandafter\extbl@oa@bbl@fielddef@bestoaurl\expandafter{\extblx@oa@url}}}
+
+
+
+% based on egreg's (https://tex.stackexchange.com/users/4427/egreg)
+% answer to https://tex.stackexchange.com/a/123451/35864
+% originally CC BY-SA 3.0, but dual-licensed under LPPL
+% see https://tex.meta.stackexchange.com/a/3333/35864
+\newcommand{\extblx@oa@marginmark}{\strut\vadjust{\extblx@oa@marginmark@do}}
+\newcommand{\extblx@oa@marginmark@do}{%
+ \vbox to 0pt{%
+ \kern-3\dp\strutbox
+ \strut
+ \hfill
+ \rlap{\kern1em
+ \ifhyperref
+ {\href{\thefield{bestoaurl}}}
+ {\@firstofone}%
+ {\oasymbol}}
+ \vss
+ }%
+}
+
+
+\ifbool{extblx@oa@opt@enable}
+ {\csletcs{extblx@oa@url@from}{extblx@oa@url@from@auto}
+ \DeclareOpenAccessFieldUrl{url}{\thefield{url}}
+ \DeclareOpenAccessFieldUrl{doi}{https://doi.org/\thefield{doi}}
+
+ \DeclareOpenAccessEprintUrl{jstor}{%
+ http://www.jstor.org/stable/\thefield{eprint}}
+ \DeclareOpenAccessEprintAlias{JSTOR}{jstor}
+ \DeclareOpenAccessEprintUrl{hdl}{%
+ http://hdl.handle.net/\thefield{eprint}}
+ \DeclareOpenAccessEprintAlias{HDL}{hdl}
+ \DeclareOpenAccessEprintUrl{pubmed}{%
+ http://www.ncbi.nlm.nih.gov/pubmed/\thefield{eprint}}
+ \DeclareOpenAccessEprintAlias{PubMed}{pubmed}
+ \DeclareOpenAccessEprintUrl[always]{arxiv}{%
+ https://arxiv.org/\abx@arxivpath/\thefield{eprint}}
+ \DeclareOpenAccessEprintAlias{arXiv}{arxiv}
+
+ \DeclareOpenAccessUrlFieldPriority{url,eprint,doi}
+
+ \DeclareFieldFormat{bestoaurl}{\url{#1}}
+
+ \newbibmacro*{oamark}{%
+ \iffieldundef{bestoaurl}
+ {}
+ {\extblx@oa@marginmark}}
+
+ \renewbibmacro*{begentry}{%
+ \usebibmacro{oamark}}
+
+ \ifbool{extblx@oa@opt@doiapi}
+ {\NewBibliographyString{openaccessat}
+ \DefineBibliographyStrings{english}{
+ openaccessat = {open access version at},
+ }
+ \newbibmacro{api:bestoaurl}{%
+ \ifcsequal{extblx@oa@url@from}{extblx@oa@url@from@doiapi}
+ {\iffieldundef{doi}
+ {\@secondoftwo}
+ {\iffieldundef{bestoaurl}
+ {\@secondoftwo}
+ {\OpenaccessURLisDOI{\thefield{doi}}
+ {\@secondoftwo}
+ {\@firstoftwo}}}}
+ {\@secondoftwo}
+ {\bibstring{openaccessat}%
+ \setunit{\addspace}%
+ \printfield{bestoaurl}%
+ \newunit\newblock}
+ {}}
+
+ \letbibmacro*{bbxorig:doi+eprint+url}{doi+eprint+url}
+ \renewbibmacro*{doi+eprint+url}{%
+ \usebibmacro{bbxorig:doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{api:bestoaurl}}}}
+ {\csletcs{extblx@oa@url@from}{extblx@oa@url@from@none}}
+
+
+\endinput
+%
+% This file is part of the biblatex-ext bundle.
+% biblatex-ext is released under the LaTeX Project Public License v1.3c
+% or later.
+%
+% A complete list of files included in that package can be found in README.md
+% or - failing that - in ext-standard.bbx.
+%
+% Official releases of this package are on CTAN
+% https://www.ctan.org/pkg/biblatex-ext
+% development takes place on GitHub
+% https://github.com/moewew/biblatex-ext
+%