diff options
Diffstat (limited to 'macros/latex')
212 files changed, 13019 insertions, 5133 deletions
diff --git a/macros/latex/contrib/adjustbox/README b/macros/latex/contrib/adjustbox/README index fb560d38ef..684613ca7b 100644 --- a/macros/latex/contrib/adjustbox/README +++ b/macros/latex/contrib/adjustbox/README @@ -1,7 +1,7 @@ LaTeX bundle adjustbox ======================== -Copyright (c) 2011-2019 by Martin Scharrer <martin@scharrer-online.de> -WWW: <https://bitbucket.org/martin_scharrer/adjustbox> (incl. bug tracker) +Copyright (c) 2011-2020 by Martin Scharrer <martin@scharrer-online.de> +WWW: <https://helixteamhub.cloud/scharrer/projects/adjustbox/> (incl. bug tracker) This bundle contains the the adjustbox package and its auxiliary packages trimclip and adjcalc. The initial purpose of adjustbox was to supplement the standard graphics/x package, diff --git a/macros/latex/contrib/adjustbox/adjcalc.pdf b/macros/latex/contrib/adjustbox/adjcalc.pdf Binary files differindex f8bb78c491..7e7103f4d3 100644 --- a/macros/latex/contrib/adjustbox/adjcalc.pdf +++ b/macros/latex/contrib/adjustbox/adjcalc.pdf diff --git a/macros/latex/contrib/adjustbox/adjustbox.dtx b/macros/latex/contrib/adjustbox/adjustbox.dtx index ebcfeb7176..e6cdb33f37 100644 --- a/macros/latex/contrib/adjustbox/adjustbox.dtx +++ b/macros/latex/contrib/adjustbox/adjustbox.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment %<=*COPYRIGHT> -%% Copyright (C) 2011-2019 by Martin Scharrer <martin@scharrer-online.de> +%% Copyright (C) 2011-2020 by Martin Scharrer <martin@scharrer-online.de> %% ---------------------------------------------------------------------- %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -26,10 +26,10 @@ %<*driver> \ProvidesFile{adjustbox.dtx}[% %<=*DATE> - 2019/01/04 + 2020/08/19 %<=/DATE> %<=*VERSION> - v1.2 + v1.3 %<=/VERSION> DTX file for the adjustbox package] \documentclass[a4paper]{ydoc}[2011/08/11] @@ -148,7 +148,7 @@ % ^^A ))) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ^^A Title page ((( -% \CheckSum{3447} +% \CheckSum{3488} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -255,6 +255,15 @@ % * Added \provideadjustboxenv and \declareadjustboxenv. % * Added \provideadjustboxcmd and \declareadjustboxcmd. % } +% \changes{v1.3}{2020/08/19}{%^^A +% * Added support for (hopefully) all 'graphicx' keys. +% * Added missing \leavevmode for framing keys. +% * Added key "leavevmode" on request of Frank Mittelbach. +% * Added 'process' key. +% * Added 'clap' key on user request. +% * Removed old graphicx key 'print'. +% * trimclip: Added explicit luatex driver which uses the pdftex driver to avoid the fallback to PGF driver. +% } % % \GetFileInfo{adjustbox.dtx} % @@ -262,7 +271,7 @@ % % \author{Martin Scharrer} % \email{martin@scharrer-online.de} -% \repository{https://bitbucket.org/martin_scharrer/adjustbox} +% \repository{https://helixteamhub.cloud/scharrer/projects/adjustbox/} % \ydocpdfsettings % \maketitle % @@ -1287,6 +1296,11 @@ % It does not expect a value and will ignore it if provided. % % +% \DescribeKey{leavevmode} +% This key will issue an \Macro\leavevmode for the \Macro\adjustbox to enter paragraph mode, i.e.\ it starts a paragraph. +% This is usually done automatically by all Keys, but is provided as a failsafe in case of any bugs. +% +% % \DescribeMacro\centerbox[<width>]{<content>} % \vspace{-1.5\baselineskip}\nopagebreak % \DescribeEnv[<content>]{centerbox}[<width>] @@ -1442,8 +1456,10 @@ % % \DescribeKey{rlap} % \DescribeKey{llap} -% This makes the content to be officially 0pt wide and lap over to the right or left, respectively, like the \LaTeX\ macros \Macro\rlap and \Macro\llap do. -% These are shortcuts for \Key{lap}'='\AlsoMacro\width and \Key{lap}'=-'\AlsoMacro\width, respectively. The values for these keys are ignored and should not be used. +% \DescribeKey{clap} +% This makes the content to be officially 0pt wide and lap over to the right or left, respectively, like the \LaTeX\ macros \Macro\rlap, \Macro\llap and \Macro\clap do. +% These are shortcuts for \Key{lap}'='\AlsoMacro\width, \Key{lap}'=-'\AlsoMacro\width and \Key{lap}'={0pt}{-0.5'\AlsoMacro\width'}', respectively. +% The values for these keys are ignored and should not be used. % % \begin{examples} % \begin{examplecode} @@ -1452,6 +1468,9 @@ % \begin{examplecode} % \adjustbox{llap}{Some content} % \end{examplecode} +% \begin{examplecode} +% \adjustbox{clap}{Some content} +% \end{examplecode} % \end{examples} % % @@ -1528,7 +1547,6 @@ % \DescribeKey{ocobjref} % \DescribeKey{page}'='<page numbers> % \DescribeKey{pagebox} -% \DescribeKey{print} % \DescribeKey{quiet} % \DescribeKey{resetcolor} % \DescribeKey{resolution} @@ -2072,6 +2090,13 @@ % % % ^^A )))2 +% \clearpage\subsection{Process content} ^^A (((2 +% +% \DescribeKey{process} +% This key processes the keys and content encountered so far (i.e.\ all keys to its left) and sets the dimension macros to the sizes of the result. +% It is only required for certain key combinations, mostly the ones taken from \pkg{graphicx}, which are otherwise processed together. +% +% ^^A )))2 % \clearpage\subsection{Experimental Keys} ^^A (((2 % The following features are experimental and may not work correctly yet. % At the moment the \pkg{storebox} package must be loaded manually for this keys. @@ -2207,6 +2232,16 @@ \DeclareOptionX<Adjbox>{PGF}{\PassOptionsToPackage{pgf}{trimclip}\AtEndOfPackage{\RequirePackage{pgf}\adjcalcset{pgfmath}}} % \end{macrocode} % +% Pass |pkg{graphicx}| options down. +% \begin{macrocode} +\DeclareOptionX<Adjbox>{draft}{\PassOptionsToPackage{draft}{graphicx}} +\DeclareOptionX<Adjbox>{final}{\PassOptionsToPackage{final}{graphicx}} +\DeclareOptionX<Adjbox>{hiderotate}{\PassOptionsToPackage{hiderotate}{graphicx}} +\DeclareOptionX<Adjbox>{hidescale}{\PassOptionsToPackage{hidescale}{graphicx}} +\DeclareOptionX<Adjbox>{hiresbb}{\PassOptionsToPackage{hiresbb}{graphicx}} +\DeclareOptionX<Adjbox>{demo}{\PassOptionsToPackage{demo}{graphicx}} +% \end{macrocode} +% % Pass all driver options to \pkg{trimclip} and all unknown options to \pkg{graphicx}. % \begin{macrocode} \DeclareOptionX*{% @@ -3331,7 +3366,11 @@ \adjbox@copy@key{bblly} \adjbox@copy@key{bburx} \adjbox@copy@key{bbury} +\adjbox@copy@key{bb} +\adjbox@copy@key{command} \adjbox@copy@key{decodearray} +\adjbox@copy@key{draft} +\adjbox@copy@key{ext} \adjbox@copy@key{intent} \adjbox@copy@key{interpolate} \adjbox@copy@key{maskarray} @@ -3339,12 +3378,14 @@ \adjbox@copy@key{natwidth} \adjbox@copy@key{ocobjnum} \adjbox@copy@key{ocobjref} -\adjbox@copy@key{page} +\adjbox@copy@key{origin} \adjbox@copy@key{pagebox} -\adjbox@copy@key{print} +\adjbox@copy@key{page} \adjbox@copy@key{quiet} +\adjbox@copy@key{read} \adjbox@copy@key{resetcolor} \adjbox@copy@key{resolution} +\adjbox@copy@key{type} \adjbox@copy@key{xmpfile} % \end{macrocode} % @@ -3931,6 +3972,25 @@ % \end{macrocode} % \end{key}% % +% \begin{key}{adjbox}{leavevmode} +% \begin{macrocode} +\define@key\adjbox@fam{leavevmode}[]{% + \leavevmode +} +% \end{macrocode} +% \end{key}% +% +% \begin{macro}{\adjbox@fam}{process} +% \begin{macrocode} +\define@key\adjbox@fam{process}[]{% + \sbox\collectedbox{\adjbox@esetsize\the\toks@}% + \collectbox@setdims + \def\adjustbox@content{\usebox\collectedbox}% + \toks@{{\adjustbox@content}} +} +% \end{macrocode} +% \end{macro} +% % ^^A ))) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \subsection{Vertical alignment keys} ^^A ((( @@ -4508,6 +4568,7 @@ % \begin{macro}{\adjbox@@frame}[4]{content}{rule width}{separation}{margin} % \begin{macrocode} \def\adjbox@@frame#1#2#3#4{% + \leavevmode \ifx\@nnil#2\@nnil\else \adjsetlength\fboxrule{#2}% \fi @@ -5251,6 +5312,14 @@ % \end{key} % % +% \begin{key}{adjbox}{clap} +% \begin{macrocode} +\define@key\adjbox@fam{clap}[]{% + \adjbox@Gin@Add{\lapbox[0pt]{-0.5\width}}% +} +% \end{macrocode} +% \end{key}% +% % \begin{macro}{\lapbox} % \begin{macrocode} \newcommand*\lapbox[2][\width-\@tempdimb]{% diff --git a/macros/latex/contrib/adjustbox/adjustbox.pdf b/macros/latex/contrib/adjustbox/adjustbox.pdf Binary files differindex f9ccff3764..676c6a9aad 100644 --- a/macros/latex/contrib/adjustbox/adjustbox.pdf +++ b/macros/latex/contrib/adjustbox/adjustbox.pdf diff --git a/macros/latex/contrib/adjustbox/trimclip.dtx b/macros/latex/contrib/adjustbox/trimclip.dtx index 0240ff55e2..ab37107325 100644 --- a/macros/latex/contrib/adjustbox/trimclip.dtx +++ b/macros/latex/contrib/adjustbox/trimclip.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment %<=*COPYRIGHT> -%% Copyright (C) 2011-2018 by Martin Scharrer <martin@scharrer-online.de> +%% Copyright (C) 2011-2020 by Martin Scharrer <martin@scharrer-online.de> %% ---------------------------------------------------------------------- %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -16,7 +16,7 @@ %% %% This work consists of the files trimclip.dtx, adjustbox.ins %% and the derived files trimclip.sty, -%% tc-dvips.def, tc-pdftex.def, tc-pgf.def and tc-xetex.def. +%% tc-dvips.def, tc-pdftex.def, tc-luatex.def, tc-pgf.def and tc-xetex.def. %% Further author information are located in the .def files. %% %<=/COPYRIGHT> @@ -26,10 +26,10 @@ %<*driver> \ProvidesFile{trimclip.dtx}[% %<=*DATE> - 2018/04/08 + 2020/08/19 %<=/DATE> %<=*VERSION> - v1.1 + v1.2 %<=/VERSION> DTX file for the trimclip package] \documentclass[a4paper]{ydoc}[2011/11/16] @@ -159,7 +159,7 @@ %</driver> % \fi % -% \CheckSum{1118} +% \CheckSum{1124} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -180,6 +180,7 @@ % % \changes{v1.0}{2012/05/16}{First version after extraction from \pkg{adjustbox} package.} % \changes{v1.1}{2018/04/08}{Driver support for round corner clipping.} +% \changes{v1.2}{2020/08/19}{Added explicit LuaTeX driver.} % % \GetFileInfo{trimclip.dtx} % @@ -187,7 +188,7 @@ % \bundle{adjustbox} % \author{Martin Scharrer} % \email{martin@scharrer-online.de} -% ^^A\repository{https://bitbucket.org/martin_scharrer/adjustbox} +% ^^A\repository{https://helixteamhub.cloud/scharrer/projects/adjustbox/} % \ydocpdfsettings % \maketitle % @@ -261,8 +262,9 @@ % % \begin{description} % \def\Option#1{\item[{{\normalfont\opt{#1}}}]}% -% \Option{pdftex} Use the |pdftex| driver. This driver is automatically selected for |pdflatex| and |lualatex| -% and should not be used for any other \LaTeX\ compilers. +% \Option{pdftex} Use the |pdftex| driver. This driver is automatically selected for |pdflatex|. +% \Option{luatex} Use the |luatex| driver, which uses the |pdftex| driver internally. +% This driver is automatically selected for |lualatex|. % \Option{dvips} Use the |dvips| driver. This driver is automatically selected for |latex|. % \Option{xetex} Use the |xetex| driver. This driver is automatically selected for |xelatex|. % \Option{dvipdfm} Use the |xetex| driver which is also compatible with |dvipdfm|. @@ -536,6 +538,7 @@ \def\tc@driver{tc-\Gin@driver} \DeclareOption{pgf}{\def\tc@driver{tc-pgf.def}\AtEndOfPackage{\RequirePackage{pgf}}} \DeclareOption{pdftex}{\def\tc@driver{tc-pdftex.def}\PassOptionsToPackage{pdftex}{graphicx}} +\DeclareOption{luatex}{\def\tc@driver{tc-luatex.def}\PassOptionsToPackage{luatex}{graphicx}} \DeclareOption{xetex}{\def\tc@driver{tc-xetex.def}\PassOptionsToPackage{xetex}{graphicx}} \DeclareOption{dvips}{\def\tc@driver{tc-dvips.def}\PassOptionsToPackage{dvips}{graphicx}} \DeclareOption{dvipdfm}{\def\tc@driver{tc-xetex.def}\PassOptionsToPackage{xetex}{graphicx}} @@ -1194,6 +1197,19 @@ %</tc-pdftex.def> % \fi % +% \subsubsection{luatex driver} +% \iffalse +%<*tc-luatex.def> +% \fi +% \begin{macrocode} +%<!COPYRIGHT> +\ProvidesFile{tc-luatex.def}[2020/08/16 v1.0 Clipping driver for luatex] +\input{tc-pdftex.def} +% \end{macrocode} +% \iffalse +%</tc-luatex.def> +% \fi +% % \subsubsection{dvips driver} % \iffalse %<*tc-dvips.def> diff --git a/macros/latex/contrib/adjustbox/trimclip.pdf b/macros/latex/contrib/adjustbox/trimclip.pdf Binary files differindex 2ad59ec6b4..01a7dd723c 100644 --- a/macros/latex/contrib/adjustbox/trimclip.pdf +++ b/macros/latex/contrib/adjustbox/trimclip.pdf diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex-jura2.tex b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex-jura2.tex index 58919e834b..7ccc9891cc 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex-jura2.tex +++ b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex-jura2.tex @@ -64,7 +64,7 @@ \addbibresource{mylit.bib} \title{Das \texttt{biblatex-jura2} Paket} -\subtitle{V0.3, Dezember 2019} +\subtitle{v0.4, August 2020} \author{\texttt{biblatex-jura2(a)gmx.net}} \date{} @@ -262,6 +262,8 @@ Einige Zeitschriften wie ZHR oder RabelsZ werden zusätzlich mit dem Jahrgang de \end{minted} Im Literaturverzeichnis wird für Artikel, die über einen \textsc{doi} verfügen, auch der \textsc{doi} im Literaturverzeichnis als Hyperlink ausgegeben.\footcite[vgl.][517]{gehrlein:vollstreckung} +In der Datei \texttt{jura2.cbx} befindet sich in der Definition des Bibmarkros \texttt{{cite:title:article}} die Möglichkeit, auch den Titel des Artikels im Fußnotentext auszugeben. + \printbibliography[type=article, title={Das Literaturverzeichnis für \texttt{article} sieht so aus:},heading=subbibliography,] \section{Eintragsart \texttt{commentary}} @@ -433,6 +435,44 @@ Bei den Fußnoten gibt es kein Problem, weil alle Bände mit \footnote{\cite[(Bearbeiter)§~433 Rn.~23]{staudinger}; siehe auch \cite[(Bearbeiter)§~123 Rn.~12]{muekobgb}.} \end{minted} gleich zitiert werden.\footnote{\cite[(Bearbeiter)§~433 Rn.~23]{staudinger}; siehe auch \cite[(Bearbeiter)§~123 Rn.~12]{muekobgb}.} +\subsection{Kommentare mit nur einem Kommentator} + +Ein Sonderproblem stellt sich bei dem StGB-Kommentar von \emph{Fischer}, weil dieser nur von einer Person, nämlich Herrn Dr. Fischer selbst, kommentiert wird. Aber auch das lässt sich mit folgendem Eintrag lösen: + +\begin{MyMinted} +@COMMENTARY{fischer:stgb, + editor = {Fischer, Thomas}, + title = {Strafgesetzbuch und Nebengesetze}, + shorthand = {\emph{Fischer}}, + year = {2020}, + address = {München}, + edition = {67}, + publisher = {C.H. Beck} +} +\end{MyMinted} + +der dann die folgende Fußnote ergibt.\footcite[§~211 Rn.~1]{fischer:stgb} + +\subsection{Sonderproblem: Kommentare, bei denen die Herausgeber selbst kommentieren} + +Ein -- bislang noch nicht gelöstes -- Sonderproblem stellt sich bei Kommentaren, bei denen die Herausgeber auch als Kommentatoren auftreten. Als Beispiel sei der \emph{Hentschel} zum Straßenverkehrsrecht genannt.\footnote{Wobei ich die Probleme mit den unterschiedlichen Rollen der drei Bearbeiter hier bewusst unter den Tisch fallen lasse.} +\begin{MyMinted} +@COMMENTARY{hentschel:stvr, + editor = {Hentschel, Peter and König, Peter and Dauer, Peter}, + title = {Straßenverkehrsrecht}, + shorthand = {Hentschel/König/Dauer}, + year = {2015}, + address = {München}, + edition = {43}, + publisher = {C.H. Beck}, + options = {bearbeiterin}, +} +\end{MyMinted} +Nomalerweise würde man die Stellen, die von Herrn König bearbeitet werden, so zitieren.\footnote{Hentschel/\emph{König}/Dauer, § 1 StVG Rn. 1.} Das lässt sich aber nicht bislang nur manuell mit dem Befehl +\begin{MyMinted} +\footnote{Hentschel/\emph{König}/Dauer, § 1 StVG Rn. 1.} +\end{MyMinted} +umsetzen. Deshalb bietet sich der Umweg über die Option \texttt{bearbeiterin} an, was zu folgender, automatisch erstellter Fußnote führt.\footcite[König][§ 1 StVG Rn. 1]{hentschel:stvr} \sloppy \printbibliography[type=commentary, title={Im Literaturverzeichnis (nur \texttt{commentary}) sieht das Ganze dann so aus:},heading=subbibliography] @@ -616,6 +656,12 @@ und dann so\footcite[9]{dskerfahrungsbericht} zitiert werden.\footcite[25]{dsker \item \texttt{idib}-Funktion für Kommentare. \item sinnvoll gegliedertes Rechtsprechungsverzeichnis. \end{enumerate} +Solange es die Funktion 2. noch nicht gibt, muss das Literaturverzeichnis mit dem Befehl +\begin{minted}[frame=single, breaklines=true, breaksymbolleft=\textcolor{red}{\tiny\ensuremath{\hookrightarrow}}, fontsize=\small]{tex} +\printbibliography[nottype=jurisdiction]} +\end{minted} +ausgegeben werden, um unleserliche Einträge zu vermeiden. + Weitere Anregungen und Anmerkungen werden unter \texttt{biblatex-jura2(a)gmx.net} entgegen genommen. Mein besonderer Dank gilt Moritz Wemheuer, der sich mit viel Geduld mit meinen Fragen befasst hat. diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex_jura2.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex_jura2.pdf Binary files differindex 897897dc0b..d26d623d85 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex_jura2.pdf +++ b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/biblatex_jura2.pdf diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.bbx index 4fe6b0ecb1..44dd2e6100 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.bbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.bbx @@ -1,4 +1,4 @@ -\ProvidesFile{biblatex-jura2.bbx}[2019/12/28 v0.3] +\ProvidesFile{biblatex-jura2.bbx}[2020/08/19 v0.4] % biblatex-jura2 is released under the LaTeX Project Public License v1.3c or later. \RequireBibliographyStyle{ext-authortitle-ibid} diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.cbx index acf1ab48a8..00f193c671 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.cbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/jura2.cbx @@ -1,4 +1,4 @@ -\ProvidesFile{biblatex-jura2.cbx}[2019/12/28 v0.3] +\ProvidesFile{biblatex-jura2.cbx}[2020/08/19 v0.4] % biblatex-jura2 is released under the LaTeX Project Public License v1.3c or later. \RequireCitationStyle{ext-authortitle-ibid} @@ -112,6 +112,10 @@ \newbibmacro*{cite:title:article}{% \printtext[extblx@inner\blx@delimcontext delims]{% \printtext[bibhyperref]{% + %NEU Option für Ausgabe des Titels des Artikels in der Fußnote + %\printfield{title}% + %\addcomma\addspace% + %ENDE NEU \printfield{journaltitle}% \addspace% \iffieldundef{volume}% diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/mylit.bib b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/mylit.bib index 293c50cb76..db98f7cf9f 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-jura2/mylit.bib +++ b/macros/latex/contrib/biblatex-contrib/biblatex-jura2/mylit.bib @@ -113,7 +113,7 @@ publisher = {C.H. Beck}, address = {München}, shorthand = {Maunz/Dürig}, - options = {bearbeiterin, howcited} + options = {bearbeiterin}%, howcited} } @COMMENTARY{erbr, @@ -124,7 +124,7 @@ publisher = {C.H. Beck}, address = {München}, shorthand = {Burandt/Rojahn}, - options = {howcited}, + %options = {howcited}, } @COMMENTARY{ebjs1, @@ -204,6 +204,30 @@ addendum = {(jeweils zit. als Staudinger/\emph{Bearbeiter})}, } +@COMMENTARY{fischer:stgb, + editor = {Fischer, Thomas}, + title = {Strafgesetzbuch und Nebengesetze}, + shorthand = {\emph{Fischer}}, + year = {2020}, + address = {München}, + edition = {67}, + publisher = {C.H. Beck} +} + +@COMMENTARY{hentschel:stvr, + editor = {Hentschel, Peter and König, Peter and Dauer, Peter}, + %editortype = {editor}, + %editora = {König, Peter and Dauer, Peter}, + %editoratype = {redactor}, + title = {Straßenverkehrsrecht}, + shorthand = {Hentschel/König/Dauer}, + year = {2015}, + address = {München}, + edition = {43}, + publisher = {C.H. Beck}, + options = {bearbeiterin} +} + @INCOLLECTION{laack:infra, booktitle = {Infrastruktur-Recht: Festschrift für Wilfried Erbguth zum 70. Geburtstag}, title = {Ein ausgedachter Artikel zum Infrastukturrecht}, diff --git a/macros/latex/contrib/biblatex/CHANGES.md b/macros/latex/contrib/biblatex/CHANGES.md index 73848adcd2..8387b31a67 100644 --- a/macros/latex/contrib/biblatex/CHANGES.md +++ b/macros/latex/contrib/biblatex/CHANGES.md @@ -1,12 +1,222 @@ +# RELEASE NOTES FOR VERSION 3.15 +- Fixed a long-standing issue with `\intitlepunct`. + The old definition + ``` + \newbibmacro*{in:}{% + \printtext{% + \bibstring{in}\intitlepunct}} + ``` + would print `\intitlepunct` directly and not via the punctuation + buffer. Since the `\add...` punctuation macros guard against + undesired double punctuation, this would usually not show as an + issue (except in edge cases https://tex.stackexchange.com/q/175730/, + https://github.com/plk/biblatex/issues/943). + The new definition uses the punctuation tracker to print + `\intitlepunct`. + ``` + \newbibmacro*{in:}{% + \bibstring{in}% + \printunit{\intitlepunct}} + ``` + `\printunit` is needed instead of `\setunit` to stop subsequent + `\setunit`s from overriding `\intitlepunct` in case of missing + fields. +- Define `volcitepages` and `multipostnote` as a field alias of `postnote` + and `multiprenote` as an alias of `prenote`. + That should make it easier to change all post- and prenote formats at once. + A change to `postnote` will automatically apply to `multipostnote` + and `volcitepages` as well. Similarly for `multiprenote`. + In case that is not desired, the original definitions can be restored with + ``` + \DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination][\mknormrange]{#1}} + \DeclareFieldFormat{multiprenote}{#1\isdot} + \DeclareFieldFormat{multipostnote}{\mkpageprefix[pagination][\mknormrange]{#1}} + ``` +- Unified DOI, eprint and URL printing across all entry types. + The fields `doi`, `eprint`, `eprintclass`, `eprinttype` and `url` + are now valid for all entry types. + `@online` and `@unpublished` now also use the bibmacro + `doi+eprint+url`. + This means `@online` now responds to the `url` option. + That does not mean, however, that a global `url=false,` + suppresses URLs for `@online` entries, since `url=true,` + is set on a per-type level to ensure backwards compatibility + as far as possible. + In case eprint information should be suppressed for `@online` + and `@unpublished`, add + ``` + \ExecuteBibliographyOptions[online,unpublished]{eprint=false} + ``` +- Added `eid` to more entry types. + To avoid issues with backwards compatibility of widely used bibmacros, + the bibmacro `chapter+pages` was redefined from + ``` + \newbibmacro*{chapter+pages}{% + \printfield{chapter}% + \setunit{\bibpagespunct}% + \printfield{pages}% + \newunit} + ``` + to + ``` + \newbibmacro*{chapter+pages}{% + \printfield{chapter}% + \setunit{\bibeidpunct}% + \printfield{eid}% + \setunit{\bibpagespunct}% + \printfield{pages}% + \newunit} + ``` +- Added `\bibeidpunct` in analogy to `\bibpagespunct`. +- Added `issuetitleaddon` and `journaltitleaddon` fields. +- Added options `backreffloats` and `trackfloats` to enable/disable + citation tracking and back references in floats. + Note that citation tracking in floats can lead to undesirable + results in case the float objects floats too far from its "natural" + position. +- **INCOMPATIBLE CHANGE** `numeric-comp` compresses subentry set + references now. + This behaviour can be disabled with `subentrycomp=false`. +- Added `subentrycomp` option to `numeric-comp` citation style. + The option is only relevant with `subentry=true`. + With `subentrycomp=true` set citations will be compressed + to "1a-c" instead of "1a; 1b; 1c". + The option is mainly intended for backwards compatibility; + the behaviour of previous `biblatex` versions can be restored + with `subentrycomp=false`. +- Added `\multiciterangedelim`, `\multicitesubentrydelim`, + `\multicitesubentryrangedelim`, `\superciterangedelim`, + `\supercitesubentrydelim`, and `\supercitesubentryrangedelim` for + finer control over (compressed) subentry citations in `numeric-comp`. +- **CRITICAL CHANGE** The structure of the bibmacros in `numeric-comp` + has been reworked to make it easier to customise the printed output. + Documents that relied on patching internal bibmacros or heavily + redefined them may have to adapt. +- **CRITICAL CHANGE** + Implemented better `@set` support for BibTeX, `@set`s should now + sort properly. + This is achieved with a two-pass structure and (hidden) copies of + the set entries. + The two-pass structure means that the compilation sequence becomes + LaTeX, BibTeX, LaTeX, BibTeX, LaTeX, LaTeX. +- **CRITICAL CHANGE** + The case change functions now make use of the `expl3` module `l3text` + if the available `expl3` version is recent enough. + If `expl3` is too old the old LaTeX2e implementation is used. + If desired the implementation of the case changing functions + can be selected at load-time with the `casechanger` option, which + accepts the values `expl3`, `latex2e` and `auto` (which selects + `expl3` if the `expl3` version not older than 2020-04-06, this + is the default). + + The `expl3` implementation of the case changer is slightly more + robust than the home-grown `latex2e` code. +- The option `bibtexcaseprotection` can be used to turn off the + case protection via curly braces. This allows for a saner approach + to case protection where text is protected solely via a macro + like `\NoCaseChange`, e.g. + ``` + title = {The Story of \NoCaseChange{HMS \emph{Erebus}} + in \emph{Really} Strong Wind}, + ``` + instead of + ``` + title = {The Story of {HMS} \emph{Erebus} + in {\emph{Really}} Strong Wind}, + ``` +- Added `\mautocite` and `\Mautocite`. +- Added `\NumsCheckSetup` and `\PagesCheckSetup` for finer control + of the `\ifnumerals` and `\ifpages` checks. +- Deprecate the starred `\DeclareDelimAlias*` in favour of + `\DeclareDelimAlias` with optional arguments. +- **INCOMPATIBLE CHANGE** + `biblatex` no longer falls back to English for unknown languages. + Warnings will be triggered if undefined language strings or extras + are used. +- **INCOMPATIBLE CHANGE** + Bibliography strings and bibliography extras can now be written + either to `\captions<language>` or to `\extras<language>` + (this is controlled with the `langhook` option). + Previously, they were written to `\extras<language>`, but upon + reflection `\captions<language>` appears to be a more sensible + place for these definitions. + The new default is to write to `\captions<language>` + (i.e. `langhook=captions`). + The previous behaviour can be restored with `langhook=extras`. +- **INCOMPATIBLE CHANGE** Moved `\delimcontext{bib}` to `\AtUsedriver`, + this makes it easier to override the delimiter context in `\usedriver` + calls. `\AtUsedriver*` calls may have to be amended to include + `\delimcontext{bib}`. The new default is + ``` + \AtUsedriver{% + \delimcontext{bib}% + \let\finentry\blx@finentry@usedrv + \let\newblock\relax + \let\abx@macro@bibindex\@empty + \let\abx@macro@pageref\@empty} + ``` + Note that this definition is backwards compatible + and can be used in older versions as well (down to v3.4 2016-05-10). +- `biblatex` now tests if a requested backend (re)run happened by + comparing the MD5 hashes of the new and old `.bbl` files. +- Added file hooks `\blx@filehook@preload@<filename>`, + `\blx@filehook@postload@<filename>` + and `\blx@filehook@failure@<filename>` + to execute hooks before or after a file is loaded + or if the loading fails. + `\blx@lbxfilehook@simple@preload@<filename>`, + `\blx@lbxfilehook@simple@postload@<filename>` + and `\blx@lbxfilehook@simple@failure@<filename>` + as well as + `\blx@lbxfilehook@once@preload@<filename>`, + `\blx@lbxfilehook@once@postload@<filename>` + and `\blx@lbxfilehook@once@failure@<filename>` + are the equivalents for `.lbx` loading, where + files may be loaded several times in some situations. +- Added limited support for 'nodate' with BibTeX. +- Improved `babel` and `polyglossia` interfacing (avoids more or less + unsupported patches). + This should work with `babel` at least v3.9r (2016/04/23) + and polyglossia `polyglossia` v1.49 (2020/04/08) or later. +- **INCOMPATIBLE CHANGE** Removed list and name index wrappers + (`\DeclareIndexNameWrapperFormat`, `\DeclareIndexListWrapperFormat` + and friends). Those wrappers make no sense, since the indexed + names are not printed 'together' in any useful sense of the word + and were never working anyway. +- **CRITICAL CHANGE** Generalised some keyval macros. + `biblatex`-related uses of `\define@key` should ideally replaced with + `\blx@kv@defkey`. + Style authors are advised not to rely too much on the internal + implementation of certain keyval interfaces. + Users who want to experiment with using a different underlying + keyval parser need only provide replacements of the `\blx@kv@...` + macros (which are defined via `\provide...` so that they will + not overwrite existing definitions; in particular users can define + those replacements before loading `biblatex`). +- Deprecate `\ifkomabibtotoc` and `\ifkomabibtotocnumbered`. + With newer versions of KOMA-Script these tests are no longer used + and their implementation was always a bit shifty (they would only pick + up globally set options). + + # RELEASE NOTES FOR VERSION 3.14 - biber from version 2.14 has extended, granular XDATA functionality to allow referencing from and to parts of fields. This makes XDATA entries into more general data sharing containers. +- Biber applies Perl's Unicode case folding to normalise the + capitalisation of field names and entry types when reading from the + `.bib` file. The output in the `.bbl` (what comes out on the + `biblatex` side uses the capitalisation from the data model; the only + exception are unknown entry types which are passed on *exactly* + as they are given in the `.bib` file - of course it is strongly + recommended to define all entry types one intends to use in the + data model). - `biblatex` now interfaces with `polyglossia` much better and can deal with language variants. Note that `polyglossia` v1.45 (2019/10/27) is required for this to work properly, it is strongly recommended to update `polyglossia` to this or a later (current) version. + # RELEASE NOTES FOR VERSION 3.13 - **INCOMPATIBLE CHANGE** Any custom per-entry options in datasources must be defined with `\DeclareEntryOption` in order for biber to recognise diff --git a/macros/latex/contrib/biblatex/README b/macros/latex/contrib/biblatex/README index 4137b2420e..6b3b1bf430 100644 --- a/macros/latex/contrib/biblatex/README +++ b/macros/latex/contrib/biblatex/README @@ -108,7 +108,7 @@ MANUAL INSTALLATION or download the file - https://mirror.ctan.org/macros/latex/contrib/biblatex.zip + http://mirror.ctan.org/macros/latex/contrib/biblatex.zip 2. Unpack the archive in a temporary working directory. diff --git a/macros/latex/contrib/biblatex/bibtex/bib/biblatex/biblatex-examples.bib b/macros/latex/contrib/biblatex/bibtex/bib/biblatex/biblatex-examples.bib index 10f114bc76..5aaa9d2196 100644 --- a/macros/latex/contrib/biblatex/bibtex/bib/biblatex/biblatex-examples.bib +++ b/macros/latex/contrib/biblatex/bibtex/bib/biblatex/biblatex-examples.bib @@ -25,19 +25,13 @@ @set{set, entryset = {herrmann,aksin,yoon}, - annotation = {A \texttt{set} with three members. The \texttt{crossref} field - in the \texttt{@set} entry and the \texttt{entryset} field in - each set member entry is needed only when using BibTeX as the - backend}, + annotation = {A \texttt{set} with three members.}, } @set{stdmodel, entryset = {glashow,weinberg,salam}, annotation = {A \texttt{set} with three members discussing the standard - model of particle physics. The \texttt{crossref} field - in the \texttt{@set} entry and the \texttt{entryset} field in - each set member entry is needed only when using BibTeX as the - backend}, + model of particle physics.}, } @article{aksin, diff --git a/macros/latex/contrib/biblatex/bibtex/bst/biblatex.bst b/macros/latex/contrib/biblatex/bibtex/bst/biblatex.bst index e3b5fbb23e..dc1837f941 100644 --- a/macros/latex/contrib/biblatex/bibtex/bst/biblatex.bst +++ b/macros/latex/contrib/biblatex/bibtex/bst/biblatex.bst @@ -16,6 +16,7 @@ ENTRY { % special fields + fakeset entryset entrysubtype execute @@ -183,7 +184,7 @@ STRINGS { ctrl.alphaothers ctrl.sortalphaothers ctrl.sortstr last.name last.hash last.year last.extra } FUNCTION {initialize} { - "$Revision: 3.13 $" + "$Revision: 3.15 $" #12 entry.max$ substring$ #-3 entry.max$ substring$ "Biblatex version: " swap$ * top$ @@ -257,16 +258,11 @@ FUNCTION {ctrl:set} { type$ "set" = } -FUNCTION {ctrl:skiplos} { - ctrl:control skiplos or - ctrl:set not - and -} FUNCTION {ctrl:skiplab} { ctrl:control skiplab or - ctrl:set not - and + ctrl:set % fakeset empty$ and + or } FUNCTION {ctrl:labelalpha} { @@ -1413,6 +1409,14 @@ FUNCTION {output:write:list} { } FUNCTION {output:specials} { + fakeset empty$ + 'skip$ + { ctrl:set + { "\fakeset" fakeset wrap:braces * output:indent:field } + { "fakeset can only be used for @set entries" warning * } + if$ + } + if$ entryset empty$ 'skip$ { ctrl:set @@ -1459,23 +1463,27 @@ FUNCTION {output:specials} { 'skip$ if$ ctrl:labeldate - dateyear empty$ not - and - { "labelyear" dateyear output:write:field - dateendyear empty$ - 'skip$ - { dateyear dateendyear = + { dateyear empty$ not + { "labelyear" dateyear output:write:field + dateendyear empty$ 'skip$ - { dateendyear open.ended = + { dateyear dateendyear = 'skip$ - { "labelendyear" dateendyear output:write:field } + { dateendyear open.ended = + 'skip$ + { "labelendyear" dateendyear output:write:field } + if$ + } if$ } if$ + "extradate" extradate output:write:field + "labeldatesource" "" output:write:field:maybeempty + } + { "extradate" extradate output:write:field + "labeldatesource" "nodate" output:write:field } if$ - "extradate" extradate output:write:field - "labeldatesource" "" output:write:field:maybeempty } 'skip$ if$ diff --git a/macros/latex/contrib/biblatex/doc/biblatex.pdf b/macros/latex/contrib/biblatex/doc/biblatex.pdf Binary files differindex 0c2de50f17..8175e43a39 100644 --- a/macros/latex/contrib/biblatex/doc/biblatex.pdf +++ b/macros/latex/contrib/biblatex/doc/biblatex.pdf diff --git a/macros/latex/contrib/biblatex/doc/biblatex.tex b/macros/latex/contrib/biblatex/doc/biblatex.tex index 213fe87e71..e9111c5e89 100644 --- a/macros/latex/contrib/biblatex/doc/biblatex.tex +++ b/macros/latex/contrib/biblatex/doc/biblatex.tex @@ -55,8 +55,8 @@ \newcommand*{\biber}{\sty{biber}\xspace} \newcommand*{\biblatex}{\sty{biblatex}\xspace} \newcommand*{\biblatexml}{\sty{biblatexml}\xspace} -\newcommand*{\biblatexhome}{http://sourceforge.net/projects/biblatex/} -\newcommand*{\biblatexctan}{http://ctan.org/pkg/biblatex/} +\newcommand*{\biblatexhome}{https://sourceforge.net/projects/biblatex/} +\newcommand*{\biblatexctan}{https://ctan.org/pkg/biblatex/} \titlepage{% title={The \biblatex Package}, @@ -64,7 +64,7 @@ url={\biblatexhome}, author={Philip Kime, Moritz Wemheuer, Philipp Lehman}, email={}, - revision={3.14}, + revision={3.15}, date={\today}} \hypersetup{% @@ -173,7 +173,7 @@ \section{Introduction} \label{int} -This document is a systematic reference manual for the \biblatex package. Look at the sample documents which come with \biblatex to get a first impression.\fnurl{\biblatexctan doc/examples} +This document is a systematic reference manual for the \biblatex package. Look at the sample documents which come with \biblatex to get a first impression.\fnurl{https://ctan.org/tex-archive/macros/latex/contrib/biblatex/doc/examples} For a quick start guide, browse \secref{int:abt, bib:typ, bib:fld, bib:use, use:opt, use:xbx, use:bib, use:cit, use:use}. \subsection[About]{About \biblatex} @@ -183,12 +183,12 @@ This package provides advanced bibliographic facilities for use with \latex. The \subsection{License} -Copyright \textcopyright\ 2006--2012 Philipp Lehman, 2012--2017 Philip Kime, Audrey Boruvka, Joseph Wright, 2018-- Philip Kime and Moritz Wemheuer. Permission is granted to copy, distribute and\slash or modify this software under the terms of the \lppl, version~1.3.\fnurl{http://www.latex-project.org/lppl.txt} +Copyright \textcopyright\ 2006--2012 Philipp Lehman, 2012--2017 Philip Kime, Audrey Boruvka, Joseph Wright, 2018-- Philip Kime and Moritz Wemheuer. Permission is granted to copy, distribute and\slash or modify this software under the terms of the \lppl, version~1.3.\fnurl{https://www.latex-project.org/lppl.txt} \subsection{Feedback} \label{int:feb} -Please use the \biblatex project page on GitHub to report bugs and submit feature requests.\fnurl{http://github.com/plk/biblatex} Before making a feature request, please ensure that you have thoroughly studied this manual. If you do not want to report a bug or request a feature but are simply in need of assistance, you might want to consider posting your question on the \texttt{comp.text.tex} newsgroup or \tex-\latex Stack Exchange.\fnurl{http://tex.stackexchange.com/questions/tagged/biblatex} +Please use the \biblatex project page on GitHub to report bugs and submit feature requests.\fnurl{https://github.com/plk/biblatex} Before making a feature request, please ensure that you have thoroughly studied this manual. If you do not want to report a bug or request a feature but are simply in need of assistance, you might want to consider posting your question on the \texttt{comp.text.tex} newsgroup or \tex-\latex Stack Exchange.\fnurl{https://tex.stackexchange.com/questions/tagged/biblatex} \subsection{Acknowledgements} @@ -216,14 +216,17 @@ Márton Marczell, Bence Ferdinandy (Hungarian); Baldur Kristinsson (Icelandic); Enrico Gregorio, Andrea Marchitelli (Italian); Rihards Skuja (Latvian); +Valdemaras Klumbys (Lithuanian); Håkon Malmedal, Hans Fredrik Nordhaug (Norwegian); Anastasia Kandulina, Yuriy Chernyshov (Polish); José Carlos Santos (Portuguese); Oleg Domanov (Russian); +Andrej Radović (Serbian); Martin Vrábel, Dávid Lupták (Slovak); Tea Tušar, Bogdan Filipič (Slovene); Ignacio Fernández Galván (Spanish); Per Starbäck, Carl-Gustav Werner, Filip Åsblom (Swedish); +Abdulkerim Gok (Turkish); Sergiy M. Ponomarenko (Ukrainian). \subsection{Prerequisites} @@ -242,19 +245,21 @@ The resources listed in this section are strictly required for \biblatex to func The \biblatex package requires \etex. \tex distributions have been providing \etex binaries for quite some time, the popular distributions use them by default these days. The \biblatex package checks if it is running under \etex. Simply try compiling your documents as you usually do, the chances are that it just works. If you get an error message, try compiling the document with \bin{elatex} instead of \bin{latex} or \bin{pdfelatex} instead of \bin{pdflatex}, respectively. \item[\biber] -\biber is the backend of \biblatex used to transfer data from source files to the \latex code. \biber comes with TeX Live and is also available from SourceForge.\fnurl{http://biblatex-biber.sourceforge.net/}. \biber uses the \texttt{btparse} C library for \bibtex format file parsing which aimed to be compatible with \bibtex's parsing rules but also aimed at correcting some of the common problems. For details, see the manual page for the Perl \texttt{Text::BibTeX} module\fnurl{http://search.cpan.org/~ambs/Text-BibTeX}. +\biber is the backend of \biblatex used to transfer data from source files to the \latex code. \biber comes with TeX Live and is also available from SourceForge.\fnurl{https://biblatex-biber.sourceforge.net/}. \biber uses the \texttt{btparse} C library for \bibtex format file parsing which aimed to be compatible with \bibtex's parsing rules but also aimed at correcting some of the common problems. For details, see the manual page for the Perl \texttt{Text::BibTeX} module\fnurl{https://metacpan.org/release/Text-BibTeX}. \item[etoolbox] -This \latex package, which is loaded automatically, provides generic programming facilities required by \biblatex. It is available from \acr{CTAN}.\fnurl{http://ctan.org/pkg/etoolbox} +This \latex package, which is loaded automatically, provides generic programming facilities required by \biblatex. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/etoolbox} \item[kvoptions] -This \latex package, which is also loaded automatically, is used for internal option handling. It is available with the \sty{oberdiek} package bundle from \acr{CTAN}.\fnurl{http://ctan.org/pkg/kvoptions} +This \latex package, which is also loaded automatically, is used for internal option handling. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/kvoptions} \item[logreq] -This \latex package, which is also loaded automatically, provides a frontend for writing machine-readable messages to an auxiliary log file. It is available from \acr{CTAN}.\fnurl{http://ctan.org/pkg/logreq/} +This \latex package, which is also loaded automatically, provides a frontend for writing machine-readable messages to an auxiliary log file. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/logreq/} \item[pdftexcmds] -This \latex package, which is loaded automatically, implements \pdftex primitives for \luatex, it also offers a unified interface for these primitives across engines. It is available from \acr{CTAN}.\fnurl{http://ctan.org/pkg/pdftexcmds/} +This \latex package, which is loaded automatically, implements \pdftex primitives for \luatex, it also offers a unified interface for these primitives across engines. It is available from \acr{CTAN}.\fnurl{https://ctan.org/pkg/pdftexcmds/} + +\biblatex uses \sty{pdftexcmds} to access the MD5 hash primitives, so version~0.27 (2018/01/30) or above is strongly recommended. \end{marglist} @@ -263,20 +268,31 @@ Apart from the above resources, \biblatex also requires the standard \latex pack \subsubsection{Recommended Packages} \label{int:pre:rec} -The packages listed in this section are not required for \biblatex to function, but they provide recommended additional functions or enhance existing features. The package loading order usually does not matter. +The packages listed in this section are not strictly required for \biblatex to function, but they provide recommended additional functions or enhance existing features. \begin{marglist} \item[babel/polyglossia] The \sty{babel} and \sty{polyglossia} packages provides the core architecture for multilingual typesetting. If you are writing in a language other than American English, using one of these packages is strongly recommended. You should load \sty{babel} or \sty{polyglossia} before \biblatex and then \biblatex will detect \sty{babel} or \sty{polyglossia} automatically. (While \sty{babel} may be loaded after \biblatex if so desired, \sty{polyglossia} must always be loaded before \biblatex.) -\biblatex has only limited support for \sty{polyglossia} versions prior to~v1.45. If \sty{polyglossia} is used, it should be updated to version~1.45 (2019/10/27) or above. +\biblatex has only limited support for \sty{polyglossia} versions prior to~v1.45 (2019/10/27). Additional useful features for \biblatex were added in version~1.49. If \sty{polyglossia} is used, it should be updated to version~1.49 (2020/04/08) or above. + +The minimum supported \sty{babel} version is~v3.9r (2016/04/23). \item[csquotes] -If this package is available, \biblatex will use its language sensitive quotation facilities to enclose certain titles in quotation marks. If not, \biblatex uses quotes suitable for American English as a fallback. When writing in a language other than American English, loading \sty{csquotes} is strongly recommended.\fnurl{http://ctan.org/pkg/csquotes/} +If this package is available, \biblatex will use its language sensitive quotation facilities to enclose certain titles in quotation marks. If not, \biblatex uses quotes suitable for American English as a fallback. When writing in a language other than American English, loading \sty{csquotes} is strongly recommended.\fnurl{https://ctan.org/pkg/csquotes/} + +\end{marglist} + +\subsubsection{Additional Useful Packages} +\label{int:pre:add} + +The packages listed in this section are not required for \biblatex to function, but provide additional specialist functions or enhance existing features. These packages generally only need to be loaded if their functionality is explicitly desired. The package loading order usually does not matter. + +\begin{marglist} \item[xpatch] -The \sty{xpatch} package extends the patching commands of \sty{etoolbox} to \biblatex bibliography macros, drivers and formatting directives.\fnurl{http://ctan.org/pkg/xpatch/} +The \sty{xpatch} package extends the patching commands of \sty{etoolbox} to \biblatex bibliography macros, drivers and formatting directives.\fnurl{https://ctan.org/pkg/xpatch/} Its commands are useful to apply surgical-precision changes to bibliography macros, drivers or formatting directives without having to restate the whole definition to change it. The \biblatex core does not need or use these patching commands and styles that make use of them should load the package themselves. \end{marglist} @@ -299,6 +315,8 @@ When using the \sty{memoir} class, the default bibliography headings are adapted \item[\acr{KOMA}-Script] When using any of the \sty{scrartcl}, \sty{scrbook}, or \sty{scrreprt} classes, the default bibliography headings are adapted such that they blend with the default layout of these classes. See \secref{use:cav:scr} for further usage hints. +If available \biblatex makes use of some of the more recent of \acr{KOMA}-Script's \emph{do-hooks}. The relevant hooks are present from version~3.27 (2019/10/12) onwards, which is therefore the minimum version recommendation. + \end{marglist} \subsubsection{Incompatible Packages} @@ -354,7 +372,11 @@ The \sty{splitbib} package provides support for bibliographies subdivided by top The \sty{titlesec} package redefines user-level document division commands such as \cmd{chapter} or \cmd{section}. This approach is not compatible with internal command changes applied by the \biblatex \opt{refsection}, \opt{refsegment} and \opt{citereset} option settings described in \secref{use:opt:pre:gen}. \item[ucs] -The \sty{ucs} package provides support for \utf encoded input. Either use \sty{inputenc}'s standard \file{utf8} module or a Unicode enabled engine such as \xetex or \luatex instead. +The \sty{ucs} package provides support for \utf encoded input, but it does so in a way incompatible with \biblatex. + +If you get an error about \sty{ucs} being loaded, but you don't load it explicitly in your preamble, check that you don't load \sty{inputenc}'s \file{utf8x} module: \verb|\usepackage[utf8x]{inputenc}| will also load \sty{ucs}. + +Instead of \sty{ucs}/\file{utf8x} use a Unicode engine such as \xetex or \luatex if you want full Unicode support. If you use \pdftex or \tex, the Unicode characters predefined by the \latex format are usually enough for many use cases (this is true for \latex from April 2018 or later, in older versions load \sty{inputenc} with the \file{utf8} module) and missing characters can be defined using \cmd{DeclareUnicodeCharacter} or \sty{newunicodechar}'s \cmd{newunicodechar}. \item[etextools] The \sty{etextools} package provides enhancements to list macros defined by \sty{etoolbox} and a few other tools for command definitions. @@ -376,12 +398,15 @@ during processing if it encounters information which comes from a compatibility matrix for the recent versions. \begin{table} +\caption{\biber/\biblatex\ compatibility matrix} +\label{tab:int:pre:bibercompat} \tablesetup\centering \begin{tabular}{cc} \toprule \sffamily\bfseries\spotcolor Biber version & \sffamily\bfseries\spotcolor \biblatex\ version\\ \midrule +2.14 & 3.14\\ 2.13 & 3.13\\ 2.12 & 3.12\\ 2.11 & 3.11\\ @@ -418,8 +443,6 @@ compatibility matrix for the recent versions. 0.9 & 1.4x\\ \bottomrule \end{tabular} -\caption{\biber/\biblatex\ compatibility matrix} -\label{tab:int:pre:bibercompat} \end{table} \section{Database Guide} @@ -448,14 +471,14 @@ The <alias> relation referred to in this subsection is the <soft alias> defined An article in a journal, magazine, newspaper, or other periodical which forms a self"=contained unit with its own title. The title of the periodical is given in the \bibfield{journaltitle} field. If the issue has its own title in addition to the main title of the periodical, it goes in the \bibfield{issuetitle} field. Note that \bibfield{editor} and related fields refer to the journal while \bibfield{translator} and related fields refer to the article. \reqitem{author, title, journaltitle, year/date} -\optitem{translator, annotator, commentator, subtitle, titleaddon, editor, editora, editorb, editorc, journalsubtitle, issuetitle, issuesubtitle, language, origlanguage, series, volume, number, eid, issue, month, pages, version, note, issn, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{translator, annotator, commentator, subtitle, titleaddon, editor, editora, editorb, editorc, journalsubtitle, journaltitleaddon, issuetitle, issuesubtitle, issuetitleaddon, language, origlanguage, series, volume, number, eid, issue, month, pages, version, note, issn, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{book} A single"=volume book with one or more authors where the authors share credit for the work as a whole. This entry type also covers the function of the \bibtype{inbook} type of traditional \bibtex, see \secref{bib:use:inb} for details. \reqitem{author, title, year/date} -\optitem{editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{mvbook} @@ -469,7 +492,7 @@ A multi"=volume \bibtype{book}. For backwards compatibility, multi"=volume books A part of a book which forms a self"=contained unit with its own title. Note that the profile of this entry type is different from standard \bibtex, see \secref{bib:use:inb}. \reqitem{author, title, booktitle, year/date} -\optitem{bookauthor, editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{bookauthor, editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{bookinbook} @@ -484,14 +507,14 @@ Supplemental material in a \bibtype{book}. This type is closely related to the \ A book"=like work without a formal publisher or sponsoring institution. Use the field \bibfield{howpublished} to supply publishing information in free format, if applicable. The field \bibfield{type} may be useful as well. \reqitem{author/editor, title, year/date} -\optitem{subtitle, titleaddon, language, howpublished, type, note, location, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{subtitle, titleaddon, language, howpublished, type, note, location, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{collection} A single"=volume collection with multiple, self"=contained contributions by distinct authors which have their own title. The work as a whole has no overall author but it will usually have an editor. \reqitem{editor, title, year/date} -\optitem{editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{mvcollection} @@ -505,7 +528,7 @@ A multi"=volume \bibtype{collection}. For backwards compatibility, multi"=volume A contribution to a collection which forms a self"=contained unit with a distinct author and title. The \bibfield{author} refers to the \bibfield{title}, the \bibfield{editor} to the \bibfield{booktitle}, \ie the title of the collection. \reqitem{author, title, booktitle, year/date} -\optitem{editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{editor, editora, editorb, editorc, translator, annotator, commentator, introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note, publisher, location, isbn, eid, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{suppcollection} @@ -523,7 +546,7 @@ A data set or a similar collection of (mostly) raw data. Technical or other documentation, not necessarily in printed form. The \bibfield{author} or \bibfield{editor} is omissible in terms of \secref{bib:use:key}. \reqitem{author/editor, title, year/date} -\optitem{subtitle, titleaddon, language, edition, type, series, number, version, note, organization, publisher, location, isbn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{subtitle, titleaddon, language, edition, type, series, number, version, note, organization, publisher, location, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{misc} @@ -551,7 +574,7 @@ A patent or patent request. The number or record token is given in the \bibfield An complete issue of a periodical, such as a special issue of a journal. The title of the periodical is given in the \bibfield{title} field. If the issue has its own title in addition to the main title of the periodical, it goes in the \bibfield{issuetitle} field. The \bibfield{editor} is omissible in terms of \secref{bib:use:key}. \reqitem{editor, title, year/date} -\optitem{editora, editorb, editorc, subtitle, issuetitle, issuesubtitle, language, series, volume, number, issue, month, note, issn, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{editora, editorb, editorc, subtitle, titleaddon, issuetitle, issuesubtitle, issuetitleaddon, language, series, volume, number, issue, month, note, issn, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{suppperiodical} @@ -562,7 +585,7 @@ Supplemental material in a \bibtype{periodical}. This type is similar to \bibtyp A single"=volume conference proceedings. This type is very similar to \bibtype{collection}. It supports an optional \bibfield{organization} field which holds the sponsoring institution. The \bibfield{editor} is omissible in terms of \secref{bib:use:key}. \reqitem{title, year/date} -\optitem{editor, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, eventtitle, eventtitleaddon, eventdate, venue, language, volume, part, volumes, series, number, note, organization, publisher, location, month, isbn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{editor, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, eventtitle, eventtitleaddon, eventdate, venue, language, volume, part, volumes, series, number, note, organization, publisher, location, month, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{mvproceedings} @@ -576,7 +599,7 @@ A multi"=volume \bibtype{proceedings} entry. For backwards compatibility, multi" An article in a conference proceedings. This type is similar to \bibtype{incollection}. It supports an optional \bibfield{organization} field. \reqitem{author, title, booktitle, year/date} -\optitem{editor, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, eventtitle, eventtitleaddon, eventdate, venue, language, volume, part, volumes, series, number, note, organization, publisher, location, month, isbn, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{editor, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle, booktitleaddon, eventtitle, eventtitleaddon, eventdate, venue, language, volume, part, volumes, series, number, note, organization, publisher, location, month, isbn, eid, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{reference} @@ -595,7 +618,7 @@ An article in a work of reference. This is a more specific variant of the generi A technical report, research report, or white paper published by a university or some other institution. Use the \bibfield{type} field to specify the type of report. The sponsoring institution goes in the \bibfield{institution} field. \reqitem{author, title, type, institution, year/date} -\optitem{subtitle, titleaddon, language, number, version, note, location, month, isrn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{subtitle, titleaddon, language, number, version, note, location, month, isrn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{set} @@ -610,14 +633,14 @@ Computer software. The standard styles will treat this entry type as an alias fo A thesis written for an educational institution to satisfy the requirements for a degree. Use the \bibfield{type} field to specify the type of thesis. \reqitem{author, title, type, institution, year/date} -\optitem{subtitle, titleaddon, language, note, location, month, isbn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} +\optitem{subtitle, titleaddon, language, note, location, month, isbn, eid, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{unpublished} A work with an author and a title which has not been formally published, such as a manuscript or the script of a talk. Use the fields \bibfield{howpublished} and \bibfield{note} to supply additional information in free format, if applicable. \reqitem{author, title, year/date} -\optitem{subtitle, titleaddon, type, eventtitle, eventtitleaddon, eventdate, venue, language, howpublished, note, location, isbn, month, addendum, pubstate, url, urldate} +\optitem{subtitle, titleaddon, type, eventtitle, eventtitleaddon, eventdate, venue, language, howpublished, note, location, isbn, month, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate} \typeitem{xdata} @@ -655,7 +678,7 @@ An alias for \bibtype{online}, provided for \sty{jurabib} compatibility. \subsubsection{Non-standard Types} \label{bib:typ:ctm} -The types in this section are similar to the custom types \bibtype{custom[a--f]}, \ie the standard bibliography styles provide no bibliography drivers for these types. When using the standard styles, they will therefore generally be treated as \bibtype{misc} entries---exceptions to this rule are noted in the descriptions below. The types are known to the default data model and will be happily accepted by \biber. +The types in this section are similar to the custom types \bibtype{custom[a--f]}, \ie the standard bibliography styles provide no bibliography drivers for these types. In the standard styles they will use the bibliography driver for \bibtype{misc} entries---exceptions to this rule are noted in the descriptions below. The types are known to the default data model and will be happily accepted by \biber. \begin{typelist} @@ -899,7 +922,7 @@ Similar to \bibfield{editortype} but referring to the \bibfield{editorc} field. \fielditem{eid}{literal} -The electronic identifier of an \bibtype{article}. This field may replace the \bibfield{pages} field for journals deviating from the classic pagination scheme of printed journals by only enumerating articles or papers and not pages. +The electronic identifier of an \bibtype{article} or chapter-like section of a larger work. This field may replace the \bibfield{pages} field for journals deviating from the classic pagination scheme of printed journals by only enumerating articles or papers and not pages. \fielditem{entrysubtype}{literal} @@ -989,6 +1012,10 @@ The subtitle of a specific issue of a journal or other periodical. The title of a specific issue of a journal or other periodical. +\fielditem{issuetitleaddon}{literal} + +An annex to the \bibfield{issuetitle}, to be printed in a different font. + \fielditem{iswc}{literal} The International Standard Work Code of a musical work. Not used by the standard bibliography styles. @@ -1001,6 +1028,11 @@ The subtitle of a journal, a newspaper, or some other periodical. The name of a journal, a newspaper, or some other periodical. +\fielditem{journaltitleaddon}{literal} + +An annex to the \bibfield{journaltitle}, to be printed in a different font. + + \fielditem{label}{literal} A designation to be used by the citation style as a substitute for the regular label if any data required to generate the regular label is missing. For example, when an author"=year citation style is generating a citation for an entry which is missing the author or the year, it may fall back to \bibfield{label}. See \secref{bib:use:key} for details. Note that, in contrast to \bibfield{shorthand}, \bibfield{label} is only used as a fallback. See also \bibfield{shorthand}. @@ -1210,6 +1242,8 @@ A special field which holds arbitrary \tex code to be executed whenever the data The gender of the author or the gender of the editor, if there is no author. The following identifiers are supported: \opt{sf} (feminine singular, a single female name), \opt{sm} (masculine singular, a single male name), \opt{sn} (neuter singular, a single neuter name), \opt{pf} (feminine plural, a list of female names), \opt{pm} (masculine plural, a list of male names), \opt{pn} (neuter plural, a list of neuter names), \opt{pp} (plural, a mixed gender list of names). This information is only required by special bibliography and citation styles and only in certain languages. For example, a citation style may replace recurrent author names with a term such as <idem>. If the Latin word is used, as is custom in English and French, there is no need to specify the gender. In German publications, however, such key terms are usually given in German and in this case they are gender"=sensitive. \begin{table} +\caption{Supported Languages} +\label{bib:fld:tab1} \tablesetup \begin{tabularx}{\textwidth}{@{}p{90pt}@{}p{160pt}@{}X@{}} \toprule @@ -1242,21 +1276,23 @@ Hungarian & Hungary & \opt{magyar}, \opt{hungarian} \\ Icelandic & Iceland & \opt{icelandic} \\ Italian & Italy & \opt{italian} \\ Latvian & Latvia & \opt{latvian} \\ +Lithuanian & Lithuania & \opt{lithuanian} \\ Norwegian (Bokmål) & Norway & \opt{norsk} \\ Norwegian (Nynorsk) & Norway & \opt{nynorsk} \\ Polish & Poland & \opt{polish} \\ Portuguese & Brazil & \opt{brazil} \\ & Portugal & \opt{portuguese}, \opt{portuges} \\ Russian & Russia & \opt{russian} \\ +Serbian (Latin) & Serbia & \opt{serbian} \\ +Serbian (Cyrillic) & Serbia & \opt{serbianc} \\ Slovak & Slovakia & \opt{slovak} \\ Slovene & Slovenia & \opt{slovene}, \opt{slovenian} \\ Spanish & Spain & \opt{spanish} \\ Swedish & Sweden & \opt{swedish} \\ +Turkish & Turkey & \opt{turkish} \\ Ukrainian & Ukraine & \opt{ukrainian} \\ \bottomrule \end{tabularx} -\caption{Supported Languages} -\label{bib:fld:tab1} \end{table} \fielditem{langid}{identifier} @@ -1675,6 +1711,8 @@ This entry will be printed as «\emph{Journal Name}. New ser. 9 (1998)». See \s \label{bib:use:dat} \begin{table} +\caption{Date Specifications} +\label{bib:use:tab1} \tablesetup \begin{tabularx}{\textwidth}{@{}>{\ttfamily}llX@{}} \toprule @@ -1698,8 +1736,6 @@ This entry will be printed as «\emph{Journal Name}. New ser. 9 (1998)». See \s 2004-04-05T14:34:00 & 05/04/2004 2:34 PM & 5th April 2004 14:34:00\\ \bottomrule \end{tabularx} -\caption{Date Specifications} -\label{bib:use:tab1} \end{table} Date fields such as the default data model dates \bibfield{date}, \bibfield{origdate}, \bibfield{eventdate}, and \bibfield{urldate} adhere to \acr{ISO8601-2} Extended Format specification level 1. In addition to the \acr{ISO8601-2} empty date range markers, you may also specify an open ended/start date range by giving the range separator and omitting the end/start date (\eg \texttt{YYYY/}, \texttt{/YYYY}). See \tabref{bib:use:tab1} for some examples of valid date specifications and the formatted dates automatically generated by \biblatex. The formatted date is language specific and will be adapted automatically. If there is no \bibfield{date} field in an entry, \biblatex will also consider the fields \bibfield{year} and \bibfield{month} for backwards compatibility with traditional \bibtex but this is not encouraged as explicit \bibfield{year} and \bibfield{month} are not parsed for date meta-information markers or times and are used as-is. Style authors should note that date fields like \bibfield{date} or \bibfield{origdate} are only available in the \file{bib} file. All dates are parsed and dissected into their components as the \file{bib} file is processed. The date and time components are made available to styles by way of the special fields discussed in \secref{aut:bbx:fld:dat}. See this section and \tabref{aut:bbx:fld:tab1} on page~\pageref{aut:bbx:fld:tab1} for further information. @@ -1711,6 +1747,8 @@ Date field names \emph{must} end with the string <date>, as with the default dat \acr{ISO8601-2} supports dates before common era (BCE/BC) by way of a negative date format and supports <approximate> (circa) and uncertain dates. Such date formats set internal markers which can be tested for so that appropriate localised markers (such as \opt{circa} or \opt{beforecommonera}) can be inserted. Also supported are <unspecified> dates (\acr{ISO8601-2} 4.3) which are automatically expanded into appropriate data ranges accompanied by a field \bibfield{$<$datetype$>$dateunspecified} which details the granularity of the unspecified data. Styles may use this information to format such dates appropriately but the standard styles do not do this. See \tabref{bib:use:tab3} on page~\pageref{bib:use:tab3} for the allowed \acr{ISO8601-2} <unspecified> formats, their range expansions and \bibfield{$<$datetype$>$dateunspecified} values (see \secref{aut:bbx:fld:gen}). \begin{table} +\caption{ISO8601-2 4.3 Unspecified Date Parsing} +\label{bib:use:tab3} \tablesetup \begin{tabularx}{\textwidth}{@{}>{\ttfamily}llX@{}} \toprule @@ -1725,15 +1763,15 @@ Date field names \emph{must} end with the string <date>, as with the default dat 1999-XX-XX & 1999-01-01/1999-12-31 & dayinyear \\ \bottomrule \end{tabularx} -\caption{ISO8601-2 4.3 Unspecified Date Parsing} -\label{bib:use:tab3} \end{table} -\tabref{bib:use:tab2} shows formats which use appropriate tests and formatting. See the date meta-information tests in \secref{aut:aux:tst} and the localisation strings in \secref{aut:lng:key:dt}. See also the \file{96-dates.tex} example file for complete examples of the tests and localisation strings use. +\Tabref{bib:use:tab2} shows formats which use appropriate tests and formatting. See the date meta-information tests in \secref{aut:aux:tst} and the localisation strings in \secref{aut:lng:key:dt}. See also the \file{96-dates.tex} example file for complete examples of the tests and localisation strings use. The output of <circa>, uncertainty and era information in standard styles (or custom styles not customising the internal \cmd{mkdaterange*} macros) is controlled by the package options \opt{datecirca}, \opt{dateuncertain}, \opt{dateera} and \opt{dateeraauto} (see \secref{use:opt:pre:gen}). See \tabref{bib:use:tab2} on page~\pageref{bib:use:tab2} for examples which assumes these options are all used. \begin{table} +\caption{Enhanced Date Specifications} +\label{bib:use:tab2} \tablesetup \begin{tabularx}{\textwidth}{@{}>{\ttfamily}llX@{}} \toprule @@ -1758,8 +1796,6 @@ The output of <circa>, uncertainty and era information in standard styles (or cu 2004-24 & 2004 & also, \bibfield{season} is set to the localisation string <winter>\\ \bottomrule \end{tabularx} -\caption{Enhanced Date Specifications} -\label{bib:use:tab2} \end{table} \subsubsection{Year, Month and Date} @@ -1846,7 +1882,7 @@ In addition to the \bibfield{crossref} field, \biblatex supports a simplified cr \subsubsection{Sorting and Encoding Issues} \label{bib:cav:enc} -\biber handles Ascii, 8-bit encodings such as Latin\,1, and \utf. It features true Unicode support and is capable of reencoding the \file{bib} data on the fly in a robust way. For sorting, \biber uses a Perl implementation of the Unicode Collation Algorithm (\acr{UCA}), as outlined in Unicode Technical Standard \#10.\fnurl{http://unicode.org/reports/tr10/} Collation tailoring based on the Unicode Common Locale Data Repository (\acr{CLDR}) is also supported.\fnurl{http://cldr.unicode.org/} +\biber handles Ascii, 8-bit encodings such as Latin\,1, and \utf. It features true Unicode support and is capable of reencoding the \file{bib} data on the fly in a robust way. For sorting, \biber uses a Perl implementation of the Unicode Collation Algorithm (\acr{UCA}), as outlined in Unicode Technical Standard \#10.\fnurl{https://unicode.org/reports/tr10/} Collation tailoring based on the Unicode Common Locale Data Repository (\acr{CLDR}) is also supported.\fnurl{http://cldr.unicode.org/} Supporting Unicode implies much more than handling \utf input. Unicode is a complex standard covering more than its most well-known parts, the Unicode character encoding and transport encodings such as \utf. It also standardizes aspects such as string collation, which is required for language-sensitive sorting. For example, by using the Unicode Collation Algorithm, \biber can handle the character <ß> without any manual intervention. All you need to do to get localised sorting is specify the locale: @@ -2037,6 +2073,10 @@ Loads compatibility module which provides aliases for the citation commands of t Loads a citation module which provides \sty{mcite}\slash\sty{mciteplus}-like citation commands. See \secref{use:cit:mct} for details. +\optitem[auto]{casechanger}{\opt{auto}, \opt{latex2e}, \opt{expl3}} + +This option selects the implementation of \biblatex's case changing functions, most prominently \cmd{MakeSentenceCase*}. \opt{expl3} selects the new implementation based on the \latex3 module \sty{l3text}. \opt{latex2e} selects the original implementation, which has tricky brace protection behaviour and some shortcomings when dealing with non-ASCII characters. The default \opt{auto} selects the case changing code based on the available \sty{expl3} version (\opt{expl3} is selected if \sty{expl3} is at least version 2020-04-06). + \end{optionlist} \subsubsection{Preamble Options} @@ -2162,13 +2202,17 @@ Enclose the entry in a \env{hyphenrules} environment. This will load hyphenation Enclose the entry in an \env{otherlanguage} environment. This will load hyphenation patterns for the specified language, enable all extra definitions which \sty{babel}/\sty{polyglossia} and \biblatex provide for the respective language, and translate key terms such as <editor> and <volume>. The extra definitions include localisations of the date format, of ordinals, and similar things. \item[other*] -Enclose the entry in an \env{otherlanguage*} environment. Please note that \biblatex treats \env{otherlanguage*} like \env{otherlanguage} but other packages may make a distinction in this case. +Enclose the entry in an \env{otherlanguage*} environment. Please note that \biblatex treats \env{otherlanguage*} like \env{otherlanguage} if \opt{langhook} is set to \opt{extras}. \item[langname] \sty{polyglossia} only. Enclose the entry in a \env{$<$languagename$>$} environment. The benefit of this option value for \sty{polyglossia} users is that it takes note of the \bibfield{langidopts} field so that you can add per-language options to an entry (like selecting a language variant). When using \sty{babel}, this option does the same as the \opt{other} option value. \end{valuelist} +\optitem[captions]{langhook}{\opt{captions}, \opt{extras}} + +This option controls whether bibliography strings and extras are written to \cmd{captions$<$language$>$} or \cmd{extras$<$language$>$}. The exact effect of this option depend on the language package (\sty{babel}/\sty{polyglossia}). Broadly speaking, the language switching environments provided by those packages (except \env{hyphenrules}) either switch language captions and extras or only language extras. Hence, if this option is set to \opt{extras}, all language switches will affect \biblatex, whereas with \opt{captions} only language switches that also switch other parts of the document language affect \biblatex. + \optitem[none]{block}{\opt{none}, \opt{space}, \opt{par}, \opt{nbpar}, \opt{ragged}} This option controls the extra spacing between blocks, \ie larger segments of a bibliography entry. The possible choices are: @@ -2253,6 +2297,11 @@ This option controls how back references to \bibtype{set} entries and their memb \end{valuelist} +\boolitem[true]{backreffloats} + +Whether to enable back references to citations in floats. + + \optitem[false]{indexing}{\opt{true}, \opt{false}, \opt{cite}, \opt{bib}} This option controls indexing in citations and in the bibliography. More precisely, it affects the \cmd{ifciteindex} and \cmd{ifbibindex} commands from \secref{aut:aux:tst}. The option is settable on a global, a per-type, or on a per-entry basis. The possible choices are: @@ -2341,7 +2390,7 @@ January 21--30, 2010\par 2010-1-21/2010-1-30 \end{valuelist} % -Note that \opt{iso} format will enforce \kvopt{dateera}{astronomical}, \kvopt{datezeros}{true}, \kvopt{timezeros}{true}, \kvopt{seconds}{true}, \kvopt{$<$datetype$>$time}{24h} and \kvopt{julian}{false}. \opt{ymd} is an ETFT-like format but which can change the various options which the strict \opt{iso} option does not allow for. +Note that \opt{iso} format will enforce \kvopt{dateera}{astronomical}, \kvopt{datezeros}{true}, \kvopt{timezeros}{true}, \kvopt{seconds}{true}, \kvopt{$<$datetype$>$time}{24h} and \kvopt{julian}{false}. \opt{ymd} is an EDTF-like format but which can change the various options which the strict \opt{iso} option does not allow for. As seen in the above examples, the actual date format is language specific. Note that the month name in all long formats is responsive to the \opt{abbreviate} package option. The leading zeros for months and days in all short formats may be controlled separately with the \opt{datezeros} package option. The leading zeros for hours, minutes and seconds in all short formats may be controlled separately with the \opt{timezeros} package option. If outputting times, the printing of seconds and timezones is controlled by the \opt{seconds} and \opt{timezones} options respectively. @@ -2440,7 +2489,7 @@ Sets \opt{labeltime} and the \opt{$<$datetype$>$time} option for all times in th \boolitem[false]{dateusetime} -Specifies whether to print any time component of a date field after the date component. The separator between the date and time components is \cmd{bibdatetimesep} from \secref{use:fmt:lng}. This option does nothing if a compact date format is being used (see \secref{use:opt:pre:gen}) as this would be very confusing. +Specifies whether to print any time component of a date field after the date component. The separator between the date and time components is \cmd{bibdatetimesep} from \secref{use:fmt:lng}. \boolitem[false]{labeldateusetime} @@ -2519,6 +2568,10 @@ Sets the minimum number of cross references to \prm{integer} when requesting a b As \opt{mincrossrefs} but for \bibfield{xref} fields. +\boolitem[true]{bibtexcaseprotection} + +This option only has an effect when the \sty{expl3} implementation of the case changing functions is selected. If the option is set to \opt{true}, \cmd{MakeSentenceCase*} supports brace protection of words from case change as in classical \bibtex. If the option is set to \opt{false}, pairs of braces no longer imply case protection, which can now be enforced by wrapping the relevant word in \cmd{NoCaseChange}---this makes for a less confusing, if more verbose, markup of case protection. + \end{optionlist} \paragraph{Style-specific} @@ -2562,6 +2615,20 @@ Suppose \texttt{key1} and \texttt{key2} are members of the set \texttt{set1}. Wi \end{optionlist} +\subparagraph{\texttt{numeric-comp}} The citation style \texttt{numeric-comp} supports the \opt{subentrycomp} option in global, per-type and per-entry scope. + +\begin{optionlist} + +\boolitem[true]{subentrycomp} + +This option determines whether or not citations to set members are compressed similar to non-set citations. The option only has an effect if \opt{subentry} is set to \texttt{true}. + +Suppose \texttt{key1}, \texttt{key2} and \texttt{key3} are members of the set \texttt{set1}. With \opt{subentrycomp} set to \texttt{true} the three entries will be compressed to <[1a--c]> in citations. With \opt{subentry} set to \texttt{false} the citation will show in the more verbose form <[1a, 1b, 1c]>. + +The option is intended mainly for backwards compatibility, because earlier versions of \biblatex did not compress set member citations. + +\end{optionlist} + \subparagraph{\texttt{authortitle}/\texttt{authoryear}} All bibliography styles of the \texttt{authoryear} and \texttt{authortitle} family as well as all bibliography styles of the \texttt{verbose} family---whose bibliography styles are based on \texttt{authortitle}---support the option \opt{dashed} in global scope. \begin{optionlist} @@ -2592,7 +2659,7 @@ This option controls whether and how the date specification in the entry is merg More in-depth examples of this option can be found in the style examples. \end{optionlist} -\subparagraph{<ibid> styles} Citation styles with <ibid.> function, namely \texttt{authortitle-ibid}, \texttt{author\allowbreakhere title-icomp}, \texttt{author\allowbreakhere year-ibid}, \texttt{authoryear-icomp}, \texttt{ver\allowbreakhere bose-ibid}, \texttt{verbose-inote}, \texttt{verbose-trad1}, \texttt{verbose-trad2} and \texttt{verbose-trad3} provide the global \opt{ibidpage} option. +\subparagraph{<ibid> styles} Citation styles with <ibid.>\ function, namely \texttt{authortitle-ibid}, \texttt{author\allowbreakhere title-icomp}, \texttt{author\allowbreakhere year-ibid}, \texttt{authoryear-icomp}, \texttt{ver\allowbreakhere bose-ibid}, \texttt{verbose-inote}, \texttt{verbose-trad1}, \texttt{verbose-trad2} and \texttt{verbose-trad3} provide the global \opt{ibidpage} option. \begin{optionlist} @@ -2656,7 +2723,7 @@ This option controls the page tracker which is required by the \cmd{ifsamepage} \item[spread] Enable the tracker in spread mode. In this mode, tracking works on a per"=spread (double page) basis. \end{valuelist} -Note that this tracker is disabled in all floats, see \secref{aut:cav:flt}. +Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}. \optitem[false]{citecounter}{\opt{true}, \opt{false}, \opt{context}} @@ -2680,7 +2747,7 @@ This option controls the citation tracker which is required by the \cmd{ifcitese \item[constrict] This mode combines the features of \opt{context} and \opt{strict}. \end{valuelist} -Note that this tracker is disabled in all floats, see \secref{aut:cav:flt}. +Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}. This option is also settable on a per-type or per-entry basis. \optitem[false]{ibidtracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}} @@ -2695,7 +2762,7 @@ This option controls the <ibidem> tracker which is required by the \cmd{ifciteib \item[constrict] This mode combines the features of \opt{context} and \opt{strict}. It also keeps track of footnote numbers and detects potentially ambiguous references in footnotes in a stricter way than the \opt{strict} option. In addition to the conditions imposed by the \opt{strict} option, a reference in a footnote will only be considered as unambiguous if the current citation and the previous citation are given in the same footnote or in immediately consecutive footnotes. \end{valuelist} -Note that this tracker is disabled in all floats, see \secref{aut:cav:flt}. +Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}. This option is also settable on a per-type or per-entry basis. \optitem[false]{opcittracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}} @@ -2710,7 +2777,7 @@ This option controls the <opcit> tracker which is required by the \cmd{ifopcit} \item[constrict] This mode combines the features of \opt{context} and \opt{strict}. See the explanation of \kvopt{ibidtracker}{constrict} for details. \end{valuelist} -Note that this tracker is disabled in all floats, see \secref{aut:cav:flt}. +Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}. This option is also settable on a per-type or per-entry basis. \optitem[false]{loccittracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}} @@ -2725,7 +2792,7 @@ This option controls the <loccit> tracker which is required by the \cmd{ifloccit \item[constrict] This mode combines the features of \opt{context} and \opt{strict}. See the explanation of \kvopt{ibidtracker}{constrict} for details. In addition to that, this mode also checks if the \prm{postnote} argument is numerical (based on \cmd{ifnumerals} from \secref{aut:aux:tst}). \end{valuelist} -Note that this tracker is disabled in all floats, see \secref{aut:cav:flt}. +Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}. This option is also settable on a per-type or per-entry basis. \optitem[false]{idemtracker}{\opt{true}, \opt{false}, \opt{context}, \opt{strict}, \opt{constrict}} @@ -2740,9 +2807,13 @@ This option controls the <idem> tracker which is required by the \cmd{ifciteidem \item[constrict] This mode is similar to \opt{context} with one additional condition: a reference in a footnote will only be considered as unambiguous if the current citation and the previous citation are given in the same footnote or in immediately consecutive footnotes. \end{valuelist} -Note that this tracker is disabled in all floats, see \secref{aut:cav:flt}. +Note that this tracker is disabled in all floats unless explicitly requested with \opt{trackfloats}, see \secref{aut:cav:flt}. This option is also settable on a per-type or per-entry basis. +\boolitem[false]{trackfloats} + +Whether to enable citation tracking in floats. Citation tracking in floats can be tricky, so this option should only be enabled if absolutely necessary and the output should be scrutinised carefully, see also \secref{aut:cav:flt}. + \boolitem[true]{parentracker} This option controls the parenthesis tracker which keeps track of nested parentheses and brackets. This information is used by \cmd{parentext} and \cmd{brackettext} from \secref{use:cit:txt}, \cmd{mkbibparens} and \cmd{mkbibbrackets} from \secref{aut:fmt:ich} and \cmd{bibopenparen}, \cmd{bibcloseparen}, \cmd{bibopenbracket}, \cmd{bibclosebracket} (also \secref{aut:fmt:ich}). @@ -2803,6 +2874,8 @@ Whether or not to provide the special fields \bibfield{labelyear}, \bibfield{lab This option is also settable on a per-type and per-entry basis. Table \ref{use:opt:tab1} summarises the various \opt{extra*} disambiguation counters and what they track. \begin{table} +\caption{Work Uniqueness options} +\label{use:opt:wu} \footnotesize \ttfamily \tablesetup @@ -2818,8 +2891,6 @@ uniquebaretitle & \cmd{ifuniquebaretitle} & labeltitle {\rmfamily when} labelnam uniquework & \cmd{ifuniquework} & labelname+labeltitle\\ \bottomrule \end{tabularx} -\caption{Work Uniqueness options} -\label{use:opt:wu} \end{table} \boolitem[false]{singletitle} @@ -2892,27 +2963,22 @@ With \kvopt{maxnames}{3}, \kvopt{minnames}{1}, \kvopt{nohashothers}{false}, the \begin{lstlisting}{} Jones 1972 - Jones et al 1972 + Jones et al. 1972 Smith 2000 - Smith et al 2000 + Smith et al. 2000 \end{lstlisting} % Whereas with \kvopt{maxnames}{3}, \kvopt{minnames}{1}, \kvopt{nohashothers}{true}, the result would be: \begin{lstlisting}{} Jones 1972a - Jones et al 1972b + Jones et al. 1972b Smith 2000a - Smith et al 2000b + Smith et al. 2000b \end{lstlisting} -If desired, this could be further simplified with: - -\begin{ltxexample} - \DefineBibliographyStrings{english}{andothers={}} -\end{ltxexample} -% -To obtain: +If desired, this could be further simplified by removing the <et al.\@> +to obtain: \begin{lstlisting}{} Jones 1972a @@ -2940,6 +3006,8 @@ This option is also settable on a per-type, per-entry and per-namelist basis. \end{optionlist} \begin{table} +\caption{Disambiguation counters} +\label{use:opt:tab1} \footnotesize \ttfamily \tablesetup @@ -2972,8 +3040,6 @@ labeltitleyear & {\rmfamily ---} & extratitleyear & labeltitle+labelyear\\ {\rmfamily ---} & {\rmfamily ---} & extraname & labelname\\ \bottomrule \end{tabularx} -\caption{Disambiguation counters} -\label{use:opt:tab1} \end{table} \subsubsection{Entry Options} @@ -3121,7 +3187,7 @@ The citation styles which come with this package implement several common citati This style implements a numeric citation scheme similar to the standard bibliographic facilities of \latex. It should be employed in conjunction with a numeric bibliography style which prints the corresponding labels in the bibliography. It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labelnumber}{true}. This style also provides an additional preamble option called \opt{subentry} which affects the handling of entry sets. If this option is disabled, citations referring to a member of a set will point to the entire set. If it is enabled, the style supports citations like «[5c]» which point to a subentry in a set (the third one in this example). See the style example for details. \item[numeric-comp]\seestyleexample{31-style-numeric-comp-biber} -A compact variant of the \texttt{numeric} style which prints a list of more than two consecutive numbers as a range. This style is similar to the \sty{cite} package and the \opt{sort\&compress} option of the \sty{natbib} package in numerical mode. For example, instead of «[8, 3, 1, 7, 2]» this style would print «[1--3, 7, 8]». It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{sortcites}{true}, \kvopt{labelnumber}{true}. It also provides the \opt{subentry} option. +A compact variant of the \texttt{numeric} style which prints a list of more than two consecutive numbers as a range. This style is similar to the \sty{cite} package and the \opt{sort\&compress} option of the \sty{natbib} package in numerical mode. For example, instead of «[8, 3, 1, 7, 2]» this style would print «[1--3, 7, 8]». It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{sortcites}{true}, \kvopt{labelnumber}{true}. It also provides the \opt{subentry} and \opt{subentrycomp} options. \item[numeric-verb]\seestyleexample{32-style-numeric-verb-biber} A verbose variant of the \texttt{numeric} style. The difference affects the handling of a list of citations and is only apparent when multiple entry keys are passed to a single citation command. For example, instead of «[2, 5, 6]» this style would print «[2]; [5]; [6]». It is intended for in-text citations. The style will set the following package options at load time: \kvopt{autocite}{inline}, \kvopt{labelnumber}{true}. It also provides the \opt{subentry} option. @@ -3311,7 +3377,7 @@ Multiple relations to the same entry are also possible: } \end{lstlisting} % -Note the the order of the keys in lists of multiple related entries is important. The data from multiple related entries is printed in the order of the keys listed in this field. See \secref{aut:ctm:rel} for a more details on the mechanisms behind this feature. You can turn this feature off using the package option \opt{related} from \secref{use:opt:pre:gen}. +Note the order of the keys in lists of multiple related entries is important. The data from multiple related entries is printed in the order of the keys listed in this field. See \secref{aut:ctm:rel} for a more details on the mechanisms behind this feature. You can turn this feature off using the package option \opt{related} from \secref{use:opt:pre:gen}. You can use the \bibfield{relatedoptions} to set options on the related entry data clone. This is useful if you need to override the \opt{dataonly} option which is set by default on all related entry clones. For example, if you will expose some of the names in the related clone in your document, you may want to have them disambiguated from names in other entries but normally this won't happen as related clones have the per"=entry \opt{dataonly} option set and this in turn sets \kvopt{uniquename}{false} and \kvopt{uniquelist}{false}. In such a case, you can set \bibfield{relatedoptions} to just \opt{skiplab, skipbib, skipbiblist}. @@ -3546,9 +3612,9 @@ Adds a \prm{resource}, such as a \file{.bib} file, to the default resource list. \begin{ltxexample} \addbibresource{bibfile1.bib} \addbibresource{bibfile2.bib} -\addbibresource{bibfiles/bibfile*.bib} -\addbibresource{bibfile-num?.bib} -\addbibresource{bibfile{1,2,3}.bib} +\addbibresource[glob]{bibfiles/bibfile*.bib} +\addbibresource[glob]{bibfile-num?.bib} +\addbibresource[glob]{bibfile{1,2,3}.bib} \addbibresource[location=remote]{http://www.citeulike.org/bibtex/group/9517} \addbibresource[location=remote,label=lan]{ftp://192.168.1.57/~user/file.bib} \end{ltxexample} @@ -3567,7 +3633,7 @@ Assigns a label to a resource. The \prm{identifier} may be used in place of the \valitem[local]{location}{location} -The location of the resource. The \prm{location} may be either \texttt{local} for local resources or \texttt{remote} for \acr{URL}s. Remote resources require \biber. The protocols \acr{HTTP} and \acr{FTP} are supported. The remote \acr{URL} must be a fully qualified path to a \file{bib} file or a \acr{URL} which returns a \file{bib} file. +The location of the resource. The \prm{location} may be either \texttt{local} for local resources or \texttt{remote} for \acr{URL}s. Remote resources require \biber. The protocols \acr{HTTP/HTTPS} and \acr{FTP} are supported. The remote \acr{URL} must be a fully qualified path to a \file{bib} file or a \acr{URL} which returns a \file{bib} file. \valitem[file]{type}{type} @@ -3585,6 +3651,13 @@ The data type (format) of the resource. The following formats are currently supp \end{valuelist} +\boolitem{glob} + +Whether \biber should glob (expand according to pattern) the datasource name. There is +a global setting for this in \biber (false by default and settable to true +using the \opt{--glob-datasources} option). This option allows overriding +the \biber default on a per-resource basis. + \end{optionlist*} \cmditem{addglobalbib}[options]{resource} @@ -3622,6 +3695,10 @@ The bibliography and the list of shorthands typically have a chapter or section This option overrides the default title provided by the heading selected with the \opt{heading} option, if supported by the heading definition. See \secref{use:bib:hdg} for details. +\optitem[\normalfont\emph{global setting} (\opt{none})]{block}{\opt{none}, \opt{space}, \opt{par}, \opt{nbpar}, \opt{ragged}} + +This option overrides the global \opt{block} option (see \secref{use:opt:pre:gen}, the meaning of the settings is explained there as well). + \valitem{prenote}{name} The prenote is an arbitrary piece of text to be printed after the heading but before the list of references. This option selects the prenote \prm{name}, as defined with \cmd{defbibnote}. By default, no prenote is printed. The note is printed in the standard text font. It is not affected by \cmd{bibsetup} and \cmd{bibfont} but it may contain its own font declarations. See \secref{use:bib:nts} for details. @@ -3710,7 +3787,7 @@ This command loops over all bibliography categories. This is equivalent to givin This command prints a bibliography heading defined with \cmd{defbibheading}. It takes one optional argument, which is a list of options given in \keyval notation. The options are a small subset of those supported by \cmd{printbibliography}. Valid options are \opt{heading} and \opt{title}. By default, this command uses the heading \texttt{bibliography}. See \secref{use:bib:hdg} for details. Also see \secref{use:use:mlt,use:use:div} for usage examples. -\cmditem{DeclarePrintbibliographyDefaults}[key=value, \dots] +\cmditem{DeclarePrintbibliographyDefaults}{key=value, \dots} This command can be used to globally set defaults for some options to \cmd{printbibliography}, the \cmd{bibby...} bibliography commands and \cmd{printbibheading}. The supported keys are @@ -3816,15 +3893,17 @@ Naturally all defaults can be overridden by options to \cmd{printbiblist} and de Bibliography lists are often used to print lists of various kinds of shorthands and this can result in duplicate entries if more than one bibliography entry has the same shorthand. For example, several journal articles in the same journal would result in duplicate entries in a list of journal shorthands. You can use the fact that such lists automatically pick up a \cmd{bibcheck} with the same name as the list to define a check to remove duplicates. If you are defining a list to print all of the journal shorthands using the \bibfield{shortjournal} field, you could define a \cmd{bibcheck} like this: -\begin{ltxexample} +\begin{ltxexample}[basicstyle=\displayverbfont\footnotesize] \defbibcheck{shortjournal}{% \iffieldundef{shortjournal} {\skipentry} {\iffieldundef{journaltitle} {\skipentry} - {\ifcsdef{\strfield{shortjournal}=\strfield{journaltitle}} + {\ifcsdef{sjcheck@\therefsection + -\strfield{shortjournal}=\strfield{journaltitle}} {\skipentry} - {\savefieldcs{journaltitle}{\strfield{shortjournal}=\strfield{journaltitle}}}}}} + {\savefieldcs{journaltitle}{sjcheck@\therefsection + -\strfield{shortjournal}=\strfield{journaltitle}}}}}} \end{ltxexample} \subsubsection{Bibliography Sections} @@ -4250,7 +4329,7 @@ At the beginning of the document, there is always a global context containing gl \cmditem{assignrefcontextentries*}[key=value, \dots]{*} \end{ltxsyntax} -These commands automate putting citations into refcontexts when the default behaviour is not sufficient. The \prm{key=value} options are as for \cmd{DeclareRefcontext}. The default behaviour is that the data for a citation is drawn from the refcontext of the most recently processed bibliography in which it was printed\footnote{This does not always mean what one might think. In a document containing multiple bibliographies, the last bibliography will be the context for any citations \emph{before} the first bibliography because all bibliographies are processed when the \file{.bbl}is read.}. For citations that are used in some way but not printed in a bibliography or bibliography list, they default to drawing their data from the global refcontext established at the beginning of the document. To override this behaviour, instead of manually wrapping citation commands in \env{refcontext} environments, which might be error-prone and tedious, you can register a comma"=separated list of \prm{keywords}, \prm{categories} or \prm{entrykeys} which, respectively, make the entries with any of the specified keywords, entries in any of the specified categories (see \secref{use:use:div}) or entries with any of the specified citation keys draw their data from a particular refcontext specified by the \prm{refcontext key/values} which are parsed as the per the corresponding \env{refcontext} options. Such refcontext auto-assignments are specific to the current refsection. You may specify the same citation key in any of these commands but be aware that assignment is done in the order \prm{keywords}, \prm{categories}, \prm{entrykeys} with the later specifications overriding the earlier. \cmd{assignrefcontextentries} accepts a single asterisk instead of a list of entrykeys which allows the assignment of all keys in a refsection to a refcontext with having to explicitly list them. An example: +These commands automate putting citations into refcontexts when the default behaviour is not sufficient. The \prm{key=value} options are as for \cmd{DeclareRefcontext}. The default behaviour is that the data for a citation is drawn from the refcontext of the most recently processed bibliography in which it was printed\footnote{This does not always mean what one might think. In a document containing multiple bibliographies, the last bibliography will be the context for any citations \emph{before} the first bibliography because all bibliographies are processed when the \file{.bbl} is read.}. For citations that are used in some way but not printed in a bibliography or bibliography list, they default to drawing their data from the global refcontext established at the beginning of the document. To override this behaviour, instead of manually wrapping citation commands in \env{refcontext} environments, which might be error-prone and tedious, you can register a comma"=separated list of \prm{keywords}, \prm{categories} or \prm{entrykeys} which, respectively, make the entries with any of the specified keywords, entries in any of the specified categories (see \secref{use:use:div}) or entries with any of the specified citation keys draw their data from a particular refcontext specified by the \prm{refcontext key/values} which are parsed as the per the corresponding \env{refcontext} options. Such refcontext auto-assignments are specific to the current refsection. You may specify the same citation key in any of these commands but be aware that assignment is done in the order \prm{keywords}, \prm{categories}, \prm{entrykeys} with the later specifications overriding the earlier. \cmd{assignrefcontextentries} accepts a single asterisk instead of a list of entrykeys which allows the assignment of all keys in a refsection to a refcontext with having to explicitly list them. An example: \begin{ltxexample}[style=latex] \assignrefcontextentries[labelprefix=A]{key2} @@ -4701,6 +4780,8 @@ will execute: Note that the \texttt{mcite} module is not a compatibility module. It provides commands which are very similar but not identical in syntax and function to \sty{mcite}'s commands. When migrating from \sty{mcite}\slash\sty{mciteplus} to \biblatex, legacy files must be updated. With \sty{mcite}, the first member of the citation group is also the identifier of the group as a whole. Borrowing an example from the \sty{mcite} manual, this group: \begin{table} +\caption{\sty{mcite}-like commands} +\label{use:cit:mct:tab1} \tablesetup \begin{tabular}{@{}V{0.5\textwidth}@{}V{0.5\textwidth}@{}} \toprule @@ -4716,10 +4797,10 @@ Note that the \texttt{mcite} module is not a compatibility module. It provides c |\textcite| & |\mtextcite| \\ |\Textcite| & |\Mtextcite| \\ |\supercite| & |\msupercite| \\ +|\autocite| & |\mautocite| \\ +|\Autocite| & |\Mautocite| \\ \bottomrule \end{tabular} -\caption{\sty{mcite}-like commands} -\label{use:cit:mct:tab1} \end{table} \begin{ltxexample} @@ -4735,6 +4816,9 @@ consists of three entries and the entry key of the first one also serves as iden Once defined, an entry set is handled like any regular entry in a \file{bib} file. When using one of the \texttt{numeric} styles which come with \biblatex and activating its \opt{subentry} option, it is even possible to refer to set members. See \tabref{use:cit:mct:tab2} for some examples. Restating the original definition of the set is redundant, but permissible. In contrast to \sty{mciteplus}, however, restating a part of the original definition is invalid. Use the entry key of the set instead. \begin{table} +\caption[\sty{mcite}-like syntax] +{\sty{mcite}-like syntax (sample output with \kvopt{style}{numeric} and \opt{subentry} option)} +\label{use:cit:mct:tab2} \tablesetup \begin{tabular}{@{}V{0.6\textwidth}@{}V{0.1\textwidth}@{}p{0.3\textwidth}@{}} \toprule @@ -4750,9 +4834,6 @@ Once defined, an entry set is handled like any regular entry in a \file{bib} fil |\cite{weinberg}| & [1c] & Regular |\cite| works as well \\ \bottomrule \end{tabular} -\caption[\sty{mcite}-like syntax] -{\sty{mcite}-like syntax (sample output with \kvopt{style}{numeric} and \opt{subentry} option)} -\label{use:cit:mct:tab2} \end{table} \subsection{Localization Commands} @@ -4909,7 +4990,11 @@ This command should be used with \cmd{bibnamedelimd} as a reversed-name separato The dash to be used as a replacement for recurrent authors or editors in the bibliography. The default is an <em> or an <en> dash, depending on the indentation of the list of references. \csitem{labelnamepunct}\DeprecatedMark -A separator to be printed after the name used for alphabetizing in the bibliography (\bibfield{author} or \bibfield{editor}, if the \bibfield{author} field is undefined) instead of \cmd{newunitpunct}. The default is \cmd{newunitpunct}, \ie it is not handled differently from regular unit punctuation but permits convenient reconfiguration. This punctuation command is deprecated and has been superseded by the context-sensitive \cmd{nametitledelim} (see \secref{use:fmt:csd}). For backwards compatibility reasons, however, \cmd{nametitledelim} still defaults to \cmd{labelnamepunct} in the \texttt{bib} and \texttt{biblist} contexts. Style authors may want to consider replacing \cmd{labelnampunct} with \texttt{\textbackslash printdelim\{nametitledelim\}} and users may want to prefer modifying the context-sensitive \texttt{nametitledelim} with \cmd{DeclareDelimFormat} over redefining \cmd{labelnamepunct}. +A separator to be printed after the name used for alphabetizing in the bibliography (\bibfield{author} or \bibfield{editor}, if the \bibfield{author} field is undefined) instead of \cmd{newunitpunct}. The default is \cmd{newunitpunct}, \ie it is not handled differently from regular unit punctuation but permits convenient reconfiguration. This punctuation command is deprecated and has been superseded by the context-sensitive \cmd{nametitledelim} (see \secref{use:fmt:csd}). For backwards compatibility reasons, however, \cmd{nametitledelim} still defaults to \cmd{labelnamepunct} in the \texttt{bib} and \texttt{biblist} contexts. Style authors may want to consider replacing \cmd{labelnampunct} with \texttt{\textbackslash printdelim\{nametitledelim\}} and users may want to prefer modifying the context-sensitive \texttt{nametitledelim} in the \texttt{bib} context with \cmd{DeclareDelimFormat} over redefining \cmd{labelnamepunct}, e.g. +\begin{ltxexample} +\DeclareDelimFormat[bib]{nametitledelim}{% + \addcolon\space} +\end{ltxexample} \csitem{subtitlepunct} The separator printed between the fields \bibfield{title} and \bibfield{subtitle}, \bibfield{booktitle} and \bibfield{booksubtitle}, as well as \bibfield{maintitle} and \bibfield{mainsubtitle}. With the default styles, this separator replaces \cmd{newunitpunct} at this location. The default definition is \cmd{newunitpunct}, \ie it is not handled differently from regular unit punctuation. @@ -4923,6 +5008,9 @@ The separator printed before the \bibfield{pages} field. The default is a comma \csitem{bibpagerefpunct} The separator printed before the \bibfield{pageref} field. The default is an interword space. +\csitem{bibeidpunct} +The separator printed before the \bibfield{eid} field (similar to \cmd{bibpagespunct}). The default is a comma plus an interword space. + \csitem{multinamedelim}\CSdelimMark The delimiter printed between multiple items in a name list like \bibfield{author} or \bibfield{editor} if there are more than two names in the list. The default is a comma plus an interword space. See \cmd{finalnamedelim} for an example.\footnote{Note that \cmd{multinamedelim} is not used at all if there are only two names in the list. In this case, the default styles use the \cmd{finalnamedelim}.} @@ -4960,9 +5048,27 @@ The delimiter printed before the localisation string <\texttt{andmore}> if a lit \csitem{multicitedelim} The delimiter printed between citations if multiple entry keys are passed to a single citation command. The default is a semicolon plus an interword space. +\csitem{multiciterangedelim} +The delimiter printed between two citations if they are compressed to a range. The default is \cmd{bibrangedash}. + +\csitem{multicitesubentrydelim} +The delimiter printed between subentry citations of the same set. This delimiter is only used in citation styles that reduce citations of the same set to a more compact form (\opt{subentry} of \texttt{numeric-comp}). The default is a comma. + +\csitem{multicitesubentryrangedelim} +The delimiter printed between two citations of the same set if they are compressed to a range. The default is \cmd{multiciterangedelim}. + \csitem{supercitedelim} Similar to \cmd{multicitedelim}, but used by the \cmd{supercite} command only. The default is a comma. +\csitem{superciterangedelim} +Analogue of \cmd{multiciterangedelim} for \cmd{supercite}. The default is \cmd{bibrangedash}. + +\csitem{supercitesubentrydelim} +Analogue of \cmd{multicitesubentrydelim} for \cmd{supercite}. The default is \cmd{supercitedelim}. + +\csitem{supercitesubentryrangedelim} +Analogue of \cmd{multicitesubentryrangedelim} for \cmd{supercite}. The default is \cmd{superciterangedelim}. + \csitem{compcitedelim} Similar to \cmd{multicitedelim}, but used by certain citation styles when <compressing> multiple citations. The default definition is a comma plus an interword space. @@ -5043,13 +5149,13 @@ For backwards compatibility with the legacy \bibtex name parts, the following ar \mkbibnameaffix \end{ltxexample} -\csitem{mkbibcompletenamefamily}{text} +\cmditem{mkbibcompletenamefamily}{text} This command, which takes one argument, is used to format the complete name in \texttt{family} format order. -\csitem{mkbibcompletenamefamilygiven}{text} +\cmditem{mkbibcompletenamefamilygiven}{text} This command, which takes one argument, is used to format the complete name in \texttt{family-given} format order. -\csitem{mkbibcompletenamegivenfamily}{text} +\cmditem{mkbibcompletenamegivenfamily}{text} This command, which takes one argument, is used to format the complete name in \texttt{given-family} format order. \cmditem{mkbibcompletename}{text} @@ -5079,7 +5185,7 @@ Prints \acr{ISO8601-2} format date circa information when the global option \opt \csitem{enddatecircaprintiso} Prints \acr{ISO8601-2} format date circa information when the global option \opt{datecirca} is enabled and the \cmd{ifenddatecirca} test is true. Prints \cmd{textasciitilde}. -\csitem{dateeraprint}{yearfield} +\cmditem{dateeraprint}{yearfield} Prints date era information when the global option \opt{dateera} is set to <secular> or <christian>. By default, prints the \opt{dateeradelim} delimiter and the appropriate localised era term (\secref{aut:lng:key:dt}). If the \opt{dateeraauto} option is set, then the passed \prm{yearfield} (which is the name of a year field such as <year>, <origyear>, <endeventyear> etc.) is tested to see if its value is earlier than the \opt{dateeraauto} threshold and if so, then the BCE/CE localisation will be output too. The default setting for \opt{dateeraauto} is 0 and so only BCE/BC localisation strings are candidates for output. Detects whether the start or end year era information is to be printed by looking at the \prm{yearfield} name passed to it. \csitem{dateeraprintpre} @@ -5124,26 +5230,31 @@ The delimiters described in \secref{use:fmt:fmt} are globally defined. That is, \cmditem{DeclareDelimFormat}[context, \dots]{name, \dots}{code} \cmditem*{DeclareDelimFormat}*[context, \dots]{name, \dots}{code} -Declares the delimiter macros in the comma"=separated list \prm{names} with the replacement test \prm{code}. If the optional comma"=separated list of \prm{contexts} is given, declare the \prm{names} only for those contexts. \prm{names} defined without any \prm{contexts} behave just like the global delimiter definitions which \cmd{newcommand} gives---just a plain macro with a replacement which can be used as \cmd{name}. However, you can also call delimiter macros defined in this way by using \cmd{printdelim}, which is context-aware. The starred version clears all \prm{context} specific declarations for all \prm{names} first. +Declares the delimiter macros in the comma"=separated list \prm{names} with the replacement text \prm{code}. If the optional comma"=separated list of \prm{contexts} is given, declare the \prm{names} only for those contexts. \prm{names} defined without any \prm{contexts} behave just like the global delimiter definitions which \cmd{newcommand} gives---just a plain macro with a replacement which can be used as \cmd{name}. However, you can also call delimiter macros defined in this way by using \cmd{printdelim}, which is context-aware. The starred version clears all \prm{context} specific declarations for all \prm{names} first. + +\cmditem{DeclareDelimAlias}[alias context, \dots]{alias}[delim context]{delim} -\cmditem{DeclareDelimAlias}{alias}{delim} -\cmditem*{DeclareDelimAlias}*[alias context, \dots]{alias}[delim context]{delim} +Declares \prm{alias} to be an alias for the delimiter \prm{delim}. If the optional \prm{alias context, \dots} nor \prm{delim context} are given, the assigment is performed for all existing contexts of the target \prm{delim} separately, so that \prm{alias} becomes an exact copy of \prm{delim} in all contexts. If only the second optional argument \prm{delim context} is given, all existing contexts of \prm{alias} will be cleared and the global/empty context becomes an alias of \prm{delim} in the context \prm{delim context}. The first optional argument \prm{alias context, \dots} may hold a list of contexts for which the alias is assigned. In that case the second optional argument \prm{delim context} specifies the context of the target delimiter. This argument may not be a list, it can only hold one context. If it is missing, the \prm{alias context} is assumed (if \prm{alias context} is a list, the assignment is performed separately for each list item), if it is empty the global context is used. -Declares \prm{alias} to be an alias for the delimiter \prm{delim}. The assigment is performed for all existing contexts of the target \prm{delim}. -The starred version assigns the alias for specific contexts only. The first optional argument \prm{alias context} holds a list of contexts for which the assignment is going to be performed. If it is empty or missing the global/empty context is assumed. The second optional argument \prm{delim context} specifies the context of the target delimiter. This argument may not be a list, it can only hold one context. If it is missing the \prm{alias context} is assumed (if \prm{alias context} is a list, the assignment is performed separately for each list item), if it is empty the global context is used. \begin{ltxexample}[style=latex] -\DeclareDelimAlias*[bib,biblist]{finalnamedelim}[]{multinamedelim} +\DeclareDelimAlias[bib,biblist]{finalnamedelim}[]{multinamedelim} \end{ltxexample} % Defines the \opt{bib} and \opt{biblist} contexts of \cmd{finalnamedelim} as aliases of \cmd{multinamedelim} in global context. On the other hand \begin{ltxexample}[style=latex] -\DeclareDelimAlias*[bib,biblist]{finalnamedelim}{multinamedelim} +\DeclareDelimAlias[bib,biblist]{finalnamedelim}{multinamedelim} \end{ltxexample} % defines \cmd{finalnamedelim} in the context \opt{bib} to be an alias of \cmd{multinamedelim} in the \opt{bib} context and defines \cmd{finalnamedelim} in \opt{biblist} context to be an alias of \cmd{multinamedelim} in \opt{biblist}. +\cmditem*{DeclareDelimAlias}*[alias context, \dots]{alias}[delim context]{delim}\DeprecatedMark + +The starred version of \cmd{DeclareDelimAlias} is deprecated in favour of using unstarred \cmd{DeclareDelimAlias} with optional arguments. + +It assigns the delimiter alias for specific contexts only. The first optional argument \prm{alias context} holds a list of contexts for which the assignment is going to be performed. If it is empty or missing the global/empty context is assumed. The second optional argument \prm{delim context} specifies the context of the target delimiter. This argument may not be a list, it can only hold one context. If it is missing the \prm{alias context} is assumed (if \prm{alias context} is a list, the assignment is performed separately for each list item), if it is empty the global context is used. + \cmditem{printdelim}[context]{name} Prints a delimiter with name \prm{name}, locally establishing a optional \prm{context} first. Without the optional \prm{context}, \cmd{printdelim} uses the currently active delimiter context. @@ -5479,11 +5590,6 @@ This will yield <Œuvres> or <œuvres>. The facilities discussed in this section are specific to certain localisation modules. -\subsubsection{Bulgarian} -\label{use:loc:bul} - -Like the Greek localisation module, the Bulgarian module also requires \utf support. It will not work with any other encoding. - \subsubsection{American} \label{use:loc:us} @@ -5499,6 +5605,36 @@ By default, the <American punctuation> feature is enabled by the \texttt{america It is highly advisable to always specify \texttt{american}, \texttt{british}, \texttt{australian}, etc. rather than \texttt{english} when loading the \sty{babel}/\sty{polyglossia} packages to avoid any possible confusion. Older versions of the \sty{babel} package used to treat \opt{english} as an alias for \opt{british}; more recent ones treat it as an alias for \opt{american}. The \biblatex package essentially treats \texttt{english} as an alias for \opt{american}, except for the above feature which is only enabled if \texttt{american} is requested explicitly. +\subsubsection{Bulgarian} +\label{use:loc:bul} + +Like the Greek localisation module, the Bulgarian module also requires \utf support. It will not work with any other encoding. + +\subsubsection{Greek} +\label{use:loc:grk} + +The Greek localisation module requires \utf support. It will not work with any other encoding. Generally speaking, the \biblatex package is compatible with the \sty{inputenc} package and with the Unicode engines \lualatex and \xelatex. The \sty{ucs} package will not work. Note that you may need to load additional packages which set up Greek fonts. As a rule of thumb, a setup which works for regular Greek documents should also work with \biblatex. However, there is one fundamental limitation. As of this writing, \biblatex has no support for switching scripts. Greek titles in the bibliography should work fine, but English and other titles in the bibliography may be rendered in Greek letters. If you need multi-script bibliographies, using a Unicode engine is the only sensible choice. + +\subsubsection{Hungarian} +\label{use:loc:hun} + +The Hungarian localisation module needs to redefine certain field formats to obtain the grammatically correct word order. This means that these field formats are overwritten whenever the Hungarian localisation is active, no matter whether they were defined in the preamble or by a custom style. So please be aware that using the Hungarian localisation module may cause the bibliography output to deviate from the format dictated by the loaded style and preamble definitions. Changes to this behaviour need to be made using \cmd{DefineBibliographyExtras}. In particular \cmd{mkpageprefix} is redefined to output the <page> or <pages> string as a suffix after the page number following Hungarian conventions, and all formats of fields involving pages, chapters and volumes were modified so that numbers are printed as ordinals. The Hungarian localisation module will print a warning to remind you of these changes whenever it is loaded in a document. The warning tells you how to silence it. + +\subsubsection{Latvian} +\label{use:loc:lav} + +The Latvian localisation module, like the Hungarian language module, needs to redefine certain field formats to obtain the grammatically correct word order. This means that these field formats are overwritten whenever the Latvian localisation is active, no matter whether they were defined in the preamble or by a custom style. So please be aware that using the Latvian localisation module may cause the bibliography output to deviate from the format dictated by the loaded style and preamble definitions. Changes to this behaviour need to be made using \cmd{DefineBibliographyExtras}. In particular \cmd{mkpageprefix} is redefined to output the <page> or <pages> string as a suffix after the page number following Latvian conventions, and all formats of fields involving pages, chapters and volumes were modified so that numbers are printed as ordinals. The Latvian localisation module will print a warning to remind you of these changes whenever it is loaded in a document. The warning tells you how to silence it. + +\subsubsection{Lithuanian} +\label{use:loc:lit} + +The Lithuanian localisation module needs \utf support and will only work with this encoding. + +\subsubsection{Russian} +\label{use:loc:rus} + +Like the Greek and Lithuanian localisation module, the Russian module also requires \utf support. It will not work with any other encoding. + \subsubsection{Spanish} \label{use:loc:esp} @@ -5527,25 +5663,11 @@ Similar to \cmd{forceE} but enforces <y>. \end{ltxsyntax} -\subsubsection{Greek} -\label{use:loc:grk} - -The Greek localisation module requires \utf support. It will not work with any other encoding. Generally speaking, the \biblatex package is compatible with the \sty{inputenc} package and with \xelatex. The \sty{ucs} package will not work. Since \sty{inputenc}'s standard \file{utf8} module is missing glyph mappings for Greek, this leaves Greek users with \xelatex. Note that you may need to load additional packages which set up Greek fonts. As a rule of thumb, a setup which works for regular Greek documents should also work with \biblatex. However, there is one fundamental limitation. As of this writing, \biblatex has no support for switching scripts. Greek titles in the bibliography should work fine, but English and other titles in the bibliography may be rendered in Greek letters. If you need multi-script bibliographies, using \xelatex is the only sensible choice. +\subsubsection{Turkish} +\label{use:loc:tur} -\subsubsection{Russian} -\label{use:loc:rus} - -Like the Greek localisation module, the Russian module also requires \utf support. It will not work with any other encoding. +By default \sty{babel}'s Turkish localisation module makes <\texttt{=}> a <shorthand>, which breaks the \keyval parser uses by \biblatex. This problem can be resolved by telling \sty{babel} not to make <\texttt{=}> a shorthand (for example by loading \sty{babel} with the option \texttt{shorthands=:!}) or by loading a \keyval package that can deal with active characters (\sty{kvsetkeys} and \sty{xkeyval})\fnurl{https://tex.stackexchange.com/a/160428/35864}. -\subsubsection{Hungarian} -\label{use:loc:hun} - -The Hungarian localisation module needs to redefine certain field formats to obtain the grammatically correct word order. This means that these field formats are overwritten whenever the Hungarian localisation is active, no matter whether they were defined in the preamble or by a custom style. So please be aware that using the Hungarian localisation module may cause the bibliography output to deviate from the format dictated by the loaded style and preamble definitions. Changes to this behaviour need to be made using \cmd{DefineBibliographyExtras}. In particular \cmd{mkpageprefix} is redefined to output the <page> or <pages> string as a suffix after the page number following Hungarian conventions, and all formats of fields involving pages, chapters and volumes were modified so that numbers are printed as ordinals. The Hungarian localisation module will print a warning to remind you of these changes whenever it is loaded in a document. The warning tells you how to silence it. - -\subsubsection{Latvian} -\label{use:loc:lav} - -The Latvian localisation module, like the Hungarian language module, needs to redefine certain field formats to obtain the grammatically correct word order. This means that these field formats are overwritten whenever the Latvian localisation is active, no matter whether they were defined in the preamble or by a custom style. So please be aware that using the Latvian localisation module may cause the bibliography output to deviate from the format dictated by the loaded style and preamble definitions. Changes to this behaviour need to be made using \cmd{DefineBibliographyExtras}. In particular \cmd{mkpageprefix} is redefined to output the <page> or <pages> string as a suffix after the page number following Latvian conventions, and all formats of fields involving pages, chapters and volumes were modified so that numbers are printed as ordinals. The Latvian localisation module will print a warning to remind you of these changes whenever it is loaded in a document. The warning tells you how to silence it. \subsection{Usage Notes} \label{use:use} @@ -6023,17 +6145,19 @@ This section provides additional usage hints and addresses some common problems \subsubsection{Usage with \acr{KOMA}-Script Classes} \label{use:cav:scr} -When using \biblatex in conjunction with one of the \sty{scrbook}, \sty{scrreprt}, or \sty{scrartcl} classes, the headings \texttt{bibliography} and \texttt{biblist} from \secref{use:bib:hdg} are responsive to the bibliography"=related options of these classes.\footnote{This applies to the traditional syntax of these options (\opt{bibtotoc} and \opt{bibtotocnumbered}) as well as to the \keyval syntax introduced in \acr{KOMA}-Script 3.x, \ie to \kvopt{bibliography}{nottotoc}, \kvopt{bibliography}{totoc}, and \kvopt{bibliography}{totocnumbered}. The global \kvopt{toc}{bibliography} and \kvopt{toc}{bibliographynumbered} options as well as their aliases are detected as well. In any case, the options must be set globally in the optional argument to \cmd{documentclass}.} You can override the default headings by using the \opt{heading} option of \cmd{printbibliography}, \cmd{printbibheading} and \cmd{printbiblist}. See \secref{use:bib:bib, use:bib:biblist, use:bib:hdg} for details. All default headings are adapted at load-time such that they blend with the behavior of these classes. If one of the above classes is detected, \biblatex will also provide the following additional tests which may be useful in custom heading definitions: +When used in conjunction with a recent version\footnote{At least \acr{KOMA}-Script 3.25 (2018/03/30).} one of the \sty{scrbook}, \sty{scrreprt}, or \sty{scrartcl} classes, \biblatex passes control over the (default) headings \texttt{bibliography} and \texttt{biblist} from \secref{use:bib:hdg} to the class. Hence, bibliography-heading-related class options can be used as usual. You can override the default headings by using the \opt{heading} option of \cmd{printbibliography}, \cmd{printbibheading} and \cmd{printbiblist}. See \secref{use:bib:bib, use:bib:biblist, use:bib:hdg} for details. + +\biblatex also tries to detect bibliography-related class options and settings itself.\footnote{This applies to the traditional syntax of these options (\opt{bibtotoc} and \opt{bibtotocnumbered}) as well as to the \keyval syntax introduced in \acr{KOMA}-Script 3.x, \ie to \kvopt{bibliography}{nottotoc}, \kvopt{bibliography}{totoc}, and \kvopt{bibliography}{totocnumbered}. The global \kvopt{toc}{bibliography} and \kvopt{toc}{bibliographynumbered} options as well as their aliases are detected as well. In any case, the options must be set globally in the optional argument to \cmd{documentclass}.} This was required to be able to adapt the bibliography headings to the class settings in older versions of \acr{KOMA}-Script. If one of the above classes is detected, \biblatex will provide the following additional tests which may be useful in custom heading definitions. Since these tests rely on the error-prone external detection of \acr{KOMA}-Script settings and are no longer used with newer \acr{KOMA}-Script versions, these tests are deprecated and should no longer be used. \begin{ltxsyntax} -\cmditem{ifkomabibtotoc}{true}{false} +\cmditem{ifkomabibtotoc}{true}{false}\DeprecatedMark -Expands to \prm{true} if the class would add the bibliography to the table of contents, and to \prm{false} otherwise. +Expands to \prm{true} if the class would add the bibliography to the table of contents, and to \prm{false} otherwise. This test is deprecated. -\cmditem{ifkomabibtotocnumbered}{true}{false} +\cmditem{ifkomabibtotocnumbered}{true}{false}\DeprecatedMark -Expands to \prm{true} if the class would add the bibliography to the table of contents as a numbered section, and to \prm{false} otherwise. If this test yields \prm{true}, \cmd{ifkomabibtotoc} will always yield \prm{true} as well, but not vice versa. +Expands to \prm{true} if the class would add the bibliography to the table of contents as a numbered section, and to \prm{false} otherwise. If this test yields \prm{true}, \cmd{ifkomabibtotoc} will always yield \prm{true} as well, but not vice versa. This test is deprecated. \end{ltxsyntax} @@ -6067,7 +6191,7 @@ If the \prm{postnote} argument to a citation command is a page number or page ra \cite[vii--x; 5, 7]{key} \end{ltxexample} % -In some other cases, however, the tests may get it wrong and you need to resort to the auxiliary commands \cmd{pno}, \cmd{ppno}, and \cmd{nopp} from \secref{use:cit:msc}. For example, suppose a work is cited by a special pagination scheme consisting of numbers and letters. In this scheme, the string <|27a|> would mean <page~27, part~a>. Since this string does not look like a number or a range to \biblatex, you need to force the prefix for a single number manually: +In some other cases, however, the tests may get it wrong and you need to resort to the auxiliary commands \cmd{pnfmt}, \cmd{pno}, \cmd{ppno}, and \cmd{nopp} from \secref{use:cit:msc}. For example, suppose a work is cited by a special pagination scheme consisting of numbers and letters. In this scheme, the string <|27a|> would mean <page~27, part~a>. Since this string does not look like a number or a range to \biblatex, you need to force the prefix for a single number manually: \begin{ltxexample} \cite[\pno~27a]{key} @@ -6088,6 +6212,12 @@ These commands may be used anywhere in the \prm{postnote} argument. They may als \cite[see][\ppno~37--46, in particular \pno~40]{key} \end{ltxexample} % +The command \cmd{pnfmt} can be used for \prm{postnote}s consisting of a page range and some additional text. \cmd{pnfmt} prints its argument in the format specified for the postnote and can be used to format the page range automatically without the need for \cmd{pno} and \cmd{ppno}. + +\begin{ltxexample} +\cite[\pnfmt{37-46}, in particular \pnfmt{40}]{key} +\end{ltxexample} +% There are also two auxiliary command for suffixes like <the following page(s)>. Instead of inserting such suffixes literally (which would require \cmd{ppno} to force a prefix): \begin{ltxexample} @@ -6102,7 +6232,7 @@ use the auxiliary commands \cmd{psq} and \cmd{psqq}. Note that there is no space \cite[55\psqq]{key} \end{ltxexample} % -Since the postnote is printed without any prefix if it includes any character which is not an Arabic or Roman numeral, you may also type the prefix manually: +Since the postnote is printed without any prefix if it includes any character which is not an Arabic or Roman numeral, you may also type the prefix manually---though this is discouraged: \begin{ltxexample} \cite[p.~5]{key} @@ -6184,11 +6314,33 @@ This is how they are employed: \item K\delim{.-}{c}H\delim{.}{a} Mustermann \end{namesample} -\subsubsection{Bibliography Filters and Citation Labels} +\subsubsection{Split Bibliographies and Citation Labels} \label{use:cav:lab} The citation labels generated by this package are assigned to the full list of references before it is split up by any bibliography filters. They are guaranteed to be unique across the entire document (or a \env{refsection} environment), no matter how many bibliography filters you are using. When using a numeric citation scheme, however, this will most likely lead to discontinuous numbering in split bibliographies. Use the \opt{defernumbers} package option to avoid this problem. If this option is enabled, numeric labels are assigned the first time an entry is printed in any bibliography. +Compare the output of the following example with \texttt{defernumbers=true} and \texttt{defernumbers=false}. +% +\begin{ltxexample} +\documentclass{article} +\usepackage[defernumbers=true]{biblatex} + +\addbibresource{biblatex-examples.bib} + +\begin{document} +Lorem \autocite{worman} ipsum \autocite{sigfridsson} +dolor \autocite{nussbaum} sit \autocite{aksin} + +\printbibheading[title={Bibliography}] +\printbibliography[heading=subbibliography, + type=book, title={Books}] +\printbibliography[heading=subbibliography, + type=article, title={Articles}] +\end{document} +\end{ltxexample} + +There are pathological cases where neither \texttt{defernumbers=true} nor \texttt{defernumbers=false} produce fully desirable output. This may be the case when entries can end up in several of the split bibliographies---or if there is an additional global bibliography. But in most cases with non-overlapping split bibliographies \texttt{defernumbers=true} produces better results. \sty{biblatex} will therefore suggest setting \opt{defernumbers} to \opt{true} in a warning when a split bibliography setup is detected. That warning can be suppressed in case setting \opt{defernumbers} to \opt{true} is not desirable. + \subsubsection{Active Characters in Bibliography Headings} \label{use:cav:act} @@ -6649,7 +6801,7 @@ would result in the same information in the \file{.bbl} as: } \end{lstlisting} % -but would additionally have the field \bibfield{dateunspecified} set to <yearincentury> and \bibfield{origdateunspecified} set to <yearindecade>. This information could be used to render the \bibfield{date} as perhaps <20th century> and \bibfield{origdate} as <The 1990s>, information which cannot be derived from the date ranges alone. Since such auto-generated ranges have a know values, given the <unspecified> meta-information, it is relatively easy to use the range values to format special cases. While the standard styles not do this, examples are given in the file \file{96-dates.tex}. +but would additionally have the field \bibfield{dateunspecified} set to <yearincentury> and \bibfield{origdateunspecified} set to <yearindecade>. This information could be used to render the \bibfield{date} as perhaps <20th century> and \bibfield{origdate} as <The 1990s>, information which cannot be derived from the date ranges alone. Since such auto-generated ranges have known values, given the <unspecified> meta-information, it is relatively easy to use the range values to format special cases. While the standard styles do not do this, examples are given in the file \file{96-dates.tex}. \fielditem{entrykey}{string} @@ -6877,10 +7029,15 @@ will tell you if the corresponding date is defined and an open"=ended range. Ope \begingroup \tablesetup \begin{longtable}[l]{% - @{}V{0.15\textwidth}% - @{}V{0.4\textwidth}% - @{}V{0.3\textwidth}% - @{}V{0.2\textwidth}@{}} + @{}V{0.15\textwidth}% + @{}V{0.4\textwidth}% + @{}V{0.3\textwidth}% + @{}V{0.2\textwidth}@{}} +\caption{Date Interface} +\label{aut:bbx:fld:tab1} +\endfirsthead +\caption[]{Date Interface (cont'd)} +\endhead \toprule \multicolumn{2}{@{}H}{\file{bib} File} & \multicolumn{2}{H}{Data Interface} \\ @@ -7020,11 +7177,8 @@ eventdate & 1995-01-31/1995-02-05 & eventday & 31 \\ & & eventendtimezone & undefined \\ \bottomrule %\end{tabularx} -\caption{Date Interface} -\label{aut:bbx:fld:tab1} \end{longtable} \endgroup - \begin{fieldlist} \fielditem{hour}{datepart} @@ -7362,7 +7516,7 @@ If an unknown \prm{position} identifier is used, it defaults to \opt{o}. \item[l] The punctuation mark is moved to the left of the citation and thus appears before it. \item[f] Like \opt{r} in footnotes and like \opt{l} otherwise. \item[c] Pass the punctuation on to the internal implementation of the citation commands. It will then be executed within the \prm{wrapper} command if given. -\item[o] Retain the default set-up of \opt{c} for citation defined commands without \prm{wrapper} command and \opt{l} for citation commands defined with a \prm{wrapper} command. +\item[o] Retain the default setup of \opt{c} for citation defined commands without \prm{wrapper} command and \opt{l} for citation commands defined with a \prm{wrapper} command. \item[d] Drop the explicit punctuation mark. It will only be available as the field \bibfield{postpunct}. \end{valuelist} % @@ -7575,12 +7729,12 @@ This section introduces the commands used to define the formatting directives re \cmditem{DeclareFieldFormat}[entrytype, \dots]{format}{code} \cmditem*{DeclareFieldFormat}*{format}{code} -Defines the field format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed by \cmd{printfield}. The value of the field will be passed to the \prm{code} as its first and only argument. The name of the field currently being processed is available to the \prm{code} as \cmd{currentfield}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \emph{Do not put any whitespace between the arguments to this macro as the definitions are quite complex and you will get unexpected results}. +Defines the field format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed by \cmd{printfield}. The value of the field will be passed to the \prm{code} as its first and only argument. The name of the field currently being processed is available to the \prm{code} as \cmd{currentfield}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \cmditem{DeclareListFormat}[entrytype, \dots]{format}{code} \cmditem*{DeclareListFormat}*{format}{code} -Defines the literal list format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed for every item in a list processed by \cmd{printlist}. The current item will be passed to the \prm{code} as its first and only argument. The name of the literal list currently being processed is available to the \prm{code} as \cmd{currentlist}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. Note that the formatting directive also handles the punctuation to be inserted between the individual items in the list. You need to check whether you are in the middle of or at the end of the list, \ie whether \cnt{listcount} is smaller than or equal to \cnt{liststop}. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \emph{Do not put any whitespace between the arguments to this macro as the definitions are quite complex and you will get unexpected results}. +Defines the literal list format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed for every item in a list processed by \cmd{printlist}. The current item will be passed to the \prm{code} as its first and only argument. The name of the literal list currently being processed is available to the \prm{code} as \cmd{currentlist}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. Note that the formatting directive also handles the punctuation to be inserted between the individual items in the list. You need to check whether you are in the middle of or at the end of the list, \ie whether \cnt{listcount} is smaller than or equal to \cnt{liststop}. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \cmditem{DeclareNameFormat}[entrytype, \dots]{format}{code} @@ -7608,7 +7762,7 @@ The value of the datamodel <nameparts> constant (see \secref{aut:bbx:drv}) creat \namepartgiveni \end{ltxexample} % -If a certain part of a name is not available, the corresponding macro will be empty, hence you may use, for example, the \sty{etoolbox} tests like \cmd{ifdefvoid} to check for the individual parts of a name. The name of the name list currently being processed is available to the \prm{code} as \cmd{currentname}. Note that the formatting directive also handles the punctuation to be inserted between separate names and between the individual parts of a name. You need to check whether you are in the middle of or at the end of the list, \ie whether \cnt{listcount} is smaller than or equal to \cnt{liststop}. See also \secref{use:cav:nam}. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \emph{Do not put any whitespace between the arguments to this macro as the definitions are quite complex and you will get unexpected results}. +If a certain part of a name is not available, the corresponding macro will be empty, hence you may use, for example, the \sty{etoolbox} tests like \cmd{ifdefvoid} to check for the individual parts of a name. The name of the name list currently being processed is available to the \prm{code} as \cmd{currentname}. Note that the formatting directive also handles the punctuation to be inserted between separate names and between the individual parts of a name. You need to check whether you are in the middle of or at the end of the list, \ie whether \cnt{listcount} is smaller than or equal to \cnt{liststop}. See also \secref{use:cav:nam}. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. \cmditem{DeclareListWrapperFormat}[entrytype, \dots]{format}{code} \cmditem*{DeclareListWrapperFormat}*{format}{code} @@ -7635,17 +7789,6 @@ Defines the literal list format \prm{format}. This formatting directive is arbit Defines the name list format \prm{format}. This formatting directive is arbitrary \prm{code} to be executed for every name in a list processed by \cmd{indexnames}. The name of the name list currently being processed is available to the \prm{code} as \cmd{currentname}. If an \prm{entrytype} is specified, the format is specific to that type. The \prm{entrytype} argument may be a comma"=separated list of values. The parts of the name will be passed to the \prm{code} as separate arguments. This command is very similar to \cmd{DeclareNameFormat} except that the data handled by the \prm{code} is not intended to be printed but written to the index. Note that \cmd{indexnames} will execute the \prm{code} as is, \ie the \prm{code} must include \cmd{index} or a similar command. The starred variant of this command is similar to the regular version, except that all type-specific formats are cleared. -\cmditem{DeclareIndexListWrapperFormat}[entrytype, \dots]{format}{code} -\cmditem*{DeclareIndexListWrapperFormat}*{format}{code} - -Similar to \cmd{DeclareIndexListFormat} but for the list format used for indices. - - -\cmditem{DeclareIndexNameWrapperFormat}[entrytype, \dots]{format}{code} -\cmditem*{DeclareIndexNameWrapperFormat}*{format}{code} - -Similar to \cmd{DeclareIndexNameFormat} but for the name list format used for indices. - \cmditem{DeclareFieldAlias}[entry type]{alias}[format entry type]{format} Declares \prm{alias} to be an alias for the field format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive. @@ -7678,14 +7821,6 @@ Declares \prm{alias} to be an alias for the literal list format \prm{format}. If Declares \prm{alias} to be an alias for the name list format \prm{format}. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive. -\cmditem{DeclareIndexListWrapperAlias}[entrytype, \dots]{format}{code} - -Similar to \cmd{DeclareIndexListFormat} but for the list format used for indices. - -\cmditem{DeclareIndexNameWrapperAlias}[entrytype, \dots]{format}{code} - -Similar to \cmd{DeclareIndexNameFormat} but for the name list format used for indices. - \cmditem{DeprecateFieldFormatWithReplacement}[entry type]{alias}[format entry type]{format} Declares \prm{alias} to be an alias for the name list format \prm{format} and issue a deprecation warning. If an \prm{entrytype} is specified, the alias is specific to that type. The \prm{format entry type} is the entry type of the backend format. This is only required when declaring an alias for a type"=specific formatting directive. @@ -7718,14 +7853,6 @@ Similar to \cmd{DeprecateFieldFormatWithReplacement} but for index list formats. Similar to \cmd{DeprecateFieldFormatWithReplacement} but for index name formats. -\cmditem{DeprecateIndexListWrapperFormatWithReplacement}[entry type]{alias}[format entry type]{format} - -Similar to \cmd{DeprecateFieldFormatWithReplacement} but for index list formats. - -\cmditem{DeprecateIndexNameWrapperFormatWithReplacement}[entry type]{alias}[format entry type]{format} - -Similar to \cmd{DeprecateFieldFormatWithReplacement} but for index name formats. - \end{ltxsyntax} \subsection{Customization} @@ -7743,7 +7870,7 @@ The related entries feature comprises the following components: % The special fields are \bibfield{related}, \bibfield{relatedtype}, \bibfield{relatedstring} and \bibfield{relatedoptions}: \begin{keymarglist} -\item[related] A separated list of keys of entries which are related to this entry in some way. Note the the order of the keys is important. The data from multiple related entries is printed in the order of the keys listed in this field. +\item[related] A separated list of keys of entries which are related to this entry in some way. Note the order of the keys is important. The data from multiple related entries is printed in the order of the keys listed in this field. \item[relatedtype] The type of relationship. This serves three purposes. If the value of this field resolves to a localisation string identifier, then the resulting localised string is printed before the data from the related entries. Secondly, if there is a macro called \texttt{related:\prm{relatedtype}}, this is used to format the data from the related entries. If no such macro exists, then the macro \texttt{related:default} is used. Lastly, if there is a format named \texttt{related:\prm{relatedtype}}, then it is used to format both the localised string and related entry data. If there is no related type specific format, the \texttt{related} format is used. \item[relatedstring] If an entry contains this field, then if value of the field resolves to a localisation string identifier, the localisation key value specified is printed before data from the related entries. If the field does not specify a localisation key, its value is printed literally. If both \bibfield{relatedtype} and \bibfield{relatedstring} are present in an entry, \bibfield{relatedstring} is used for the pre-data string (but \bibfield{relatedtype} is still used to determine the macro and format to use when printing the data). \item[relatedoptions] A list of per"=entry options to set on the related entry (actually on the clone of the related entry which is used as a data source---the actual related entry is not modified because it might be cited directly itself). @@ -7834,7 +7961,7 @@ Defines source data modification (mapping) rules which can be used to perform an \item Add new fields to an entry \item Remove fields from an entry \item Modify the contents of a field using standard Perl regular expression - match and replace + match and replace\footnote{See for example \url{https://perldoc.perl.org/perlretut.html}, \url{https://perldoc.perl.org/perlrequick.html} and \url{https://perldoc.perl.org/perlre.html}. There are many more resources available about regular expessions in Perl.} \item Restrict any of the above operations to entries coming from particular datasources which you defined in \cmd{addresource} macros \item Restrict any of the above operations to entries only of a certain @@ -7932,6 +8059,7 @@ A mapping step. Each step is applied sequentially to every relevant entry where \boolitem[false]{nocited} \boolitem[false]{citedornocited} \boolitem[false]{allnocited} +\boolitem[false]{starnocited} \boolitem[false]{entrynocite} \boolitem[false]{entrynull} \boolitem[false]{append} @@ -7946,18 +8074,18 @@ For all boolean \cmd{step} options, the short form \opt{option} is equivalent to \renewcommand{\labelitemii}{$\circ$} -Note that the options \opt{cited}, \opt{nocited}, \opt{citedornocited} and -\opt{allnocited} are unique in that they can make the results of a -sourcemap differ depending on the refsection. This is because a datasource -to which source mapping applies may be used in several refsections and -source mappings are applied when fetching the data from the datasources for -a refsection. Citation commands are local to a refsection and therefore may -differ for the same entry from refsection to refsection. For example, the same -entry may be \cmd{cite}d in one refsection but \cmd{nocite}d in another, -resulting in different source map results and therefore data between the -refsections. This can be avoided if desired, by limiting source maps to -specific refsections only (see \opt{refsection} option to the \cmd{map} -command above). +Note that the options \opt{cited}, \opt{nocited}, \opt{citedornocited}, +\opt{allnocited} and \opt{starnocited} are unique in that they can make the +results of a sourcemap differ depending on the refsection. This is because +a datasource to which source mapping applies may be used in several +refsections and source mappings are applied when fetching the data from the +datasources for a refsection. Citation commands are local to a refsection +and therefore may differ for the same entry from refsection to refsection. +For example, the same entry may be \cmd{cite}d in one refsection but +\cmd{nocite}d in another, resulting in different source map results and +therefore data between the refsections. This can be avoided if desired, by +limiting source maps to specific refsections only (see \opt{refsection} +option to the \cmd{map} command above). \begin{itemize} \item If \texttt{entrynew} is set, a new entry is created with the entry key \texttt{entrynewkey} and the entry type given in the option \texttt{entrynewtype}. This @@ -7990,6 +8118,9 @@ command above). of an entry was specifically cited via \cmd{cite} or specifically nocited via \cmd{nocite}. \item If \texttt{allnocited} is used then only apply the step if the entry key of an entry was included via \cmd{nocite\{*\}}. +\item If \texttt{starnocited} is used then only apply the step if the entry key + of an entry was included solely because of \cmd{nocite\{*\}}. This + implies that the entry was neither explicitly \cmd{cite}ed nor explicitly \cmd{nocite}ed. \item Change the \texttt{typesource} \prm{entrytype} to the \texttt{typetarget} \prm{entrytype}, if defined. If \texttt{final} is \texttt{true} then if the \prm{entrytype} of the entry is not \texttt{typesource}, processing of the parent \cmd{map} immediately terminates. @@ -8392,7 +8523,7 @@ The data model which \biblatex uses consists of four main elements: The default data model is defined in the core \biblatex file \file{blx-dm.def} using the macros described in this section. The default data model is described in detail in \secref{bib}. The data model is used internally by \biblatex and also by the backend. In practice, changing the data model means that you can define the entrytypes and fields for your datasources and validate your data against the data model. Naturally, this is not much use unless your style supports any new entrytypes or fields and it raises issues of portability between styles (although this can be mitigated by using the dynamic data modification functionality described in \secref{aut:ctm:map}). -Note that while the \biber/\bibtex input site is not case sensitive when it comes to entry types and field names, the \latex side is case sensitive and uses the exact capitalisation from the data model. At the moment custom data fields are only supported in lowercase. +Note that while the \biber/\bibtex input site is not case sensitive when it comes to entry types and field names (Perl's Unicode case folding is used to normalise field names and entry types), the \latex side is case sensitive and uses the exact capitalisation from the data model. Validation against the data model means that after mapping your data sources into the data model, \biber (using its \path{--validate_datamodel} option) can check: @@ -9345,6 +9476,8 @@ An example of transliterating titles so that they sort correctly in Sanskrit. Th \end{ltxsyntax} \begin{table} +\caption{Valid transliteration pairs} +\label{tab:translit} \tablesetup\centering \begin{tabular}{lll} \toprule @@ -9357,8 +9490,6 @@ russian & ala-lc & ALA-LC romanisation for Russian\\ russian & bgn/pcgn-standard & BGN/PCGN:1947 (Standard Variant), Cyrillic to Latin, Russian\\ \bottomrule \end{tabular} -\caption{Valid transliteration pairs} -\label{tab:translit} \end{table} \subsubsection[Bibliography List Filters]{Bibliography List Filters} @@ -10020,10 +10151,18 @@ Expands to \prm{true} if the two dates \prm{datetype1} and \prm{datetype2} would Expands to \prm{true} if the two dates \prm{datetype1} and \prm{datetype2} have the same year and era. Since the sign of the date is saved in the era field, years should be compared using this command to avoid confusion when the two years have opposite signs +\cmditem{ifdatesequal}{datetype1}{datetype2}{true}{false} + +Expands to \prm{true} if the two dates \prm{datetype1} and \prm{datetype2} are the same. Here \prm{datetype2} may be the <end> bit of \prm{datetype1} (or vice versa). + +\cmditem{ifdaterangesequal}{datetype1}{datetype2}{true}{false} + +Expands to \prm{true} if the two date ranges---that is the start and the end date---\prm{datetype1} and \prm{datetype2} are the same. + \cmditem{ifcaselang}[language]{true}{false} -Expands to \prm{true} if the the optional \prm{language} is one of those +Expands to \prm{true} if the optional \prm{language} is one of those declared by \cmd{DeclareCaseLangs} (see \secref{aut:aux:msc}) and to \prm{false} otherwise. Without the optional argument, checks the current value of \cmd{currentlang}. @@ -10166,7 +10305,7 @@ Expands to \prm{true} if there is only one work by the \opt{labelname} name with \cmditem{ifuniqueprimaryauthor}{true}{false} -Expands to \prm{true} if there is only one work by the the primary (first) author name of \opt{labelname} and to \prm{false} otherwise. Only the base name parts of the author name are considered, as defined by \cmd{DeclareUniquenameTemplate} see \secref{aut:cav:amb}. If \opt{labelname} is not set for an entry, this will always expand to \prm{false}. Note that this feature needs to be enabled explicitly with the package option \opt{uniqueprimaryauthor}. +Expands to \prm{true} if the primary (first) author name of \opt{labelname} is unique in the bibliography list and to \prm{false} otherwise. This effectively answers the question <is there more than one author with the same base name>. The base name parts are defined by \cmd{DeclareUniquenameTemplate} see \secref{aut:cav:amb}. This is required by some styles (e.g. APA) which mandates primary author disambiguation only and only if there are (different) primary authors with the same family name. If \opt{labelname} is not set for an entry, this will always expand to \prm{false}. Note that this feature needs to be enabled explicitly with the package option \opt{uniqueprimaryauthor}. \cmditem{ifandothers}{list}{true}{false} @@ -10274,11 +10413,11 @@ Executes \prm{true} if the \prm{string} is an Arabic or Roman numeral, and \prm{ \cmditem{ifnumerals}{string}{true}{false} -Executes \prm{true} if the \prm{string} is a range or a list of Arabic or Roman numerals, and \prm{false} otherwise. This command is robust. In contrast to \cmd{ifnumeral}, it will also execute \prm{true} with arguments like «52--58», «14/15», «1,~3,~5», and so on. See also \cmd{DeclareNumChars}, \cmd{DeclareRangeChars}, \cmd{DeclareRangeCommands}, and \cmd{NumCheckSetup} in \secref{aut:aux:msc}. +Executes \prm{true} if the \prm{string} is a range or a list of Arabic or Roman numerals, and \prm{false} otherwise. This command is robust. In contrast to \cmd{ifnumeral}, it will also execute \prm{true} with arguments like «52--58», «14/15», «1,~3,~5», and so on. See also \cmd{DeclareNumChars}, \cmd{DeclareRangeChars}, \cmd{DeclareRangeCommands}, \cmd{NumCheckSetup}, and \cmd{NumsCheckSetup} in \secref{aut:aux:msc}. \cmditem{ifpages}{string}{true}{false} -Similar to \cmd{ifnumerals}, but also considers \cmd{DeclarePageCommands} from \secref{aut:aux:msc}. +Similar to \cmd{ifnumerals}, but also considers \cmd{DeclarePageCommands} and \cmd{PagesCheckSetup} from \secref{aut:aux:msc}. \cmditem{iffieldint}{field}{true}{false} @@ -10323,7 +10462,7 @@ Executes \prm{true} if \biblatex's punctuation tracker would capitalize a locali \cmditem{ifcitation}{true}{false} Expands to \prm{true} when located in a citation, and to \prm{false} otherwise. Note that this command is responsive to the outermost context in which it is used. For example, if a citation command defined with \cmd{DeclareCiteCommand} executes a driver defined with \cmd{DeclareBibliographyDriver}, any \cmd{ifcitation} tests in the driver code will yield \prm{true}. See \secref{aut:cav:mif} for a practical example. - + \cmditem{ifvolcite}{true}{false} Expands to \prm{true} when located in \cmd{volcite} or a related citation command (\secref{use:cit:spc}), and to \prm{false} otherwise. @@ -10529,7 +10668,11 @@ Similar to \cmd{MakeUppercase} but only converts the first printable character i \cmditem{MakeSentenceCase}{text} \cmditem*{MakeSentenceCase*}{text} -Converts its \prm{text} argument to sentence case, \ie the first word is capitalized and the remainder of the string is converted to lowercase. This command is robust. The starred variant differs from the regular version in that it considers the language of the entry, as specified in the \bibfield{langid} field. If the \bibfield{langid} field is defined and holds a language declared with \cmd{DeclareCaseLangs} (see below)\footnote{By default, converting to sentence case is enabled for the following language identifiers: \texttt{american}, \texttt{british}, \texttt{canadian}, \texttt{english}, \texttt{australian}, \texttt{newzealand} as well as the aliases \texttt{USenglish} and \texttt{UKenglish}. Use \cmd{DeclareCaseLangs} to extend or change this list.}, then the sentence case conversion is performed. If the \bibfield{langid} field is undefined, then the language list declared with \cmd{DeclareCaseLangs} is checked for the presence of the main document language derived from the \opt{language} option. If found, sentence case conversion is performed, if not, the \prm{text} is not altered in any way. It is recommended to use \cmd{MakeSentenceCase*} rather than the regular variant in formatting directives. Both variants support the traditional \bibtex convention for \file{bib} files that anything wrapped in a pair of curly braces is not modified when changing the case. For example: +Converts its \prm{text} argument to sentence case, \ie the first word is capitalized and the remainder of the string is converted to lowercase. This command is robust. The starred variant differs from the regular version in that it considers the language of the entry, as specified in the \bibfield{langid} field. If the \bibfield{langid} field is defined and holds a language declared with \cmd{DeclareCaseLangs} (see below)\footnote{By default, converting to sentence case is enabled for the following language identifiers: \texttt{american}, \texttt{british}, \texttt{canadian}, \texttt{english}, \texttt{australian}, \texttt{newzealand} as well as the aliases \texttt{USenglish} and \texttt{UKenglish}. Use \cmd{DeclareCaseLangs} to extend or change this list.}, then the sentence case conversion is performed. If the \bibfield{langid} field is undefined, then the language list declared with \cmd{DeclareCaseLangs} is checked for the presence of the main document language derived from the \opt{language} option. If found, sentence case conversion is performed, if not, the \prm{text} is not altered in any way. It is recommended to use \cmd{MakeSentenceCase*} rather than the regular variant in formatting directives. + +Depending on the option \opt{casechanger} \cmd{MakeCaseChange} and \cmd{MakeCaseChange*} are either implemented using the \sty{expl3} module \sty{l3text} or original \LaTeXe code. + +Both variants support the traditional \bibtex convention for \file{bib} files that anything wrapped in a pair of curly braces is not modified when changing the case. For example: \begin{ltxexample} \MakeSentenceCase{an Introduction to LaTeX} @@ -10554,14 +10697,18 @@ Macros in titles must also be protected with braces \begin{lstlisting}[style=bibtex]{} title = {The {\TeX book}}, \end{lstlisting} + % -Unlike \bibtex's built-in case changing function \texttt{change.case\$} \biblatex's \cmd{MakeSentenceCase} is implemented in \latex, it may therefore behave differently in certain situations and is more fragile. -Currently \cmd{MakeSentenceCase} behaves as follows. +The behaviour of \cmd{MakeSentenceCase} differs slightly between the \opt{latex2e} and \opt{expl3} implementation. Generally speaking, the \opt{expl3} code is closer to the \bibtex behaviour of \texttt{change.case\$}. It is also better equipped to deal with non-ASCII input and macros than the \opt{latex2e} implementation. \cmd{MakeSentenceCase} behaves as follows. \begin{itemize}\setlength{\labelsep}{1em} - \item The first letter of its argument is capitalised with \cmd{MakeUppercase}. This is different from \bibtex's \texttt{change.case\$}, which does not touch the first letter of its argument. Note that a pair of braces that starts with a control sequence will be treated as one character for capitalisation purposes. This means that the entire argument of a command protected with a single pair of braces is capitalised. - \item Expandable commands are expanded before the case change, which means that the case change applies to the replacement text. Unexpandable commands are not touched. \bibtex does not interpret macros and therefore passes commands through unchanged (this does not necessarily apply to the \emph{arguments} of those commands). - \item Text wrapped in one or more pairs of braces is protected from case change unless it starts with a control sequence. This is the same behaviour as with \bibtex. Note that the braces could either be explicit groups or argument delimiters. - \item Text in a single pair of braces that starts with a control sequence is not protected and will be subject to case changes. Note that this need not apply to braces that are argument delimiters, in fact the implementation of \cmd{MakeSentenceCase} may in some cases produce an error or otherwise undesirable output if the argument of a command starts with a control sequence. \bibtex's case change function does not differentiate between argument delimiters and brace groups and always subjects text at brace level~1 to case change if it starts with a control sequence. + \item The first letter of its argument is capitalised with \cmd{MakeUppercase}. This is different from \bibtex's \texttt{change.case\$}, which does not touch the first letter of its argument. + + Note that with the \opt{latex2e} code a pair of braces that starts with a control sequence will be treated as a single character for capitalisation purposes. This means that the entire argument of a command protected with a single pair of braces is capitalised. + \item With the \opt{latex2e} code expandable commands are expanded before the case change, which means that the case change applies to the replacement text. Unexpandable commands are not touched. + + \bibtex does not interpret macros and therefore passes commands through unchanged (this does not necessarily apply to the \emph{arguments} of those commands). The \opt{expl3} implementation also does not expand commands and only applies case change to the arguments. + \item Text wrapped in one or more pairs of braces is protected from case change \emph{unless} it starts with a control sequence. This is the same behaviour as with \bibtex. Note that the braces could either be explicit groups or argument delimiters. + \item Text in a single pair of braces that starts with a control sequence is not protected and will be subject to case changes. Note that this need not apply to braces that are argument delimiters, in fact the \opt{latex2e} implementation of \cmd{MakeSentenceCase} may in some cases produce an error or otherwise undesirable output if the argument of a command starts with a control sequence. \bibtex's case change function does not differentiate between argument delimiters and brace groups and always subjects text at brace level~1 to case change if it starts with a control sequence. \end{itemize} For most intents and purposes the following rules should give a sensible result. @@ -10574,17 +10721,25 @@ For most intents and purposes the following rules should give a sensible result. \end{itemize} \item While it is possible to protect words from case change at the beginning of a field with a pair of braces, it is not possible to undo the case protection that a command automatically implies by wrapping it in braces in that position. In that case work-arounds are necessary. \end{itemize} - - +% \begin{lstlisting}[style=bibtex]{} -title = {The Story of {HMS} \emph{Erebus} in {\emph{Really}} Strong Wind}, +title = {The Story of {HMS} \emph{Erebus} + in {\emph{Really}} Strong Wind}, \end{lstlisting} would be converted to sentence case by \cmd{MakeSentenceCase} as \begin{quote} The story of HMS \emph{Erebus} in {\emph{really}} strong wind \end{quote} -Due to its complex implementation this command can not accept arbitrary input, it only safely operates on raw text or field data. In the standard styles the \bibfield{title} and other \bibfield{title}-like field formats do not work together with \cmd{MakeSentenceCase} because of their argument structure, so the standard styles offer a dedicated \texttt{titlecase} field format to apply this command. To enable sentence casing in standard styles for languages that support it you would use: +If the \sty{expl3} implementation of the case changing functions is selected, the \bibtex case protection behaviour can be exchanged for a slightly simpler version. When \opt{bibtexcaseprotection} set to \opt{false}, braces no longer automatically imply case protection. Instead words can be protected from case change with \cmd{NoCaseChange}. The examples from above would then read +\begin{lstlisting}[style=bibtex]{} +title = {An Introduction to \NoCaseChange{LaTeX}}, +title = {The Story of \NoCaseChange{HMS \emph{Erebus}} + in \emph{Really} Strong Wind}, +\end{lstlisting} +Generally, this option should allow for a saner case protection input, because curly braces are no longer overloaded with different levels of meaning, but it is a big departure from the standard case protection input that has been with the \latex world for a long time. + +Due to its complex implementation \cmd{MakeSentenceCase} can not accept arbitrary input, it only safely operates on raw text or field data. In the standard styles the \bibfield{title} and other \bibfield{title}-like field formats do not work together with \cmd{MakeSentenceCase} because of their argument structure, so the standard styles offer a dedicated \texttt{titlecase} field format to apply this command. To enable sentence casing in standard styles for languages that support it you would use: \begin{ltxexample} \DeclareFieldFormat{titlecase}{<<\MakeSentenceCase*{#1}>>} \end{ltxexample} @@ -10617,6 +10772,8 @@ The optional argument \bibfield{bookpagination} is omissible in this case. The pagination strings are taken from \texttt{$<$pagination$>$total} and \texttt{$<$pagination$>$totals}. \begin{table} +\caption{\cmd{mkcomprange} setup} +\label{aut:aux:tab1} \tablesetup\lnstyle \begin{tabularx}{\textwidth}{@{}>{\ttfamily}X@{}p{0.25\textwidth}@{}p{0.25\textwidth}@{}p{0.25\textwidth}@{}} \toprule @@ -10648,8 +10805,6 @@ The pagination strings are taken from \texttt{$<$pagination$>$total} and \texttt 1111--1555 & 1111--555 & 1111--555 & 1111--555 \\ \bottomrule \end{tabularx} -\caption{\cmd{mkcomprange} setup} -\label{aut:aux:tab1} \end{table} \cmditem{mkcomprange}[postpro][itempostpro]{text} @@ -10782,6 +10937,35 @@ This command is similar to \cmd{DeclareRangeCommands}, except that it only affec Use this command to temporarily redefine any commands which interfere with the tests performed by \cmd{ifnumeral}, \cmd{ifnumerals}, and \cmd{ifpages} from \secref{aut:aux:tst}. The setup will also affect \cmd{iffieldnum}, \cmd{iffieldnums}, \cmd{iffieldpages} as well as \cmd{mkpageprefix} and \cmd{mkpagetotal}. The \prm{code} will be executed in a group by these commands. Since the above mentioned commands will expand the string to be analyzed, it is possible to remove commands to be ignored by the tests by making them expand to an empty string. See also \secref{bib:use:pag, use:cav:pag} for further details. +\cmditem{NumsCheckSetup}{code} + +Like \cmd{NumCheckSetup} but only applies to \cmd{ifnumerals} and \cmd{ifpages} from \secref{aut:aux:tst} and their derivative tests. + +\cmditem{PagesCheckSetup}{code} + +Like \cmd{NumCheckSetup} but only applies to \cmd{ifpages} from \secref{aut:aux:tst} and its derivative tests. The default setting is makes \cmd{pnfmt} transparent to the test: + +\begin{ltxexample} +\PagesCheckSetup{\let\pnfmt\@firstofone} +\end{ltxexample} + +\cmditem{DeclareBabelToExplLanguageMapping}{babel language}{expl language} + +This command is only available if the \sty{expl3} case changing code is used. + +Use \prm{expl language} as \prm{language} argument for the \sty{l3text} case changing functions when \sty{babel language} is active. This command is only required if \prm{babel language} should correspond to a language for which \sty{l3text} has special rules set up. The default invocations of this command are +\begin{ltxexample} +\DeclareBabelToExplLanguageMapping{dutch}{nl} +\DeclareBabelToExplLanguageMapping{greek}{el} +\DeclareBabelToExplLanguageMapping{turkish}{tr} +\end{ltxexample} + +\cmditem{UndeclareBabelToExplLanguageMapping}{babel language} + +This command is only available if the \sty{expl3} case changing code is used. + +Removes the \sty{babel}-to-\sty{expl3} language mapping for \prm{babel language}. If the argument is an asterisk \texttt{*}, all language mappings are removed. + \cmditem{DeclareCaseLangs}{languages} \cmditem*{DeclareCaseLangs*}{languages} @@ -11091,7 +11275,7 @@ This command marks the middle of a sentence. A localisation string immediately a \csitem*{midsentence*} -The starred variant of \cmd{midsentence} differs from the regular one in that a preceding abbreviation dot is not hidden from the the punctuation tracker, \ie any code after \cmd{midsentence*} will see a preceding abbreviation dot. All other punctuation marks are hidden from the punctuation tracker and capitalization is suppressed. +The starred variant of \cmd{midsentence} differs from the regular one in that a preceding abbreviation dot is not hidden from the punctuation tracker, \ie any code after \cmd{midsentence*} will see a preceding abbreviation dot. All other punctuation marks are hidden from the punctuation tracker and capitalization is suppressed. \end{ltxsyntax} @@ -11116,6 +11300,18 @@ Similar to \cmd{bibstring} but always prints the long string, ignoring the \opt{ Similar to \cmd{bibstring} but always prints the short string, ignoring the \opt{abbreviate} option. +\cmditem{bibncpstring}[wrapper]{key} + +Similar to \cmd{bibstring} but the term is never capitalized. + +\cmditem{bibncplstring}[wrapper]{key} + +Similar to \cmd{biblstring} but the term is never capitalized. + +\cmditem{bibncpsstring}[wrapper]{key} + +Similar to \cmd{bibsstring} but the term is never capitalized. + \cmditem{bibcpstring}[wrapper]{key} Similar to \cmd{bibstring} but the term is always capitalized. @@ -11765,14 +11961,17 @@ Other expressions frequently used in citations: \item[langjapanese] The language <Japanese>. \item[langlatin] The language <Latin>. \item[langlatvian] The language <Latvian>. +\item[langlithuanian] The language <Lithuanian>. \item[langnorwegian] The language <Norwegian>. \item[langpolish] The language <Polish>. \item[langportuguese] The language <Portuguese>. \item[langrussian] The language <Russian>. +\item[langserbian] The language <Serbian>. \item[langslovak] The language <Slovak>. \item[langslovene] The language <Slovene>. \item[langspanish] The language <Spanish>. \item[langswedish] The language <Swedish>. +\item[langturkish] The language <Turkish>. \item[langukrainian] The language <Ukrainian>. \end{keymarglist} % @@ -11798,14 +11997,17 @@ The following strings are intended for use in phrases like <translated from [the \item[fromjapanese] The expression <from [the] Japanese>. \item[fromlatin] The expression <from [the] Latin>. \item[fromlatvian] The expression <from [the] Latvian>. +\item[fromlithuanian] The language <from [the] Lithuanian>. \item[fromnorwegian] The expression <from [the] Norwegian>. \item[frompolish] The expression <from [the] Polish>. \item[fromportuguese] The expression <from [the] Portuguese>. \item[fromrussian] The expression <from [the] Russian>. +\item[fromserbian] The expression <from [the] Serbian>. \item[fromslovak] The expression <from [the] Slovak>. \item[fromslovene] The expression <from [the] Slovene>. \item[fromspanish] The expression <from [the] Spanish>. \item[fromswedish] The expression <from [the] Swedish>. +\item[fromturkish] The expression <from [the] Turkish>. \item[fromukrainian] The expression <from [the] Ukrainian>. \end{keymarglist} @@ -11984,6 +12186,9 @@ The separator to be printed before the \bibfield{pages} field. Use this separato \csitem{bibpagerefpunct} The separator to be printed before the \bibfield{pageref} field. Use this separator instead of \cmd{newunitpunct} at this location. The default is an interword space. +\csitem{bibeidpunct} +The separator printed before the \bibfield{eid} field (similar to \cmd{bibpagespunct}). The default is a comma plus an interword space. + \csitem{multinamedelim}\CSdelimMark The delimiter to be printed between multiple items in a name list like \bibfield{author} or \bibfield{editor} if there are more than two names in the list. If there are only two names in the list, use the \cmd{finalnamedelim} instead. This command should be incorporated in all formatting directives for name lists. The default is a comma followed by an interword space. @@ -12008,9 +12213,27 @@ The delimiter to be printed before the localisation string <\texttt{andmore}> if \csitem{multicitedelim} The delimiter printed between citations if multiple entry keys are passed to a single citation command. This command should be incorporated in the definition of all citation commands, for example in the \prm{sepcode} argument passed to \cmd{DeclareCiteCommand}. See \secref{aut:cbx:cbx} for details. The default is a semicolon plus an interword space. +\csitem{multiciterangedelim} +The delimiter printed between two citations if they are compressed to a range. The default is \cmd{bibrangedash}. + +\csitem{multicitesubentrydelim} +The delimiter printed between subentry citations of the same set. This delimiter is only used in citation styles that reduce citations of the same set to a more compact form (\opt{subentry} of \texttt{numeric-comp}). The default is a comma. + +\csitem{multicitesubentryrangedelim} +The delimiter printed between two citations of the same set if they are compressed to a range. The default is \cmd{multiciterangedelim}. + \csitem{supercitedelim} Similar to \cmd{multinamedelim}, but intended for the \cmd{supercite} command only. The default is a comma. +\csitem{superciterangedelim} +Analogue of \cmd{multiciterangedelim} for \cmd{supercite}. The default is \cmd{bibrangedash}. + +\csitem{supercitesubentrydelim} +Analogue of \cmd{multicitesubentrydelim} for \cmd{supercite}. The default is \cmd{supercitedelim}. + +\csitem{supercitesubentryrangedelim} +Analogue of \cmd{multicitesubentryrangedelim} for \cmd{supercite}. The default is \cmd{superciterangedelim}. + \csitem{compcitedelim} Similar to \cmd{multicitedelim}, but intended for citation styles that <compress> multiple citations, \ie print the author only once if subsequent citations share the same author etc. The default definition is a comma plus an interword space. @@ -12664,6 +12887,7 @@ The default setting is: \begin{ltxexample} \AtUsedriver{% + \delimcontext{bib}% \let\finentry\blx@finentry@usedrv \let\newblock\relax \let\abx@macro@bibindex\@empty @@ -12753,8 +12977,74 @@ Executes the internal hook corresponding to \cmd{AtVolcite}. Locally un-defines the internal hook specified by \cmd{AtNextCitekey}. This essentially defers the hook to the next entry key in the citation list, when executed in the \prm{precode} argument of \cmd{DeclareCiteCommand} (\secref{aut:cbx:cbx}). +\cmditem{AtEveryEntrykey}{code}{success}{failure} + +Appends \prm{code} to an internal hook executed every time an entrykey is processed for a citation command or \cmd{nocite}. The \prm{code} is passed one argument (\lstinline{#1}), which contains the entrykey. If the code can be appended to the hook \prm{success} is executed, otherwise \prm{failure} is executed. Unlike \cmd{AtEveryCitekey} the entry data of the current entrykey is not available when \prm{code} is processed, indeed it is not even known whether or not there is any entry data at all. + +\end{ltxsyntax} + +\subsubsection{File hooks} +\label{aut:fmt:hok:fil} +\biblatex has rudimentary support for injecting arbitrary code before and after a file is loaded via file hooks. For files that are loaded using \biblatex's file interface---that includes all bibliography and citation styles---the following three hooks are available + +\begin{ltxsyntax} +\cmditem{blx@filehook@preload@$<$filename with extension$>$} + +If \file{$<$filename with extension$>$} is found, this hook is exected before it is loaded. + +\cmditem{blx@filehook@postload@$<$filename with extension$>$} + +If \file{$<$filename with extension$>$} is found, this hook is exected after it is loaded. + +\cmditem{blx@filehook@failure@$<$filename with extension$>$} + +This hook is executed if \file{$<$filename with extension$>$} can not be found. +\end{ltxsyntax} + +\biblatex generally only loads files once even if they were requested multiple times, +so the hooks will only be executed once. +Naturally, the file hooks need to be populated before the files are loaded, so the safest would be to populate them before \biblatex is loaded. +It is advisable to only append code to avoid overwriting previous hook contents. +Since the name of the file hook include the dot and the file extension they will usually have to be defined with a command like \cmd{csappto} from \sty{etoolbox}. + +The \file{.lbx} files are special and may have to be loaded several times in some situations. +Their file hooks are + +\begin{ltxsyntax} +\cmditem{blx@lbxfilehook@once@preload@$<$filename with extension$>$} + +If \file{$<$filename with extension$>$} is found, this hook is exected before it is loaded in a situation where the \file{.lbx} files are loaded only once. + +\cmditem{blx@lbxfilehook@once@postload@$<$filename with extension$>$} + +If \file{$<$filename with extension$>$} is found, this hook is exected after it is loaded in a situation where the \file{.lbx} files are loaded only once. + +\cmditem{blx@lbxfilehook@once@failure@$<$filename with extension$>$} + +This hook is executed if \file{$<$filename with extension$>$} can not be found in a situation where the \file{.lbx} files are loaded only once. + +\cmditem{blx@lbxfilehook@simple@preload@$<$filename with extension$>$} + +If \file{$<$filename with extension$>$} is found, this hook is exected before it is loaded in a situation where the \file{.lbx} files may be loaded multiple times. + +\cmditem{blx@lbxfilehook@simple@postload@$<$filename with extension$>$} + +If \file{$<$filename with extension$>$} is found, this hook is exected after it is loaded in a situation where the \file{.lbx} files may be loaded multiple times. + +\cmditem{blx@lbxfilehook@simple@failure@$<$filename with extension$>$} + +This hook is executed if \file{$<$filename with extension$>$} can not be found in a situation where the \file{.lbx} files may be loaded multiple times. \end{ltxsyntax} +The following code sets up \sty{beamer} to print the bibliography labels instead of its bibliography icons when \file{numeric.bbx} after is loaded +\begin{ltxexample} +\csappto{blx@filehook@postload@numeric.bbx}{% + \mode<presentation>{% + \setbeamertemplate{bibliography item}{% + \insertbiblabel}}} +\end{ltxexample} + + \subsection{Hints and Caveats} \label{aut:cav} @@ -12860,7 +13150,7 @@ Only use the \prm{namepart} in constructing the uniquename information if there \boolitem[false]{base} -The \prm{namepart} is part of the <base> which is the main piece of namepart(s) information which is being disambiguated by uniqueness information. For example, a family name which may be disambiguated by further given names. <base> \prm{namepart}s must occur before any non-<base> \prm{nameparts}. +The \prm{namepart} is part of the <base> which is the main piece of namepart(s) information which is being disambiguated by uniqueness information. For example, a family name which may be disambiguated by further given names. <base> \prm{namepart}s must occur before any non-<base> \prm{nameparts}. There \emph{must} be at least one <base> \prm{namepart} and \biber will report an error if this is not the case. \choitem{disambiguation}{none, init, initorfull, full} @@ -13122,7 +13412,7 @@ In the last citation, \kvopt{uniquelist}{minyear} does not override \opt{maxname \subsubsection{Trackers in Floats and \acr{TOC}/\acr{LOT}/\acr{LOF}} \label{aut:cav:flt} -If a citation is given in a float (typically in the caption of a figure or table), scholarly back references like <ibidem> or back references based on the page tracker get ambiguous because floats are objects which are (physically and logically) placed outside the flow of text, hence the logic of such references applies poorly to them. To avoid any such ambiguities, the citation and page trackers are temporarily disabled in all floats. In addition to that, these trackers plus the back reference tracker (\opt{backref}) are temporarily disabled in the table of contents, the list of figures, and the list of tables. +If a citation is given in a float (typically in the caption of a figure or table), scholarly back references like <ibidem> or back references based on the page tracker get ambiguous because floats are objects which are (physically and logically) placed outside the flow of text, hence the logic of such references applies poorly to them. To avoid any such ambiguities, the citation and page trackers are temporarily disabled in all floats unless explicitly requested with \opt{trackfloats}. In addition to that, these trackers plus the back reference tracker (\opt{backref}) are temporarily disabled in the table of contents, the list of figures, and the list of tables. \subsubsection{Mixing Programming Interfaces} \label{aut:cav:mif} @@ -14022,8 +14312,10 @@ backrefsetstyle &\+&\+&\_&\_&\_&\_&\_\\ backrefstyle &\+&\+&\_&\_&\_&\_&\_\\ bibencoding &\+&\+&\_&\_&\_&\_&\_\\ bibstyle &\+&\_&\_&\_&\_&\_&\_\\ +bibtexcaseprotection &\+&\+&\_&\+&\+&\_&\_\\ bibwarn &\+&\+&\_&\_&\_&\_&\_\\ block &\+&\+&\_&\_&\_&\_&\_\\ +casechanger &\+&\_&\_&\_&\_&\_&\_\\ citecounter &\+&\+&\_&\_&\_&\_&\_\\ citereset &\+&\+&\_&\_&\_&\_&\_\\ citestyle &\+&\_&\_&\_&\_&\_&\_\\ @@ -14135,6 +14427,35 @@ use$<$name$>$ &\+&\+&\_&\+&\+&\_&\_\\ This revision history is a list of changes relevant to users of this package. Changes of a more technical nature which do not affect the user interface or the behavior of the package are not included in the list. More technical details are to be found in the \file{CHANGES.md} file. The numbers on the right indicate the relevant section of this manual. \begin{changelog} +\begin{release}{3.15}{2020-08-16} +\item Added \opt{starnocited} option to sourcemaps\see{aut:ctm:map} +\item Added the \opt{glob} option to \cmd{addbibresource}\see{use:bib:res} +\item Added \bibfield{eid} to more entry types\see{bib:typ:blx} +\item Added \cmd{bibeidpunct}\see{use:fmt:fmt} +\item Added \bibfield{issuetitleaddon} and \bibfield{journaltitleaddon}\see{bib:fld:dat} +\item \texttt{numeric-comp} compresses \opt{subentry} set references now\see{use:opt:pre:bbx} +\item Added \opt{subentrycomp} to \texttt{numeric-comp} style\see{use:opt:pre:bbx} +\item Added \cmd{multiciterangedelim}, \cmd{multicitesubentrydelim}, + \cmd{multicitesubentryrangedelim}, \cmd{superciterangedelim}, + \cmd{supercitesubentrydelim}, \cmd{supercitesubentryrangedelim}% + \see{use:fmt:fmt} +\item Implemented \opt{expl3} case changing functions\see{aut:aux:msc} +\item Added \opt{casechanger} option\see{use:opt:ldt} +\item Added \opt{bibtexcaseprotection} option\see{use:opt:pre:gen} +\item Added \cmd{mautocite} and \cmd{Mautocite}\see{use:cit:mct} +\item Added \opt{trackfloats} and \opt{backreffloats}\see{use:opt:pre:gen} +\item Added \opt{block} option to \cmd{printbibliography} and friends\see{use:bib:bib} +\item Added \cmd{NumsCheckSetup} and \cmd{PagesCheckSetup}\see{aut:aux:msc} +\item Added \cmd{AtEveryEntrykey}\see{aut:fmt:hok} +\item Added \cmd{ifdatesequal} and \cmd{ifdaterangesequal}\see{aut:aux:tst} +\item Clarified \cmd{ifuniqueprimaryauthor} semantics\see{aut:aux:tst} +\item Added \cmd{bibncpstring}, \cmd{bibncplstring} and \cmd{bibncpsstring}\see{aut:str} +\item Added Lithuanian localisation (Valdemaras Klumbys) +\item Added Serbian localisation (Andrej Radović) +\item Added Turkish localisation (Abdulkerim Gok) +\item Added file hooks\see{aut:fmt:hok:fil} +\item Deprecated \cmd{ifkomabibtotoc} and \cmd{ifkomabibtotocnumbered}\see{use:cav:scr} +\end{release} \begin{release}{3.14}{2019-12-01} \item Added new mapping verbs for citation sources\see{aut:ctm:map} \item Added documentation for new \biber granular \bibtype{xdata} functionality\see{use:use:xdat} diff --git a/macros/latex/contrib/biblatex/doc/examples/01-introduction-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/01-introduction-bibtex.pdf Binary files differindex 75171ed490..9f99ce5698 100644 --- a/macros/latex/contrib/biblatex/doc/examples/01-introduction-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/01-introduction-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/02-annotations-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/02-annotations-biber.pdf Binary files differindex d5b086d24a..1922abc34c 100644 --- a/macros/latex/contrib/biblatex/doc/examples/02-annotations-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/02-annotations-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/02-annotations-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/02-annotations-bibtex.pdf Binary files differindex d8f86f3565..1f9857cdbb 100644 --- a/macros/latex/contrib/biblatex/doc/examples/02-annotations-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/02-annotations-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-biber.pdf Binary files differindex e478c9368c..a2db74511c 100644 --- a/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-bibtex.pdf Binary files differindex 1fa3dfb031..b2b48bf9d7 100644 --- a/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/03-localization-keys-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/03-localization-keys.tex b/macros/latex/contrib/biblatex/doc/examples/03-localization-keys.tex index 1bfe7767d3..84f46d5a6c 100644 --- a/macros/latex/contrib/biblatex/doc/examples/03-localization-keys.tex +++ b/macros/latex/contrib/biblatex/doc/examples/03-localization-keys.tex @@ -23,6 +23,7 @@ %\usepackage[icelandic]{babel} %\usepackage[italian]{babel} %\usepackage[latvian]{babel} +%\usepackage[lithuanian]{babel} %\usepackage[magyar]{babel} %\usepackage[norsk]{babel} %\usepackage[nynorsk]{babel} @@ -32,6 +33,7 @@ %\usepackage[slovene]{babel} %\usepackage[spanish]{babel} %\usepackage[swedish]{babel} +%\usepackage[turkish, shorthands=:!]{babel}% avoid = becoming active % - UTF-8 % -- Russian %\usepackage[T1,T2A]{fontenc} @@ -452,7 +454,7 @@ Roles which are related to supplementary material may also be expressed as objec \keyitem{columns} The plural form of \texttt{column}. \keyitem{section} The term <section>, referring to a document division (usually abbreviated as \S). \keyitem{sections} The plural form of \texttt{section} (usually abbreviated as \S\S). -\keyitem{paragraph} The term <paragraph> (\ie a block of text, not to be confused with \texttt{section}). +\keyitem{paragraph} The term <paragraph> (\ie\ a block of text, not to be confused with \texttt{section}). \keyitem{paragraphs} The plural form of \texttt{paragraph}. \keyitem{verse} The term <verse> as used when referring to a work which is cited by verse numbers. \keyitem{verses} The plural form of \texttt{verse}. @@ -464,7 +466,7 @@ Roles which are related to supplementary material may also be expressed as objec \keyitem{columntotals} The plural form of \texttt{columntotal}. \keyitem{sectiontotal} The term <section>, referring to a document division (usually abbreviated as \S), as used in \cmd{mkpageprefix}. \keyitem{sectiontotals} The plural form of \texttt{sectiontotal} (usually abbreviated as \S\S). -\keyitem{paragraphtotal} The term <paragraph> (\ie a block of text, not to be confused with \texttt{section}) as used in \cmd{mkpageprefix}. +\keyitem{paragraphtotal} The term <paragraph> (\ie\ a block of text, not to be confused with \texttt{section}) as used in \cmd{mkpageprefix}. \keyitem{paragraphtotals} The plural form of \texttt{paragraphtotal}. \keyitem{versetotal} The term <verse> as used when referring to a work which is cited by verse numbers when used in \cmd{mkpageprefix}. \keyitem{versetotals} The plural form of \texttt{versetotal}. @@ -600,14 +602,17 @@ Other expressions frequently used in citations: \keyitem{langjapanese} The language <Japanese>. \keyitem{langlatin} The language <Latin>. \keyitem{langlatvian} The language <Latvian>. +\keyitem{langlithuanian} The language <Lithuanian>. \keyitem{langnorwegian} The language <Norwegian>. \keyitem{langpolish} The language <Polish>. \keyitem{langportuguese} The language <Portuguese>. \keyitem{langrussian} The language <Russian>. +\keyitem{langserbian} The language <Serbian>. \keyitem{langslovak} The language <Slovak>. \keyitem{langslovene} The language <Slovene>. \keyitem{langspanish} The language <Spanish>. \keyitem{langswedish} The language <Swedish>. +\keyitem{langturkish} The language <Turkish>. \keyitem{langukrainian} The language <Ukrainian>. \end{keylist} % @@ -633,14 +638,17 @@ The following strings are intended for use in phrases like <translated from [the \keyitem{fromjapanese} The expression <from [the] Japanese>. \keyitem{fromlatin} The expression <from [the] Latin>. \keyitem{fromlatvian} The expression <from [the] Latvian>. +\keyitem{fromlithuanian} The expression <from [the] Lithuanian>. \keyitem{fromnorwegian} The expression <from [the] Norwegian>. \keyitem{frompolish} The expression <from [the] Polish>. \keyitem{fromportuguese} The expression <from [the] Portuguese>. \keyitem{fromrussian} The expression <from [the] Russian>. +\keyitem{fromserbian} The expression <from [the] Serbian>. \keyitem{fromslovak} The expression <from [the] Slovak>. \keyitem{fromslovene} The expression <from [the] Slovene>. \keyitem{fromspanish} The expression <from [the] Spanish>. \keyitem{fromswedish} The expression <from [the] Swedish>. +\keyitem{fromturkish} The expression <from [the] Turkish>. \keyitem{fromukrainian} The expression <from [the] Ukrainian>. \end{keylist} diff --git a/macros/latex/contrib/biblatex/doc/examples/04-delimiters-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/04-delimiters-biber.pdf Binary files differindex 28956fdacc..06307e6fa2 100644 --- a/macros/latex/contrib/biblatex/doc/examples/04-delimiters-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/04-delimiters-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/04-delimiters-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/04-delimiters-bibtex.pdf Binary files differindex 4344e1f51a..78c188bd8c 100644 --- a/macros/latex/contrib/biblatex/doc/examples/04-delimiters-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/04-delimiters-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/10-references-per-section-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/10-references-per-section-bibtex.pdf Binary files differindex 931645e425..19dd108783 100644 --- a/macros/latex/contrib/biblatex/doc/examples/10-references-per-section-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/10-references-per-section-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-biber.pdf Binary files differindex 57a5d24c06..741e22905e 100644 --- a/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-bibtex.pdf Binary files differindex 176278e5eb..c580a66930 100644 --- a/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/11-references-by-section-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-biber.pdf Binary files differindex bec8fa28fe..c899cf453b 100644 --- a/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-bibtex.pdf Binary files differindex 1dafa8f85a..10092ea8e9 100644 --- a/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/12-references-by-segment-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/13-references-by-keyword-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/13-references-by-keyword-bibtex.pdf Binary files differindex 3b193af84f..6ffffd5203 100644 --- a/macros/latex/contrib/biblatex/doc/examples/13-references-by-keyword-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/13-references-by-keyword-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/14-references-by-category-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/14-references-by-category-bibtex.pdf Binary files differindex 4ee57c61c9..37d86eae22 100644 --- a/macros/latex/contrib/biblatex/doc/examples/14-references-by-category-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/14-references-by-category-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/15-references-by-type-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/15-references-by-type-bibtex.pdf Binary files differindex 26b0442440..0e14111e52 100644 --- a/macros/latex/contrib/biblatex/doc/examples/15-references-by-type-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/15-references-by-type-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-biber.pdf Binary files differindex 05cbf46bcd..7b4d8d1cbe 100644 --- a/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-bibtex.pdf Binary files differindex d36734df00..2917f54141 100644 --- a/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/16-numeric-prefixed-1-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-biber.pdf Binary files differindex 138a32a2de..2307fe03d1 100644 --- a/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-bibtex.pdf Binary files differindex dd0c6992a3..b7e07cb9e7 100644 --- a/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/17-numeric-prefixed-2-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/18-numeric-hybrid-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/18-numeric-hybrid-bibtex.pdf Binary files differindex 39c469234b..82fd424bb1 100644 --- a/macros/latex/contrib/biblatex/doc/examples/18-numeric-hybrid-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/18-numeric-hybrid-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-biber.pdf Binary files differindex 3504e45685..bcacd39a83 100644 --- a/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-bibtex.pdf Binary files differindex 417d0b241a..9bc22e43fa 100644 --- a/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/19-alphabetic-prefixed-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-biber.pdf Binary files differindex 3b962a988b..5d41515acc 100644 --- a/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-bibtex.pdf Binary files differindex 725668602a..9bd7cc7ea3 100644 --- a/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/20-indexing-single-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-biber.pdf Binary files differindex 7119511191..76afed3ec3 100644 --- a/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-bibtex.pdf Binary files differindex c2dd6a5890..4f34598b0d 100644 --- a/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/21-indexing-multiple-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/22-indexing-subentry-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/22-indexing-subentry-bibtex.pdf Binary files differindex 6bdff2492f..8b2632c5bc 100644 --- a/macros/latex/contrib/biblatex/doc/examples/22-indexing-subentry-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/22-indexing-subentry-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/30-style-numeric-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/30-style-numeric-bibtex.pdf Binary files differindex 59584f7cc6..e557453ff4 100644 --- a/macros/latex/contrib/biblatex/doc/examples/30-style-numeric-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/30-style-numeric-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-biber.pdf Binary files differindex ee3bc0b805..58ca85ca06 100644 --- a/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-bibtex.pdf Binary files differindex a75a9dbcf2..000ebee98a 100644 --- a/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp.tex b/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp.tex index 95ac00b5b1..9838f21867 100644 --- a/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp.tex +++ b/macros/latex/contrib/biblatex/doc/examples/31-style-numeric-comp.tex @@ -36,7 +36,31 @@ This option is disabled by default, but it has been enabled in this example. If disabled, citations referring to a set member will point to the entire set, i.e., the above citations would come out as +\begingroup\boolfalse{bbx:subentry}% don't try this at home \cite{stdmodel,set,stdmodel,set,companion}. +\endgroup + +\subsection*{The \texttt{subentrycomp} option} + +The option \texttt{subentrycomp} controls whether or not citations +to subentries of the same sets are compressed as well. +It only becomes relevant if \texttt{subentry} is set to \texttt{true}, +with \texttt{subentry=false} it has no effect. +If \texttt{subentrycomp} is enabled, +subentries that belong to the same +set are shown in a more compact form: +\cite{glashow,herrmann,aksin,yoon,salam,companion}. + +If the option is disabled, subentries of sets are shown as in +the \texttt{numeric} style: +\begingroup\togglefalse{cbx:subentrycomp}% don't try this at home +\cite{glashow,herrmann,aksin,yoon,salam,companion}. +\endgroup + +This option is implemented for backwards compatibility, +earlier versions of \texttt{biblatex} behaved like +\texttt{subentrycomp=false}, current versions have +\texttt{subentrycomp=true} enabled. \subsection*{Multiple citations} diff --git a/macros/latex/contrib/biblatex/doc/examples/32-style-numeric-verb-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/32-style-numeric-verb-bibtex.pdf Binary files differindex 705363bb8b..8583a3cf36 100644 --- a/macros/latex/contrib/biblatex/doc/examples/32-style-numeric-verb-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/32-style-numeric-verb-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-biber.pdf Binary files differindex ef95075a70..c41fa13f70 100644 --- a/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-bibtex.pdf Binary files differindex de2ff32d03..5938be41e9 100644 --- a/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/40-style-alphabetic-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/41-style-alphabetic-verb-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/41-style-alphabetic-verb-bibtex.pdf Binary files differindex afc733d0ca..2c22d4f8ac 100644 --- a/macros/latex/contrib/biblatex/doc/examples/41-style-alphabetic-verb-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/41-style-alphabetic-verb-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/42-style-alphabetic-template-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/42-style-alphabetic-template-bibtex.pdf Binary files differindex a1170adb23..11ad9dc858 100644 --- a/macros/latex/contrib/biblatex/doc/examples/42-style-alphabetic-template-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/42-style-alphabetic-template-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-biber.pdf Binary files differindex 5e2fcbc438..c61faf1bb1 100644 --- a/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-bibtex.pdf Binary files differindex 4217606fd4..2d25786691 100644 --- a/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/50-style-authoryear-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/51-style-authoryear-ibid-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/51-style-authoryear-ibid-bibtex.pdf Binary files differindex 0b5da8cf75..2fe08720e3 100644 --- a/macros/latex/contrib/biblatex/doc/examples/51-style-authoryear-ibid-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/51-style-authoryear-ibid-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/52-style-authoryear-comp-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/52-style-authoryear-comp-bibtex.pdf Binary files differindex f6f2e0ba51..bd4786de53 100644 --- a/macros/latex/contrib/biblatex/doc/examples/52-style-authoryear-comp-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/52-style-authoryear-comp-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/53-style-authoryear-icomp-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/53-style-authoryear-icomp-bibtex.pdf Binary files differindex 6c76c94667..9cb169639d 100644 --- a/macros/latex/contrib/biblatex/doc/examples/53-style-authoryear-icomp-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/53-style-authoryear-icomp-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-biber.pdf Binary files differindex 899937934f..6ad08df0c3 100644 --- a/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-bibtex.pdf Binary files differindex eee3ef8367..fa0db8f63d 100644 --- a/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/60-style-authortitle-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/61-style-authortitle-ibid-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/61-style-authortitle-ibid-bibtex.pdf Binary files differindex 392f6a47e2..99c5e9c833 100644 --- a/macros/latex/contrib/biblatex/doc/examples/61-style-authortitle-ibid-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/61-style-authortitle-ibid-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/62-style-authortitle-comp-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/62-style-authortitle-comp-bibtex.pdf Binary files differindex 23a8af4319..d63029fb8c 100644 --- a/macros/latex/contrib/biblatex/doc/examples/62-style-authortitle-comp-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/62-style-authortitle-comp-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/63-style-authortitle-icomp-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/63-style-authortitle-icomp-bibtex.pdf Binary files differindex 162b15f46d..5e8841b1ef 100644 --- a/macros/latex/contrib/biblatex/doc/examples/63-style-authortitle-icomp-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/63-style-authortitle-icomp-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/64-style-authortitle-terse-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/64-style-authortitle-terse-bibtex.pdf Binary files differindex 46b622c6bd..690c053080 100644 --- a/macros/latex/contrib/biblatex/doc/examples/64-style-authortitle-terse-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/64-style-authortitle-terse-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/65-style-authortitle-tcomp-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/65-style-authortitle-tcomp-bibtex.pdf Binary files differindex e20da20c5e..40d87588f9 100644 --- a/macros/latex/contrib/biblatex/doc/examples/65-style-authortitle-tcomp-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/65-style-authortitle-tcomp-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/66-style-authortitle-ticomp-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/66-style-authortitle-ticomp-bibtex.pdf Binary files differindex 0428c21164..58a1fb7198 100644 --- a/macros/latex/contrib/biblatex/doc/examples/66-style-authortitle-ticomp-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/66-style-authortitle-ticomp-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/70-style-verbose-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/70-style-verbose-bibtex.pdf Binary files differindex 2db844dfa1..27ea27676e 100644 --- a/macros/latex/contrib/biblatex/doc/examples/70-style-verbose-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/70-style-verbose-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/71-style-verbose-ibid-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/71-style-verbose-ibid-bibtex.pdf Binary files differindex d3915cbc01..4fd500dcdb 100644 --- a/macros/latex/contrib/biblatex/doc/examples/71-style-verbose-ibid-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/71-style-verbose-ibid-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/72-style-verbose-note-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/72-style-verbose-note-bibtex.pdf Binary files differindex 6713221484..3d42958ca9 100644 --- a/macros/latex/contrib/biblatex/doc/examples/72-style-verbose-note-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/72-style-verbose-note-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/73-style-verbose-inote-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/73-style-verbose-inote-bibtex.pdf Binary files differindex e9986d3105..9b98d5c7f6 100644 --- a/macros/latex/contrib/biblatex/doc/examples/73-style-verbose-inote-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/73-style-verbose-inote-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/74-style-verbose-trad1-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/74-style-verbose-trad1-bibtex.pdf Binary files differindex 9dda0de27e..25bb9067c9 100644 --- a/macros/latex/contrib/biblatex/doc/examples/74-style-verbose-trad1-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/74-style-verbose-trad1-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/75-style-verbose-trad2-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/75-style-verbose-trad2-bibtex.pdf Binary files differindex 21ab89a7ae..b23cd16092 100644 --- a/macros/latex/contrib/biblatex/doc/examples/75-style-verbose-trad2-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/75-style-verbose-trad2-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/76-style-verbose-trad3-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/76-style-verbose-trad3-bibtex.pdf Binary files differindex 0f64efbc22..b9e059f87e 100644 --- a/macros/latex/contrib/biblatex/doc/examples/76-style-verbose-trad3-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/76-style-verbose-trad3-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/80-style-reading-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/80-style-reading-bibtex.pdf Binary files differindex b24bff3611..1d1303aa06 100644 --- a/macros/latex/contrib/biblatex/doc/examples/80-style-reading-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/80-style-reading-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/81-style-draft-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/81-style-draft-bibtex.pdf Binary files differindex b7103aeccc..04d631aacb 100644 --- a/macros/latex/contrib/biblatex/doc/examples/81-style-draft-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/81-style-draft-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/82-style-debug-bibtex.pdf b/macros/latex/contrib/biblatex/doc/examples/82-style-debug-bibtex.pdf Binary files differindex 2deac186b7..61f1c8ca57 100644 --- a/macros/latex/contrib/biblatex/doc/examples/82-style-debug-bibtex.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/82-style-debug-bibtex.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/90-related-entries-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/90-related-entries-biber.pdf Binary files differindex ccabb52e43..4edefdd1b1 100644 --- a/macros/latex/contrib/biblatex/doc/examples/90-related-entries-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/90-related-entries-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/92-bibliographylists-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/92-bibliographylists-biber.pdf Binary files differindex ee162c3f4f..fb23695234 100644 --- a/macros/latex/contrib/biblatex/doc/examples/92-bibliographylists-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/92-bibliographylists-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/96-dates.tex b/macros/latex/contrib/biblatex/doc/examples/96-dates.tex index e12010a3d8..e4e1863934 100644 --- a/macros/latex/contrib/biblatex/doc/examples/96-dates.tex +++ b/macros/latex/contrib/biblatex/doc/examples/96-dates.tex @@ -19,10 +19,10 @@ @misc{date2, note = {Dates with circa and uncertain markers}, author = {Author2}, - date = {1723%}, % year with ETDF approximate (circa) and uncertainty markers + date = {1723%}, % year with EDTF approximate (circa) and uncertainty markers origdate = {1934-02~}, % year and month with circa marker eventdate = {1976?}, % year with uncertainty marker - urldate = {1922~}, % year with ETDF approximate (circa) marker + urldate = {1922~}, % year with EDTF approximate (circa) marker } @misc{date3, note = {Date ranges}, diff --git a/macros/latex/contrib/biblatex/doc/examples/97-annotations-biber.pdf b/macros/latex/contrib/biblatex/doc/examples/97-annotations-biber.pdf Binary files differindex 9fa5afc943..31c88f7951 100644 --- a/macros/latex/contrib/biblatex/doc/examples/97-annotations-biber.pdf +++ b/macros/latex/contrib/biblatex/doc/examples/97-annotations-biber.pdf diff --git a/macros/latex/contrib/biblatex/doc/examples/biblatex-examples.bib b/macros/latex/contrib/biblatex/doc/examples/biblatex-examples.bib index 10f114bc76..5aaa9d2196 100644 --- a/macros/latex/contrib/biblatex/doc/examples/biblatex-examples.bib +++ b/macros/latex/contrib/biblatex/doc/examples/biblatex-examples.bib @@ -25,19 +25,13 @@ @set{set, entryset = {herrmann,aksin,yoon}, - annotation = {A \texttt{set} with three members. The \texttt{crossref} field - in the \texttt{@set} entry and the \texttt{entryset} field in - each set member entry is needed only when using BibTeX as the - backend}, + annotation = {A \texttt{set} with three members.}, } @set{stdmodel, entryset = {glashow,weinberg,salam}, annotation = {A \texttt{set} with three members discussing the standard - model of particle physics. The \texttt{crossref} field - in the \texttt{@set} entry and the \texttt{entryset} field in - each set member entry is needed only when using BibTeX as the - backend}, + model of particle physics.}, } @article{aksin, diff --git a/macros/latex/contrib/biblatex/latex/bbx/standard.bbx b/macros/latex/contrib/biblatex/latex/bbx/standard.bbx index 3046bd10e8..810c8584c9 100644 --- a/macros/latex/contrib/biblatex/latex/bbx/standard.bbx +++ b/macros/latex/contrib/biblatex/latex/bbx/standard.bbx @@ -19,6 +19,8 @@ \settoggle{bbx:related}{#1}} \ExecuteBibliographyOptions{isbn,url,doi,eprint,related} +% @online url is shown even if url=false, globally +\ExecuteBibliographyOptions[online]{url=true} \newbibmacro*{begentry}{} \newbibmacro*{finentry}{\finentry} @@ -485,15 +487,7 @@ \newunit\newblock \usebibmacro{date}% \newunit\newblock - \iftoggle{bbx:doi} - {\printfield{doi}} - {}% - \newunit\newblock - \iftoggle{bbx:eprint} - {\usebibmacro{eprint}} - {}% - \newunit\newblock - \usebibmacro{url+urldate}% + \usebibmacro{doi+eprint+url}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock @@ -719,9 +713,7 @@ \newunit\newblock \usebibmacro{location+date}% \newunit\newblock - \iftoggle{bbx:url} - {\usebibmacro{url+urldate}} - {}% + \usebibmacro{doi+eprint+url}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock @@ -808,7 +800,7 @@ \printfield{volume}% \setunit*{\adddot}% \printfield{number}% - \setunit{\addcomma\space}% + \setunit{\bibeidpunct}% \printfield{eid}} \newbibmacro*{title+issuetitle}{% @@ -895,6 +887,8 @@ \newbibmacro*{chapter+pages}{% \printfield{chapter}% \setunit{\bibpagespunct}% + \printfield{eid}% + \setunit{\bibpagespunct}% \printfield{pages}% \newunit} diff --git a/macros/latex/contrib/biblatex/latex/biblatex.def b/macros/latex/contrib/biblatex/latex/biblatex.def index 992e8ba7e3..10f4144dab 100644 --- a/macros/latex/contrib/biblatex/latex/biblatex.def +++ b/macros/latex/contrib/biblatex/latex/biblatex.def @@ -18,9 +18,9 @@ % \namepart<namepart>i - e.g. \namepartfamilyi \def\do#1{% \csdef{mkbibname#1}##1{##1}% - \define@key{blx@opt@namepart}{#1}{\csdef{namepart#1}{##1}}% - \define@key{blx@opt@namepart}{#1i}{\csdef{namepart#1i}{##1}}% - \define@key{blx@opt@namepart}{#1un}{\csdef{namepart#1un}{##1}}} + \blx@kv@defkey{blx@opt@namepart}{#1}{\csdef{namepart#1}{##1}}% + \blx@kv@defkey{blx@opt@namepart}{#1i}{\csdef{namepart#1i}{##1}}% + \blx@kv@defkey{blx@opt@namepart}{#1un}{\csdef{namepart#1un}{##1}}} \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts} % legacy aliases @@ -95,8 +95,17 @@ \DeclareDelimFormat{andmoredelim}{\addspace} \newcommand*{\multicitedelim}{\addsemicolon\space} +\newcommand*{\multicitesubentrydelim}{\addcomma} +\newcommand*{\multiciterangedelim}{\bibrangedash} +\newcommand*{\multicitesubentryrangedelim}{\multiciterangedelim} + \newcommand*{\compcitedelim}{\addcomma\space} + \newcommand*{\supercitedelim}{\addcomma} +\newcommand*{\supercitesubentrydelim}{\supercitedelim} +\newcommand*{\superciterangedelim}{\bibrangedash} +\newcommand*{\supercitesubentryrangedelim}{\superciterangedelim} + \DeclareDelimFormat{prenotedelim}{\addspace} \DeclareDelimFormat{postnotedelim}{\addcomma\space} \DeclareDelimAlias{multiprenotedelim}{prenotedelim} @@ -168,6 +177,7 @@ \newcommand*{\subtitlepunct}{\newunitpunct} \newcommand*{\intitlepunct}{\addcolon\space} \newcommand*{\bibpagespunct}{\addcomma\space} +\newcommand*{\bibeidpunct}{\addcomma\space} \newcommand*{\bibpagerefpunct}{\addspace} \newcommand*{\revsdnamepunct}{\addcomma} \newcommand*{\bibnamedash}{% @@ -238,6 +248,10 @@ % want more visual separation, try the package option 'block=space'. % This will yield better results than \nonfrenchspacing. +% If \frenchspacing is removed here, it may also have to be removed +% from \blx@beglang@spacefactors, for example with +% \let\blx@beglang@spacefactors\@empty + % \citesetup is a generic hook for citations. \newcommand*{\citesetup}{% @@ -462,15 +476,15 @@ \DeclareFieldFormat{prenote}{#1\isdot} \DeclareFieldFormat{postnote}{\mkpageprefix[pagination][\mknormrange]{#1}} \DeclareFieldFormat{volcitevolume}{\bibstring{volume}\ppspace#1} -\DeclareFieldFormat{volcitepages}{\mkpageprefix[pagination][\mknormrange]{#1}} +\DeclareFieldAlias{volcitepages}{postnote} \DeclareFieldFormat{volcitenote}{\mkvolcitenote#1} \newrobustcmd*{\mkvolcitenote}[2]{% \printtext[volcitevolume]{#1}% \ifblank{#2}{}{\volcitedelim\printtext[volcitepages]{#2}}} % multicite commands -\DeclareFieldFormat{multiprenote}{#1\isdot} -\DeclareFieldFormat{multipostnote}{\mkpageprefix[pagination][\mknormrange]{#1}} +\DeclareFieldAlias{multiprenote}{prenote} +\DeclareFieldAlias{multipostnote}{postnote} % Used by \citeurl @@ -1163,8 +1177,6 @@ % The fallback used by \indexlist -\DeclareIndexListWrapperFormat{default}{#1} - \DeclareIndexListFormat{default}{\index{#1}} % ------------------------------------------------------------------ @@ -1176,8 +1188,6 @@ % The fallback used by \indexnames -\DeclareIndexNameWrapperFormat{default}{#1} - \DeclareIndexNameFormat{default}{% \usebibmacro{index:name} {\index} @@ -1227,7 +1237,7 @@ \newbibmacro*{index:name}[5]{% \usebibmacro{index:entry}{#1}{\mkbibindexname{#2}{#3}{#4}{#5}}} -% {<family name>}{<given name>}{<given initials>}{<family name prefix>} +% {<family name>}{<given name>}{<prefix>}{<suffix>} \newcommand*{\mkbibindexname}[4]{% \ifuseprefix {\ifdefvoid{#3}{}{#3 }% @@ -1715,6 +1725,7 @@ \DeclareDataInheritance{periodical}{article,suppperiodical}{% \inherit{title}{journaltitle} \inherit{subtitle}{journalsubtitle} + \inherit{titleaddon}{journaltitleaddon} \noinherit{shorttitle} \noinherit{sorttitle} \noinherit{indextitle} @@ -2344,7 +2355,7 @@ \newbibmacro*{multipostnote}{% \iffieldundef{multipostnote} {} - {\printdelim{multipostnotedelim} + {\printdelim{multipostnotedelim}% \printfield{multipostnote}}} % ------------------------------------------------------------------ @@ -2824,6 +2835,9 @@ \newunit}% \printfield{maintitleaddon}} +% The \iffieldundef{journaltitleaddon} is usually not necessary. +% We need it to ensure that a \setunit* after this macro does the right thing +% for backwards compatibility. \newbibmacro*{journal}{% \ifboolexpr{ test {\iffieldundef{journaltitle}} @@ -2834,8 +2848,14 @@ {\printtext[journaltitle]{% \printfield[titlecase]{journaltitle}% \setunit{\subtitlepunct}% - \printfield[titlecase]{journalsubtitle}}}} + \printfield[titlecase]{journalsubtitle}}% + \newunit}% + \iffieldundef{journaltitleaddon} + {} + {\printfield{journaltitleaddon}}} +% Re \iffieldundef{titleaddon} see the comment about +% \iffieldundef{journaltitleaddon} above. \newbibmacro*{periodical}{% \ifboolexpr{ test {\iffieldundef{title}} @@ -2846,7 +2866,11 @@ {\printtext[title]{% \printfield[titlecase]{title}% \setunit{\subtitlepunct}% - \printfield[titlecase]{subtitle}}}} + \printfield[titlecase]{subtitle}}% + \newunit}% + \iffieldundef{titleaddon} + {} + {\printfield{titleaddon}}} \newbibmacro*{issue}{% \ifboolexpr{ @@ -2858,11 +2882,13 @@ {\printtext[issuetitle]{% \printfield[titlecase]{issuetitle}% \setunit{\subtitlepunct}% - \printfield[titlecase]{issuesubtitle}}}} + \printfield[titlecase]{issuesubtitle}}% + \newunit}% + \printfield{issuetitleaddon}} \newbibmacro*{in:}{% - \printtext{% - \bibstring{in}\intitlepunct}} + \bibstring{in}% + \printunit{\intitlepunct}} \newbibmacro*{date}{\printdate} @@ -2900,9 +2926,12 @@ {\printfield[eprint:\strfield{eprinttype}]{eprint}}} \newbibmacro*{annotation}{% + \begingroup + \togglefalse{blx@bibliography}% \iffieldundef{annotation} {\printfile[annotation]{\bibannotationprefix\thefield{entrykey}.tex}} - {\printfield{annotation}}} + {\printfield{annotation}}% + \endgroup} \newbibmacro*{abstract}{% \iffieldundef{abstract} @@ -2926,7 +2955,7 @@ \ifbibmacroundef{date+extradate} {} {\renewbibmacro*{date+extradate}{}% - \renewbibmacro*{date}{\printdate}}% + \renewbibmacro*{bbx:ifmergeddate}{\@secondoftwo}}% \renewbibmacro*{pageref}{}} {\thefield{entrytype}}}} diff --git a/macros/latex/contrib/biblatex/latex/biblatex.sty b/macros/latex/contrib/biblatex/latex/biblatex.sty index 775d3ecfb3..e48b124277 100644 --- a/macros/latex/contrib/biblatex/latex/biblatex.sty +++ b/macros/latex/contrib/biblatex/latex/biblatex.sty @@ -12,8 +12,8 @@ % particular purpose. % Set up the version strings here -\def\abx@date{2019/12/01} -\def\abx@version{3.14} +\def\abx@date{2020/08/19} +\def\abx@version{3.15} \def\abx@bbxid{\abx@date\space v\abx@version\space biblatex bibliography style (PK/MW)} \def\abx@cbxid{\abx@date\space v\abx@version\space biblatex citation style (PK/MW)} \def\abx@lbxid{\abx@date\space v\abx@version\space biblatex localization (PK/MW)} @@ -53,6 +53,39 @@ \endinput} +% generalised keyval interface +% define a new key (possibly with a default value) +% {<family>}{<key>}[<default>]{<code>} +\providerobustcmd*{\blx@kv@defkey}{\define@key} + +% globally define new key (should only be the last resort) +% {<family>}{<key>}[<default>]{<code>} +\providerobustcmd*{\blx@kv@gdefkey}[2]{% + \@ifnextchar[% + {\blx@kv@gdefkey@default{#1}{#2}} + {\blx@kv@gdefkey@nodefault{#1}{#2}}} + +\ifundef\blx@kv@gdefkey@nodefault + {\protected\def\blx@kv@gdefkey@nodefault#1#2{\csgdef{KV@#1@#2}##1}} + {} +\ifundef\blx@kv@gdefkey@default + {\protected\def\blx@kv@gdefkey@default#1#2[#3]{% + \csgdef{KV@#1@#2@default}{\csuse{KV@#1@#2}{#3}}% + \csgdef{KV@#1@#2}##1}} + {} + +% test if key is undefined +% {<family>}{<key>}{<true>}{<false>} +\providecommand*{\blx@kv@ifkeyundef}[2]{% + \ifcsundef{KV@#1@#2}} + +% undefine key +% {<family>}{<key>} +\providerobustcmd*{\blx@kv@undef}[2]{\csundef{KV@#1@#2}} + +% {<family>}{<key-vals>} +\providerobustcmd*{\blx@kv@setkeys}{\setkeys} + %% Category codes \def\blx@docatcodes{% @@ -180,12 +213,12 @@ {'polyglossia' loaded after biblatex} {'polyglossia' must be loaded before biblatex}} {}% - \@ifpackagelater{polyglossia}{2019/10/27} + \@ifpackagelater{polyglossia}{2020/04/08} {} {\blx@warning@noline - {biblatex works best with 'polyglossia' 1.45\MessageBreak + {biblatex works best with 'polyglossia' 1.49\MessageBreak or above.\MessageBreak - Please update 'polyglossia' to v1.45 (2019/10/27)\MessageBreak + Please update 'polyglossia' to v1.49 (2020/04/08)\MessageBreak or later.\MessageBreak Variant detection will not work properly with\MessageBreak older versions}}} @@ -361,11 +394,19 @@ {}} {}} {}% - \apptocmd\@floatboxreset - {\boolfalse{citetracker}% - \boolfalse{pagetracker}} + \iftoggle{blx@trackfloats} {} - {\blx@err@patch{floats}}% + {\apptocmd\@floatboxreset + {\boolfalse{citetracker}% + \boolfalse{pagetracker}} + {} + {\blx@err@patch{floats}}}% + \iftoggle{blx@backreffloats} + {} + {\apptocmd\@floatboxreset + {\boolfalse{backtracker}} + {} + {\blx@err@patch{floats}}}% \ifdef\TX@endtabularx % tabularx/memoir {\pretocmd\TX@endtabularx {\addtocounter{tabx@nest}{1}}% track nested tabularx environments @@ -501,8 +542,13 @@ \iftoggle{blx@autolangcite} {\let\blx@beglangcite\blx@beglang} {}% + % babel/polyglossia has loaded the (main document) language already, + % so we need to explicitly enable our captions (abx@strings@) + % and extras (abx@extras@) now + \toggletrue{blx@lang@captions@\blx@languagename}% \csuse{abx@extras@\blx@languagename}% \csuse{abx@strings@\blx@languagename}% + % avoid accidental re-initialization \undef\blx@mkautolangbabel \undef\blx@mkautolangpoly \undef\blx@mknoautolang @@ -515,26 +561,35 @@ {}% } +% our copy of \addtocontents with \immediate (not @protected, +% so a bit different, but we are only going to use it for very +% specific input, so that doesn't matter) +\def\blx@immediate@addtocontents#1#2{% + \blx@auxwrite\@auxout + {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}% + {\string\@writefile{#1}{#2}}} -\begingroup -\@makeother\# -% \relax: gobble newline -> titletoc.sty -\AtEndPreamble{% - \addtocontents{toc}{% +\AtBeginDocument{% + \blx@immediate@addtocontents{toc}{% \boolfalse{citerequest}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \boolfalse{backtracker}\relax}% - \addtocontents{lof}{% + \blx@immediate@addtocontents{lof}{% \boolfalse{citerequest}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \boolfalse{backtracker}\relax}% - \addtocontents{lot}{% + \blx@immediate@addtocontents{lot}{% \boolfalse{citerequest}% \boolfalse{citetracker}% \boolfalse{pagetracker}% - \boolfalse{backtracker}\relax}% + \boolfalse{backtracker}\relax}} + +\begingroup +\@makeother\# +% \relax: gobble newline -> titletoc.sty +\AtEndPreamble{% \patchcmd\addtocontents {\string\@writefile} {\string\@writefile{#1}{\defcounter{refsection}{\the\c@refsection}\relax}% @@ -543,6 +598,7 @@ {\blx@err@patch{\string\addtocontents}}} \endgroup + % trick hyperref into believing we're natbib \let\NAT@parse\@empty % trick showkeys into believing we're havard @@ -576,10 +632,52 @@ \ifundef\pdf@mdfivesum {\let\blx@mdfivesum\@firstofone \blx@warning@noline{Command '\string\pdf@mdfivesum' undefined.\MessageBreak - 'labelprefix' may not be able to accept all input}} + 'labelprefix' may not be able to accept all input.\MessageBreak + The command is available (via 'pdftexcmds')\MessageBreak + in recent versions of pdfTeX, LuaTeX and XeTeX}} {\let\blx@mdfivesum\pdf@mdfivesum} +\ifundef\pdf@filemdfivesum + {\blx@warning@noline{Command '\string\pdf@filemdfivesum' undefined.\MessageBreak + Biber rerun detection may not work as expected.\MessageBreak + The command is available (via 'pdftexcmds')\MessageBreak + in recent versions of pdfTeX, LuaTeX and XeTeX}% + \let\blx@generate@bbl@mdfivesum@found\relax + \let\blx@generate@bbl@mdfivesum@notfound\relax + \let\blx@aux@read@bbl@mdfivesum\@gobble + \let\blx@aux@write@bbl@mdfivesum\relax + \let\blx@check@bbl@rerun@mdfivesum\relax} + {\let\blx@filemdfivesum\pdf@filemdfivesum + + \def\blx@generate@bbl@mdfivesum@found{% + \xdef\blx@bbl@mdfivesum@new{\blx@filemdfivesum{\jobname.bbl}}} + + \def\blx@generate@bbl@mdfivesum@notfound{% + \gdef\blx@bbl@mdfivesum@new{nobblfile}} + + \def\blx@aux@read@bbl@mdfivesum{% + \gdef\blx@bbl@mdfivesum@old} + + % If we need Biber to rerun, save the hash of the current .bbl. + % That way we can detect if the Biber rerun really happened when + % we run LaTeX the next time. + \def\blx@aux@write@bbl@mdfivesum{% + \iftoggle{blx@runbiber} + {\blx@auxwrite\@mainaux{}{% + \string\blx@aux@read@bbl@mdfivesum{\blx@bbl@mdfivesum@new}}} + {}} + + % There was a Biber rerun request last time (\blx@bbl@mdfivesum@old), + % yet the bbl files are the same (as far as md5 hashes are concerned), + % that means *no* Biber rerun happened. + % So we need to re-request a rerun. + \def\blx@check@bbl@rerun@mdfivesum{% + \ifdefstrequal\blx@bbl@mdfivesum@old\blx@bbl@mdfivesum@new + {\blx@logreq@active{}} + {}}} + + % xstring replacements % reverse a given string @@ -712,6 +810,7 @@ \newcount\blx@parenlevel@foot \expandafter\newcount\csname blx@sectionciteorder@0\endcsname \newcount\blx@entrysetcounter +\newcount\blx@biblioinstance \def\blx@uniquename{false} \def\blx@uniquelist{false} @@ -1087,10 +1186,15 @@ {\blx@info@noline{Trying to load #2..}% \IfFileExists{#1} {\blx@info@noline{... file '#1' found}% - #3\@@input\@filef@und#4#5% + \csuse{blx@filehook@preload@#1}% + #3\@@input\@filef@und#4% + \csuse{blx@filehook@postload@#1}% + #5% \listxadd\blx@list@req@stat{#1}% \@addtofilelist{#1}} - {\blx@info@noline{... file '#1' not found}#6}% + {\blx@info@noline{... file '#1' not found}% + \csuse{blx@filehook@failure@#1}% + #6}% \global\cslet{blx@file@#1}\@empty} {#5}} @@ -1151,21 +1255,23 @@ \detokenize{" xmlns:bcf="https://sourceforge.net/projects/biblatex">}} % {<true>}{<false>} -\newrobustcmd*{\lbx@ifutfinput}{\ifboolexpr{% - test {\ifdefstring\inputencodingname{utf8}} - or - test {\ifdefstring\inputencodingname{utf8x}} - or - test {\ifdefstring\inputencodingname{lutf8}} - or - ( test {\ifundef\inputencodingname} - and - ( not test {\ifundef\XeTeXrevision} - or - not test {\ifundef\luatexversion} +\newrobustcmd*{\lbx@ifutfinput}{% + \ifboolexpr{% + test {\ifdefstring\inputencodingname{utf8}} + or + test {\ifdefstring\inputencodingname{utf8x}} + or + test {\ifdefstring\inputencodingname{lutf8}} + or + ( test {\ifundef\inputencodingname} + and + ( not test {\ifundef\XeTeXrevision} + or + not test {\ifundef\luatexversion} + ) ) - ) -}} + }% +} %% More user feedback \protected\def\blx@warning@entry#1{% @@ -1320,7 +1426,7 @@ \protected\def\blx@warn@nostring#1{% \blx@warning@entry{Bibliography string '#1' - \ifcsundef{KV@blx@lbx@#1}{undefined}{untranslated}}% + \blx@kv@ifkeyundef{blx@lbx}{#1}{undefined}{untranslated}}% \abx@missing{#1}} \def\blx@warn@conflopt#1{% @@ -1459,6 +1565,7 @@ \global\toggletrue{blx@runbiber}% \global\let\blx@rerun@biber\relax} + \let\blx@checksum@old\@empty \let\blx@checksum@new\@empty \let\blx@pagesum@old\@empty @@ -1511,14 +1618,10 @@ \endgroup} \def\blx@warn@auxlist{% - \begingroup - \edef\blx@tempa{% - Please (re)run Biber on the file:\MessageBreak - \jobname}% \blx@warning@noline{% - \blx@tempa\MessageBreak - and rerun LaTeX afterwards}% - \endgroup} + Please (re)run Biber on the file:\MessageBreak + \jobname\MessageBreak + and rerun LaTeX afterwards}} \AfterEndDocument{% \blx@check@rerun @@ -1603,6 +1706,12 @@ \sfcode`\?=3002 } +\def\abx@dosingleaccents{% + \do\"\do\'\do\`\do\^\do\~\do\=\do\.% + \do\H\do\b\do\c\do\d\do\r\do\u\do\v} +\def\abx@dodoubleaccents{% + \do\t} + % Defining characters that count as prefices in names like d'Argent % Code from moewe \let\blx@prefchars\@empty @@ -1909,7 +2018,7 @@ \newrobustcmd*{\autocap}[1]{#1} \protected\def\blx@imc@autocap{% - \blx@imc@ifcapital\MakeUppercase\@firstofone} + \blx@imc@ifcapital\MakeCapital\@firstofone} \protected\def\blx@imc@nopunct{% \leavevmode\spacefactor\blx@sf@nopunct} @@ -2055,8 +2164,15 @@ \providerobustcmd*{\nohyphenation}{% \language\blx@langwohyphens} -\providerobustcmd*{\textnohyphenation}[1]{% - \bgroup\nohyphenation#1\egroup} +% work around odd XeTeX/babel-french behaviour +% https://github.com/plk/biblatex/issues/979 +% fix by Ulrike Fischer +% https://tex.stackexchange.com/a/544914/ +\ifundef\XeTeXrevision + {\providerobustcmd*{\textnohyphenation}[1]{% + \bgroup\nohyphenation#1\egroup}} + {\providerobustcmd*{\textnohyphenation}[1]{% + \bgroup\nohyphenation#1\egroup^^^^200b}} \blx@regimcs{% \setpunctfont \resetpunctfont \ifcapital \autocap \ifpunctmark @@ -2447,17 +2563,26 @@ {\@secondoftwo} {\ifcsundef{abx@name@#2} {\@secondoftwo} - {\blx@ifnamesequal{#1}{#2}}}} + {\blx@ifnamesequalcscs{abx@name@#1}{abx@name@#2}}}} + +\def\blx@ifnamesequalcscs#1#2{% + \expandafter\expandafter\expandafter\blx@ifnamesequaldefdef + \expandafter\expandafter\expandafter{% + \expandafter\csname\expandafter #1\expandafter\endcsname + \expandafter}% + \expandafter{\csname #2\endcsname}} -\def\blx@ifnamesequal#1#2{% +\def\blx@ifnamesequalcsdef#1#2{% + \expandafter\blx@ifnamesequaldefdef\expandafter{% + \csname #1\endcsname}{#2}} + +\def\blx@ifnamesequaldefdef#1#2{% \begingroup \let\blx@tempa\@empty - \expandafter\expandafter - \expandafter\blx@ifnamesequal@i\csname abx@name@#2\endcsname + \expandafter\blx@ifnamesequal@i#2% \let\blx@tempb\blx@tempa \let\blx@tempa\@empty - \expandafter\expandafter - \expandafter\blx@ifnamesequal@i\csname abx@name@#1\endcsname + \expandafter\blx@ifnamesequal@i#1% \expandafter\endgroup \ifx\blx@tempa\blx@tempb \expandafter\@firstoftwo @@ -2477,47 +2602,39 @@ % These explicit nameparts are alright as they are for bibtex only % biber names will always have a hash generated from all nameparts in datamodel \def\blx@ifnamesequal@iii#1#2{% - \setkeys{blx@opt@name}{#1}% - \setkeys{blx@opt@namepart}{#2}% + \blx@kv@setkeys{blx@opt@name}{#1}% + \blx@kv@setkeys{blx@opt@namepart}{#2}% \ifdef\abx@field@hash {\eappto\blx@tempa{{\abx@field@hash}}} {\eappto\blx@tempa{{{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}}}} -% {<field>}{<macro>}{<true>}{<false>} -\def\blx@imc@iffieldequals#1#2{% - \blx@imc@iffieldundef{#1} +% {<csname>}{<def>}{<true>}{<false>} +\newcommand*{\blx@ifcsdefequal}[2]{% + \ifcsundef{#1} {\@secondoftwo} {\ifundef#2% {\@secondoftwo} - {\expandafter\ifx\csname abx@field@#1\endcsname#2% + {\expandafter\ifx\csname#1\endcsname#2% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi}}} +% {<field>}{<macro>}{<true>}{<false>} +\def\blx@imc@iffieldequals#1#2{% + \blx@ifcsdefequal{abx@field@#1}{#2}} + % {<plainlist>}{<macro>}{<true>}{<false>} \def\blx@imc@iflistequals#1#2{% - \blx@imc@iflistundef{#1} - {\@secondoftwo} - {\ifundef#2% - {\@secondoftwo} - {\expandafter\ifx\csname abx@list@#1\endcsname#2% - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi}}} + \blx@ifcsdefequal{abx@list@#1}{#2}} % {<namelist>}{<macro>}{<true>}{<false>} -\def\blx@imc@ifnameequals#1#2{% FIXME +\def\blx@imc@ifnameequals#1#2{% \blx@imc@ifnameundef{#1} {\@secondoftwo} {\ifundef#2% {\@secondoftwo} - {\expandafter\ifx\csname abx@name@#1\endcsname#2% - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi}}} + {\blx@ifnamesequalcsdef{abx@name@#1}{#2}}}} % {<field>}{<csname>}{<true>}{<false>} \def\blx@imc@iffieldequalcs#1{% @@ -2528,8 +2645,12 @@ \ifcsequal{abx@list@#1}} % {<namelist>}{<csname>}{<true>}{<false>} -\def\blx@imc@ifnameequalcs#1{% FIXME - \ifcsequal{abx@name@#1}} +\def\blx@imc@ifnameequalcs#1#2{% + \blx@imc@ifnameundef{#1} + {\@secondoftwo} + {\ifcsundef{#2} + {\@secondoftwo} + {\blx@ifnamesequalcscs{abx@name@#1}{#2}}}} % {<field>}{<string>}{<true>}{<false>} \protected\long\def\blx@imc@iffieldequalstr#1#2{% @@ -2671,17 +2792,25 @@ \expandafter\@secondoftwo \fi}}} + % {<true>}{<false>} +%\def\blx@imc@iffirstcitekey{% +% \ifboolexpr{ ( test {\ifnumequal\c@multicitetotal\z@} +% and test {\ifnumequal\c@citecount\@ne} ) +% or ( test {\ifnumgreater\c@multicitetotal\z@} +% and test {\ifnumequal\c@multicitecount\@ne} +% and test {\ifnumequal\c@citecount\@ne} ) }} \def\blx@imc@iffirstcitekey{% - \ifboolexpr{ ( test {\ifnumequal\c@multicitetotal\z@} - and test {\ifnumequal\c@citecount\@ne} ) - or ( test {\ifnumgreater\c@multicitetotal\z@} - and test {\ifnumequal\c@multicitecount\@ne} - and test {\ifnumequal\c@citecount\@ne} ) }} + \ifnumequal\c@citecount\@ne + {\ifnumequal\c@multicitetotal\z@ + {\@firstoftwo} + {\ifnumequal\c@multicitecount\@ne}} + {\@secondoftwo}} \def\blx@imc@iflastcitekey{% - \ifboolexpr{ test {\ifnumequal\c@citecount\c@citetotal} - and test {\ifnumequal\c@multicitecount\c@multicitetotal} }} + \ifnumequal\c@citecount\c@citetotal + {\ifnumequal\c@multicitecount\c@multicitetotal} + {\@secondoftwo}} % {<category>}{<true>}{<false>} \protected\def\blx@imc@ifcategory{% @@ -2970,7 +3099,7 @@ \begingroup \def\do##1{\uccode`##1=`\%}% \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9% - \makeatletter + \catcode`\@=11 \catcode`\%=9 \endlinechar\m@ne \uppercase{\scantokens{\def\blx@tempa{#1}}}% @@ -3007,7 +3136,7 @@ \ifx\blx@tempa\@empty \aftergroup\@secondoftwo \else - \makeatletter + \catcode`\@=11 \catcode`\%=9 \endlinechar\m@ne \everyeof{\noexpand}#1% @@ -3157,6 +3286,12 @@ \newrobustcmd*{\NumCheckSetup}{\appto\blx@hook@ifnum} \newcommand*{\NumcheckSetup}{\NumCheckSetup} +\newrobustcmd*{\NumsCheckSetup}{\appto\blx@hook@ifnums} + +\newrobustcmd*{\PagesCheckSetup}{\appto\blx@hook@ifpages} + +\PagesCheckSetup{\let\pnfmt\@firstofone} + % [<pagination>][<postpro>]{<string>} \newrobustcmd*{\blx@imc@mkpageprefix}[1][pagination]{% \begingroup @@ -3180,7 +3315,7 @@ {\bibstring{#1s}\ppspace} {\def\pno{\bibstring{#1}}% \def\ppno{\bibstring{#1s}}}}% - \blx@mkpageprefix@i[#2]{#3}} + \blx@mkpageprefix@i[{#2}]{#3}} \long\def\blx@mkpageprefix@i[#1]#2{#1{#2}\endgroup} @@ -3243,7 +3378,7 @@ \@ifnextchar[{\blx@range@aux@i#1}{#1[\@firstofone][\@firstofone]}} \def\blx@range@aux@i#1[#2]{% - \@ifnextchar[{#1[#2]}{#1[#2][\@firstofone]}} + \@ifnextchar[{#1[{#2}]}{#1[{#2}][\@firstofone]}} \def\blx@normrange@i[#1][#2]#3{% \let\blx@tempa\@empty @@ -3301,9 +3436,9 @@ % Unicode en-dashes are supported in blx-unicode.def \def\blx@genrange@split#1{% - \edef\blx@normrange@abort{% + \protected@edef\blx@normrange@abort{% \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}}}% + \blx@range@out@item@process{\unexpanded{#1}}}}% \blx@imc@ifpages{#1} {\blx@normrange@range#1\bibrangedash\bibrangedash&} {\blx@normrange@abort}} @@ -3313,17 +3448,17 @@ {\blx@normrange@hyphen#1--&} {\ifblank{#2} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}% + \blx@range@out@item@process{\unexpanded{#1}}% \noexpand\bibrangedash}}% \blx@tempc} {\ifblank{#1} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{% + \blx@range@out@item@process{% \unexpanded{#2}}}}% \blx@tempc} {\blx@range@process{#1}{#2}}}}} @@ -3338,10 +3473,10 @@ \blx@normrange@hyphen@i#3&} {\ifblank{#1} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{% + \blx@range@out@item@process{% \unexpanded{#2}}}}% \blx@tempc} {\blx@range@process{#1}{#2}}}}} @@ -3349,18 +3484,18 @@ \def\blx@normrange@hyphen@i#1-#2&{% \ifblank{#1#2} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\expandonce\blx@tempb}% + \blx@range@out@item@process{\expandonce\blx@tempb}% \noexpand\bibrangedash}}% \blx@tempc} {\notblank{#1} {\ifdefempty\blx@tempb {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{% + \blx@range@out@item@process{% \unexpanded{#1}}}}% \blx@tempc} {\expandafter\blx@range@process @@ -3369,11 +3504,11 @@ \def\blx@normrange@process#1#2{% \begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}% + \blx@range@out@item@process{\unexpanded{#1}}% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{\unexpanded{#2}}}}% + \blx@range@out@item@process{\unexpanded{#2}}}}% \blx@tempc} % <*>[<postpro>]{<string>} @@ -3414,11 +3549,11 @@ {\@secondoftwo} {\blx@comprange@comp{#1}{#2}} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}% + \blx@range@out@item@process{\unexpanded{#1}}% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{\unexpanded{#2}}}}% + \blx@range@out@item@process{\unexpanded{#2}}}}% \blx@tempc}} \def\blx@comprange@comp#1#2{% @@ -3450,11 +3585,11 @@ \numdef\blx@tempc\blx@tempd \fi \begingroup - \edef\blx@tempb{\endgroup + \protected@edef\blx@tempb{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\blx@tempb}% + \blx@range@out@item@process{\blx@tempb}% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{\blx@tempc}}}% + \blx@range@out@item@process{\blx@tempc}}}% \blx@tempb} \def\blx@comprange@comp@div{% @@ -3508,9 +3643,9 @@ % Unicode en-dashes are supported in blx-unicode.def \def\blx@firstpage@split#1{% - \edef\blx@firstpage@abort{% + \protected@edef\blx@firstpage@abort{% \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}}}% + \blx@range@out@item@process{\unexpanded{#1}}}}% \blx@firstpage@range#1\bibrangedash\bibrangedash&} \def\blx@firstpage@range#1\bibrangedash#2\bibrangedash#3&{% @@ -3518,15 +3653,15 @@ {\blx@firstpage@hyphen#1--&} {\ifblank{#1} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{\unexpanded{#2}}}}% + \blx@range@out@item@process{\unexpanded{#2}}}}% \blx@tempc} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}}}% + \blx@range@out@item@process{\unexpanded{#1}}}}% \blx@tempc}}} \def\blx@firstpage@hyphen#1-#2-#3&{% @@ -3536,16 +3671,16 @@ {\ifblank{#2} {\blx@firstpage@hyphen@i#3&} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{% + \blx@range@out@item@process{% \unexpanded{#2}}}}% \blx@tempc}} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}}}% + \blx@range@out@item@process{\unexpanded{#1}}}}% \blx@tempc}}} \def\blx@firstpage@hyphen@i#1-#2&{% @@ -3554,10 +3689,10 @@ {\blx@firstpage@abort} {\blx@firstpage@hyphen@i#2&}} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{% + \blx@range@out@item@process{% \unexpanded{#1}}}}% \blx@tempc}} @@ -3597,7 +3732,7 @@ \blx@cleardelim{#2}% \ifblank{#1} {\blx@declaredelim{#2}{#3}} - {\blx@declaredelim[#1]{#2}{#3}}} + {\blx@declaredelim[{#1}]{#2}{#3}}} \newrobustcmd*{\blx@declaredelim}[3][]{% \ifblank{#1} @@ -3615,13 +3750,71 @@ \csdef{#1##1}{#4}}% \forcsvlist{\do@i}{#3}} -% *[<alias context, ...>]{<alias>}[<delim context>]{<delim>} +% [<alias context, ...>]{<alias>}[<delim context>]{<delim>} +% deprecated: *[<alias context, ...>]{<alias>}[<delim context>]{<delim>} +% the starred version is only implemented for backwards compatibility +% the only difference is that a missing first argument +% implies the global/empty context \newrobustcmd*{\DeclareDelimAlias}{% \@ifstar - {\blx@declaredelimalias@expl} - {\blx@declaredelimalias@auto}} + {\blx@declaredelimalias@s} + {\blx@declaredelimalias@a}} -\newrobustcmd*{\blx@declaredelimalias@auto}[2]{% +\def\blx@declaredelimalias@s{% + \blx@warning{% + The starred command '\string\DeclareDelimAlias*' is\MessageBreak + deprecated.% + \MessageBreak + Use the unstarred version '\string\DeclareDelimAlias'\MessageBreak + instead}% + \@ifnextchar[%] + {\blx@declaredelimalias@om} + {\blx@declaredelimalias@om[]}} + +\def\blx@declaredelimalias@a{% + \@ifnextchar[%] + {\blx@declaredelimalias@om} + {\blx@declaredelimalias@m}} + +\def\blx@declaredelimalias@m#1{% + \@ifnextchar[%] + {\blx@declaredelimalias@mom{#1}} + {\blx@declaredelimalias@mm{#1}}} + +\def\blx@declaredelimalias@mm{% + \blx@declaredelimalias@auto} + +\def\blx@declaredelimalias@mom{% + \blx@declaredelimalias@omom[]} + +\def\blx@declaredelimalias@om[#1]#2{% + \@ifnextchar[%] + {\blx@declaredelimalias@omom[{#1}]{#2}} + {\blx@declaredelimalias@omm[{#1}]{#2}}} + +% hrmpf ... remember that \docsvlist doesn't do anthing for empty +% lists/list items +\def\blx@declaredelimalias@omom[#1]#2[#3]#4{% + \ifstrequal{#1}{*} + {\ifstrequal{#3}{*} + {\blx@declaredelimalias@auto{#2}{#4}} + {\blx@cleardelim{#1}% + \blx@declaredelimalias@manual{}{#2}{#3}{#4}}} + {\def\do##1{\blx@declaredelimalias@manual{##1}{#2}{#3}{#4}}% + \ifblank{#1} + {\do{}} + {\docsvlist{#1}}}} + +\def\blx@declaredelimalias@omm[#1]#2#3{% + \ifstrequal{#1}{*} + {\blx@declaredelimalias@auto{#2}{#3}} + {\def\do##1{\blx@declaredelimalias@manual{##1}{#2}{##1}{#3}}% + \ifblank{#1} + {\do{}} + {\docsvlist{#1}}}} + +% {<alias>}{<source>} +\def\blx@declaredelimalias@auto#1#2{% \blx@cleardelim{#1}% \blx@declaredelimalias@def{}{#1}{}{#2}% \ifcsvoid{blx@declaredelimcontexts@#2} @@ -3631,37 +3824,15 @@ {blx@printdelim@##1@}{#1}{blx@printdelim@##1@}{#2}}% \dolistcsloop{blx@declaredelimcontexts@#2}}} -\def\blx@declaredelimalias@expl{% - \@ifnextchar[%] - {\blx@declaredelimalias@expl@i} - {\blx@declaredelimalias@expl@i[]}} - -\def\blx@declaredelimalias@expl@i[#1]#2{% - \@ifnextchar[%] - {\blx@declaredelimalias@expl@iii{#1}{#2}} - {\blx@declaredelimalias@expl@ii{#1}{#2}}} - -\def\blx@declaredelimalias@expl@ii#1#2#3{% - \ifblank{#1} - {\blx@declaredelimalias@def{}{#2}{}{#3}} - {\def\do##1{% - \blx@declaredelimalias@def - {blx@printdelim@##1@}{#2}{blx@printdelim@##1@}{#3}}% - \docsvlist{#1}}} - -\def\blx@declaredelimalias@expl@iii#1#2[#3]#4{% +% {<alias context>}{<alias>}{<source context>}{<source>} +\def\blx@declaredelimalias@manual#1#2#3#4{% \ifblank{#1} {\ifblank{#3} {\blx@declaredelimalias@def{}{#2}{}{#4}} {\blx@declaredelimalias@def{}{#2}{blx@printdelim@#3@}{#4}}} {\ifblank{#3} - {\def\do##1{% - \blx@declaredelimalias@def - {blx@printdelim@##1@}{#2}{}{#4}}} - {\def\do##1{% - \blx@declaredelimalias@def - {blx@printdelim@##1@}{#2}{blx@printdelim@#3@}{#4}}}% - \docsvlist{#1}}} + {\blx@declaredelimalias@def{blx@printdelim@#1@}{#2}{}{#4}}} + {\blx@declaredelimalias@def{blx@printdelim@#1@}{#2}{blx@printdelim@#3@}{#4}}} \def\blx@declaredelimalias@def#1#2#3#4{% \ifcsdef{#1#2} @@ -3707,6 +3878,7 @@ \blx@regimcs{\UseUsedriverHook} \AtUsedriver{% + \delimcontext{bib}% \let\finentry\blx@finentry@usedrv \let\newblock\relax \let\abx@macro@bibindex\@empty @@ -3715,7 +3887,6 @@ % {<init>}{<entrytype>} \protected\def\blx@imc@usedriver#1#2{% \begingroup - \delimcontext{bib}% \csuse{blx@hook@usedriver}% \csuse{blx@hook@bbxinit}#1% \blx@beglangbib @@ -3830,37 +4001,75 @@ \def\ifentrycategory{\blx@imc@ifentrycategory} \def\ifentrykeyword{\blx@imc@ifentrykeyword} + \def\blx@imc@iflabeldateisdate{% - \ifboolexpr{% - togl {blx@labeldateparts} - and not test {\iffieldundef{labeldatesource}} - and - (test {\iffieldequalstr{labeldatesource}{}} - or test {\iffieldequalstr{labeldatesource}{year}})}} + \iftoggle{blx@labeldateparts} + {\iffieldundef{labeldatesource} + {\@secondoftwo} + {\iffieldequalstr{labeldatesource}{} + {\@firstoftwo} + {\iffieldequalstr{labeldatesource}{year}}}} + {\@secondoftwo}} + \def\blx@imc@ifdatehasyearonlyprecision#1{% - \ifboolexpr{not test {\iffieldundef{#1year}} - and (test {\ifcsstring{blx@dateformat@#1date}{year}} - or (test {\iffieldundef{#1month}} - and test {\iffieldundef{#1season}}))}} + \iffieldundef{#1year} + {\@secondoftwo} + {\ifcsstring{blx@dateformat@#1date}{year} + {\@firstoftwo} + {\iffieldundef{#1month} + {\iffieldundef{#1season}} + {\@secondoftwo}}}} \def\blx@imc@ifdatehastime#1{% - \ifboolexpr{togl {blx@#1dateusetime} - and not test {\iffieldundef{#1hour}}}} + \iftoggle{blx@#1dateusetime} + {\iffieldundef{#1hour} + {\@secondoftwo} + {\@firstoftwo}} + {\@secondoftwo}} \def\blx@imc@ifdateshavedifferentprecision#1#2{% - \ifboolexpr{ (test {\ifdatehasyearonlyprecision{#1}} + \ifboolexpr{ ( test {\ifdatehasyearonlyprecision{#1}} and not test {\ifdatehasyearonlyprecision{#2}}) - or (not test {\ifdatehasyearonlyprecision{#1}} - and test {\ifdatehasyearonlyprecision{#2}}) - or (test {\ifdatehastime{#1}} + or ( not test {\ifdatehasyearonlyprecision{#1}} + and test {\ifdatehasyearonlyprecision{#2}}) + or ( test {\ifdatehastime{#1}} and not test {\ifdatehastime{#2}}) - or (not test {\ifdatehastime{#1}} - and test {\ifdatehastime{#2}})}} + or ( not test {\ifdatehastime{#1}} + and test {\ifdatehastime{#2}})}} \def\blx@imc@ifdateyearsequal#1#2{% - \ifboolexpr{ test {\iffieldsequal{#1year}{#2year}} - and test {\iffieldsequal{#1dateera}{#2dateera}}}} + \iffieldsequal{#1year}{#2year} + {\iffieldundef{#1dateera} + {\iffieldundef{#2dateera}} + {\iffieldsequal{#1dateera}{#2dateera}}} + {\@secondoftwo}} + +\def\blx@reconstruct@comparabledate#1{% + \thefield{#1year}-\thefield{#1month}(\thefield{#1season})-% + \thefield{#1day}T% + \thefield{#1hour}:\thefield{#1minute}:\thefield{#1second}Z% + \thefield{#1timezone}//% + e\thefield{#1dateera}E% + c\csuse{if#1datecirca}{T}{F}% + j\csuse{if#1datejulian}{T}{F}% + r\csuse{if#1dateuncertain}{T}{F}% + k\csuse{if#1dateunknown}{T}{F}% +} + +\def\blx@imc@ifdatesequal#1#2{% + \begingroup + \edef\blx@tempa{\blx@reconstruct@comparabledate{#1}}% + \edef\blx@tempb{\blx@reconstruct@comparabledate{#2}}% + \edef\blx@tempc{\endgroup + \ifstrequal{\blx@tempa}{\blx@tempb}}% + \blx@tempc +} + +\def\blx@imc@ifdaterangesequal#1#2{% + \blx@imc@ifdatesequal{#1}{#2} + {\blx@imc@ifdatesequal{#1end}{#2end}} + {\@secondoftwo}} \blx@regimcs{% \ifdriver \thefield \strfield \csfield \usefield \thelist \strlist @@ -3881,7 +4090,7 @@ \iffieldint \iffieldnum \iffieldnums \iffieldpages \iflabeldateisdate \ifdatehasyearonlyprecision \ifdatehastime \ifdateshavedifferentprecision - \ifdateyearsequal + \ifdateyearsequal \ifdatesequal \ifdaterangesequal \mkpageprefix \mkpagetotal \newblock \newunit \setunit \printunit \finentry} @@ -3927,279 +4136,6 @@ %% Global formatting hooks -% capitalization - -% {<text>} -\newrobustcmd{\MakeCapital}[1]{% - \begingroup - \blx@mkcp@init - \protected@edef\blx@tempa{#1}% - \expandafter\blx@mkcp@parse\blx@tempa\@empty\blx@mkcp@end} - -\def\blx@mkcp@init{% - \def\blx@mkcp@iec{\noexpand\blx@mkcp@iec\noexpand}% - \def\blx@mkcp@bbl{\noexpand\blx@mkcp@bbl\noexpand}% - \def\blx@mkcp@sgl{\noexpand\blx@mkcp@sgl\noexpand}% - \def\blx@mkcp@dbl{\noexpand\blx@mkcp@dbl\noexpand}% - \def\do##1{\def##1{\blx@mkcp@sgl##1}}\abx@dosingleaccents - \def\do##1{\def##1{\blx@mkcp@dbl##1}}\abx@dodoubleaccents - \def\IeC##1{\blx@mkcp@iec\IeC{##1}}% - \def\@tabacckludge##1{% - \expandafter\blx@mkcp@sgl\csname\string##1\endcsname}} - -\begingroup -\catcode`\"=\active -\gappto\blx@mkcp@init{% - \ifnum\catcode`\"=\active - \def"#1{\blx@mkcp@bbl"\noexpand#1}% - \fi} -\endgroup - -\def\blx@mkcp@parse{% - \futurelet\@let@token\blx@mkcp@eval} - -\long\def\blx@mkcp@eval{% - \ifx\@let@token\blx@mkcp@iec - \expandafter\blx@mkcp@getiec - \fi - \ifx\@let@token\blx@mkcp@bbl - \expandafter\blx@mkcp@gettwo - \fi - \ifx\@let@token\blx@mkcp@sgl - \expandafter\blx@mkcp@gettwo - \fi - \ifx\@let@token\blx@mkcp@dbl - \expandafter\blx@mkcp@getthree - \fi - \blx@mkcp@case} - -\def\blx@mkcp@getiec#1\blx@mkcp@case#2#3#4{% - \blx@mkcp@case{#2#3{#4}}} - -\def\blx@mkcp@gettwo#1\blx@mkcp@case#2#3#4{% - \blx@mkcp@case{#2#3#4}} - -\def\blx@mkcp@getthree#1\blx@mkcp@case#2#3#4#5{% - \blx@mkcp@case{#2#3#4#5}} - -\long\def\blx@mkcp@case#1{% - \begingroup - \def\i{I}\def\j{J}% - \def\do##1##2{\let##1##2\do}% - \expandafter\do\@uclclist\relax{\relax\@gobble}% - \uppercase{\protected@edef\blx@tempa{\endgroup\blx@mkcp@end#1}}% - \blx@tempa} - -\protected\long\def\blx@mkcp@end#1\blx@mkcp@end{% - \let\blx@mkcp@iec\noexpand - \let\blx@mkcp@bbl\noexpand - \let\blx@mkcp@sgl\noexpand - \let\blx@mkcp@dbl\noexpand - \protected@edef\blx@tempa{\endgroup#1}% - \blx@tempa} - -\def\abx@dosingleaccents{% - \do\"\do\'\do\`\do\^\do\~\do\=\do\.% - \do\H\do\b\do\c\do\d\do\r\do\u\do\v} -\def\abx@dodoubleaccents{% - \do\t} - -% {<text>} -\newrobustcmd*{\MakeSentenceCase}{% - \@ifstar\blx@mksc@i\blx@mksc@ii} - -% Check, in order: -% * explicit option language=<lang>, which overrides everything -% * langid field of entry -% * babel/polyglossia lang -% * main document lang -\def\blx@mksc@i{% - \ifdef\blx@forcelanguagename - {\xifinlist\blx@forcelanguagename\blx@cmksc@lang - {\blx@mksc@ii} - {\@firstofone}} - {\ifdef\abx@field@langid - {\xifinlist\abx@field@langid\blx@cmksc@lang - {\blx@mksc@ii} - {\@firstofone}} - {\ifdef\blx@main@language - {\xifinlist\blx@main@language\blx@cmksc@lang - {\blx@mksc@ii} - {\@firstofone}} - {\xifinlist\blx@languagename\blx@cmksc@lang - {\blx@mksc@ii} - {\@firstofone}}}}} - -\long\def\blx@mksc@ii#1{% - \begingroup - \let\blx@tempa\@empty - \let\blx@tempb\@empty - \blx@mksc@init - \protected@edef\@tempa{#1}% - \expandafter\blx@mksc@parse\@tempa\blx@mksc@end} - -\def\blx@mksc@init{% - \blx@mkcp@init - \def\blx@mkcp@nil{\noexpand\blx@mkcp@nil\noexpand}% - \def\i{\blx@mkcp@nil\i}\def\j{\blx@mkcp@nil\j}% - \def\do##1{% - \ifx##1\relax - \else - \def##1{\blx@mkcp@nil##1}% - \expandafter\do - \fi}% - \expandafter\do\@uclclist\relax} - -\def\blx@mksc@parse{% - \futurelet\@let@token\blx@mksc@eval} - -\def\blx@mksc@eval{% - \ifx\@let@token\blx@mksc@end - \expandafter\blx@mksc@end - \fi - \ifx\@let@token\bgroup - \expandafter\blx@mksc@group - \fi - \ifx\@let@token\@sptoken - \expandafter\blx@mksc@space - \fi - \ifx\@let@token\blx@mkcp@nil - \expandafter\blx@mksc@getone - \fi - \ifx\@let@token\blx@mkcp@iec - \expandafter\blx@mksc@getiec - \fi - \ifx\@let@token\blx@mkcp@bbl - \expandafter\blx@mksc@gettwo - \fi - \ifx\@let@token\blx@mkcp@sgl - \expandafter\blx@mksc@gettwo - \fi - \ifx\@let@token\blx@mkcp@dbl - \expandafter\blx@mksc@getthree - \fi - \if\noexpand\@let@token\relax - \expandafter\blx@mksc@cs - \fi - \blx@mksc@other} - -\def\blx@mksc@end#1\blx@mksc@end{% - \blx@mksc@eject - \let\blx@mkcp@nil\noexpand - \let\blx@mkcp@iec\noexpand - \let\blx@mkcp@bbl\noexpand - \let\blx@mkcp@sgl\noexpand - \let\blx@mkcp@dbl\noexpand - \let\MakeUppercase\relax - \let\MakeLowercase\relax - \protected@edef\blx@tempa{\endgroup\blx@tempa}% - \blx@tempa} - -\long\def\blx@mksc@group#1\blx@mksc@other#2{% - \futurelet\@let@token\blx@mksc@ingroup#2&{#2}% - \blx@mksc@endhead - \blx@mksc@parse} - -\long\def\blx@mksc@ingroup#1{% - \if\noexpand\@let@token\relax - \ifx\@let@token\blx@mkcp@sgl - \blx@mksc@nocase{{#2}}% - \else - \ifx\@let@token\blx@mkcp@dbl - \blx@mksc@nocase{{#2}}% - \else - \blx@mksc@locase{{#2}}% - \fi - \fi - \else - \blx@mksc@nocase{{#2}}% - \fi} - -\def\blx@mksc@space{\def\blx@mksc@space##1\blx@mksc@other} -\csuse{blx@mksc@space} {% - \blx@mksc@anycase{ }% - \blx@mksc@endhead - \blx@mksc@parse} - -\long\def\blx@mksc@cs#1\blx@mksc@other#2{% - \ifcat\noexpand~\noexpand#2% - \blx@mksc@locase{#2}% - \else - \blx@mksc@nocase{#2}% - \fi - \blx@mksc@endhead - \blx@mksc@parse} - -\def\blx@mksc@getiec#1\blx@mksc@other#2#3#4{% - \blx@mksc@other{#2#3{#4}}} - -\def\blx@mksc@getone#1\blx@mksc@other#2#3{% - \blx@mksc@other{#2#3}} - -\def\blx@mksc@gettwo#1\blx@mksc@other#2#3#4{% - \blx@mksc@other{#2#3#4}} - -\def\blx@mksc@getthree#1\blx@mksc@other#2#3#4#5{% - \blx@mksc@other{#2#3#4#5}} - -\long\def\blx@mksc@other#1{% - \blx@mksc@locase{#1}% - \blx@mksc@endhead - \blx@mksc@parse} - -\def\blx@mksc@locase{% - \appto\blx@tempb} - -\def\blx@mksc@nocase{% - \blx@mksc@eject - \appto\blx@tempa} - -\def\blx@mksc@anycase{% - \ifx\blx@tempb\@empty - \expandafter\appto - \expandafter\blx@tempa - \else - \expandafter\appto - \expandafter\blx@tempb - \fi} - -\def\blx@mksc@eject{% - \ifx\blx@tempb\@empty - \else - \eappto\blx@tempa{\noexpand\MakeLowercase{\expandonce\blx@tempb}}% - \let\blx@tempb\@empty - \fi} - -\def\blx@mksc@endhead{% - \ifx\blx@tempb\@empty - \else - \eappto\blx@tempa{\noexpand\MakeCapital{\expandonce\blx@tempb}}% - \let\blx@tempb\@empty - \fi - \let\blx@mksc@endhead\relax} - -% {<language,language,...>} -\newrobustcmd*{\DeclareCaseLangs}{% - \@ifstar - {\blx@defcaselangs} - {\global\let\blx@cmksc@lang\@empty - \blx@defcaselangs}} - -\def\blx@defcaselangs#1{% - \ifblank{#1} - {} - {\forcsvlist{\listgadd\blx@cmksc@lang}{#1}}} - -\DeclareCaseLangs{% - american,british,canadian, - english,USenglish,UKenglish, - australian,newzealand} - -\newrobustcmd*{\ifcaselang}[1][]{% - \ifblank{#1} - {\xifinlist\blx@languagename\blx@cmksc@lang} - {\xifinlist{#1}\blx@cmksc@lang}} - %% Main formatting commands % They work by creating a \let alias: % \abx@<class>@<entrytype>@<formatname> -> \blx@defformat@d @@ -4240,19 +4176,11 @@ \@ifstar {\blx@defformat\blx@defnameformat{nwd}*} {\blx@defformat\blx@defnameformat{nwd}{}}} -\newrobustcmd*{\DeclareIndexNameWrapperFormat}{% - \@ifstar - {\blx@defformat\blx@defnameformat{nxd}*} - {\blx@defformat\blx@defnameformat{nxd}{}}} \newrobustcmd*{\DeclareListWrapperFormat}{% \@ifstar {\blx@defformat\blx@defplainformat{lwd}*} {\blx@defformat\blx@defplainformat{lwd}{}}} -\newrobustcmd*{\DeclareIndexListWrapperFormat}{% - \@ifstar - {\blx@defformat\blx@defplainformat{lxd}*} - {\blx@defformat\blx@defplainformat{lxd}{}}} % {<macro>}{<class>}{<*>} \def\blx@defformat#1#2#3{% @@ -4260,8 +4188,8 @@ {\blx@defformat@i{#1}{#2}{#3}} {\blx@defformat@i{#1}{#2}{#3}[*]}} -% {<macro>}{<class>}{<*>}[<entrytype>]{<name>} -\def\blx@defformat@i#1#2#3[#4]#5{% +% {<macro>}{<class>}{<*>}[<entrytype>]{<name>}{<code>} +\def\blx@defformat@i#1#2#3[#4]#5#6{% \notblank{#3} {\blx@resetformat{#2}{#5}} {}% @@ -4269,7 +4197,7 @@ \def\blx@defformat@b{#4}% \blx@xsanitizeafter{\def\blx@defformat@c}{#5}% \afterassignment\blx@defformat@ii - #1} + #1{#6}} \def\blx@defformat@ii{% \expandafter\forcsvlist @@ -4366,10 +4294,8 @@ \newrobustcmd*{\DeclareIndexFieldAlias}{\blx@defalias{fid}} \newrobustcmd*{\DeclareNameWrapperAlias}{\blx@defalias{nwd}} -\newrobustcmd*{\DeclareIndexNameWrapperAlias}{\blx@defalias{nxd}} \newrobustcmd*{\DeclareListWrapperAlias}{\blx@defalias{lwd}} -\newrobustcmd*{\DeclareIndexListWrapperAlias}{\blx@defalias{lxd}} % #1: internal type signature, #2: type text for warning % #3 #4 #5 #6 @@ -4413,13 +4339,9 @@ \newrobustcmd*{\DeprecateNameWrapperFormatWithReplacement}{% \blx@deprecateformat{nwd}{Name wrapper format}} -\newrobustcmd*{\DeprecateIndexNameWrapperFormatWithReplacement}{% - \blx@deprecateformat{nxd}{Index name wrapper format}} \newrobustcmd*{\DeprecateListWrapperFormatWithReplacement}{% \blx@deprecateformat{lwd}{List wrapper format}} -\newrobustcmd*{\DeprecateIndexListWrapperFormatWithReplacement}{% - \blx@deprecateformat{lxd}{Index list wrapper format}} % [<format>]{<text>} \newrobustcmd{\blx@imc@printtext}[2][]{% @@ -4467,7 +4389,7 @@ \iftoggle{blx@loadfiles} {\IfFileExists{#2} {\listxadd\blx@list@req@edit{#2}% - \blx@imc@printtext[#1]{\input{#2}\unspace}} + \blx@imc@printtext[{#1}]{\input{#2}\unspace}} {\blx@nounit}} {\blx@nounit}} @@ -4547,17 +4469,17 @@ \c@uniquelist\z@ \ifblank{#1} {} - {\setkeys{blx@opt@namelist}{#1}}% + {\blx@kv@setkeys{blx@opt@namelist}{#1}}% \def\blx@thedata{#2}} % Biber-calculated info passed back to biblatex as an option in the .bbl % unlike stuff defined with \DeclareBiblatexOption and % \blx@DeclareBackendOption these are not 'real' options -\define@key{blx@opt@namelist}{ul}{\c@uniquelist#1\relax} +\blx@kv@defkey{blx@opt@namelist}{ul}{\c@uniquelist#1\relax} -\define@key{blx@opt@name}{un}{\c@uniquename#1\relax} -\define@key{blx@opt@name}{uniquepart}{\def\abx@field@uniquepart{#1}} -\define@key{blx@opt@name}{hash}{\edef\abx@field@hash{\detokenize{#1}}} +\blx@kv@defkey{blx@opt@name}{un}{\c@uniquename#1\relax} +\blx@kv@defkey{blx@opt@name}{uniquepart}{\def\abx@field@uniquepart{#1}} +\blx@kv@defkey{blx@opt@name}{hash}{\edef\abx@field@hash{\detokenize{#1}}} \newrobustcmd*{\bibinitperiod}{\adddot} @@ -4577,17 +4499,15 @@ \def\blx@indexnames#1#2#3#4{% \blx@imc@ifnameundef{#4} {} - {\blx@getformat\blx@thewrapperformat{nxd}{#1}{#4}% - \ifdefvoid\blx@thewrapperformat + {\blx@getformat\blx@theformat{nid}{#1}{#4}% + \ifdefvoid\blx@theformat {} - {\blx@getformat\blx@theformat{nid}{#1}{#4}% - \ifdefvoid\blx@theformat - {} - {\begingroup - \blx@namesetup{#2}{#3}{#4}% - \blx@indexnamesetup - \expandafter\blx@nameparser\blx@thedata{}&% - \endgroup}}}} + {\begingroup + \blx@namesetup{#2}{#3}{#4}% + \blx@indexnamesetup + \expandafter\blx@nameparser\blx@thedata{}&% + \endgroup}}} + \def\blx@indexnamesetup{% \let\bibinitperiod\bibindexinitperiod @@ -4618,13 +4538,13 @@ \begingroup \ifblank{#1} {} - {\setkeys{blx@opt@name}{#1}}% + {\blx@kv@setkeys{blx@opt@name}{#1}}% % reset all the nameparts to empty between names \def\do##1{% \cslet{namepart##1}\@empty \cslet{namepart##1i}\@empty}% \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}% - \setkeys{blx@opt@namepart}{#2}% Extract nameparts information + \blx@kv@setkeys{blx@opt@namepart}{#2}% Extract nameparts information % Still pass the nameparts forward for backwards compat % When \nameparts is finally removed, remove the "{2}" and remove the % arg to \blx@defformat@d in def of \blx@defnameformat @@ -4687,16 +4607,13 @@ \def\blx@indexlist#1#2#3#4{% \blx@imc@iflistundef{#4} {} - {\blx@getformat\blx@thewrapperformat{lxd}{#1}{#4}% - \ifdefvoid\blx@thewrapperformat + {\blx@getformat\blx@theformat{lid}{#1}{#4}% + \ifdefvoid\blx@theformat {} - {\blx@getformat\blx@theformat{lid}{#1}{#4}% - \ifdefvoid\blx@theformat - {} - {\begingroup - \blx@listsetup{#2}{#3}{#4}% - \expandafter\blx@listparser\blx@thedata{}&% - \endgroup}}}} + {\begingroup + \blx@listsetup{#2}{#3}{#4}% + \expandafter\blx@listparser\blx@thedata{}&% + \endgroup}}} % {<item1>}{<item2>}{...} \long\def\blx@listparser#1{% @@ -4797,6 +4714,20 @@ %% Localization +% {<wrapper>}{<long/short>}{<string>}{<print code>} +% <print code> is executed when the bibstring is defined +% it differs between the \bib...string versions +% in <print code> \blx@tempa should be used as <string> +\protected\def\blx@met@bibstring#1#2#3#4{% + \blx@begunit + \blx@hyphenreset + \blx@bibstringsimple + \lowercase{\edef\blx@tempa{#3}}% + \ifcsundef{#2@\blx@tempa} + {\blx@warn@nostring\blx@tempa + \blx@endnounit} + {#4}} + % [<wrapper>]{<string>} \newrobustcmd*{\blx@imc@bibstring}[2][\@firstofone]{% \blx@bibstring{#1}{\abx@str}{#2}} @@ -4818,19 +4749,28 @@ \let\bibsstring\blx@imc@bibsstring} \protected\def\blx@bibstring#1#2#3{% - \blx@begunit - \blx@hyphenreset - \blx@bibstringsimple - \lowercase{\edef\blx@tempa{#3}}% - \ifcsundef{#2@\blx@tempa} - {\blx@warn@nostring\blx@tempa - \blx@endnounit} + \blx@met@bibstring{#1}{#2}{#3} {\blx@imc@ifcapital {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}} {#1{\csuse{#2@\blx@tempa}}}% \blx@endunit}} % [<wrapper>]{<string>} +\newrobustcmd*{\blx@imc@bibncpstring}[2][\@firstofone]{% + \blx@bibncpstring{#1}{\abx@str}{#2}} + +\newrobustcmd*{\blx@imc@bibncplstring}[2][\@firstofone]{% + \blx@bibncpstring{#1}{abx@lstr}{#2}} + +\newrobustcmd*{\blx@imc@bibncpsstring}[2][\@firstofone]{% + \blx@bibncpstring{#1}{abx@sstr}{#2}} + +\protected\def\blx@bibncpstring#1#2#3{% + \blx@met@bibstring{#1}{#2}{#3} + {#1{\csuse{#2@\blx@tempa}}% + \blx@endunit}} + +% [<wrapper>]{<string>} \newrobustcmd*{\blx@imc@bibcpstring}[2][\@firstofone]{% \blx@bibcpstring{#1}{\abx@str}{#2}} @@ -4841,13 +4781,7 @@ \blx@bibcpstring{#1}{abx@sstr}{#2}} \protected\def\blx@bibcpstring#1#2#3{% - \blx@begunit - \blx@hyphenreset - \blx@bibstringsimple - \lowercase{\edef\blx@tempa{#3}}% - \ifcsundef{#2@\blx@tempa} - {\blx@warn@nostring\blx@tempa - \blx@endnounit} + \blx@met@bibstring{#1}{#2}{#3} {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}% \blx@endunit}} @@ -4862,14 +4796,8 @@ \blx@biblcstring{#1}{abx@sstr}{#2}} \protected\def\blx@biblcstring#1#2#3{% - \blx@begunit - \blx@hyphenreset - \blx@bibstringsimple - \lowercase{\edef\blx@tempa{#3}}% - \ifcsundef{#2@\blx@tempa} - {\blx@warn@nostring\blx@tempa - \blx@endnounit} - {#1{\MakeLowercase{\csuse{#2@\blx@tempa}}}% + \blx@met@bibstring{#1}{#2}{#3} + {#1{\blx@maketext@lowercase{\csuse{#2@\blx@tempa}}}% \blx@endunit}} % [<wrapper>]{<string>} @@ -4883,14 +4811,8 @@ \blx@bibucstring{#1}{abx@sstr}{#2}} \protected\def\blx@bibucstring#1#2#3{% - \blx@begunit - \blx@hyphenreset - \blx@bibstringsimple - \lowercase{\edef\blx@tempa{#3}}% - \ifcsundef{#2@\blx@tempa} - {\blx@warn@nostring\blx@tempa - \blx@endnounit} - {#1{\MakeUppercase{\csuse{#2@\blx@tempa}}}% + \blx@met@bibstring{#1}{#2}{#3} + {#1{\blx@maketext@uppercase{\csuse{#2@\blx@tempa}}}% \blx@endunit}} % {<string>} @@ -4942,6 +4864,7 @@ \blx@regimcs{% \bibstring \biblstring \bibsstring \bibxstring \bibxlstring \bibxsstring + \bibncpstring \bibncplstring \bibncpsstring \bibcpstring \bibcplstring \bibcpsstring \biblcstring \biblclstring \biblcsstring \bibucstring \bibuclstring \bibucsstring @@ -5296,14 +5219,17 @@ \do{langjapanese}% \do{langlatin}% \do{langlatvian}% + \do{langlithuanian}% \do{langnorwegian}% \do{langpolish}% \do{langportuguese}% + \do{langserbian}% \do{langrussian}% \do{langslovak}% \do{langslovene}% \do{langspanish}% \do{langswedish}% + \do{langturkish}% \do{langukrainian}% \do{fromamerican}% \do{frombrazilian}% @@ -5324,15 +5250,18 @@ \do{fromitalian}% \do{fromjapanese}% \do{fromlatin}% + \do{fromlithuanian}% \do{fromlatvian}% \do{fromnorwegian}% \do{frompolish}% \do{fromportuguese}% \do{fromrussian}% + \do{fromserbian}% \do{fromslovak}% \do{fromslovene}% \do{fromspanish}% \do{fromswedish}% + \do{fromturkish}% \do{fromukrainian}% \do{countryde}% \do{countryep}% @@ -5369,19 +5298,19 @@ \forcsvlist\blx@newstring{#1}} \def\blx@newstring#1{% - \ifcsundef{KV@blx@lbx@#1} + \blx@kv@ifkeyundef{blx@lbx}{#1} {\gappto\abx@dostrings{\do{#1}}% - \csgdef{KV@blx@lbx@#1}##1{\blx@defstring{#1}{##1}}} + \blx@kv@gdefkey{blx@lbx}{#1}{\blx@defstring{#1}{##1}}} {}} % in *.cbx/bbx/tex: <key> = {<string>}, % in *.lbx: <key> = {{<longstring>}{<abbrevstring>}}, -\def\do#1{\define@key{blx@lbx}{#1}{\blx@defstring{#1}{##1}}} +\def\do#1{\blx@kv@defkey{blx@lbx}{#1}{\blx@defstring{#1}{##1}}} \abx@dostrings % in *.cbx/bbx/tex: (implicit) % in *.lbx: inherit = {<language>}, -\define@key{blx@lbx}{inherit}{% +\blx@kv@defkey{blx@lbx}{inherit}{% \blx@lbxinput@strings{#1}{}{\blx@err@nolang{#1}}% \csuse{abx@strings@#1}} @@ -5443,7 +5372,7 @@ \def\do##1{\csundef{abx@lstr@##1}\csundef{abx@sstr@##1}}% \abx@dostrings \csuse{abx@strings@#1}% - \setkeys{blx@lbx}{#2}% + \blx@kv@setkeys{blx@lbx}{#2}% \let\do\blx@defbibstrings@i \csxdef{abx@strings@#1}{\abx@dostrings}% \csgappto{abx@strings@#1}{% @@ -5457,6 +5386,10 @@ {\letcs\biblistname{\abx@str @shorthands}} {\let\biblistname\@empty}}} +% this one is special, it's basically ours and probably not defined +% by anyone else, so we had better make sure it exists +\providecommand*{\biblistname}{\blx@warn@nostring{shorthands}} + \def\blx@defbibstrings@i#1{% \ifcsdef{abx@lstr@#1} {\def\expandafter\noexpand\csname abx@lstr@#1\endcsname{% @@ -5562,13 +5495,18 @@ \blx@info@noline{Trying to load #2..}% \IfFileExists{#1} {\blx@info@noline{... file '#1' found}% - #3\@@input\@filef@und#4#5% + \csuse{blx@lbxfilehook@simple@preload@#1}% + #3\@@input\@filef@und#4% + \csuse{blx@lbxfilehook@simple@postload@#1}% + #5% \ifcsundef{blx@file@lbx@simple@#1} {\listxadd\blx@list@req@stat{#1}% \@addtofilelist{#1}% \global\cslet{blx@file@lbx@simple@#1}\@empty} {}} - {\blx@info@noline{... file '#1' not found}#6}} + {\blx@info@noline{... file '#1' not found}% + \csuse{blx@lbxfilehook@simple@failure@#1}% + #6}} % {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>} \protected\long\def\blx@lbx@input@handler@once#1#2#3#4#5#6{% @@ -5576,12 +5514,17 @@ {\blx@info@noline{Trying to load #2..}% \IfFileExists{#1} {\blx@info@noline{... file '#1' found}% - #3\@@input\@filef@und#4#5% + \csuse{blx@lbxfilehook@once@preload@#1}% + #3\@@input\@filef@und#4% + \csuse{blx@lbxfilehook@once@postload@#1}% + #5% \ifcsundef{blx@file@lbx@simple@#1} {\listxadd\blx@list@req@stat{#1}% \@addtofilelist{#1}} {}} - {\blx@info@noline{... file '#1' not found}#6}% + {\blx@info@noline{... file '#1' not found}% + \csuse{blx@lbxfilehook@once@failure@#1}% + #6}% \global\cslet{blx@file@lbx@once@#1}\@empty \global\cslet{blx@file@lbx@simple@#1}\@empty} {#5}} @@ -5647,10 +5590,7 @@ {\edef\blx@languagename{#1}} {\blx@warning {Language '#1' not supported.\MessageBreak - Using fallback language '\blx@languagename'}% - \blx@lbxinput{\blx@languagename} - {\blx@maplang{#1}{\blx@languagename}} - {\blx@err@nolang{\blx@languagename}}}} + Using dummy definitions}}} % auxiliary macros @@ -5710,13 +5650,13 @@ {\iffieldsequal{#1minute}{#1endminute} % 14:13:xx 14:13:xx {\toggletrue{blx@seconds}% - \printtext[#1time]{% + \printtext[{#1time}]{% \csuse{mkbibtime24h}{#1hour}{#1minute}{#1second}{}% \bibtimerangesep \csuse{mkbibtime24h}{}{}{#1endsecond}{}}} % 14:13:xx 14:14:xx {\toggletrue{blx@seconds}% - \printtext[#1time]{\csuse{mkbibtime24h}{#1hour}{#1minute}{}{}% + \printtext[{#1time}]{\csuse{mkbibtime24h}{#1hour}{#1minute}{}{}% \bibtimerangesep \csuse{mkbibtime24h}{}{#1endminute}{}{}}}} % 14:xx:xx 15:xx:xx @@ -5724,17 +5664,20 @@ % {<24h|24hcomp|12h>}{<datetype>} \newrobustcmd*{\mktimerange}[2]{% - \iffieldundef{#2hour} - {\blx@nounit} - {\blx@timepre{#2}{}% - \printtext[#2time]{\csuse{mkbibtime#1}{#2hour}{#2minute}{#2second}{#2timezone}% - \iffieldundef{#2endhour} - {} - {\blx@timepre{#2}{end}% - \iffieldequalstr{#2endhour}{} - {\mbox{\bibtimerangesep}} - {\bibtimerangesep - \csuse{mkbibtime#1}{#2endhour}{#2endminute}{#2endsecond}{#2endtimezone}}}}}} + \begingroup + \iffieldundef{#2hour} + {\blx@nounit} + {\blx@timepre{#2}{}% + \printtext[{#2time}]{% + \csuse{mkbibtime#1}{#2hour}{#2minute}{#2second}{#2timezone}% + \iffieldundef{#2endhour} + {} + {\blx@timepre{#2}{end}% + \iffieldequalstr{#2endhour}{} + {\mbox{\bibtimerangesep}} + {\bibtimerangesep + \csuse{mkbibtime#1}{#2endhour}{#2endminute}{#2endsecond}{#2endtimezone}}}}}% + \endgroup} % {<datetype>}{''|end} \newrobustcmd*{\blx@timepre}[2]{% @@ -5744,24 +5687,27 @@ {\blx@imc@clearfield{#1#2second}}} \newcommand*{\blx@if@printtime}[2]{% - \ifboolexpr{% - togl {blx@#1dateusetime} - and - not test {\iffieldundef{#1#2hour}}}} + \iftoggle{blx@#1dateusetime} + {\iffieldundef{#1#2hour} + {\@secondoftwo} + {\@firstoftwo}} + {\@secondoftwo}} \newcommand*{\blx@if@printanytimes}[1]{% - \ifboolexpr{ - togl {blx@#1dateusetime} - and - ( not test {\iffieldundef{#1hour}} - or not test {\iffieldundef{#1endhour}})}} + \iftoggle{blx@#1dateusetime} + {\iffieldundef{#1hour} + {\iffieldundef{#1endhour} + {\@secondoftwo} + {\@firstoftwo}} + {\@firstoftwo}} + {\@secondoftwo}} % {<datetype>}{'' | end} \newrobustcmd*{\blx@printtime}[2]{% \blx@if@printtime{#1}{#2} {\blx@timepre{#1}{#2}% - \printtext{\bibdatetimesep}% - \printtext[#1time]{% + \bibdatetimesep% + \printtext[{#1time}]{% \csuse{mkbibtime\csuse{blx@timeformat@#1time}} {#1#2hour}{#1#2minute}{#1#2second}{#1#2timezone}}} {}} @@ -5772,7 +5718,7 @@ \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint % Such a season component can only come from an ISO8601 season which replaces % a normal month so if it exists, we know that a normal date print is ruled out @@ -5803,7 +5749,7 @@ \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint % Such a season component can only come from an ISO8601 season which replaces % a normal month so if it exists, we know that a normal date print is ruled out @@ -5818,18 +5764,17 @@ {\printfield{extradate}} {\iffieldequalstr{#2endyear}{} {\printfield{extradate}% - \printtext{\mbox{\bibdaterangesep}}} - {\printtext{% - \bibdaterangesep - \enddatecircaprint - \iffieldundef{#2endseason} - {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}% - % Optionally print the time after the date - \blx@printtime{#2}{end}} - {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% - \printfield{extradate}% - \enddateuncertainprint - \dateeraprint{#2endyear}}}}}% + \mbox{\bibdaterangesep}} + {\bibdaterangesep + \enddatecircaprint + \iffieldundef{#2endseason} + {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}% + % Optionally print the time after the date + \blx@printtime{#2}{end}} + {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% + \printfield{extradate}% + \enddateuncertainprint + \dateeraprint{#2endyear}}}}% \endgroup} \newrobustcmd*{\mkdaterangetrunc}[2]{% @@ -5842,7 +5787,7 @@ \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint % Such a season component can only come from an ISO8601 season which replaces % a normal month so if it exists, we know that a normal date print is ruled out @@ -5883,7 +5828,7 @@ \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint % Such a season component can only come from an ISO8601 season which replaces % a normal month so if it exists, we know that a normal date print is ruled out @@ -5905,37 +5850,38 @@ {\printfield{extradate}} {\iffieldequalstr{#2endyear}{} {\printfield{extradate}% - \printtext{\mbox{\bibdaterangesep}}} - {\printtext{% - \bibdaterangesep - \enddatecircaprint - \iffieldundef{#2endseason} - {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}} - {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% - \printfield{extradate}% - \enddateuncertainprint - \dateeraprint{#2endyear}}}}}% + \mbox{\bibdaterangesep}} + {\bibdaterangesep + \enddatecircaprint + \iffieldundef{#2endseason} + {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}} + {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% + \printfield{extradate}% + \enddateuncertainprint + \dateeraprint{#2endyear}}}}% \endgroup} \newrobustcmd*{\mkdaterangeyear}[1]{% - \blx@imc@clearfield{#1season}% - \blx@imc@clearfield{#1month}% - \blx@imc@clearfield{#1day}% - \blx@imc@clearfield{#1hour}% - \blx@imc@clearfield{#1minute}% - \blx@imc@clearfield{#1second}% - \blx@imc@clearfield{#1timezone}% - \blx@imc@clearfield{#1endseason}% - \blx@imc@clearfield{#1endmonth}% - \blx@imc@clearfield{#1endday}% - \blx@imc@clearfield{#1endhour}% - \blx@imc@clearfield{#1endminute}% - \blx@imc@clearfield{#1endsecond}% - \blx@imc@clearfield{#1endtimezone}% - \ifdateyearsequal{#1}{#1end} - {\blx@imc@clearfield{#1endyear}} - {}% - \mkdaterangefull{short}{#1}} + \begingroup + \blx@imc@clearfield{#1season}% + \blx@imc@clearfield{#1month}% + \blx@imc@clearfield{#1day}% + \blx@imc@clearfield{#1hour}% + \blx@imc@clearfield{#1minute}% + \blx@imc@clearfield{#1second}% + \blx@imc@clearfield{#1timezone}% + \blx@imc@clearfield{#1endseason}% + \blx@imc@clearfield{#1endmonth}% + \blx@imc@clearfield{#1endday}% + \blx@imc@clearfield{#1endhour}% + \blx@imc@clearfield{#1endminute}% + \blx@imc@clearfield{#1endsecond}% + \blx@imc@clearfield{#1endtimezone}% + \ifdateyearsequal{#1}{#1end} + {\blx@imc@clearfield{#1endyear}} + {}% + \mkdaterangefull{short}{#1}% + \endgroup} % {<datetype>} \newrobustcmd*{\mkdaterangeymd}[1]{% @@ -5943,7 +5889,7 @@ \blx@metadateinfo{#1}% \iffieldundef{#1year} {\blx@nounit} - {\printtext[#1date]{% + {\printtext[{#1date}]{% \datecircaprint % Such a season component can only come from an ISO8601 season which replaces % a normal month so if it exists, we know that a normal date print is ruled out @@ -5975,7 +5921,7 @@ \blx@metadateinfo{#1}% \iffieldundef{#1year} {\blx@nounit} - {\printtext[#1date]{% + {\printtext[{#1date}]{% \datecircaprint % Such a season component can only come from an ISO8601 season which replaces % a normal month so if it exists, we know that a normal date print is ruled out @@ -5990,16 +5936,15 @@ {} {\iffieldequalstr{#1endyear}{} {\mbox{\bibdaterangesep}} - {\printtext{% - \bibdaterangesep - \enddatecircaprint - \iffieldundef{#1season} - {\blx@ymddate{#1}{end}% - % Optionally print the time after the date - \blx@printtime{#1}{end}} - {\csuse{mkbibseasondateshort}{#1endyear}{#1endseason}}}% + {\bibdaterangesep + \enddatecircaprint + \iffieldundef{#1season} + {\blx@ymddate{#1}{end}% + % Optionally print the time after the date + \blx@printtime{#1}{end}} + {\csuse{mkbibseasondateshort}{#1endyear}{#1endseason}}}% \enddateuncertainprint - \dateeraprint{#1endyear}}}}}% + \dateeraprint{#1endyear}}}}% \endgroup} % [extradate]{<datetype>}{''|end} @@ -6010,24 +5955,26 @@ \iffieldundef{#2#3day}{}{\bibdatesep\mkdayzeros{\thefield{#2#3day}}}} \newrobustcmd*{\mkdaterangeyearextra}[1]{% - \blx@imc@clearfield{#1season}% - \blx@imc@clearfield{#1month}% - \blx@imc@clearfield{#1day}% - \blx@imc@clearfield{#1hour}% - \blx@imc@clearfield{#1minute}% - \blx@imc@clearfield{#1second}% - \blx@imc@clearfield{#1timezone}% - \blx@imc@clearfield{#1endseason}% - \blx@imc@clearfield{#1endmonth}% - \blx@imc@clearfield{#1endday}% - \blx@imc@clearfield{#1endhour}% - \blx@imc@clearfield{#1endminute}% - \blx@imc@clearfield{#1endsecond}% - \blx@imc@clearfield{#1endtimezone}% - \ifdateyearsequal{#1}{#1end} - {\blx@imc@clearfield{#1endyear}} - {}% - \mkdaterangefullextra{short}{#1}} + \begingroup + \blx@imc@clearfield{#1season}% + \blx@imc@clearfield{#1month}% + \blx@imc@clearfield{#1day}% + \blx@imc@clearfield{#1hour}% + \blx@imc@clearfield{#1minute}% + \blx@imc@clearfield{#1second}% + \blx@imc@clearfield{#1timezone}% + \blx@imc@clearfield{#1endseason}% + \blx@imc@clearfield{#1endmonth}% + \blx@imc@clearfield{#1endday}% + \blx@imc@clearfield{#1endhour}% + \blx@imc@clearfield{#1endminute}% + \blx@imc@clearfield{#1endsecond}% + \blx@imc@clearfield{#1endtimezone}% + \ifdateyearsequal{#1}{#1end} + {\blx@imc@clearfield{#1endyear}} + {}% + \mkdaterangefullextra{short}{#1}% + \endgroup} \newrobustcmd*{\mkdaterangeiso}[1]{% \begingroup @@ -6035,13 +5982,13 @@ \def\bibdatetimesep{T}% \iffieldundef{#1year} {\blx@nounit} - {\printtext[#1date]{% + {\printtext[{#1date}]{% \blx@isodate{#1}{}% \ifboolexpr{% togl {blx@#1dateusetime} and not test {\iffieldundef{#1hour}}} - {\printtext{\bibdatetimesep}% + {\bibdatetimesep% \blx@isotime{#1}{}} {}% \dateuncertainprint @@ -6054,7 +6001,7 @@ togl {blx@#1dateusetime} and not test {\iffieldundef{#1endhour}}} - {\printtext{\bibdatetimesep}% + {\bibdatetimesep% \blx@isotime{#1}{end}} {}% \enddateuncertainprint @@ -6067,13 +6014,13 @@ \def\bibdatetimesep{T}% \iffieldundef{#1year} {\blx@nounit} - {\printtext[#1date]{% + {\printtext[{#1date}]{% \blx@isodate[extradate]{#1}{}% \ifboolexpr{% togl {blx@#1dateusetime} and not test {\iffieldundef{#1hour}}} - {\printtext{\bibdatetimesep}% + {\bibdatetimesep% \blx@isotime{#1}{}} {}% \dateuncertainprint @@ -6086,7 +6033,7 @@ togl {blx@#1dateusetime} and not test {\iffieldundef{#1endhour}}} - {\printtext{\bibdatetimesep}% + {\bibdatetimesep% \blx@isotime{#1}{end}} {}% \enddateuncertainprint @@ -6194,13 +6141,17 @@ loaded, is faulty or does not contain a definition\MessageBreak for \expandafter\string\csname mkbibtime24h\endcsname }% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}} @@ -6226,7 +6177,7 @@ {\bibstring{pm}}% \iffieldundef{#4}{} {\space\bibtimezonesep - \parentext{\mkbibtimezone{\thefield{#4}}}}} + \mkbibparens{\mkbibtimezone{\thefield{#4}}}}} \newrobustcmd*{\mkbibseasondateshort}[2]{% \blx@warning@noline{% @@ -6353,28 +6304,65 @@ % User macro for retrieving currrent language \def\currentlang{\blx@languagename} +% We need to be able to prefix \providetoggle with \global, +% plus we don't need the testing from \providetoggle anway. +% This uses internal implementation details of etoolbox's +% toggles, so is a bit meh, but it's better than rolling our own +% version of toggles just for that. +\newcommand*{\blx@etb@inittoggle}[1]{\cslet{etb@tgl@#1}\@secondoftwo} + +% There is no \nocaptions..., so if we send everything to \captions... +% we need to find a way to call our noextras only in situations where +% \noextras... is called to clean up \extras... AND \captions... +% and not just \extras... +% We detect this by setting a toggle in the \captions... + % {<language>}{<strings>} \def\blx@maplang@babel#1#2{% - \csgappto{extras#1}{% - \blx@resetpunct - \csuse{abx@extras@#2}% - \csuse{abx@strings@#2}}% - \csgappto{noextras#1}{% - \blx@resetpunct - \csuse{abx@noextras@#2}}} + \global\blx@etb@inittoggle{blx@lang@captions@#2}% + \ifdefstring{\blx@langhook}{captions} + {\csgappto{captions#1}{% + \toggletrue{blx@lang@captions@#2}% + \blx@resetpunct + \csuse{abx@extras@#2}% + \csuse{abx@strings@#2}}% + \csgappto{noextras#1}{% + \iftoggle{blx@lang@captions@#2} + {\blx@resetpunct + \csuse{abx@noextras@#2}} + {}}} + {\csgappto{extras#1}{% + \blx@resetpunct + \csuse{abx@extras@#2}% + \csuse{abx@strings@#2}}% + \csgappto{noextras#1}{% + \blx@resetpunct + \csuse{abx@noextras@#2}}}} \def\blx@maplang@polyglossia#1#2{% - \csgappto{blockextras@bbl@#1}{% - \blx@resetpunct - \csuse{abx@extras@#2}% - \csuse{abx@strings@#2}}% - \csgappto{inlinextras@bbl@#1}{% - \blx@resetpunct - \csuse{abx@extras@#2}% - \csuse{abx@strings@#2}}% - \csgappto{noextras@bbl@#1}{% - \blx@resetpunct - \csuse{abx@noextras@#2}}} + \global\blx@etb@inittoggle{blx@lang@captions@#2}% + \ifdefstring{\blx@langhook}{captions} + {\csgappto{captions@bbl@#1}{% + \toggletrue{blx@lang@captions@#2}% + \blx@resetpunct + \csuse{abx@extras@#2}% + \csuse{abx@strings@#2}}% + \csgappto{noextras@bbl@#1}{% + \iftoggle{blx@lang@captions@#2} + {\blx@resetpunct + \csuse{abx@noextras@#2}} + {}}} + {\csgappto{blockextras@bbl@#1}{% + \blx@resetpunct + \csuse{abx@extras@#2}% + \csuse{abx@strings@#2}}% + \csgappto{inlineextras@bbl@#1}{% + \blx@resetpunct + \csuse{abx@extras@#2}% + \csuse{abx@strings@#2}}% + \csgappto{noextras@bbl@#1}{% + \blx@resetpunct + \csuse{abx@noextras@#2}}}} %% babel/polyglossia interface \def\blx@beglang{\blx@clearlang\begingroup} @@ -6398,53 +6386,61 @@ \lefthyphenmin#1\relax \righthyphenmin#2\relax} -\begingroup -\@makeother\# -\gdef\blx@mkautolangbabel{% + + +\def\blx@mkautolangbabel{% \ifundef\bbl@main@language {\blx@error {No default 'babel' language defined} {You must define a default language for 'babel'}} {\let\blx@main@language\bbl@main@language}% - \pretocmd\select@language{\blx@langsetup{#1}} - {\ifdef\blx@thelangenv - {\def\blx@beglang{% - \blx@clearlang - \begingroup - % Need to override all entries, regardless of if there is a langid - % if language=<language> option is given + % use afterreset to get in a bit earlier + % we want to be there before \captions... is issued + % beforeextras is before extras, but captions come before extras + % afterreset was added in 3.9i (~2014-03-16) + % way before 3.9r (2016-04-23), which we require + \AddBabelHook{biblatex@langsetup}{afterreset}{% + \expandafter\blx@langsetup\expandafter{\languagename}}% + \ifdef\blx@thelangenv + {\def\blx@beglang{% + \blx@clearlang + \begingroup + % Need to override all entries, regardless of if there is a + % langid if language=<language> option is given \ifboolexpr { test {\ifdef\abx@field@langid } or test {\ifdef\blx@forcelanguagename} } - % override local langid if we forced it with - % language=<language> option - {\ifdef\blx@forcelanguagename - {\let\abx@field@langid\blx@forcelanguagename} - {}% - \let\blx@languagename\abx@field@langid% track global language - \blx@ifhyphenationundef{\abx@field@langid} - {\blx@warn@nohyph{\abx@field@langid}} - {\blx@hook@initlang - \def\blx@endlang{% - \blx@hook@endlang - \csname end\blx@thelangenv\endcsname - \endgroup}% - \iftoggle{blx@autolangbib} - {\let\blx@endlangbib\blx@endlang} - {}% - \iftoggle{blx@autolangcite} - {\let\blx@endlangcite\blx@endlang} - {}% - \csname\blx@thelangenv\expandafter\endcsname - \expandafter{\abx@field@langid}}} - {}}} - {}% - \def\blx@imc@mainlang{\select@language{\blx@main@language}}% - \blx@langsetup\blx@main@language} - {\blx@err@patch{'babel' package}% - \blx@mknoautolang}} + % override local langid if we forced it with + % language=<language> option + {\ifdef\blx@forcelanguagename + {\let\abx@field@langid\blx@forcelanguagename} + {}% + \let\blx@languagename\abx@field@langid% track global language + \blx@ifhyphenationundef{\abx@field@langid} + {\blx@warn@nohyph{\abx@field@langid}} + {\blx@hook@initlang + \def\blx@endlang{% + \blx@hook@endlang + \csname end\blx@thelangenv\endcsname + \endgroup}% + \iftoggle{blx@autolangbib} + {\let\blx@endlangbib\blx@endlang} + {}% + \iftoggle{blx@autolangcite} + {\let\blx@endlangcite\blx@endlang} + {}% + \csname\blx@thelangenv\expandafter\endcsname + \expandafter{\abx@field@langid}}} + {}}} + {}% + \def\blx@imc@mainlang{% + \expandafter\selectlanguage\expandafter{\blx@main@language}}% + \expandafter\blx@langsetup\expandafter{\blx@main@language}% +} -\gdef\blx@mkautolangpoly{% +\def\blx@beglang@spacefactors{\frenchspacing} + +\def\blx@mkautolangpoly{% \ifundef\mainbabelname {\ifundef\bbl@main@language {\blx@error @@ -6452,59 +6448,57 @@ {You must define a default language for 'polyglossia'}} {\let\blx@main@language\bbl@main@language}} {\let\blx@main@language\mainbabelname}% - \edef\blx@saved@underscore@catcode{\the\catcode`\_}% - \catcode`\_=11% polyglossia uses "_" as a letter - \pretocmd\select@language{\blx@langsetup{\babelname}} - {\ifdef\blx@thelangenv - {\def\blx@beglang{% - \blx@clearlang - \begingroup - % Need to override all entries, regardless of if there is a - % langid if language=<language> option is given - \ifboolexpr { test {\ifdef\abx@field@langid } - or - test {\ifdef\blx@forcelanguagename} } - % override local langid if we forced it with - % language=<language> option - {\ifdef\blx@forcelanguagename - {\let\abx@field@langid\blx@forcelanguagename} - {}% - \let\blx@languagename\abx@field@langid% track global language - \blx@ifhyphenationundef{\abx@field@langid} - {\blx@warn@nohyph{\abx@field@langid}} - {\blx@hook@initlang - \def\blx@endlang{% - \blx@hook@endlang - % Polyglossia language envs are \<lang>[] - \ifcsstring{blx@thelangenv}{langname} - {\csname end\abx@field@langid\endcsname} - {\csname end\blx@thelangenv\endcsname}% - \endgroup}% - \iftoggle{blx@autolangbib} - {\let\blx@endlangbib\blx@endlang} - {}% - \iftoggle{blx@autolangcite} - {\let\blx@endlangcite\blx@endlang} - {}% + \ifundef\polyglossia@language@switched + {\apptocmd\select@language + {\expandafter\blx@langsetup\expandafter{\babelname}} + {} + {\blx@err@patch{'polyglossia' package}% + \blx@mknoautolang}} + {\appto\polyglossia@language@switched{% + \expandafter\blx@langsetup\expandafter{\babelname}}}% + \ifdef\blx@thelangenv + {\def\blx@beglang{% + \blx@clearlang + \begingroup + % Need to override all entries, regardless of if there is a + % langid if language=<language> option is given + \ifboolexpr { test {\ifdef\abx@field@langid } + or + test {\ifdef\blx@forcelanguagename} } + % override local langid if we forced it with + % language=<language> option + {\ifdef\blx@forcelanguagename + {\let\abx@field@langid\blx@forcelanguagename} + {}% + \let\blx@languagename\abx@field@langid% track global language + \blx@ifhyphenationundef{\abx@field@langid} + {\blx@warn@nohyph{\abx@field@langid}} + {\blx@hook@initlang + \def\blx@endlang{% + \blx@hook@endlang + % Polyglossia language envs are \<lang>[] \ifcsstring{blx@thelangenv}{langname} - {\ifdef\abx@field@langidopts - {\csname\abx@field@langid\expandafter\endcsname\expandafter[\abx@field@langidopts]} - {\csname\abx@field@langid\endcsname}} - {\csname\blx@thelangenv\expandafter\endcsname\expandafter{\abx@field@langid}}% - % These lines are equal to \blx@maplang - \ifcsstring{blx@thelangenv}{hyphenrules} - {} - {\blx@resetpunct - \csuse{abx@extras@\abx@field@langid}% - \csuse{abx@strings@\abx@field@langid}}}} - {}}} + {\csname end\abx@field@langid\endcsname} + {\csname end\blx@thelangenv\endcsname}% + \endgroup}% + \iftoggle{blx@autolangbib} + {\let\blx@endlangbib\blx@endlang} + {}% + \iftoggle{blx@autolangcite} + {\let\blx@endlangcite\blx@endlang} + {}% + \ifcsstring{blx@thelangenv}{langname} + {\ifdef\abx@field@langidopts + {\csname\abx@field@langid\expandafter\endcsname + \expandafter[\abx@field@langidopts]} + {\csname\abx@field@langid\endcsname}} + {\csname\blx@thelangenv\expandafter\endcsname + \expandafter{\abx@field@langid}}% + \blx@beglang@spacefactors}} + {}}} {}% - \def\blx@imc@mainlang{\select@language{\blx@main@language}}% - \blx@langsetup\blx@main@language} - {\blx@err@patch{'polyglossia' package}% - \blx@mknoautolang}% - \catcode`\_=\blx@saved@underscore@catcode\relax} -\endgroup + \def\blx@imc@mainlang{\select@language{\blx@main@language}}% + \expandafter\blx@langsetup\expandafter{\blx@main@language}} \def\blx@mknoautolang{% \blx@lbxinput{\blx@languagename} @@ -6553,6 +6547,10 @@ % fields which can be used as labels - we auto-create some macros for these \def\abx@dolabelfields{\dolistloop\blx@datamodel@labelfields} +\def\abx@dolabelwidths{% + \do{labelnumber}% + \do{labelalpha}% + \abx@dolabelfields} \def\abx@donames{\dolistloop\blx@datamodel@names} \def\abx@donameparts{\expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}} @@ -6682,19 +6680,19 @@ {\csuse{blx@defblxopt@#1opt}{#3}[]}} \long\def\blx@defblxopt@globalopt#1[#2]#3{% - \ifcsundef{KV@blx@opt@ldt@#1} - {\ifcsundef{KV@blx@opt@pre@#1} + \blx@kv@ifkeyundef{blx@opt@ldt}{#1} + {\blx@kv@ifkeyundef{blx@opt@pre}{#1} {\ifblank{#2} - {\define@key{blx@opt@pre}{#1}{#3}} - {\define@key{blx@opt@pre}{#1}[#2]{#3}}} + {\blx@kv@defkey{blx@opt@pre}{#1}{#3}} + {\blx@kv@defkey{blx@opt@pre}{#1}[{#2}]{#3}}} {\blx@err@optdef{#1}{pre/global}}} {\blx@err@optdef{#1}{ldt/global}}} \long\def\blx@defblxopt@typeentryopt#1#2[#3]#4{% - \ifcsundef{KV@blx@opt@#1@#2} + \blx@kv@ifkeyundef{blx@opt@#1}{#2} {\ifblank{#3} - {\define@key{blx@opt@#1}{#2}{#4}} - {\define@key{blx@opt@#1}{#2}[#3]{#4}}} + {\blx@kv@defkey{blx@opt@#1}{#2}{#4}} + {\blx@kv@defkey{blx@opt@#1}{#2}[{#3}]{#4}}} {\blx@err@optdef{#2}{#1}}} \def\blx@defblxopt@typeopt{\blx@defblxopt@typeentryopt{typ}} @@ -6715,10 +6713,10 @@ \forcsvlist{\listadd\blx@optscopes}{global,type,entry} \long\def\blx@defblxopt@loopscopes@i#1[#2]#3#4{% - \csuse{blx@defblxopt@#4opt}{#1}[#2]{#3}} + \csuse{blx@defblxopt@#4opt}{#1}[{#2}]{#3}} \long\def\blx@defblxopt@loopscopes#1[#2]#3{% - \forlistloop{\blx@defblxopt@loopscopes@i{#1}[#2]{#3}}{\blx@optscopes}} + \forlistloop{\blx@defblxopt@loopscopes@i{#1}[{#2}]{#3}}{\blx@optscopes}} % {<option scopes>}[<datatype>]{<key>}[<default value>]{<code>} \newrobustcmd*{\DeclareBiblatexOption}[1]{% @@ -6792,6 +6790,8 @@ \gdef\blx@bcf@backendin@name@nametemplates{sortingnamekeytemplatename,% uniquenametemplatename,labelalphanametemplatename}% + + % Misc globalopts \blx@DeclareBackendOption{global}[xml]{datamodel} \blx@collectopts{string}{blx@globalopts}{controlversion} @@ -7004,7 +7004,7 @@ {\blx@stripfromendinto{#1}{year}\blx@datetype}% \csuse{if\blx@datetype\blx@tempa dateera}{bce} {\ifnumless{0-\thefield{#1}}{0} - {\printtext{\csuse{bibdateera\blx@tempa prefix}}} + {\csuse{bibdateera\blx@tempa prefix}} {}} {}% \endgroup} @@ -7020,10 +7020,10 @@ \csuse{if\blx@datetype\blx@tempa dateera}{bce} {\ifnum\numexpr0-\thefield{#1}\relax<\blx@dateeraauto % \midsentence is to suppress automatic capitalisation - \printtext{\printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@bce}}\relax + \printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@bce}\relax \fi} {\ifnumless{\thefield{#1}}\blx@dateeraauto - {\printtext{\printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@ce}}} + {\printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@ce}} {}}% \endgroup} {}}}% @@ -7160,10 +7160,8 @@ \def\do#1{\expandafter\newlength\expandafter{\csname #1width\endcsname}} \abx@dolabelfields -\newlength{\locallabelnumberwidth} -\newlength{\locallabelalphawidth} \def\do#1{\expandafter\newlength\expandafter{\csname local#1width\endcsname}} -\abx@dolabelfields +\abx@dolabelwidths \protected\def\blx@resetdata{% \let\blx@saved@do\do @@ -7304,13 +7302,12 @@ \begingroup \def\item{\MessageBreak-\space}% \def\break{\MessageBreak\space\space}% - \edef\blx@tempa{% + \blx@warning@noline{% Biber reported the following issues% \ifdef\abx@field@entrykey {\MessageBreak with '\abx@field@entrykey'} {}% :#1}% - \blx@warning@noline{\blx@tempa}% \endgroup} % {<field>}{<code>} @@ -7860,6 +7857,7 @@ % {<entrykey>} \protected\def\blx@bbl@xref#1{}% No-op to avoid an error with BibTeX .bbl +\protected\def\blx@bbl@fakeset#1{}% No-op to avoid an error with BibTeX .bbl % {<keyword>,...} \protected\def\blx@bbl@keyw#1{% @@ -7869,23 +7867,46 @@ \def\blx@addkeyword#1#2{% \listcsxadd{blx@keyw@\the\c@refsection @\detokenize{#2}}{#1}} +\newcommand*{\blx@ifcatcode@other}[1]{% + \ifnumequal{\catcode\number`#1}{12}} + % {<options>} \protected\long\def\blx@bbl@options#1{% - \begingroup + \ifblank{#1} + {} + {\begingroup + \blx@ifcatcode@other{,} + {\blx@ifcatcode@other{=}} + {\@secondoftwo} + {\blx@bbl@options@check{#1}} + {\ifundef\blx@bbl@options@warncatcode + {\blx@warning@noline{% + Irregular catcode regime detected.\MessageBreak + Attempting to work around this with \string\scantokens}% + \global\let\blx@bbl@options@warncatcode\@empty} + {}% + \makeatletter + \@makeother\= + \@makeother\' + \endlinechar\m@ne + \scantokens\expandafter{\blx@bbl@options@check{#1}}}}} + +\long\def\blx@bbl@options@check#1{% \let\blx@tempa\@empty - \forcsvlist\blx@bbl@options@i{#1}% + \forcsvlist\blx@bbl@options@checkopt{#1}% \edef\blx@tempa{% - \endgroup + \endgroup % this group was opened in \blx@bbl@options \ifx\blx@tempa\@empty \else \def\noexpand\abx@field@options{\expandonce\blx@tempa}% \fi}% \blx@tempa} -\long\def\blx@bbl@options@i#1{\blx@bbl@options@ii#1==&} -\long\def\blx@bbl@options@ii#1=#2=#3&{% - \ifcsundef{KV@blx@opt@ent@#1} +\long\def\blx@bbl@options@checkopt#1{\blx@bbl@options@checkopt@i#1==&} + +\long\def\blx@bbl@options@checkopt@i#1=#2=#3&{% + \blx@kv@ifkeyundef{blx@opt@ent}{#1} {\blx@warning@noline{% Ignoring undefined option '#1'\MessageBreak at entry '\abx@field@entrykey'}} @@ -7971,107 +7992,43 @@ % in which case we only set labelyear. {\ifcsundef{abx@field@\abx@field@labeldatesource} % \DeclareLabeldate resolved to a literal/localisation string - {\edef\abx@field@labelyear{\abx@field@labeldatesource}} + {\let\abx@field@labelyear\abx@field@labeldatesource} % \DeclareLabeldate resolved to a non-date field. Not safe to \edef because - % such contents could contain arbitrary macros, unlike ETDF sourced labeldatesource values + % such contents could contain arbitrary macros, unlike EDTF sourced labeldatesource values {\letcs\abx@field@labelyear{abx@field@\abx@field@labeldatesource}}} % \DeclareLabeldate resolved to a date field name prefix like '', 'event', 'url' % or 'orig' {% labeldateera/labelenddateera - \ifcsdef{abx@field@\abx@field@labeldatesource dateera} - {\edef\abx@field@labeldateera{\csuse{abx@field@\abx@field@labeldatesource dateera}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource enddateera} - {\edef\abx@field@labelenddateera{\csuse{abx@field@\abx@field@labeldatesource enddateera}}} - {}% - % labelyear/labelendyear - \ifcsdef{abx@field@\abx@field@labeldatesource year} - {\edef\abx@field@labelyear{\csuse{abx@field@\abx@field@labeldatesource year}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endyear} - {\edef\abx@field@labelendyear{\csuse{abx@field@\abx@field@labeldatesource endyear}}} - {}% - % labelmonth - \ifcsdef{abx@field@\abx@field@labeldatesource month} - {\edef\abx@field@labelmonth{\csuse{abx@field@\abx@field@labeldatesource month}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endmonth} - {\edef\abx@field@labelendmonth{\csuse{abx@field@\abx@field@labeldatesource endmonth}}} - {}% - % labelday/labelendday - \ifcsdef{abx@field@\abx@field@labeldatesource day} - {\edef\abx@field@labelday{\csuse{abx@field@\abx@field@labeldatesource day}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endday} - {\edef\abx@field@labelendday{\csuse{abx@field@\abx@field@labeldatesource endday}}} - {}% - % labelhour/labelendhour - \ifcsdef{abx@field@\abx@field@labeldatesource hour} - {\edef\abx@field@labelhour{\csuse{abx@field@\abx@field@labeldatesource hour}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endhour} - {\edef\abx@field@labelendhour{\csuse{abx@field@\abx@field@labeldatesource endhour}}} - {}% - % labelminute/labelendminute - \ifcsdef{abx@field@\abx@field@labeldatesource minute} - {\edef\abx@field@labelminute{\csuse{abx@field@\abx@field@labeldatesource minute}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endminute} - {\edef\abx@field@labelendminute{\csuse{abx@field@\abx@field@labeldatesource endminute}}} - {}% - % labelsecond/labelendsecond - \ifcsdef{abx@field@\abx@field@labeldatesource second} - {\edef\abx@field@labelsecond{\csuse{abx@field@\abx@field@labeldatesource second}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endsecond} - {\edef\abx@field@labelendsecond{\csuse{abx@field@\abx@field@labeldatesource endsecond}}} - {}% - % labeltimezone/labelendtimezone - \ifcsdef{abx@field@\abx@field@labeldatesource timezone} - {\edef\abx@field@labeltimezone{\csuse{abx@field@\abx@field@labeldatesource timezone}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endtimezone} - {\edef\abx@field@labelendtimezone{\csuse{abx@field@\abx@field@labeldatesource endtimezone}}} - {}% - % labelseason/labelendseason - \ifcsdef{abx@field@\abx@field@labeldatesource season} - {\edef\abx@field@labelseason{\csuse{abx@field@\abx@field@labeldatesource season}}} - {}% - \ifcsdef{abx@field@\abx@field@labeldatesource endseason} - {\edef\abx@field@labelendseason{\csuse{abx@field@\abx@field@labeldatesource endseason}}} - {}% - % labeldateunspecified - \ifcsdef{abx@field@\abx@field@labeldatesource dateunspecified} - {\csletcs{abx@field@labeldateunspecified}{abx@field@\abx@field@labeldatesource dateunspecified}} - {}% - % labeldatecirca/labelenddatecirca - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource datecirca} - {\csletcs{etb@tgl@abx@bool@labeldatecirca}{etb@tgl@abx@bool@\abx@field@labeldatesource datecirca}} - {}% - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddatecirca} - {\csletcs{etb@tgl@abx@bool@labelenddatecirca}{etb@tgl@abx@bool@\abx@field@labeldatesource enddatecirca}} - {}% - % labeldatejulian/labelenddatejulian - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource datejulian} - {\csletcs{etb@tgl@abx@bool@labeldatejulian}{etb@tgl@abx@bool@\abx@field@labeldatesource datejulian}} - {}% - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddatejulian} - {\csletcs{etb@tgl@abx@bool@labelenddatejulian}{etb@tgl@abx@bool@\abx@field@labeldatesource enddatejulian}} - {}% - % labeldateuncertain/labelenddateuncertain - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource dateuncertain} - {\csletcs{etb@tgl@abx@bool@labeldateuncertain}{etb@tgl@abx@bool@\abx@field@labeldatesource dateuncertain}} - {}% - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddateuncertain} - {\csletcs{etb@tgl@abx@bool@labelenddateuncertain}{etb@tgl@abx@bool@\abx@field@labeldatesource enddateuncertain}} - {}% - % labeldateunknown/labelenddateunknown - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource dateunknown} - {\csletcs{etb@tgl@abx@bool@labeldateunknown}{etb@tgl@abx@bool@\abx@field@labeldatesource dateunknown}} - {}% - \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddateunknown} - {\csletcs{etb@tgl@abx@bool@labelenddateunknown}{etb@tgl@abx@bool@\abx@field@labeldatesource enddateunknown}} - {}}}} + \letcs\abx@field@labeldateera{abx@field@\abx@field@labeldatesource dateera}% + \letcs\abx@field@labelenddateera{abx@field@\abx@field@labeldatesource enddateera}% + \letcs\abx@field@labelyear{abx@field@\abx@field@labeldatesource year}% + \letcs\abx@field@labelendyear{abx@field@\abx@field@labeldatesource endyear}% + \letcs\abx@field@labelmonth{abx@field@\abx@field@labeldatesource month}% + \letcs\abx@field@labelendmonth{abx@field@\abx@field@labeldatesource endmonth}% + \letcs\abx@field@labelday{abx@field@\abx@field@labeldatesource day}% + \letcs\abx@field@labelendday{abx@field@\abx@field@labeldatesource endday}% + \letcs\abx@field@labelhour{abx@field@\abx@field@labeldatesource hour}% + \letcs\abx@field@labelendhour{abx@field@\abx@field@labeldatesource endhour}% + \letcs\abx@field@labelminute{abx@field@\abx@field@labeldatesource minute}% + \letcs\abx@field@labelendminute{abx@field@\abx@field@labeldatesource endminute}% + \letcs\abx@field@labelsecond{abx@field@\abx@field@labeldatesource second}% + \letcs\abx@field@labelendsecond{abx@field@\abx@field@labeldatesource endsecond}% + \letcs\abx@field@labeltimezone{abx@field@\abx@field@labeldatesource timezone}% + \letcs\abx@field@labelendtimezone{abx@field@\abx@field@labeldatesource endtimezone}% + \letcs\abx@field@labelseason{abx@field@\abx@field@labeldatesource season}% + \letcs\abx@field@labelendseason{abx@field@\abx@field@labeldatesource endseason}% + \letcs\abx@field@labeldateunspecified{abx@field@\abx@field@labeldatesource dateunspecified}% + \letcs\etb@tgl@abx@bool@labeldatecirca{etb@tgl@abx@bool@\abx@field@labeldatesource datecirca}% + \letcs\etb@tgl@abx@bool@labelenddatecirca{etb@tgl@abx@bool@\abx@field@labeldatesource enddatecirca}% + \letcs\etb@tgl@abx@bool@labeldatejulian{etb@tgl@abx@bool@\abx@field@labeldatesource datejulian}% + \letcs\etb@tgl@abx@bool@labelenddatejulian{etb@tgl@abx@bool@\abx@field@labeldatesource enddatejulian}% + \letcs\etb@tgl@abx@bool@labeldateuncertain{etb@tgl@abx@bool@\abx@field@labeldatesource dateuncertain}% + \letcs\etb@tgl@abx@bool@labelenddateuncertain{etb@tgl@abx@bool@\abx@field@labeldatesource enddateuncertain}% + \letcs\etb@tgl@abx@bool@labeldateunknown{etb@tgl@abx@bool@\abx@field@labeldatesource dateunknown}% + \letcs\etb@tgl@abx@bool@labelenddateunknown{etb@tgl@abx@bool@\abx@field@labeldatesource enddateunknown}% + }% + }% +} % This gets the entry data for a citation \def\blx@getdata@cite#1{% @@ -8080,26 +8037,35 @@ \ifcsdef{blx@setc@\the\c@refsection @#1} {\blx@ifdata{#1} {\def\abx@field@childentrykey{#1}%LEGACY(<3.8) - \edef\abx@field@childentrytype{\abx@field@entrytype}%LEGACY(<3.8) + \let\abx@field@childentrytype\abx@field@entrytype %LEGACY(<3.8) \begingroup - \expandafter\expandafter\expandafter\blx@getdata\expandafter\expandafter\expandafter{% - \csname blx@setc@\the\c@refsection @#1\endcsname}% + \expandafter\expandafter\expandafter\blx@getdata + \expandafter\expandafter\expandafter{% + \csname blx@setc@\the\c@refsection @#1\endcsname}% \let\blx@tempa\@empty % Inject labelnumber if it exists \ifdef\abx@field@labelnumber - {\appto\blx@tempa{\def\noexpand\abx@field@labelnumber{\abx@field@labelnumber}}} + {\appto\blx@tempa{% + \def\noexpand\abx@field@labelnumber{% + \expandonce\abx@field@labelnumber}}} {}% % Inject labelprefix if it exists \ifdef\abx@field@labelprefix - {\appto\blx@tempa{\def\noexpand\abx@field@labelprefix{\abx@field@labelprefix}}} + {\appto\blx@tempa{% + \def\noexpand\abx@field@labelprefix{% + \expandonce\abx@field@labelprefix}}} {}% % Inject labelalpha if it exists \ifdef\abx@field@labelalpha - {\appto\blx@tempa{\def\noexpand\abx@field@labelalpha{\abx@field@labelalpha}}} + {\appto\blx@tempa{% + \def\noexpand\abx@field@labelalpha{% + \expandonce\abx@field@labelalpha}}} {}% % Inject extraalpha if it exists \ifdef\abx@field@extraalpha - {\appto\blx@tempa{\def\noexpand\abx@field@extraalpha{\abx@field@extraalpha}}} + {\appto\blx@tempa{% + \def\noexpand\abx@field@extraalpha{% + \expandonce\abx@field@extraalpha}}} {}% % Perform the injection \edef\blx@tempb{\endgroup\blx@tempa}% @@ -8118,7 +8084,7 @@ {} {\begingroup \edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@ent}{\abx@field@options}}% + \noexpand\blx@kv@setkeys{blx@opt@ent}{\abx@field@options}}% \blx@tempa \blx@checkoptions@entry}} @@ -8126,7 +8092,7 @@ \ifcsdef{blx@opts@type@#1} {\begingroup \edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@typ}{\csuse{blx@opts@type@#1}}}% + \noexpand\blx@kv@setkeys{blx@opt@typ}{\csuse{blx@opts@type@#1}}}% \blx@tempa} {}} @@ -8172,7 +8138,7 @@ % for internal use but we always want the aliases themselves in the .bcf % so that biber can correctly use and resolve them too. \protected\def\blx@bbl@keyalias#1#2{% - \csgdef{blx@keyalias@\the\c@refsection @#1}{\detokenize{#2}}% + \csxdef{blx@keyalias@\the\c@refsection @#1}{\detokenize{#2}}% \listcsgadd{blx@keyaliases@\the\c@refsection}{#1}} % blx@dlist@list@<section>@<refcontext> - a list of list items in a refcontext in a @@ -8284,27 +8250,50 @@ \blx@getformat\abx@tmp@theformat{ffd}{#2}{#3}% \csletcs{#1}{abx@tmp@theformat}} + +% {<instance (int)>}{<field>}{<length>} +\def\abx@aux@locallabelwidth#1#2#3{% + \csgdef{blx@locallabelwidth@#1@#2}{#3}} + +\def\blx@locallabelwidth@write@length#1{% + \ifdimequal{\csname local#1width\endcsname}{0pt} + {} + {\blx@auxwrite\@mainaux{} + {\string\abx@aux@locallabelwidth + {\the\blx@biblioinstance}% + {#1}% + {\the\csname local#1width\endcsname}}}} + +\def\blx@locallabelwidth@write{% + \let\do\blx@locallabelwidth@write@length + \abx@dolabelwidths} + +\let\blx@locallabelwidth@finish\relax + \def\blx@labelwidth@resetlocal{% - \locallabelnumberwidth\z@ - \locallabelalphawidth\z@ \def\do##1{% \csname local##1width\endcsname\z@}% - \abx@dolabelfields} + \abx@dolabelwidths} + +\def\blx@labelwidth@settolocal@length#1{% + \ifcsundef{blx@locallabelwidth@\the\blx@biblioinstance @#1} + {} + {\csname #1width\endcsname + \csname blx@locallabelwidth@\the\blx@biblioinstance @#1\endcsname + \space}} \def\blx@labelwidth@settolocal{% - \labelnumberwidth\locallabelnumberwidth - \labelalphawidth\locallabelalphawidth - \def\do##1{% - \csname ##1width\endcsname\csname local##1width\endcsname}% - \abx@dolabelfields} + \let\do\blx@labelwidth@settolocal@length + \abx@dolabelwidths} -\def\blx@locallabelwidth#1{% +\def\blx@locallabelwidth@setlengths{% + \global\advance\blx@biblioinstance\@ne \blx@labelwidth@resetlocal - \let\blx@do\blx@lengthitem - \let\blx@done\relax - \blx@listloop{#1}% \blx@labelwidth@settolocal} +\let\blx@locallabelwidth@init\relax + + % {<prefix for labelwidth fields>} \def\blx@bbl@labelnumberwidth@numeric#1{% \abx@flfw@getfieldformat{abx@flfw@labelnumberwidth}{labelnumberwidth}{}% @@ -8491,6 +8480,7 @@ \let\enddatalist\blx@bbl@enddlist \let\set\blx@bbl@set \let\inset\blx@bbl@inset + \let\fakeset\blx@bbl@fakeset % A No-op for Biber \let\xref\blx@bbl@xref % A No-op for Biber \let\keyw\blx@bbl@keyw \let\name\blx@bbl@namedef @@ -8565,15 +8555,22 @@ \begingroup \def\do#1{\ifinlist{#1}\blx@cites{}{\blx@logreq@active{}}\relax}% \dolistloop\blx@lastcites - % Special case - if we are using sortingtemplate "none" anywhere, then changes - % in citation order matter and we need to re-run biber. So a special test - % to see if the cites from last run are identical in order. We have - % already tested for more or less cites between runs by now, we are + % Special case - if we are using sortingtemplate with \citeorder anywhere, + % then changes in citation order matter and we need to re-run biber. + % So a special test to see if the cites from last run are identical in order. + % We have already tested for more or less cites between runs by now, we are % testing here for exactly the same cites by treating the cite and % lastcite lists as strings and comparing them. This doesn't apply % to biblist sortingtemplates as nobody wants to sort biblists with % "none", since it makes no sense - \ifinlist{none}\blx@sortingtemplatenames + \togglefalse{blx@tempa}% + \def\do#1{% + \ifcsundef{blx@sortingtemplate@citeorder@relevant@#1} + {} + {\toggletrue{blx@tempa}% + \listbreak}}% + \dolistloop\blx@sortingtemplatenames + \iftoggle{blx@tempa} {\ifdefstrequal{\blx@cites}{\blx@lastcites} {} {\blx@logreq@active{}}} @@ -8603,6 +8600,11 @@ {\def\do#1{\blx@auxwrite\@mainaux{}{#1}} \dolistloop\blx@localnumaux}} {}% + % Wite md5 hash of .bbl to .aux if we need a Biber rerun. + % This needs to happen here and not in \blx@check@rerun together with + % the other rerun stuff, because \AfterEndBibliography would be too + % late for .aux file writing. + \blx@aux@write@bbl@mdfivesum \endgroup} % {<instcount>}{<entrykey>}{<refsection>}{<refcontext>}{<labelnumber>} @@ -8682,8 +8684,8 @@ \appto\blx@tempa{{##1}}% \advance\blx@tempcnta\@ne}% \dolistcsloop{blx@pref@\the\c@refsection @#1}% - \edef\blx@tempa{\endgroup\noexpand\blx@bbl@listdef - {pageref}{\the\blx@tempcnta}{\expandonce{\blx@tempa}}}% + \edef\blx@tempa{\endgroup + \noexpand\blx@bbl@listdef{pageref}{\the\blx@tempcnta}{\expandonce{\blx@tempa}}}% \blx@tempa} %% Data input @@ -8701,12 +8703,18 @@ \blx@ifsigned{\jobname}{bbl} {\InputIfFileExists{\jobname.bbl} {\blx@info@noline{... file '\jobname.bbl' found}% - \global\toggletrue{blx@bbldone}} + \global\toggletrue{blx@bbldone}% + \blx@generate@bbl@mdfivesum@found} {\blx@info@noline{... file '\jobname.bbl' not found}% - \typeout{No file \jobname.bbl.}}} - {}% + \typeout{No file \jobname.bbl.}% + % 'nobblfile' can never be equal to any mdfivehash + \blx@generate@bbl@mdfivesum@notfound}} + {\blx@generate@bbl@mdfivesum@notfound}% \blx@bblend \endgroup + % Check if Biber rerun was not carried out. + % If so, ask for it again. + \blx@check@bbl@rerun@mdfivesum % global sorting as this is called at BeginDocument \csnumgdef{blx@labelnumber@\the\c@refsection}{0}} @@ -8749,7 +8757,7 @@ \def\blx@defbibheading#1[#2]{% \csundef{#1}% - \expandafter\newcommand\csname#1\endcsname[1][#2]} + \expandafter\newcommand\csname#1\endcsname[1][{#2}]} % {<name>}{<text>} \newrobustcmd*{\defbibnote}[1]{% @@ -8823,76 +8831,76 @@ % We need a 2-pass structure for options in \printbibliography and % \printbiblist because the section has to be set before any % other options and this partly determines which list to use for later filtering -\define@key{blx@bib1}{segment}{} -\define@key{blx@bib1}{type}{} -\define@key{blx@bib1}{nottype}{} -\define@key{blx@bib1}{subtype}{} -\define@key{blx@bib1}{notsubtype}{} -\define@key{blx@bib1}{keyword}{} -\define@key{blx@bib1}{notkeyword}{} -\define@key{blx@bib1}{category}{} -\define@key{blx@bib1}{notcategory}{} -\define@key{blx@bib1}{filter}{} -\define@key{blx@bib1}{check}{} -\define@key{blx@bib1}{heading}{} -\define@key{blx@bib1}{env}{} -\define@key{blx@bib1}{title}{} -\define@key{blx@bib1}{prenote}{} -\define@key{blx@bib1}{postnote}{} -\define@key{blx@bib1}{omitnumbers}[]{} +\blx@kv@defkey{blx@bib1}{segment}{} +\blx@kv@defkey{blx@bib1}{type}{} +\blx@kv@defkey{blx@bib1}{nottype}{} +\blx@kv@defkey{blx@bib1}{subtype}{} +\blx@kv@defkey{blx@bib1}{notsubtype}{} +\blx@kv@defkey{blx@bib1}{keyword}{} +\blx@kv@defkey{blx@bib1}{notkeyword}{} +\blx@kv@defkey{blx@bib1}{category}{} +\blx@kv@defkey{blx@bib1}{notcategory}{} +\blx@kv@defkey{blx@bib1}{filter}{} +\blx@kv@defkey{blx@bib1}{check}{} +\blx@kv@defkey{blx@bib1}{heading}{} +\blx@kv@defkey{blx@bib1}{env}{} +\blx@kv@defkey{blx@bib1}{title}{} +\blx@kv@defkey{blx@bib1}{prenote}{} +\blx@kv@defkey{blx@bib1}{postnote}{} +\blx@kv@defkey{blx@bib1}{omitnumbers}[]{} % Here we are using the first pass to see if there is an explicit setting for resetnumbers % If there isn't we will use the default behaviour where if there is a labelprefix, % resetnumbers will default to "true" -\define@key{blx@bib1}{resetnumbers}[true]{% +\blx@kv@defkey{blx@bib1}{resetnumbers}[true]{% \toggletrue{blx@resetnumsexplicit}} -\define@key{blx@bib2}{section}{} -\define@key{blx@bib2}{sorting}{} - -\define@key{blx@biblist1}{segment}{} -\define@key{blx@biblist1}{type}{} -\define@key{blx@biblist1}{nottype}{} -\define@key{blx@biblist1}{subtype}{} -\define@key{blx@biblist1}{notsubtype}{} -\define@key{blx@biblist1}{keyword}{} -\define@key{blx@biblist1}{notkeyword}{} -\define@key{blx@biblist1}{category}{} -\define@key{blx@biblist1}{notcategory}{} -\define@key{blx@biblist1}{filter}{} -\define@key{blx@biblist1}{check}{} -\define@key{blx@biblist1}{heading}{} -\define@key{blx@biblist1}{env}{} -\define@key{blx@biblist1}{title}{} -\define@key{blx@biblist1}{prenote}{} -\define@key{blx@biblist1}{postnote}{} - -\define@key{blx@biblist2}{section}{} -\define@key{blx@biblist2}{sorting}{} - -\define@key{blx@bib1}{section}{% +\blx@kv@defkey{blx@bib2}{section}{} +\blx@kv@defkey{blx@bib2}{sorting}{} + +\blx@kv@defkey{blx@biblist1}{segment}{} +\blx@kv@defkey{blx@biblist1}{type}{} +\blx@kv@defkey{blx@biblist1}{nottype}{} +\blx@kv@defkey{blx@biblist1}{subtype}{} +\blx@kv@defkey{blx@biblist1}{notsubtype}{} +\blx@kv@defkey{blx@biblist1}{keyword}{} +\blx@kv@defkey{blx@biblist1}{notkeyword}{} +\blx@kv@defkey{blx@biblist1}{category}{} +\blx@kv@defkey{blx@biblist1}{notcategory}{} +\blx@kv@defkey{blx@biblist1}{filter}{} +\blx@kv@defkey{blx@biblist1}{check}{} +\blx@kv@defkey{blx@biblist1}{heading}{} +\blx@kv@defkey{blx@biblist1}{env}{} +\blx@kv@defkey{blx@biblist1}{title}{} +\blx@kv@defkey{blx@biblist1}{prenote}{} +\blx@kv@defkey{blx@biblist1}{postnote}{} + +\blx@kv@defkey{blx@biblist2}{section}{} +\blx@kv@defkey{blx@biblist2}{sorting}{} + +\blx@kv@defkey{blx@bib1}{section}{% \ifcsundef{blx@sections@#1} {\blx@err@nosec{#1}} {\c@refsection#1\relax \def\blx@tempe{#1}}} -\define@key{blx@biblist1}{section}{% +\blx@kv@defkey{blx@biblist1}{section}{% \ifcsundef{blx@sections@#1} {\blx@err@nosec{#1}} {\c@refsection#1\relax \def\blx@tempe{#1}}} -\define@key{blx@bbg}{section}{% +\blx@kv@defkey{blx@bbg}{section}{% \ifcsundef{blx@sections@#1} {\blx@err@nosec{#1}} {\c@refsection#1\relax}} -\define@key{blx@bbc}{section}{% +\blx@kv@defkey{blx@bbc}{section}{% \ifcsundef{blx@sections@#1} {\blx@err@nosec{#1}} {\c@refsection#1\relax}} -\define@key{blx@bib2}{segment}{\blx@key@segment{#1}} -\define@key{blx@biblist2}{segment}{\blx@key@segment{#1}} +\blx@kv@defkey{blx@bib2}{segment}{\blx@key@segment{#1}} +\blx@kv@defkey{blx@biblist2}{segment}{\blx@key@segment{#1}} \def\blx@key@segment#1{% \ifcsundef{blx@segm@\the\c@refsection @#1} @@ -8901,8 +8909,8 @@ \blx@printbibchecks \blx@filter\blx@tempa{blx@segm@\the\c@refsection @#1}}} -\define@key{blx@bib2}{type}{\blx@key@type{#1}} -\define@key{blx@biblist2}{type}{\blx@key@type{#1}} +\blx@kv@defkey{blx@bib2}{type}{\blx@key@type{#1}} +\blx@kv@defkey{blx@biblist2}{type}{\blx@key@type{#1}} \def\blx@key@type#1{% \ifcsundef{blx@type@\the\c@refsection @#1} @@ -8920,8 +8928,8 @@ hence some options may not be used twice.\MessageBreak Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}} -\define@key{blx@bib2}{nottype}{\blx@key@nottype{#1}} -\define@key{blx@biblist2}{nottype}{\blx@key@nottype{#1}} +\blx@kv@defkey{blx@bib2}{nottype}{\blx@key@nottype{#1}} +\blx@kv@defkey{blx@biblist2}{nottype}{\blx@key@nottype{#1}} \def\blx@key@nottype#1{% \ifcsundef{blx@type@\the\c@refsection @#1} @@ -8929,8 +8937,8 @@ {\blx@printbibchecks \blx@notfilter\blx@tempa{blx@type@\the\c@refsection @#1}}} -\define@key{blx@bib2}{subtype}{\blx@key@subtype{#1}} -\define@key{blx@biblist2}{subtype}{\blx@key@subtype{#1}} +\blx@kv@defkey{blx@bib2}{subtype}{\blx@key@subtype{#1}} +\blx@kv@defkey{blx@biblist2}{subtype}{\blx@key@subtype{#1}} \def\blx@key@subtype#1{% \ifcsundef{blx@subt@\the\c@refsection @#1} @@ -8948,8 +8956,8 @@ hence some options may not be used twice.\MessageBreak Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}} -\define@key{blx@bib2}{notsubtype}{\blx@key@notsubtype{#1}} -\define@key{blx@biblist2}{notsubtype}{\blx@key@notsubtype{#1}} +\blx@kv@defkey{blx@bib2}{notsubtype}{\blx@key@notsubtype{#1}} +\blx@kv@defkey{blx@biblist2}{notsubtype}{\blx@key@notsubtype{#1}} \def\blx@key@notsubtype#1{% \ifcsundef{blx@subt@\the\c@refsection @#1} @@ -8957,8 +8965,8 @@ {\blx@printbibchecks \blx@notfilter\blx@tempa{blx@subt@\the\c@refsection @#1}}} -\define@key{blx@bib2}{keyword}{\blx@key@keyword{#1}} -\define@key{blx@biblist2}{keyword}{\blx@key@keyword{#1}} +\blx@kv@defkey{blx@bib2}{keyword}{\blx@key@keyword{#1}} +\blx@kv@defkey{blx@biblist2}{keyword}{\blx@key@keyword{#1}} \def\blx@key@keyword#1{% \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}} @@ -8967,8 +8975,8 @@ {\blx@printbibchecks \blx@filter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}} -\define@key{blx@bib2}{notkeyword}{\blx@key@notkeyword{#1}} -\define@key{blx@biblist2}{notkeyword}{\blx@key@notkeyword{#1}} +\blx@kv@defkey{blx@bib2}{notkeyword}{\blx@key@notkeyword{#1}} +\blx@kv@defkey{blx@biblist2}{notkeyword}{\blx@key@notkeyword{#1}} \def\blx@key@notkeyword#1{% \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}} @@ -8976,8 +8984,8 @@ {\blx@printbibchecks \blx@notfilter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}} -\define@key{blx@bib2}{category}{\blx@key@category{#1}} -\define@key{blx@biblist2}{category}{\blx@key@category{#1}} +\blx@kv@defkey{blx@bib2}{category}{\blx@key@category{#1}} +\blx@kv@defkey{blx@biblist2}{category}{\blx@key@category{#1}} \def\blx@key@category#1{% \ifcsundef{blx@catg@\detokenize{#1}} @@ -8986,8 +8994,8 @@ {\blx@printbibchecks \blx@filter\blx@tempa{blx@catg@\detokenize{#1}}}} -\define@key{blx@bib2}{notcategory}{\blx@key@notcategory{#1}} -\define@key{blx@biblist2}{notcategory}{\blx@key@notcategory{#1}} +\blx@kv@defkey{blx@bib2}{notcategory}{\blx@key@notcategory{#1}} +\blx@kv@defkey{blx@biblist2}{notcategory}{\blx@key@notcategory{#1}} \def\blx@key@notcategory#1{% \ifcsundef{blx@catg@#1} @@ -8995,8 +9003,8 @@ {\blx@printbibchecks \blx@notfilter\blx@tempa{blx@catg@#1}}} -\define@key{blx@bib2}{filter}{\blx@key@filter{#1}} -\define@key{blx@biblist2}{filter}{\blx@key@filter{#1}} +\blx@kv@defkey{blx@bib2}{filter}{\blx@key@filter{#1}} +\blx@kv@defkey{blx@biblist2}{filter}{\blx@key@filter{#1}} \def\blx@key@filter#1{% \ifcsdef{blx@filter@#1} @@ -9008,8 +9016,8 @@ {The filter '#1' could not be found.\MessageBreak Use \string\defbibfilter\space to define it}}} -\define@key{blx@bib2}{check}{\blx@key@bibcheck{#1}} -\define@key{blx@biblist2}{check}{\blx@key@bibcheck{#1}} +\blx@kv@defkey{blx@bib2}{check}{\blx@key@bibcheck{#1}} +\blx@kv@defkey{blx@biblist2}{check}{\blx@key@bibcheck{#1}} % empty bibcheck does nothing \cslet{blx@bibcheck@}\relax @@ -9023,17 +9031,17 @@ Use \string\defbibcheck\space to define it}}} \def\blx@default@theheading{bibliography} -\define@key{blx@bibdefaults}{heading}{% +\blx@kv@defkey{blx@bibdefaults}{heading}{% \blx@key@heading{\blx@default@theheading}{#1}} -\define@key{blx@bhd}{heading}{% +\blx@kv@defkey{blx@bhd}{heading}{% \blx@key@heading{\blx@theheading}{#1}} -\define@key{blx@bib2}{heading}{% +\blx@kv@defkey{blx@bib2}{heading}{% \blx@key@heading{\blx@theheading}{#1}} -\define@key{blx@biblist2}{heading}{% +\blx@kv@defkey{blx@biblist2}{heading}{% \blx@key@heading{\blx@theheading}{#1}} -\define@key{blx@bbs}{heading}{% +\blx@kv@defkey{blx@bbs}{heading}{% \blx@key@heading{\blx@theheading}{#1}} -\define@key{blx@bbg}{heading}{% +\blx@kv@defkey{blx@bbg}{heading}{% \blx@key@heading{\blx@theheading}{#1}} \def\blx@key@heading#1#2{% @@ -9045,13 +9053,13 @@ {\def#1{#2}}} \def\blx@default@theenv{bibliography} -\define@key{blx@bibdefaults}{env}{% +\blx@kv@defkey{blx@bibdefaults}{env}{% \blx@key@env{\blx@default@theenv}{#1}} -\define@key{blx@bib2}{env}{\blx@key@env{\blx@theenv}{#1}} -\define@key{blx@biblist2}{env}{\blx@key@env{\blx@theenv}{#1}} -\define@key{blx@bbs}{env}{\blx@key@env{\blx@theenv}{#1}} -\define@key{blx@bbg}{env}{\blx@key@env{\blx@theenv}{#1}} -\define@key{blx@bbc}{env}{\blx@key@env{\blx@theenv}{#1}} +\blx@kv@defkey{blx@bib2}{env}{\blx@key@env{\blx@theenv}{#1}} +\blx@kv@defkey{blx@biblist2}{env}{\blx@key@env{\blx@theenv}{#1}} +\blx@kv@defkey{blx@bbs}{env}{\blx@key@env{\blx@theenv}{#1}} +\blx@kv@defkey{blx@bbg}{env}{\blx@key@env{\blx@theenv}{#1}} +\blx@kv@defkey{blx@bbc}{env}{\blx@key@env{\blx@theenv}{#1}} \def\blx@key@env#1#2{% \ifcsundef{blx@env@#2} @@ -9062,11 +9070,11 @@ {\def#1{#2}}} \let\blx@default@thetitle\@empty -\define@key{blx@bibdefaults}{title}{% +\blx@kv@defkey{blx@bibdefaults}{title}{% \def\blx@default@thetitle{#1}} -\define@key{blx@bhd}{title}{\def\blx@thetitle{#1}} -\define@key{blx@bib2}{title}{\def\blx@thetitle{#1}} -\define@key{blx@biblist2}{title}{\def\blx@thetitle{#1}} +\blx@kv@defkey{blx@bhd}{title}{\def\blx@thetitle{#1}} +\blx@kv@defkey{blx@bib2}{title}{\def\blx@thetitle{#1}} +\blx@kv@defkey{blx@biblist2}{title}{\def\blx@thetitle{#1}} \cslet{blx@note@}\@empty \def\blx@key@bibnote#1#2{% @@ -9078,49 +9086,51 @@ {\def#1{#2}}} \let\blx@default@theprenote\@empty -\define@key{blx@bibdefaults}{prenote}{% +\blx@kv@defkey{blx@bibdefaults}{prenote}{% \blx@key@bibnote{\blx@default@theprenote}{#1}} -\define@key{blx@bib2}{prenote}{% +\blx@kv@defkey{blx@bib2}{prenote}{% \blx@key@bibnote{\blx@theprenote}{#1}} -\define@key{blx@biblist2}{prenote}{% +\blx@kv@defkey{blx@biblist2}{prenote}{% \blx@key@bibnote{\blx@theprenote}{#1}} -\define@key{blx@bbs}{prenote}{% +\blx@kv@defkey{blx@bbs}{prenote}{% \blx@key@bibnote{\blx@theprenote}{#1}} -\define@key{blx@bbg}{prenote}{% +\blx@kv@defkey{blx@bbg}{prenote}{% \blx@key@bibnote{\blx@theprenote}{#1}} -\define@key{blx@bbc}{prenote}{% +\blx@kv@defkey{blx@bbc}{prenote}{% \blx@key@bibnote{\blx@theprenote}{#1}} \let\blx@default@thepostnote\@empty -\define@key{blx@bibdefaults}{postnote}{% +\blx@kv@defkey{blx@bibdefaults}{postnote}{% \blx@key@bibnote{\blx@default@thepostnote}{#1}} -\define@key{blx@bib2}{postnote}{% +\blx@kv@defkey{blx@bib2}{postnote}{% \blx@key@bibnote{\blx@thepostnote}{#1}} -\define@key{blx@biblist2}{postnote}{% +\blx@kv@defkey{blx@biblist2}{postnote}{% \blx@key@bibnote{\blx@thepostnote}{#1}} -\define@key{blx@bbs}{postnote}{% +\blx@kv@defkey{blx@bbs}{postnote}{% \blx@key@bibnote{\blx@thepostnote}{#1}} -\define@key{blx@bbg}{postnote}{% +\blx@kv@defkey{blx@bbg}{postnote}{% \blx@key@bibnote{\blx@thepostnote}{#1}} -\define@key{blx@bbc}{postnote}{% +\blx@kv@defkey{blx@bbc}{postnote}{% \blx@key@bibnote{\blx@thepostnote}{#1}} -\let\abx@default@locallabelwidth\@gobble -\define@key{blx@bibdefaults}{locallabelwidth}{% - \blx@key@locallabelwidth{\abx@default@locallabelwidth}{#1}} -\define@key{blx@bib1}{locallabelwidth}[]{} -\define@key{blx@biblist1}{locallabelwidth}[]{} -\define@key{blx@bib2}{locallabelwidth}[true]{% - \blx@key@locallabelwidth{\abx@locallabelwidth}{#1}} -\define@key{blx@biblist2}{locallabelwidth}[true]{% - \blx@key@locallabelwidth{\abx@locallabelwidth}{#1}} - -\def\blx@key@locallabelwidth#1#2{% - \ifstrequal{#2}{true} - {\def#1{\blx@locallabelwidth}} - {\let#1\@gobble}} - -\define@key{blx@bib2}{resetnumbers}[true]{% + +\blx@kv@defkey{blx@bibdefaults}{locallabelwidth}{% + \blx@key@locallabelwidth{#1}} +\blx@kv@defkey{blx@bib1}{locallabelwidth}[]{} +\blx@kv@defkey{blx@biblist1}{locallabelwidth}[]{} +\blx@kv@defkey{blx@bib2}{locallabelwidth}[true]{% + \blx@key@locallabelwidth{#1}} +\blx@kv@defkey{blx@biblist2}{locallabelwidth}[true]{% + \blx@key@locallabelwidth{#1}} + +\def\blx@key@locallabelwidth#1{% + \ifstrequal{#1}{true} + {\let\blx@locallabelwidth@init\blx@locallabelwidth@setlengths + \let\blx@locallabelwidth@finish\blx@locallabelwidth@write} + {\let\blx@locallabelwidth@init\relax + \let\blx@locallabelwidth@finish\relax}} + +\blx@kv@defkey{blx@bib2}{resetnumbers}[true]{% \iftoggle{blx@defernumbers} {\ifstrequal{#1}{true} {\csnumdef{blx@labelnumber@\the\c@refsection}{0}} @@ -9131,7 +9141,7 @@ Option 'resetnumbers' requires 'defernumbers=true'.\MessageBreak Ignoring 'resetnumbers=true'}}} -\define@key{blx@bib2}{omitnumbers}[true]{% +\blx@kv@defkey{blx@bib2}{omitnumbers}[true]{% \ifstrequal{#1}{true} {\iftoggle{blx@defernumbers} {\toggletrue{blx@omitnumbers}} @@ -9142,7 +9152,7 @@ \newrobustcmd*{\DeclarePrintbibliographyDefaults}{% - \setkeys{blx@bibdefaults}} + \blx@kv@setkeys{blx@bibdefaults}} % [<options>] \newrobustcmd*{\printbibheading}{% @@ -9156,7 +9166,7 @@ \let\blx@theheading\blx@default@theheading \let\blx@thetitle\blx@default@thetitle \blx@safe@actives - \setkeys{blx@bhd}{#1}% + \blx@kv@setkeys{blx@bhd}{#1}% \blx@rest@actives \blx@bibheading\blx@theheading\blx@thetitle \endgroup} @@ -9188,7 +9198,7 @@ \edef\blx@tempe{\the\c@refsection}% default refsection is current \blx@safe@actives \togglefalse{blx@resetnumsexplicit}% - \setkeys{blx@bib1}{#1}% First pass options keys - section and resetnumbers + \blx@kv@setkeys{blx@bib1}{#1}% First pass options keys - section and resetnumbers % Is there a user-specified option for resetnumbers? If so, this overrides the default % "labelprefix implies resetnumbers" behaviour \iftoggle{blx@resetnumsexplicit} @@ -9197,7 +9207,7 @@ {\ifdefempty\blx@refcontext@labelprefix@real} {\@secondoftwo} {} - {\setkeys{blx@bib2}{resetnumbers}}}% + {\blx@kv@setkeys{blx@bib2}{resetnumbers}}}% \blx@rest@actives \ifcsvoid{blx@dlist@entry@\blx@tempe @\blx@refcontext@context} {} @@ -9207,7 +9217,7 @@ % \printbibliography following one with this set will inherit any % previous "true" value \togglefalse{blx@omitnumbers}% - \setkeys{blx@bib2}{#1}% ... now we have correct \blx@tempa, set rest of options + \blx@kv@setkeys{blx@bib2}{#1}% ... now we have correct \blx@tempa, set rest of options \blx@rest@actives % Add datalist to list of seen datalists to prevent duplicates \xifinlist{\blx@refcontext@context @\blx@tempe @entry}\blx@dlistnames @@ -9239,7 +9249,7 @@ \let\blx@thetitle\blx@default@thetitle \c@refsection\z@ \blx@safe@actives - \setkeys{blx@bbs}{#1}% + \blx@kv@setkeys{blx@bbs}{#1}% \blx@rest@actives \togglefalse{blx@tempa}% \blx@refsections} @@ -9278,7 +9288,7 @@ \let\blx@thetitle\blx@default@thetitle \c@refsegment\@ne \blx@safe@actives - \setkeys{blx@bbg}{#1}% + \blx@kv@setkeys{blx@bbg}{#1}% \blx@rest@actives \togglefalse{blx@tempa}% \blx@refsegments} @@ -9322,7 +9332,7 @@ \let\blx@thetitle\blx@default@thetitle \c@refsection\z@ \blx@safe@actives - \setkeys{blx@bbc}{#1}% + \blx@kv@setkeys{blx@bbc}{#1}% \blx@rest@actives \togglefalse{blx@tempa}% \forlistloop\blx@bibcategory\blx@categories @@ -9346,7 +9356,7 @@ \endgroup} % {<entrykey>,...} -\def\blx@bibliography#1{% +\def\blx@bibliography{% \blx@bibheading\blx@theheading\blx@thetitle \blx@bibnote\blx@theprenote \begingroup @@ -9359,17 +9369,18 @@ \ifnum\bibnamesep=\z@ \let\blx@namesep\relax \fi - \abx@locallabelwidth{#1}% + \blx@locallabelwidth@init \csuse{blx@env@\blx@theenv}% \csuse{blx@hook@bibinit}% \csuse{blx@hook@bibinit@next}% \let\blx@do\blx@bibitem \let\blx@done\blx@endbibliography - \blx@listloop{#1}} + \blx@listloop} \def\blx@endbibliography{% \csuse{blx@endenv@\blx@theenv}% \blx@noitem + \blx@locallabelwidth@finish \endgroup \blx@bibnote\blx@thepostnote \endgroup} @@ -9385,7 +9396,7 @@ \let\newrefsegment\relax \ifblank{#2} {\csuse{blx@head@#1}} - {\csuse{blx@head@#1}[#2]}% + {\csuse{blx@head@#1}[{#2}]}% \let\newrefsection\blx@newrefsection \let\newrefsegment\blx@newrefsegment} @@ -9411,25 +9422,6 @@ \csuse{blx@bibsetup}} % {<entrykey>} -\def\blx@lengthitem#1{% - \blx@ifdata{#1} - {\begingroup - \blx@getdata{#1}% - \blx@bibcheck - \iftoggle{blx@skipentry}{}{% - \iftoggle{blx@labelnumber} - {\blx@bbl@locallabelnumberwidth} - {}% - \iftoggle{blx@labelalpha} - {\blx@bbl@locallabelalphawidth} - {}% - \nottoggle{blx@skipbiblist} - {\blx@bbl@locallabelfields} - {}}% - \endgroup} - {}} - -% {<entrykey>} % output a bib item, this is why \blx@thelabelnumber is here so that % labelnumber is deferred if defernumbers=true \def\blx@bibitem#1{% @@ -9444,6 +9436,15 @@ \blx@setoptions@entry \blx@thelabelnumber \addtocounter{instcount}\@ne + \iftoggle{blx@labelnumber} + {\blx@bbl@locallabelnumberwidth} + {}% + \iftoggle{blx@labelalpha} + {\blx@bbl@locallabelalphawidth} + {}% + \nottoggle{blx@skipbiblist} + {\blx@bbl@locallabelfields} + {}% \csuse{blx@item@\blx@theenv}\relax \blx@initsep \blx@namesep @@ -9605,14 +9606,14 @@ \appto\blx@mknohyperref{\let\blx@anchor\relax} -\define@key{blx@biblist2}{driver}{\blx@key@driver{#1}} -\define@key{blx@biblist1}{driver}{} +\blx@kv@defkey{blx@biblist2}{driver}{\blx@key@driver{#1}} +\blx@kv@defkey{blx@biblist1}{driver}{} \def\blx@key@driver#1{% \def\blx@thebiblistdriver{#1}} % Custom bibliography list -% [<otions>]{biblistname} +% [<options>]{biblistname} \newrobustcmd*{\printbiblist}[2][]{% \begingroup \delimcontext{biblist}% @@ -9635,12 +9636,15 @@ \ifcsdef{blx@sortingtemplate@#2} {#2} {\blx@refcontext@sortingtemplatename}}% - % locally define this since we want to fetch data from the datalist named - % after the list we are printing rather than the data in refcontext list - % Note that the name must be unique so we prepend "#2:" because the combination of - % options might not generate a unique name since sortschemename has a fallback to the - % refcontext scheme if there is no sortscheme named after the list - \blx@edef@refcontext{#2:\blx@tempc/% + % locally define this since we want to fetch data from the datalist + % name after the list we are printing rather than the data in + % refcontext list. + % Note that the name must be unique so we prepend any filter name + % because the combination of options might not generate a unique name + % since sortschemename has a fallback to the refcontext scheme if there + % is no sortscheme named after the list + \blx@kv@setkeys{blx@biblist1}{#1}% Set section and biblistfilter only, if present ... + \blx@edef@refcontext{\blx@thebiblistfilter :\blx@tempc/% \blx@refcontext@sortingnamekeytemplatename/% \blx@refcontext@labelprefix/% \blx@refcontext@uniquenametemplatename/% @@ -9658,13 +9662,12 @@ {} {\listxadd\blx@biblists\blx@tempc}% \blx@auxwrite\@mainaux{}{\string\abx@aux@biblist{\blx@tempc}}% - \setkeys{blx@biblist1}{#1}% Set section only, if present ... \blx@rest@actives \ifcsvoid{blx@dlist@list@\blx@tempe @\blx@refcontext@context} {} {\letcs\blx@tempa{blx@dlist@list@\blx@tempe @\blx@refcontext@context}}% \blx@safe@actives - \setkeys{blx@biblist2}{#1}% ... now we have correct \blx@tempa, set rest of options + \blx@kv@setkeys{blx@biblist2}{#1}% ... now we have correct \blx@tempa, set rest of options \ifundef\blx@bibcheck {\ifcsdef{blx@bibcheck@#2} {\letcs\blx@bibcheck{blx@bibcheck@#2}} @@ -9686,11 +9689,21 @@ \iftoggle{blx@defernumbers} {\global\let\blx@printbibchecks\relax} {\iftoggle{blx@labelnumber} - {} + {\ifundef\blx@printbibchecks@suppresswarn + {\blx@warning@noline{% + Split bibliography detected.\MessageBreak + Many simple split bibliography setups with\MessageBreak + non-overlapping bibliographies benefit from% + \MessageBreak + setting 'defernumbers=true'.\MessageBreak + See the documentation for details.\MessageBreak + This warning can be suppressed with\MessageBreak + '\string\BiblatexSplitbibDefernumbersWarningOff'}} + {}} {\global\let\blx@printbibchecks\relax}}} % {<entrykey>,...} -\def\blx@biblist#1{% +\def\blx@biblist{% \if@twocolumn \@restonecoltrue\onecolumn \else @@ -9702,16 +9715,17 @@ \blx@bibinit \let\@noitemerr\@empty \def\blx@noitem{\blx@warn@biblistempty{\blx@thebiblist}}% - \abx@locallabelwidth{#1}% + \blx@locallabelwidth@init \csuse{blx@env@\blx@theenv}% \csuse{blx@hook@biblistinit@\blx@thebiblist}% \let\blx@do\blx@biblistitem \let\blx@done\blx@endbiblist - \blx@listloop{#1}} + \blx@listloop} \def\blx@endbiblist{% \csuse{blx@endenv@\blx@theenv}% \blx@noitem + \blx@locallabelwidth@finish \endgroup \blx@bibnote\blx@thepostnote \endgroup @@ -9735,6 +9749,15 @@ \blx@setoptions@type\abx@field@entrytype \blx@setoptions@entry \addtocounter{instcount}\@ne + \iftoggle{blx@labelnumber} + {\blx@bbl@locallabelnumberwidth} + {}% + \iftoggle{blx@labelalpha} + {\blx@bbl@locallabelalphawidth} + {}% + \nottoggle{blx@skipbiblist} + {\blx@bbl@locallabelfields} + {}% \csuse{blx@item@\blx@theenv}\relax \csuse{blx@hook@biblistitem@\blx@thebiblist}% \blx@execute @@ -9772,8 +9795,8 @@ \def\refcontext@i[#1]{% \@ifnextchar\bgroup - {\refcontext@ii[#1]} - {\refcontext@ii[#1]{}}} + {\refcontext@ii[{#1}]} + {\refcontext@ii[{#1}]{}}} \newcommand*{\refcontext@ii}[2][]{% \iftoggle{blx@refcontext} @@ -9783,11 +9806,12 @@ % Set refcontext from named refcontext, if given \ifblank{#2} {} - {\edef\z{% - \noexpand\setkeys{blx@refcontext}{\csuse{blx@refcontext@name@#2}}}% - \z}% + {\begingroup + \edef\blx@tempa{\endgroup% + \noexpand\blx@kv@setkeys{blx@refcontext}{\csuse{blx@refcontext@name@#2}}}% + \blx@tempa}% % Override with explicit refcontext keyvals, if given - \setkeys{blx@refcontext}{#1}% + \blx@kv@setkeys{blx@refcontext}{#1}% % Add the sortingtemplate to the list of sortingtemplates so we can track % special cases like sorting=none which need cite order change detection \xifinlist\blx@refcontext@sortingtemplatename\blx@sortingtemplatenames @@ -9834,15 +9858,15 @@ \blx@refcontext@labelalphanametemplatename}} % Meta option to set all name template options -\define@key{blx@refcontext}{nametemplates}{% +\blx@kv@defkey{blx@refcontext}{nametemplates}{% \gdef\blx@refcontext@sortingnamekeytemplatename{#1}% \gdef\blx@refcontext@uniquenametemplatename{#1}% \gdef\blx@refcontext@labelalphanametemplatename{#1}} -\define@key{blx@refcontext}{sorting}{\gdef\blx@refcontext@sortingtemplatename{#1}} -\define@key{blx@refcontext}{sortingnamekeytemplatename}{\gdef\blx@refcontext@sortingnamekeytemplatename{#1}} -\define@key{blx@refcontext}{uniquenametemplatename}{\gdef\blx@refcontext@uniquenametemplatename{#1}} -\define@key{blx@refcontext}{labelalphanametemplatename}{\gdef\blx@refcontext@labelalphanametemplatename{#1}} +\blx@kv@defkey{blx@refcontext}{sorting}{\gdef\blx@refcontext@sortingtemplatename{#1}} +\blx@kv@defkey{blx@refcontext}{sortingnamekeytemplatename}{\gdef\blx@refcontext@sortingnamekeytemplatename{#1}} +\blx@kv@defkey{blx@refcontext}{uniquenametemplatename}{\gdef\blx@refcontext@uniquenametemplatename{#1}} +\blx@kv@defkey{blx@refcontext}{labelalphanametemplatename}{\gdef\blx@refcontext@labelalphanametemplatename{#1}} % labelprefix cannot be used as is because it is used to construct the internal % refcontext name which is referenced/expanded a lot all over the place. So, @@ -9850,7 +9874,7 @@ % But that is not enough since the MD5 hash function expands the argument all % the way and so unexpandable content like \dag breaks. % Unexpandable content should be protected with \detokenize. -\define@key{blx@refcontext}{labelprefix}{% +\blx@kv@defkey{blx@refcontext}{labelprefix}{% \xdef\blx@refcontext@labelprefix{\blx@mdfivesum{#1}}% \gdef\blx@refcontext@labelprefix@real{#1}% \iftoggle{blx@defernumbers} @@ -9873,7 +9897,7 @@ \let\blx@tempc\@empty% \def\blx@tempd{global}% \def\blx@tempe{global}% - \setkeys{blx@assignrefcontext}{#2}% + \blx@kv@setkeys{blx@assignrefcontext}{#2}% \def\do##1{% \listxadd\blx@assignedrefcontextkeywlist{##1}% \csxdef{blx@assignedrefcontextkeyws#1@\the\c@refsection @##1}% @@ -9892,7 +9916,7 @@ \let\blx@tempc\@empty% \def\blx@tempd{global}% \def\blx@tempe{global}% - \setkeys{blx@assignrefcontext}{#2}% + \blx@kv@setkeys{blx@assignrefcontext}{#2}% \def\do##1{% \listxadd\blx@assignedrefcontextcatlist{##1}% \csxdef{blx@assignedrefcontextcats#1@\the\c@refsection @##1}% @@ -9911,24 +9935,24 @@ \let\blx@tempc\@empty% \def\blx@tempd{global}% \def\blx@tempe{global}% - \setkeys{blx@assignrefcontext}{#2}% + \blx@kv@setkeys{blx@assignrefcontext}{#2}% \def\do##1{% \csxdef{blx@assignedrefcontextkeys#1@\the\c@refsection @##1}% {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}% \docsvlist{#3}} % Meta option to set all name template options -\define@key{blx@assignrefcontext}{nametemplates}{% +\blx@kv@defkey{blx@assignrefcontext}{nametemplates}{% \def\blx@tempb{#1}% \def\blx@tempd{#1}% \def\blx@tempe{#1}} -\define@key{blx@assignrefcontext}{sorting}{\def\blx@tempa{#1}} -\define@key{blx@assignrefcontext}{sortingnamekeytemplatename}{\def\blx@tempb{#1}} -\define@key{blx@assignrefcontext}{labelprefix}{% +\blx@kv@defkey{blx@assignrefcontext}{sorting}{\def\blx@tempa{#1}} +\blx@kv@defkey{blx@assignrefcontext}{sortingnamekeytemplatename}{\def\blx@tempb{#1}} +\blx@kv@defkey{blx@assignrefcontext}{labelprefix}{% \edef\blx@tempc{\blx@mdfivesum{#1}}} -\define@key{blx@assignrefcontext}{uniquenametemplatename}{\def\blx@tempd{#1}} -\define@key{blx@assignrefcontext}{labelalphanametemplatename}{\def\blx@tempe{#1}} +\blx@kv@defkey{blx@assignrefcontext}{uniquenametemplatename}{\def\blx@tempd{#1}} +\blx@kv@defkey{blx@assignrefcontext}{labelalphanametemplatename}{\def\blx@tempe{#1}} % Reference sections \newrobustcmd*{\newrefsection}{% @@ -10043,6 +10067,11 @@ \AtEndDocument{% \endrefcontext + % close non-0 refsection if active + \ifnum\c@refsection>\z@ + \blx@endrefsection + \fi + % close refsection 0 \blx@endrefsection \def\abx@aux@refsection#1#2{\blx@addchecksum{#1}{#2}}} @@ -10144,20 +10173,27 @@ %% that we can use for that purpose as well. %% This is fairly new, so we need to have a fallback for older versions. -%% The standard classes are tricky. They have no good hooks and just -%% for sections at least \pretocmd-ing executes the code before -%% counters are increased, so the labels attach to the wrong thing. +%% The standard classes are tricky. +%% We insert something in \@startsection to get the level number +%% and then patch \@sect and \@ssect so the label attaches to the +%% right thing. %% Test for correct KOMA patch method % KOMA 3.27 has \AddtoDoHook \newcommand*{\blx@ifkoma@AddtoDoHook}{% - \ifboolexpr{not test {\ifcsundef{KOMAClassName}} - and not test {\ifcsundef{AddtoDoHook}}}} + \ifcsundef{KOMAClassName} + {\@secondoftwo} + {\ifcsundef{AddtoDoHook} + {\@secondoftwo} + {\@firstoftwo}}} % KOMA 3.26 has \startsection@secnumdepth for some testing \newcommand*{\blx@ifkoma@startsection}{% - \ifboolexpr{not test {\ifcsundef{KOMAClassName}} - and not test {\ifcsundef{startsection@secnumdepth}}}} + \ifcsundef{KOMAClassName} + {\@secondoftwo} + {\ifcsundef{startsection@secnumdepth} + {\@secondoftwo} + {\@firstoftwo}}} \newcommand*{\blx@ifmemoir}{\@ifclassloaded{memoir}} @@ -10202,7 +10238,12 @@ \apptocmd\memchapinfo{#1} {}{\blx@err@patch{\string\memchapinfo}}% \apptocmd\memchapstarinfo{#1} - {}{\blx@err@patch{\string\memchapstarinfo}}} + {}{\blx@err@patch{\string\memchapstarinfo}}% + \apptocmd\memappchapinfo{#1} + {}{\blx@err@patch{\string\memappchapinfo}}% + \apptocmd\memappchapstarinfo{#1} + {}{\blx@err@patch{\string\memappchapstarinfo}}% +} \def\blx@refpatch@chapter@std#1{% \pretocmd\@makechapterhead{#1} @@ -10222,7 +10263,7 @@ {\blx@refpatch@chapter@std{#1}}}}} % \section, \subsection -% {<section csname>}{<precode>}{<section level number>} +% {<section csname>}{<patch code>}{<section level number>} \def\blx@refpatch@sect#1#2#3{% \ifcsundef{#1} {\blx@err@nodocdiv{#1}\@gobbletwo} @@ -10241,6 +10282,8 @@ \def\blx@refpatch@sect@koma@startsection#1#2{% \At@startsection{\ifnumequal{\startsection@secnumdepth}{#2}{#1}{}}} +% The memoir classes have a nice hook we can use +% {<section csname>}{<patch code>} \edef\blx@refpatch@sect@memoir#1#2{% \apptocmd\noexpand\memsecinfo {\noexpand\blx@refpatch@sect@memoir@i{\string#1}{#1}{#2}} @@ -10252,31 +10295,94 @@ \def\blx@refpatch@sect@memoir@i#1#2#3{% \ifstrequal{#1}{#2}{#3}{}} -\edef\blx@refpatch@sect@std#1#2{% +% The standard classes have \@startsection, \@sect and \@ssect. +% \@startsection is used by unstarred and starred sections alike +% but it comes in too early if we set labels. +% The counter is only stepped in \@sect, so we need to patch +% that if we want \labels to attach to the right thing. +% But then we also need to patch \@ssect for starred/un-numbered +% sections. Unfortunately, \@ssect doesn't know the level number +% so we patch \@startsection to remember the level number +% in blx@refpatch@current@sectlevel +% and then patch \@sect and \@ssect with the actual code +% testing against blx@refpatch@current@sectlevel. + +% {<do initialization>}{<csv list to do>}{<error>} +\def\blx@refpatch@docsvlist#1#2#3{% + \toggletrue{blx@tempa}% + #1% + \docsvlist{#2}% + \iftoggle{blx@tempa} + {#3} + {}% + \let\do\noexpand} + +\newtoggle{blx@refpatch@sect@std@pre@done} + +\def\blx@refpatch@sect@std@pre{% + \iftoggle{blx@refpatch@sect@std@pre@done} + {} + {\blx@refpatch@docsvlist + {\blx@refpatch@sect@std@pre@defdo} + {\scr@startsection, + \@startsection} + {\blx@err@patch{\string\@startsection}} + \global\toggletrue{blx@refpatch@sect@std@pre@done}}} + +\edef\blx@refpatch@sect@std@pre@defdo{% \def\noexpand\do##1{% - \pretocmd##1% - {\noexpand\blx@refpatch@sect@std@i{#1}{#2}{\string#2}} + \pretocmd##1 + {\csnumdef{blx@refpatch@current@sectlevel}{\string#2}} {\togglefalse{blx@tempa}\noexpand\listbreak} - {}}% - \noexpand\blx@refpatch@sect@std@ii} + {}}} -\def\blx@refpatch@sect@std@i#1#2#3{% - \ifnumequal{#2}{#3}{#1}{}} +\edef\blx@refpatch@sect@std@defdo@sect#1#2{% + \def\noexpand\do##1{% + \patchcmd##1% + {\noexpand\@tempskipa \string#5\noexpand\relax} + {\noexpand\blx@refpatch@sect@std@testandruncode{#1}{#2}% + \noexpand\@tempskipa \string#5\noexpand\relax} + {\togglefalse{blx@tempa}\noexpand\listbreak} + {}}} -\def\blx@refpatch@sect@std@ii{% - \toggletrue{blx@tempa}% - \docsvlist{% order does matter: - \H@old@sectm@m,% memoir+hyperref (what a mess...) - \M@sect,% memoir - \H@old@sect,% hyperref - \NR@sect,% nameref - \scr@sect,% koma-script 3.x - \scr@startsection,% bad hack for koma 3.15 <= v <= 3.25 - \@startsection}% latex - \iftoggle{blx@tempa} +\edef\blx@refpatch@sect@std@defdo@ssect#1#2{% + \def\noexpand\do##1{% + \patchcmd##1% + {\noexpand\@tempskipa \string#3\noexpand\relax} + {\noexpand\blx@refpatch@sect@std@testandruncode{#1}{#2}% + \noexpand\@tempskipa \string#3\noexpand\relax} + {\togglefalse{blx@tempa}\noexpand\listbreak} + {}}} + +% {<patch code>}{<section level number>} +\def\blx@refpatch@sect@std#1#2{% + \blx@refpatch@sect@std@pre + % \@sect for numbered (unstarred) sections + \blx@refpatch@docsvlist + {\blx@refpatch@sect@std@defdo@sect{#1}{#2}} + {\H@old@sectm@m,% memoir+hyperref (what a mess...) + \M@sect,% memoir + \H@old@sect,% hyperref + \NR@sect,% nameref + \scr@sect,% koma-script 3.x + \scr@startsection,% bad hack for koma 3.15 <= v <= 3.25 + \@sect} {\blx@err@patch{\string\@sect}} - {}% - \let\do\noexpand} + % \@ssect for un-numbered (starred) sections + \blx@refpatch@docsvlist + {\blx@refpatch@sect@std@defdo@ssect{#1}{#2}} + {\H@old@ssectm@m,% memoir+hyperref (what a mess...) + \M@ssect,% memoir + \H@old@ssect,% hyperref + \NR@ssect,% nameref + \scr@ssect,% koma-script 3.x + \@ssect} + {\blx@err@patch{\string\@ssect}}} + +\def\blx@refpatch@sect@std@testandruncode#1#2{% + \ifnumequal{#2}{0\csuse{blx@refpatch@current@sectlevel}} + {#1} + {}} % Bibliography categories @@ -10366,10 +10472,13 @@ {\blx@addbib@i{#1}} {\blx@addbib@i{#1}[]}} +% kill all spaces and % +% see https://github.com/plk/biblatex/issues/1026 \def\blx@addbib@i#1[#2]{% \begingroup - \blx@hook@fileverb - \blx@addbib@ii{#1}{#2}} + \@ifnextchar\bgroup + {\blx@hook@fileverb\blx@addbib@ii{#1}{#2}}% + {\blx@hook@fileverb\blx@addbib@ii{#1}{#2}}} \def\blx@addbib@ii#1#2#3{% \endgroup @@ -10379,7 +10488,8 @@ \def\blx@tempc{local}% \undef\blx@tempd \let\blx@tempe\@empty - \setkeys{blx@addbib}{#2}% + \def\blx@tempf{false}% + \blx@kv@setkeys{blx@addbib}{#2}% \blx@xsanitizeafter{#1}{#3}% \endgroup} @@ -10390,22 +10500,27 @@ \catcode`\{=\@ne \catcode`\}=\tw@} -\define@key{blx@addbib}{type}{\def\blx@tempa{#1}} -\define@key{blx@addbib}{datatype}{\def\blx@tempb{#1}} -\define@key{blx@addbib}{location}{\def\blx@tempc{#1}} -\define@key{blx@addbib}{label}{\edef\blx@tempd{\detokenize{#1}}} -\define@key{blx@addbib}{bibencoding}{\def\blx@tempe{#1}} +\blx@kv@defkey{blx@addbib}{type}{\def\blx@tempa{#1}} +\blx@kv@defkey{blx@addbib}{datatype}{\def\blx@tempb{#1}} +\blx@kv@defkey{blx@addbib}{location}{\def\blx@tempc{#1}} +\blx@kv@defkey{blx@addbib}{label}{\edef\blx@tempd{\detokenize{#1}}} +\blx@kv@defkey{blx@addbib}{bibencoding}{\def\blx@tempe{#1}} +\blx@kv@defkey{blx@addbib}{glob}[true]{\def\blx@tempf{#1}} % \blx@res@type@<resource> resource -> type % \blx@res@data@<resource> resource -> datatype % \blx@res@loca@<resource> resource -> datatype % \blx@res@labl@<resource> label -> resource +% \blx@res@glob@<resource> glob -> true|false \def\blx@addbib@register#1{% \csxdef{blx@res@type@#1}{\blx@tempa}% \csxdef{blx@res@data@#1}{\blx@tempb}% \csxdef{blx@res@loca@#1}{\blx@tempc}% \csxdef{blx@res@bibencoding@#1}{\blx@tempe}% + \ifdef\blx@tempf + {\csxdef{blx@res@glob@#1}{\blx@tempf}} + {}% \ifdef\blx@tempd {\csxdef{blx@res@labl@\blx@tempd}{#1}} {}} @@ -10438,6 +10553,9 @@ {\ifcsvoid{blx@res@bibencoding@#2} {} { encoding="\csuse{blx@res@bibencoding@#2}"}} + {\ifcsvoid{blx@res@glob@#2} + {} + { glob="\csuse{blx@res@glob@#2}"}} {#3}}} %% Citations @@ -10452,6 +10570,12 @@ \newrobustcmd*{\AtEachCitekey}{% \iftoggle{blx@citation}{\appto\blx@hook@citekey}{\@gobble}} +\let\blx@hook@entrykey\@gobble +\newrobustcmd*{\AtEveryEntrykey}{% + \apptocmd{\blx@hook@entrykey}} +\@onlypreamble\AtEveryEntrykey + + \def\blx@imc@UseEveryCiteHook{\csuse{blx@hook@cite}} \def\blx@imc@UseEveryCitekeyHook{\csuse{blx@hook@citekey}} \def\blx@imc@UseEveryMultiCiteHook{\csuse{blx@hook@mcite}} @@ -10550,7 +10674,8 @@ {\ifinlistcs{#1}{blx@miss@\the\c@refsection} {} {\blx@logreq@active{#2{#1}}}} - {\blx@logreq@active{#2{#1}}}}} + {\blx@logreq@active{#2{#1}}}}% + \blx@hook@entrykey{#1}} \protected\def\abx@aux@segm#1#2#3{% \xifinlistcs{\detokenize{#3}}{blx@segm@#1@#2} @@ -10695,7 +10820,7 @@ % {<entrykey>} \def\blx@citeadd#1{% \ifcsdef{blx@keyalias@\the\c@refsection @#1} - {\edef\blx@realkey{\csuse{blx@keyalias@\the\c@refsection @#1}}} + {\letcs\blx@realkey{blx@keyalias@\the\c@refsection @#1}} {\def\blx@realkey{#1}}% \expandafter\blx@getrefcontext\expandafter{\blx@realkey}% needed for \ifdata \expandafter\blx@citation\expandafter{\blx@realkey}\blx@msg@cundefon @@ -11397,7 +11522,7 @@ \long\def\blx@citexpunct@i#1#2#3#4{% \@ifnextchar[%] {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}} - {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}[#1]}} + {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}[{#1}]}} \long\def\blx@citexpunct@ii#1#2[#3]#4{% \blx@thecheckpunct{\blxcitecmd{#1}#2{#3}{#4}}} @@ -11825,7 +11950,7 @@ \ifnameundef{#5} {\blx@warning@entry{'#5' undefined or not a name list}% \abx@missing{#5}} - {\printnames[#4]{#5}}}% + {\printnames[{#4}]{#5}}}% \def\blx@dlimcode{\multicitedelim}% \def\blx@postpunct@saved{#6}% \ifblank{#2} @@ -11853,7 +11978,7 @@ \iflistundef{#5} {\blx@warning@entry{'#5' undefined or not a literal list}% \abx@missing{#5}} - {\printlist[#4]{#5}}}% + {\printlist[{#4}]{#5}}}% \def\blx@dlimcode{\multicitedelim}% \def\blx@postpunct@saved{#6}% \ifblank{#2} @@ -11882,7 +12007,7 @@ \iffieldundef{#5} {\blx@warning@entry{'#5' undefined or not a field}% \abx@missing{#5}} - {\printfield[#4]{#5}}}% + {\printfield[{#4}]{#5}}}% \def\blx@dlimcode{\multicitedelim}% \def\blx@postpunct@saved{#6}% \ifblank{#2} @@ -11947,6 +12072,9 @@ \def\iffieldequals#1#2{\blx@TE{\blx@imc@iffieldequals{#1}{#2}}}% \def\iffieldequalstr#1#2{\blx@TE{\blx@imc@iffieldequalstr{#1}{#2}}}% \def\iffieldsequal#1#2{\blx@TE{\blx@imc@iffieldsequal{#1}{#2}}}% + \def\iflistequalcs#1#2{\blx@TE{\blx@imc@iflistequalcs{#1}{#2}}}% + \def\iflistequals#1#2{\blx@TE{\blx@imc@iflistequals{#1}{#2}}}% + \def\iflistsequal#1#2{\blx@TE{\blx@imc@iflistsequal{#1}{#2}}}% \def\ifbibmacroundef#1{\blx@TE{\blx@imc@ifbibmacroundef{#1}}}% \def\iffieldundef#1{\blx@TE{\blx@imc@iffieldundef{#1}}}% \def\ifnameequalcs#1#2{\blx@TE{\blx@imc@ifnameequalcs{#1}{#2}}}% @@ -12586,8 +12714,8 @@ ~~<bcf:bibdata section="#1">\blx@nl #2% ~~</bcf:bibdata>\blx@nl} -\xdef\blx@xml@datasource#1#2#3#4{% - ~~~~<bcf:datasource type="#1" datatype="#2"#3>#4</bcf:datasource>\blx@nl} +\xdef\blx@xml@datasource#1#2#3#4#5{% + ~~~~<bcf:datasource type="#1" datatype="#2"#3#4>#5</bcf:datasource>\blx@nl} \xdef\blx@xml@citekey#1#2#3{% ~~~~<bcf:citekey order="#3"#2>#1</bcf:citekey>} \xdef\blx@xml@citeset#1#2{% @@ -12713,8 +12841,8 @@ \blx@safe@actives \let\protect\string % options - \edef\labelalphaothers{\labelalphaothers}% - \edef\sortalphaothers{\sortalphaothers}% + \protected@edef\labelalphaothers{\labelalphaothers}% + \protected@edef\sortalphaothers{\sortalphaothers}% \blx@xmlsanitizeafter{\def\labelalphaothers}{\labelalphaothers}% \blx@xmlsanitizeafter{\def\sortalphaothers}{\sortalphaothers}% % Expand the global use* name toggles @@ -13026,7 +13154,7 @@ \let\blx@dm@datatype\@empty \let\blx@member@field\@empty \let\blx@tempb\@empty - \setkeys{blx@datafieldsets@member}{#1}% + \blx@kv@setkeys{blx@datafieldsets@member}{#1}% \eappto\blx@tempa{% \blx@xml@datafieldsets@member{\blx@tempb}}% \ifdefempty\blx@member@field @@ -13051,13 +13179,13 @@ \listcsxadd{blx@datafieldset@\blx@setname}{##1}} \dolistcsloop{blx@datamodelfields@datatypes@\blx@dm@datatype}}}} -\define@key{blx@datafieldsets@member}{datatype}{% characters +\blx@kv@defkey{blx@datafieldsets@member}{datatype}{% characters \appto\blx@tempb{ datatype="#1"}% \def\blx@dm@datatype{#1}} -\define@key{blx@datafieldsets@member}{fieldtype}{% characters +\blx@kv@defkey{blx@datafieldsets@member}{fieldtype}{% characters \appto\blx@tempb{ fieldtype="#1"}% \def\blx@dm@fieldtype{#1}} -\define@key{blx@datafieldsets@member}{field}{% characters +\blx@kv@defkey{blx@datafieldsets@member}{field}{% characters \appto\blx@tempb{ field="#1"}% \def\blx@member@field{#1}} @@ -13093,8 +13221,8 @@ \let\map\blx@sourcemap@map #2% \ifblank{#1} - {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=driver}} - {\setkeys{blx@sourcemap@maps}{#1, level=driver}}% + {\blx@kv@setkeys{blx@sourcemap@maps}{datatype=bibtex, level=driver}} + {\blx@kv@setkeys{blx@sourcemap@maps}{#1, level=driver}}% \eappto\blx@tempa{% \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}% \csxdef{blx@sourcemap@defaults@\blx@tempd}{\blx@tempa}% @@ -13106,8 +13234,8 @@ \let\blx@tempc\@empty \let\map\blx@sourcemap@map \ifblank{#1} - {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=user}} - {\setkeys{blx@sourcemap@maps}{#1, level=user}}% + {\blx@kv@setkeys{blx@sourcemap@maps}{datatype=bibtex, level=user}} + {\blx@kv@setkeys{blx@sourcemap@maps}{#1, level=user}}% #2% \eappto\blx@tempa{% \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}} @@ -13117,20 +13245,20 @@ \let\blx@tempc\@empty \let\map\blx@sourcemap@map \ifblank{#1} - {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=style}} - {\setkeys{blx@sourcemap@maps}{#1, level=style}}% + {\blx@kv@setkeys{blx@sourcemap@maps}{datatype=bibtex, level=style}} + {\blx@kv@setkeys{blx@sourcemap@maps}{#1, level=style}}% #2% \eappto\blx@tempa{% \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}} -\define@key{blx@sourcemap@maps}{datatype}{% characters +\blx@kv@defkey{blx@sourcemap@maps}{datatype}{% characters \eappto\blx@tempb{ datatype="#1"}% \eappto\blx@tempd{#1}} -\define@key{blx@sourcemap@maps}{overwrite}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@maps}{overwrite}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempb{ map\string_overwrite="1"}} {}} -\define@key{blx@sourcemap@maps}{level}{% user|style|driver +\blx@kv@defkey{blx@sourcemap@maps}{level}{% user|style|driver \appto\blx@tempb{ level="#1"}} \newcommand*{\blx@sourcemap@map}[2][]{% @@ -13142,18 +13270,18 @@ \let\step\blx@sourcemap@step \ifblank{#1} {} - {\setkeys{blx@sourcemap@map}{#1}}% + {\blx@kv@setkeys{blx@sourcemap@map}{#1}}% #2% \eappto\blx@tempc{% \blx@xml@sourcemap@map{\blx@tempm}{\blx@tempe}}} -\define@key{blx@sourcemap@map}{overwrite}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@map}{overwrite}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempm{ map\string_overwrite="1"}} {}} -\define@key{blx@sourcemap@map}{foreach}{% characters +\blx@kv@defkey{blx@sourcemap@map}{foreach}{% characters \eappto\blx@tempm{ map\string_foreach="#1"}} -\define@key{blx@sourcemap@map}{refsection}{% integer +\blx@kv@defkey{blx@sourcemap@map}{refsection}{% integer \eappto\blx@tempm{ refsection="#1"}} \newcommand*{\blx@sourcemap@perdatasource}[1]{% @@ -13170,96 +13298,100 @@ \newcommand*{\blx@sourcemap@step}[1][2]{% \let\blx@tempf\@empty - \setkeys{blx@sourcemap@step}{#1}% + \blx@kv@setkeys{blx@sourcemap@step}{#1}% \eappto\blx@tempe{% \blx@xml@sourcemap@step{\blx@tempf}}} -\define@key{blx@sourcemap@step}{typesource}{% characters +\blx@kv@defkey{blx@sourcemap@step}{typesource}{% characters \eappto\blx@tempf{ map\string_type\string_source="#1"}} -\define@key{blx@sourcemap@step}{typetarget}{% characters +\blx@kv@defkey{blx@sourcemap@step}{typetarget}{% characters \eappto\blx@tempf{ map\string_type\string_target="#1"}} -\define@key{blx@sourcemap@step}{final}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{final}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_final="1"}} {}} -\define@key{blx@sourcemap@step}{cited}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{cited}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_entrykey\string_cited="1"}} {}} -\define@key{blx@sourcemap@step}{nocited}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{nocited}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_entrykey\string_nocited="1"}} {}} -\define@key{blx@sourcemap@step}{citedornocited}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{citedornocited}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_entrykey\string_citedornocited="1"}} {}} -\define@key{blx@sourcemap@step}{allnocited}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{allnocited}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_entrykey\string_allnocited="1"}} {}} -\define@key{blx@sourcemap@step}{fieldsource}{% characters +\blx@kv@defkey{blx@sourcemap@step}{starnocited}[true]{% true|false + \ifstrequal{#1}{true} + {\appto\blx@tempf{ map\string_entrykey\string_starnocited="1"}} + {}} +\blx@kv@defkey{blx@sourcemap@step}{fieldsource}{% characters \eappto\blx@tempf{ map\string_field\string_source="#1"}} -\define@key{blx@sourcemap@step}{notfield}{% characters +\blx@kv@defkey{blx@sourcemap@step}{notfield}{% characters \eappto\blx@tempf{ map\string_notfield="#1"}} -\define@key{blx@sourcemap@step}{fieldtarget}{% characters +\blx@kv@defkey{blx@sourcemap@step}{fieldtarget}{% characters \eappto\blx@tempf{ map\string_field\string_target="#1"}} -\define@key{blx@sourcemap@step}{fieldset}{% characters +\blx@kv@defkey{blx@sourcemap@step}{fieldset}{% characters \eappto\blx@tempf{ map\string_field\string_set="#1"}} % We are sanitising the XML here as it's the value of an attribute which % might contain quotes or ampersands (URLs, for example) -\define@key{blx@sourcemap@step}{fieldvalue}{% characters +\blx@kv@defkey{blx@sourcemap@step}{fieldvalue}{% characters \blx@xmlsanitizeafter{\def\blx@temps}{#1}% \eappto\blx@tempf{ map\string_field\string_value="\blx@temps"}} -\define@key{blx@sourcemap@step}{append}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{append}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_append="1"}} {}} -\define@key{blx@sourcemap@step}{appendstrict}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{appendstrict}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_appendstrict="1"}} {}} -\define@key{blx@sourcemap@step}{null}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{null}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_null="1"}} {}} -\define@key{blx@sourcemap@step}{entrynull}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{entrynull}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_entry\string_null="1"}} {}} -\define@key{blx@sourcemap@step}{entrynocite}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{entrynocite}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_entry\string_nocite="1"}} {}} -\define@key{blx@sourcemap@step}{entrynew}{% characters +\blx@kv@defkey{blx@sourcemap@step}{entrynew}{% characters \appto\blx@tempf{ map\string_entry\string_new="#1"}} -\define@key{blx@sourcemap@step}{entrynewtype}{% characters +\blx@kv@defkey{blx@sourcemap@step}{entrynewtype}{% characters \appto\blx@tempf{ map\string_entry\string_newtype="#1"}} -\define@key{blx@sourcemap@step}{entrytarget}{% characters +\blx@kv@defkey{blx@sourcemap@step}{entrytarget}{% characters \appto\blx@tempf{ map\string_entrytarget="#1"}} -\define@key{blx@sourcemap@step}{entryclone}{% characters +\blx@kv@defkey{blx@sourcemap@step}{entryclone}{% characters \appto\blx@tempf{ map\string_entry\string_clone="#1"}} -\define@key{blx@sourcemap@step}{origfield}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{origfield}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_origfield="1"}} {}} -\define@key{blx@sourcemap@step}{origfieldval}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{origfieldval}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_origfieldval="1"}} {}} -\define@key{blx@sourcemap@step}{origentrytype}[true]{% true|false +\blx@kv@defkey{blx@sourcemap@step}{origentrytype}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempf{ map\string_origentrytype="1"}} {}} -\define@key{blx@sourcemap@step}{match}{% characters +\blx@kv@defkey{blx@sourcemap@step}{match}{% characters \appto\blx@tempf{ map\string_match="#1"}} -\define@key{blx@sourcemap@step}{matchi}{% characters +\blx@kv@defkey{blx@sourcemap@step}{matchi}{% characters \appto\blx@tempf{ map\string_matchi="#1"}} -\define@key{blx@sourcemap@step}{notmatch}{% characters +\blx@kv@defkey{blx@sourcemap@step}{notmatch}{% characters \appto\blx@tempf{ map\string_notmatch="#1"}} -\define@key{blx@sourcemap@step}{notmatchi}{% characters +\blx@kv@defkey{blx@sourcemap@step}{notmatchi}{% characters \appto\blx@tempf{ map\string_notmatchi="#1"}} -\define@key{blx@sourcemap@step}{replace}{% characters +\blx@kv@defkey{blx@sourcemap@step}{replace}{% characters \eappto\blx@tempf{ map\string_replace="#1"}} % [<specname>]{<spec>} @@ -13288,29 +13420,29 @@ \let\blx@tempc\@empty \ifblank{#1} {} - {\setkeys{blx@lantem@namepart}{#1}}% + {\blx@kv@setkeys{blx@lantem@namepart}{#1}}% \eappto\blx@tempa{% \blx@xml@labelalphanametemplatenamepart{\blx@tempe}{\blx@tempc}{#2}}} -\define@key{blx@lantem@namepart}{use}[true]{% use* option for namepart true|false +\blx@kv@defkey{blx@lantem@namepart}{use}[true]{% use* option for namepart true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ use="1"}} {}} -\define@key{blx@lantem@namepart}{pre}[true]{% pre option for namepart true|false +\blx@kv@defkey{blx@lantem@namepart}{pre}[true]{% pre option for namepart true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ pre="1"}} {}} -\define@key{blx@lantem@namepart}{compound}[true]{% base option for namepart true|false +\blx@kv@defkey{blx@lantem@namepart}{compound}[true]{% base option for namepart true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ substring\string_compound="1"}} {}} -\define@key{blx@lantem@namepart}{strwidth}{% integer +\blx@kv@defkey{blx@lantem@namepart}{strwidth}{% integer \eappto\blx@tempc{ substring\string_width="#1"}} -\define@key{blx@lantem@field}{strside}{% left|right +\blx@kv@defkey{blx@lantem@field}{strside}{% left|right \ifstrequal{#1}{right} {\eappto\blx@tempc{ substring\string_side="right"}} {\eappto\blx@tempc{ substring\string_side="left"}}} @@ -13356,56 +13488,56 @@ \let\blx@tempc\@empty \ifblank{#1} {} - {\setkeys{blx@latem@field}{#1}}% + {\blx@kv@setkeys{blx@latem@field}{#1}}% \eappto\blx@tempb{% \blx@xml@labelalpha@part{\blx@tempc}{#2}}} -\define@key{blx@latem@field}{uppercase}[true]{% true|false +\blx@kv@defkey{blx@latem@field}{uppercase}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ uppercase="1"}} {}} -\define@key{blx@latem@field}{lowercase}[true]{% true|false +\blx@kv@defkey{blx@latem@field}{lowercase}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ lowercase="1"}} {}} -\define@key{blx@latem@field}{final}[true]{% true|false +\blx@kv@defkey{blx@latem@field}{final}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ final="1"}} {}} -\define@key{blx@latem@field}{strwidth}{% integer +\blx@kv@defkey{blx@latem@field}{strwidth}{% integer \eappto\blx@tempc{ substring\string_width="#1"}} -\define@key{blx@latem@field}{varwidth}[true]{% "v" +\blx@kv@defkey{blx@latem@field}{varwidth}[true]{% "v" \ifstrequal{#1}{true} {\appto\blx@tempc{ substring\string_width="v"}} {}} -\define@key{blx@latem@field}{varwidthnorm}[true]{% "vf" +\blx@kv@defkey{blx@latem@field}{varwidthnorm}[true]{% "vf" \ifstrequal{#1}{true} {\appto\blx@tempc{ substring\string_width="vf"}} {}} -\define@key{blx@latem@field}{varwidthlist}[true]{% "l" +\blx@kv@defkey{blx@latem@field}{varwidthlist}[true]{% "l" \ifstrequal{#1}{true} {\appto\blx@tempc{ substring\string_width="l"}} {}} -\define@key{blx@latem@field}{strfixedcount}{% +\blx@kv@defkey{blx@latem@field}{strfixedcount}{% \eappto\blx@tempc{ substring\string_fixed\string_threshold="#1"}} -\define@key{blx@latem@field}{strwidthmax}{% +\blx@kv@defkey{blx@latem@field}{strwidthmax}{% \eappto\blx@tempc{ substring\string_width\string_max="#1"}} -\define@key{blx@latem@field}{strside}{% left|right +\blx@kv@defkey{blx@latem@field}{strside}{% left|right \ifstrequal{#1}{right} {\eappto\blx@tempc{ substring\string_side="right"}} {\eappto\blx@tempc{ substring\string_side="left"}}} -\define@key{blx@latem@field}{namessep}{% +\blx@kv@defkey{blx@latem@field}{namessep}{% \eappto\blx@tempc{ namessep="#1"}} -\define@key{blx@latem@field}{ifnames}{% +\blx@kv@defkey{blx@latem@field}{ifnames}{% \eappto\blx@tempc{ ifnames="#1"}} -\define@key{blx@latem@field}{names}{% +\blx@kv@defkey{blx@latem@field}{names}{% \eappto\blx@tempc{ names="#1"}} -\define@key{blx@latem@field}{noalphaothers}[true]{% +\blx@kv@defkey{blx@latem@field}{noalphaothers}[true]{% \eappto\blx@tempc{ noalphaothers="1"}} -\define@key{blx@latem@field}{padchar}{% +\blx@kv@defkey{blx@latem@field}{padchar}{% \blx@xmlsanitizeafter{\def\blx@temps}{#1}% \eappto\blx@tempc{ pad\string_char="\expandafter\regexp\expandafter{\blx@temps}"}} -\define@key{blx@latem@field}{padside}{% left|right +\blx@kv@defkey{blx@latem@field}{padside}{% left|right \ifstrequal{#1}{left} {\eappto\blx@tempc{ pad\string_side="left"}} {\eappto\blx@tempc{ pad\string_side="right"}}} @@ -13416,7 +13548,7 @@ \let\blx@tempf\@empty \ifblank{#2} {} - {\setkeys{blx@inherit@default}{#2}}% + {\blx@kv@setkeys{blx@inherit@default}{#2}}% \edef\blx@tempa{\space inherit\string_all="\iftoggle{blx@inherit@all}{true}{false}"\space override\string_target="\iftoggle{blx@inherit@override}{true}{false}"% @@ -13432,11 +13564,11 @@ \newtoggle{blx@inherit@all} \newtoggle{blx@inherit@override} -\define@key{blx@inherit@default}{all}[true]{% true|false +\blx@kv@defkey{blx@inherit@default}{all}[true]{% true|false \settoggle{blx@inherit@all}{#1}} -\define@key{blx@inherit@default}{override}[true]{% true|false +\blx@kv@defkey{blx@inherit@default}{override}[true]{% true|false \settoggle{blx@inherit@override}{#1}} -\define@key{blx@inherit@default}{ignore}{% csv list +\blx@kv@defkey{blx@inherit@default}{ignore}{% csv list \edef\blx@tempf{ ignore="#1"}} % {<source>}{<target>}{<options>} @@ -13444,15 +13576,15 @@ \let\blx@tempc\@empty \ifblank{#3} {} - {\setkeys{blx@inherit@except}{#3}}% + {\blx@kv@setkeys{blx@inherit@except}{#3}}% \eappto\blx@tempb{% \blx@xml@inherit@type{#1}{#2}{\blx@tempc}}} -\define@key{blx@inherit@except}{all}[true]{% true|false +\blx@kv@defkey{blx@inherit@except}{all}[true]{% true|false \eappto\blx@tempc{ inherit\string_all="#1"}} -\define@key{blx@inherit@except}{override}[true]{% true|false +\blx@kv@defkey{blx@inherit@except}{override}[true]{% true|false \eappto\blx@tempc{ override\string_target="#1"}} -\define@key{blx@inherit@except}{ignore}{% csv list +\blx@kv@defkey{blx@inherit@except}{ignore}{% csv list \eappto\blx@tempc{ ignore="#1"}} % {<type,type,...>}{<type,type,...>}{<spec>} @@ -13462,7 +13594,7 @@ \let\blx@tempf\@empty \ifblank{#1} {} - {\setkeys{blx@inherit}{#1}}% + {\blx@kv@setkeys{blx@inherit}{#1}}% \forcsvlist{\blx@inherit@i{#3}}{#2}% \let\blx@tempb\@empty \let\inherit\blx@inherit@field @@ -13488,17 +13620,17 @@ \let\blx@tempc\@empty \ifblank{#1} {} - {\setkeys{blx@inherit@field}{#1}}% + {\blx@kv@setkeys{blx@inherit@field}{#1}}% \eappto\blx@tempb{% \blx@xml@inherit@field{#2}{#3}{\blx@tempc}}} \newcommand*{\blx@inherit@block}[1]{% \eappto\blx@tempb{\blx@xml@inherit@block{#1}}} -\define@key{blx@inherit}{ignore}{% csv list +\blx@kv@defkey{blx@inherit}{ignore}{% csv list \edef\blx@tempf{ ignore="#1"}} -\define@key{blx@inherit@field}{override}[true]{% true|false +\blx@kv@defkey{blx@inherit@field}{override}[true]{% true|false \ifstrequal{#1}{true} {\edef\blx@tempc{ override\string_target="true"}} {\edef\blx@tempc{ override\string_target="false"}}} @@ -13526,21 +13658,21 @@ \newcommand*{\blx@biblistfilter}[1][2]{% \let\blx@tempc\@empty \let\blx@tempd\@empty - \setkeys{blx@biblistfilter@filter}{#1}% + \blx@kv@setkeys{blx@biblistfilter@filter}{#1}% \eappto\blx@tempa{% \blx@xml@dlistfilter{\blx@tempc}{\blx@tempd}}} -\define@key{blx@biblistfilter@filter}{type}{% +\blx@kv@defkey{blx@biblistfilter@filter}{type}{% \def\blx@tempc{#1}} -\define@key{blx@biblistfilter@filter}{filter}{% +\blx@kv@defkey{blx@biblistfilter@filter}{filter}{% \def\blx@tempd{#1}} % Predefine filters for label fields \def\do#1{\DeclareBiblistFilter{#1}{\filter[type=field,filter=#1]}} \abx@dolabelfields -\define@key{blx@biblist2}{biblistfilter}{\blx@key@biblistfilter{#1}} -\define@key{blx@biblist1}{biblistfilter}{} +\blx@kv@defkey{blx@biblist1}{biblistfilter}{\blx@key@biblistfilter{#1}} +\blx@kv@defkey{blx@biblist2}{biblistfilter}{} \def\blx@key@biblistfilter#1{% \ifcsundef{blx@biblistfilters@#1} @@ -13599,21 +13731,21 @@ \let\blx@tempc\@empty \ifblank{#1} {} - {\setkeys{blx@untemp@namepart}{#1}}% + {\blx@kv@setkeys{blx@untemp@namepart}{#1}}% \eappto\blx@tempa{% \blx@xml@uniquenametemplatenamepart{\blx@tempe}{\blx@tempc}{#2}}} -\define@key{blx@untemp@namepart}{use}[true]{% use* option for namepart true|false +\blx@kv@defkey{blx@untemp@namepart}{use}[true]{% use* option for namepart true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ use="1"}} {}} -\define@key{blx@untemp@namepart}{base}[true]{% base option for namepart true|false +\blx@kv@defkey{blx@untemp@namepart}{base}[true]{% base option for namepart true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ base="1"}} {}} -\define@key{blx@untemp@namepart}{disambiguation}{% disambiguation option for namepart none|inits|full|fullonly +\blx@kv@defkey{blx@untemp@namepart}{disambiguation}{% disambiguation option for namepart none|inits|full|fullonly \appto\blx@tempc{ disambiguation="#1"}} % [<templatename>]{<template>} @@ -13668,16 +13800,16 @@ \let\blx@tempc\@empty \ifblank{#1} {} - {\setkeys{blx@sortnk@namepart}{#1}}% + {\blx@kv@setkeys{blx@sortnk@namepart}{#1}}% \eappto\blx@tempb{% \blx@xml@sortingnamekeynamepart{\blx@tempe}{\blx@tempc}{#2}}} -\define@key{blx@sortnk@namepart}{use}[true]{% use* option for namepart true|false +\blx@kv@defkey{blx@sortnk@namepart}{use}[true]{% use* option for namepart true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ use="1"}} {\appto\blx@tempc{ use="0"}}} -\define@key{blx@sortnk@namepart}{inits}[true]{% initials only option for namepart true|false +\blx@kv@defkey{blx@sortnk@namepart}{inits}[true]{% initials only option for namepart true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ inits="1"}} {\appto\blx@tempc{ inits="0"}}} @@ -13686,7 +13818,7 @@ \newrobustcmd*{\DeclareSortingTemplate}[3][]{% \ifblank{#1} {} - {\setkeys{blx@sortdef@sorting}{#1}% + {\blx@kv@setkeys{blx@sortdef@sorting}{#1}% \csxdef{blx@sortdef@locale@#2}{\blx@templ}}% \begingroup \def\name{%LEGACY(<2.0) @@ -13700,7 +13832,10 @@ \let\sort\blx@sortdef@sort \let\field\blx@sortdef@field \let\literal\blx@sortdef@literal - \def\citeorder{\blx@sortdef@field{citeorder}}% + \global\csundef{blx@sortingtemplate@citeorder@relevant@#2}% + \def\citeorder{% + \global\cslet{blx@sortingtemplate@citeorder@relevant@#2}\@empty + \blx@sortdef@field{citeorder}}% \blx@tempcnta\z@ \let\blx@tempa\@empty #3% @@ -13709,7 +13844,7 @@ \@onlypreamble\DeclareSortingTemplate \blx@DeclareBackendOption{global}[xml]{sortingtemplate} -\define@key{blx@sortdef@sorting}{locale}{% locale name +\blx@kv@defkey{blx@sortdef@sorting}{locale}{% locale name \def\blx@templ{#1}} \newcommand*{\blx@sortdef@sort}[2][]{% @@ -13719,27 +13854,27 @@ \edef\blx@tempc{order="\the\blx@tempcnta"}% \ifblank{#1} {} - {\setkeys{blx@sortdef@sort}{#1}}% + {\blx@kv@setkeys{blx@sortdef@sort}{#1}}% \let\do\@firstofone #2% \eappto\blx@tempa{% \blx@xml@sort{\blx@tempc}{\blx@tempb}}} -\define@key{blx@sortdef@sort}{locale}{% locale name +\blx@kv@defkey{blx@sortdef@sort}{locale}{% locale name \eappto\blx@tempc{ locale="#1"}} -\define@key{blx@sortdef@sort}{direction}{% ascending|descending +\blx@kv@defkey{blx@sortdef@sort}{direction}{% ascending|descending \ifstrequal{#1}{ascending} {\eappto\blx@tempc{ sort\string_direction="ascending"}} {\eappto\blx@tempc{ sort\string_direction="descending"}}} -\define@key{blx@sortdef@sort}{final}[true]{% true|false +\blx@kv@defkey{blx@sortdef@sort}{final}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ final="1"}} {}} -\define@key{blx@sortdef@sort}{sortcase}[true]{% true|false +\blx@kv@defkey{blx@sortdef@sort}{sortcase}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ sortcase="1"}} {\appto\blx@tempc{ sortcase="0"}}} -\define@key{blx@sortdef@sort}{sortupper}[true]{% true|false +\blx@kv@defkey{blx@sortdef@sort}{sortupper}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ sortupper="1"}} {\appto\blx@tempc{ sortupper="0"}}} @@ -13749,24 +13884,24 @@ \edef\blx@tempd{order="\the\blx@tempcntb"}% \ifblank{#1} {} - {\setkeys{blx@sortdef@field}{#1}}% + {\blx@kv@setkeys{blx@sortdef@field}{#1}}% \eappto\blx@tempb{% \blx@xml@sortitem{\blx@tempd}{#2}}} -\define@key{blx@sortdef@field}{padside}{% left|right +\blx@kv@defkey{blx@sortdef@field}{padside}{% left|right \ifstrequal{#1}{right} {\eappto\blx@tempd{ pad\string_side="right"}} {\eappto\blx@tempd{ pad\string_side="left"}}} -\define@key{blx@sortdef@field}{padwidth}{% integer +\blx@kv@defkey{blx@sortdef@field}{padwidth}{% integer \eappto\blx@tempd{ pad\string_width="#1"}} -\define@key{blx@sortdef@field}{padchar}{% character +\blx@kv@defkey{blx@sortdef@field}{padchar}{% character \blx@xmlsanitizeafter{\def\blx@tempe}{#1}% \eappto\blx@tempd{ pad\string_char="\blx@tempe"}} -\define@key{blx@sortdef@field}{strside}{% left|right +\blx@kv@defkey{blx@sortdef@field}{strside}{% left|right \ifstrequal{#1}{right} {\eappto\blx@tempd{ substring\string_side="right"}} {\eappto\blx@tempd{ substring\string_side="left"}}} -\define@key{blx@sortdef@field}{strwidth}{% integer +\blx@kv@defkey{blx@sortdef@field}{strwidth}{% integer \eappto\blx@tempd{ substring\string_width="#1"}} \def\blx@sortdef@literal#1{% @@ -13905,7 +14040,7 @@ \let\blx@tempc\@empty \ifblank{#1} {} - {\setkeys{blx@ordered@field}{#1}}% + {\blx@kv@setkeys{blx@ordered@field}{#1}}% \advance\blx@tempcnta\@ne \ifdefempty{\blx@tempa} {\csxappto{blx@bcf@\blx@tempb}{% @@ -13920,7 +14055,7 @@ \let\blx@tempc\@empty \ifblank{#1} {} - {\setkeys{blx@ordered@field}{#1}}% + {\blx@kv@setkeys{blx@ordered@field}{#1}}% \advance\blx@tempcnta\@ne \ifdefempty{\blx@tempa} {\csxappto{blx@bcf@\blx@tempb}{% @@ -13948,7 +14083,7 @@ \newrobustcmd*{\ExecuteBibliographyOptions}[2][]{% \ifblank{#1} - {\setkeys{blx@opt@pre}{#2}} + {\blx@kv@setkeys{blx@opt@pre}{#2}} {\forcsvlist{\blx@typeoptions{#2}}{#1}}} \@onlypreamble\ExecuteBibliographyOptions @@ -13969,9 +14104,9 @@ % Have to have a dummy for this as it's set much earlier but is passed % through to here where we just ignore it -\define@key{blx@opt@ldt}{datamodel}{} +\blx@kv@defkey{blx@opt@ldt}{datamodel}{} -\define@key{blx@opt@ldt}{backend}{% +\blx@kv@defkey{blx@opt@ldt}{backend}{% \ifstrequal{#1}{biber} {} {\ifboolexpr{ @@ -13985,30 +14120,30 @@ {}}% {\blx@err@invopt{backend=#1}{}}}} -\define@key{blx@opt@ldt}{style}{% +\blx@kv@defkey{blx@opt@ldt}{style}{% \def\blx@cbxfile{#1}% \def\blx@bbxfile{#1}} -\define@key{blx@opt@ldt}{bibstyle}{% +\blx@kv@defkey{blx@opt@ldt}{bibstyle}{% \def\blx@bbxfile{#1}} -\define@key{blx@opt@ldt}{citestyle}{% +\blx@kv@defkey{blx@opt@ldt}{citestyle}{% \def\blx@cbxfile{#1}} -\define@key{blx@opt@ldt}{natbib}[true]{% +\blx@kv@defkey{blx@opt@ldt}{natbib}[true]{% \settoggle{blx@natbib}{#1}} -\define@key{blx@opt@ldt}{mcite}[true]{% +\blx@kv@defkey{blx@opt@ldt}{mcite}[true]{% \settoggle{blx@mcite}{#1}} -\define@key{blx@opt@ldt}{noerroretextools}[true]{% +\blx@kv@defkey{blx@opt@ldt}{noerroretextools}[true]{% \blx@warning@noline{% The option 'noerroretextools' is deprecated.\MessageBreak Define the control sequence '\string\blx@noerroretextools'\MessageBreak before loading biblatex instead}% \ifstrequal{#1}{true} {\global\cslet{blx@noerroretextools}\@empty} - {\csgundef{blx@noerroretextools}}} + {\global\csundef{blx@noerroretextools}}} % load-time and preamble @@ -14061,7 +14196,7 @@ % unlikely to be corrected as "sorting" is an obvious name for biblatex users % "sorting" is used in the .bcf for the actual sorting template definitions and is % an XML format option -\define@key{blx@opt@pre}{sorting}{% +\blx@kv@defkey{blx@opt@pre}{sorting}{% \def\blx@sorting{#1}% \def\blx@refcontext@sortingtemplatename{#1}} \blx@DeclareBackendOption{global}[string]{sortingtemplatename} @@ -14295,6 +14430,14 @@ \def\blx@hook@initlang{\@quotereset\@ne}% \def\blx@hook@endlang{\blx@postpunct}} +\DeclareBibliographyOption[string]{langhook}{% + \ifstrequal{#1}{captions} + {\@firstoftwo} + {\ifstrequal{#1}{extras}} + {\def\blx@langhook{#1}} + {\blx@err@invopt{langhook=#1}{}}} + + \DeclareBiblatexOption{global,type,entry}[string]{indexing}[true]{% \blx@opt@index{#1}} \def\blx@opt@index#1{% @@ -14382,6 +14525,10 @@ \def\blx@opt@backrefsetstyle@memandset{4} \def\blx@opt@backrefsetstyle@setplusmem{5} +\newtoggle{blx@backreffloats} +\DeclareBibliographyOption[boolean]{backreffloats}[true]{% + \settoggle{blx@backreffloats}{#1}} + \appto\blx@mkhyperref{% \ifHy@plainpages \blx@warning@noline{% @@ -14396,10 +14543,22 @@ references. 'pageanchor=true' is required}% \fi} -\DeclareBibliographyOption[string]{block}{% +\def\blx@optprocess@block#1{% \ifcsdef{blx@opt@block@#1} {\csuse{blx@opt@block@#1}} {\blx@err@invopt{block=#1}{}}} + +\DeclareBibliographyOption[string]{block}{% + \blx@optprocess@block{#1}} + +\blx@kv@defkey{blx@bib1}{block}{} +\blx@kv@defkey{blx@bib2}{block}{\blx@optprocess@block{#1}} +\blx@kv@defkey{blx@biblist1}{block}{} +\blx@kv@defkey{blx@biblist2}{block}{\blx@optprocess@block{#1}} + +\blx@kv@defkey{blx@bbs}{block}{\blx@optprocess@block{#1}} +\blx@kv@defkey{blx@bbg}{block}{\blx@optprocess@block{#1}} + \def\blx@opt@block@none{% \let\blx@bibsetup\@empty \let\newblockpunct\@empty} @@ -14623,6 +14782,11 @@ \let\blx@loccitreset\blx@loccitreset@context \booltrue{citetracker}} +\newtoggle{blx@trackfloats} +\DeclareBibliographyOption[boolean]{trackfloats}[true]{% + \settoggle{blx@trackfloats}{#1}} + + \DeclareBibliographyOption[boolean]{parentracker}[true]{% \ifstrequal{#1}{true} {\let\bibopenparen\blx@bibopenparen @@ -14783,7 +14947,7 @@ {\blx@err@invopt{#1date=##1}{}}}}% % Default for new date fields is "comp" but this is overridden below by % biblatex defaults - \setkeys{blx@opt@pre}{#1date=comp}% + \blx@kv@setkeys{blx@opt@pre}{#1date=comp}% % Time format options \DeclareBibliographyOption[string]{#1time}{% \csdef{blx@timeformat@#1time}{##1}% @@ -14791,7 +14955,7 @@ {\protected\csedef{blx@imc@print#1time}{\csuse{mktimerange##1}{#1}}} {\blx@err@invopt{#1time=##1}{}}}% % Default for new time fields is "24h" - \setkeys{blx@opt@pre}{#1time=24h}% + \blx@kv@setkeys{blx@opt@pre}{#1time=24h}% % Boolean to determine if times are printed with dates \newtoggle{blx@#1dateusetime}% \DeclareBibliographyOption[boolean]{#1dateusetime}{% @@ -14889,7 +15053,7 @@ \settoggle{blx@labelnumber}{#1}% \iftoggle{blx@labelnumber} {} - {\setkeys{blx@opt@pre}{defernumbers=false}}} + {\blx@kv@setkeys{blx@opt@pre}{defernumbers=false}}} \DeclareBiblatexOption{type,entry}[boolean]{labelnumber}[true]{% \settoggle{blx@labelnumber}{#1}} @@ -14966,14 +15130,14 @@ \DeclareBibliographyOption[boolean]{defernumbers}[true]{% \settoggle{blx@defernumbers}{#1}% \iftoggle{blx@defernumbers} - {\setkeys{blx@opt@pre}{labelnumber}% + {\blx@kv@setkeys{blx@opt@pre}{labelnumber}% \let\blx@thelabelnumber\blx@addlabelnumber \let\abx@aux@number\blx@aux@number} {\let\blx@thelabelnumber\relax \let\abx@aux@number\@gobblefive}} \DeclareBibliographyOption[boolean]{locallabelwidth}[true]{% - \blx@key@locallabelwidth{\abx@locallabelwidth}{#1}} + \blx@key@locallabelwidth{#1}} \DeclareBibliographyOption[string]{refsection}{% @@ -15078,11 +15242,11 @@ \def\blx@tempa#1=#2&{#1}% \edef\blx@tempa{% \expandafter\blx@tempa\CurrentOption=&}% - \ifcsundef{KV@blx@opt@ldt@\blx@tempa} + \blx@kv@ifkeyundef{blx@opt@ldt}{\blx@tempa} {\endgroup \eappto\blx@theoptions{\CurrentOption,}} {\edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@ldt}{\CurrentOption}}% + \noexpand\blx@kv@setkeys{blx@opt@ldt}{\CurrentOption}}% \blx@tempa}} \def\blx@processoptions{% @@ -15090,21 +15254,64 @@ {} {\begingroup \edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@pre}{\blx@theoptions}}% + \noexpand\blx@kv@setkeys{blx@opt@pre}{\blx@theoptions}}% \blx@tempa}} %% Initial setup +\define@key{blx@opt@ldt}{casechanger}[auto]{% + \ifcsundef{blx@opt@casechanger@#1} + {\blx@err@invopt + {casechanger=#1} + {Valid options for 'casechanger' are 'auto', 'expl3' and + 'latex2e'}} + {\csletcs{blx@deferoption@casechanger}{blx@opt@casechanger@#1}}} + + +\csdef{blx@opt@casechanger@auto}{% + \RequirePackage{expl3}[2020/04/06]% + \@ifpackagelater{expl3}{2020/04/06} + {\blx@info{expl3\MessageBreak\csuse{ver@expl3.sty}\MessageBreak + is new enough (at least 2020/04/06),\MessageBreak + setting 'casechanger=expl3'}% + \csuse{blx@opt@casechanger@expl3}} + {\blx@info{expl3\MessageBreak\csuse{ver@expl3.sty}\MessageBreak + is too old (older than 2020/04/06),\MessageBreak + setting 'casechanger=latex2e'}% + \csuse{blx@opt@casechanger@latex2e}}} + +\csdef{blx@opt@casechanger@latex2e}{% + \blx@inputonce{blx-case-latex2e.def} + {LaTeX2e (legacy) case changing code} + {}{}{}{}} +\csletcs{blx@opt@casechanger@2e}{blx@opt@casechanger@latex2e} + +% Apparently neither \input nor \blx@inputonce ever pops the +% \ExplSyntaxOff from \ProvidesExplFile, so we do that ourselves. +\csdef{blx@opt@casechanger@expl3}{% + \blx@inputonce{blx-case-expl3.def} + {expl3 case changing code} + {}{\ExplSyntaxOff}{}{}} +\csletcs{blx@opt@casechanger@3}{blx@opt@casechanger@expl3} + +% default to auto +\csletcs{blx@deferoption@casechanger}{blx@opt@casechanger@auto} + % Set defaults -\setkeys{blx@opt@ldt}{style=numeric} -\setkeys{blx@opt@pre}{% +\blx@kv@setkeys{blx@opt@ldt}{style=numeric} +\blx@kv@setkeys{blx@opt@pre}{% sorting=nty,sortlocale=auto,sortcase,sortupper,sortcites=false, maxnames=3,minnames=1,maxalphanames=3,minalphanames=1, - maxitems=3,minitems=1,mincrossrefs=2,minxrefs=2,useauthor=true,useeditor=true, - usetranslator=false,indexing=false,abbreviate=true,dateabbrev=true,dateera=astronomical, - backref=false,backrefsetstyle=setonly,pagetracker=false,ibidtracker=false, - idemtracker=false,opcittracker=false,loccittracker=false,citetracker=false, - citecounter=false,block=none,language=autobib,clearlang=true,autolang=none, + maxitems=3,minitems=1,mincrossrefs=2,minxrefs=2, + useauthor=true,useeditor=true,usetranslator=false, + indexing=false,abbreviate=true,dateabbrev=true,dateera=astronomical, + backref=false,backrefsetstyle=setonly,backreffloats=true, + pagetracker=false, + ibidtracker=false,idemtracker=false,opcittracker=false,loccittracker=false, + citetracker=false,trackfloats=false, + citecounter=false, + block=none, + language=autobib,clearlang=true,autolang=none,langhook=captions, date=comp,labeldate=year,origdate=comp,eventdate=comp,urldate=short, autopunct=true,punctfont=false,defernumbers=false,timezeros=true, refsection=none,refsegment=none,citereset=none,hyperref=auto, @@ -15122,6 +15329,7 @@ % Load compatibility code \blx@inputonce{blx-compat.def}{compatibility code}{}{}{}{} + % Restore catcodes \blx@catcodes \undef\blx@catcodes @@ -15129,6 +15337,44 @@ % Process load-time options \ProcessOptions* +% this ultimately loads either +% blx-case-expl3.def or blx-case-latex2e.def +\blx@deferoption@casechanger + +% This is a bit unfortunate, but we need some more definitions here. + +% Language fallback, in order: +% * explicit option language=<lang>, which overrides everything +% * langid field of entry +% * babel/polyglossia lang +% * main document lang (we should never reach this) +% * <empty> (we should *definitely* never reach this) +% Everything here is expandable so that +% \blx@mksc@lang expands to the language name. +\def\blx@mksc@lang{% + \ifundef\blx@forcelanguagename + {\ifundef\abx@field@langid + {\ifundef\blx@languagename + {\ifundef\blx@main@language + {} + {\blx@main@language}} + {\blx@languagename}} + {\abx@field@langid}} + {\blx@forcelanguagename}} + +\DeclareCaseLangs{% + american,british,canadian, + english,USenglish,UKenglish, + australian,newzealand} + + +% Textcase defines \NoCaseChange as \let\NoCaseChange\@firstofone +\ifundef\NoCaseChange + {\let\NoCaseChange\@firstofone} + {} + +% That's it for the case change code + % Switch to BibTeX support if requested \iftoggle{blx@bibtex} {\blx@inputonce{blx-bibtex.def}{BibTeX backend compatibility}{}{}{}{}} @@ -15166,19 +15412,19 @@ {\blx@warn@conflopt{% '<namepart>inits' conflicts with 'uniquename=full'.\MessageBreak Setting 'uniquename=init'}% - \setkeys{blx@opt@pre}{uniquename=init}} + \blx@kv@setkeys{blx@opt@pre}{uniquename=init}} {}% \ifdefstrequal\blx@uniquename\blx@opt@uniquename@allfull {\blx@warn@conflopt{% '<namepart>inits' conflicts with 'uniquename=allfull'.\MessageBreak Setting 'uniquename=allinit}% - \setkeys{blx@opt@pre}{uniquename=allinit}} + \blx@kv@setkeys{blx@opt@pre}{uniquename=allinit}} {}% \ifdefstrequal\blx@uniquename\blx@opt@uniquename@minfull {\blx@warn@conflopt{% '<namepart>inits' conflicts with 'uniquename=minfull'.\MessageBreak Setting 'uniquename=mininit}% - \setkeys{blx@opt@pre}{uniquename=mininit}} + \blx@kv@setkeys{blx@opt@pre}{uniquename=mininit}} {}} {}% \nottoggle{blx@labeldateparts} @@ -15186,7 +15432,7 @@ {\blx@warn@conflopt{% 'uniquelist=minyear' requires 'labeldateparts'.\MessageBreak Setting 'uniquelist=true'}% - \setkeys{blx@opt@pre}{uniquelist}} + \blx@kv@setkeys{blx@opt@pre}{uniquelist}} {}} {}% \def\do#1{% @@ -15195,37 +15441,37 @@ \ifdefstring\blx@dateera{astronomical}{} {\blx@warn@conflopt{% '#1=iso' requires 'dateera=astronomical'.\MessageBreak - Setting 'dateera=astrononmical'}% - \setkeys{blx@opt@pre}{dateera=astronomical}}% + Setting 'dateera=astronomical'}% + \blx@kv@setkeys{blx@opt@pre}{dateera=astronomical}}% \ifcsstring{blx@timeformat@\blx@datetype time}{24h}% {} {\blx@warn@conflopt{% '#1=iso' requires '\blx@datetype time=24h'.\MessageBreak Setting '\blx@datetype time=24h'}% - \setkeys{blx@opt@pre}{\blx@datetype time=24h}}% + \blx@kv@setkeys{blx@opt@pre}{\blx@datetype time=24h}}% \iftoggle{blx@julian} {\blx@warn@conflopt{% '#1=iso' requires 'julian=false'.\MessageBreak Setting 'julian=false'}% - \setkeys{blx@opt@pre}{julian=false}} + \blx@kv@setkeys{blx@opt@pre}{julian=false}} {}% \nottoggle{blx@datezeros} {\blx@warn@conflopt{% '#1=iso' requires 'datezeros=true'.\MessageBreak Setting 'datezeros=true'}% - \setkeys{blx@opt@pre}{datezeros=true}} + \blx@kv@setkeys{blx@opt@pre}{datezeros=true}} {}% \nottoggle{blx@timezeros} {\blx@warn@conflopt{% '#1=iso' requires 'timezeros=true'.\MessageBreak Setting 'timezeros=true'}% - \setkeys{blx@opt@pre}{timezeros=true}} + \blx@kv@setkeys{blx@opt@pre}{timezeros=true}} {}% \nottoggle{blx@seconds} {\blx@warn@conflopt{% '#1=iso' requires 'seconds=true'.\MessageBreak Setting 'seconds=true'}% - \setkeys{blx@opt@pre}{seconds=true}} + \blx@kv@setkeys{blx@opt@pre}{seconds=true}} {}} {}}% \abx@dodates @@ -15322,5 +15568,7 @@ \def\BiblatexHungarianWarningOff{\global\let\lbx@hu@loadinfo\@empty} \def\BiblatexLatvianWarningOff{\global\let\lbx@lv@loadinfo\@empty} +\def\BiblatexSplitbibDefernumbersWarningOff{% + \global\let\blx@printbibchecks@suppresswarn\@empty} \endinput diff --git a/macros/latex/contrib/biblatex/latex/blx-bibtex.def b/macros/latex/contrib/biblatex/latex/blx-bibtex.def index c333e5f17d..03d6781131 100644 --- a/macros/latex/contrib/biblatex/latex/blx-bibtex.def +++ b/macros/latex/contrib/biblatex/latex/blx-bibtex.def @@ -207,52 +207,6 @@ \let\iflabeldateuncertain\@secondoftwo \let\iflabelenddateuncertain\@secondoftwo} -% {<string>} -% This mustn't be robust as it's likely to be used mainly in tests and so -% needs to be expandable -\renewcommand*\rangelen[1]{% - \ifblank{#1} - {0}% - {\expandafter\blx@rangelen@range\romannumeral-`\q% - #1\bibrangedash\bibrangedash&% - }} - -\def\blx@rangelen@range#1\bibrangedash#2\bibrangedash#3&{% - \ifblank{#3} - {\blx@rangelen@hyphen#1--&} - {\blx@rangelen@check{#1}{#2}}% -} -\def\blx@rangelen@hyphen#1-#2-#3&{% - \ifblank{#3} - {1}% No range at all: assume one page - {\blx@rangelen@check{#1}{#2}}% -} -\def\blx@rangelen@check#1#2{% - \expandafter\blx@rangelen@check@aux - \number\numexpr - \blx@rangelen@check@int{#2} - - - \blx@rangelen@check@int{#1} - + 1 - \relax - &\stop -} -\def\blx@rangelen@check@aux#1\stop{% - \ifblank{#2} - {#1} - {-1}% -} -\def\blx@rangelen@check@int#1{% - \ifblank{#1} - {0&} - {% - \if\number\numexpr0#1-0#1\relax0 - #1 - \else - 0& - \fi - }% -} % Alter message text \patchcmd{\blx@bbl@warn}{Biber}{BibTeX}{}{} @@ -330,6 +284,26 @@ {}% \global\csundef{blx@refp@\the\c@refsection @#1}} +\def\blx@citation@xref#1{% + \begingroup + \edef\blx@tempa{blx@refp@\the\c@refsection @% + \csname blx@refc@\the\c@refsection @#1\endcsname}% + \ifcsdef\blx@tempa + {\ifinlistcs{#1}\blx@tempa + {} + {\listcsxadd\blx@tempa{#1}}% + \blx@tempcnta\z@ + \def\do##1{\advance\blx@tempcnta\@ne}% + \dolistcsloop\blx@tempa} + {\listcsxadd\blx@tempa{#1}% + \blx@tempcnta\@ne}% + \expandafter\endgroup\ifnum\blx@tempcnta<\blx@minxrefs\relax + \else + \expandafter\expandafter\expandafter\blx@citation@entry + \expandafter\expandafter\expandafter{% + \csname blx@refc@\the\c@refsection @#1\endcsname}\blx@msg@cundef + \fi} + \def\blx@bblend{% \ifcsdef{blx@refs@\the\c@refsection}% {\begingroup @@ -343,20 +317,122 @@ \global\togglefalse{blx@addset}} {}} -\def\blx@citation#1#2{% - \ifbool{citerequest} - {\ifcsdef{blx@setp@\the\c@refsection @#1} - {\blx@citation@set{#1}{#2}} - {\ifcsdef{blx@setc@\the\c@refsection @#1} - {\blx@citation@inset{#1}{#2}} - {\blx@citation@entry{#1}{#2}}}% - \ifcsdef{blx@refc@\the\c@refsection @#1}% - {\blx@citation@xref{#1}} - {}} - {}} +% set support + +% We'll generate 'fake sets' for sorting. +% A fake set will be the copy of a normal set but with a crossref +% to the first set member, that way it inherits sorting info. + +\def\blx@grabfirstcsvitem#1,#2\blx@grabfirstcsvitem@end{#1} + +\def\blx@btx@fakesetentry#1#2#3#4{% + \blx@nl + @set{#1,\blx@nl + \space\space fakeset = {#2},\blx@nl + \space\space entryset = {#3},\blx@nl + \space\space crossref = {#4},\blx@nl + }% +} + +\def\blx@fakeset@prefix{blx@fakeset-} + +\protected\def\blx@writefakeset@oo#1#2{% + \begingroup + \edef\blx@tempa{\endgroup + \noexpand\blx@writefakeset + {\expandonce{#1}} + {\expandonce{#2}}}% + \blx@tempa +} + +\protected\def\blx@writefakeset#1#2{% + \blx@auxwrite\blx@bcfout{}{% + \blx@btx@fakesetentry + {\blx@fakeset@prefix#1} + {#1} + {#2} + {\blx@grabfirstcsvitem#2,\blx@grabfirstcsvitem@end}}} + +\protected\def\blx@bbl@fakeset#1{% + \csxdef{blx@isfakeset@\the\c@refsection @\abx@field@entrykey}{% + \detokenize{#1}}% + \global\cslet{blx@getfakeset@\the\c@refsection @#1}\abx@field@entrykey +} + +% we can't rely on \inset in the .bbl (which should be in the child +% entry), so we produce setc manually from the @set parent +% but the bibliography may not be in a nice order to grab setc +% properly, so we need to save setc data in the .aux file +\appto\blx@secinit{% + \cslet{blx@setclist@\the\c@refsection}\@empty + \cslet{blx@fakesetplist@\the\c@refsection}\@empty} + +\apptocmd{\blx@bbl@set@i} + {\ifcsundef{blx@isfakeset@\the\c@refsection @\abx@field@entrykey} + {\csxdef{blx@setc@\the\c@refsection @#1}{\abx@field@entrykey}% + \listcsxadd{blx@setclist@\the\c@refsection}{\detokenize{#1}}} + {}} + {} + {\blx@error + {Failed to patch '\string\blx@bbl@set@i'} + {Patching '\string\blx@bbl@set@i' failed for some reason. + \MessageBreak + Please report this bug}} + +% {<section>}{<set child>}{<set parent>} +\protected\def\blx@aux@set@setc#1#2#3{% + \csxdef{blx@setc@#1@#2}{#3}} + +\protected\def\blx@aux@write@setc#1#2#3{% + \blx@auxwrite\blx@aux{}{\string\blx@aux@set@setc{#1}{#2}{#3}}} + +\def\blx@write@setc#1{% + \ifcsundef{blx@setc@\the\c@refsection @#1} + {} + {\blx@aux@write@setc{\the\c@refsection}{#1} + {\csuse{blx@setc@\the\c@refsection @#1}}}} + +\appto\blx@bblend{% + \forlistcsloop{\blx@write@setc}{blx@setclist@\the\c@refsection}} + +% blx@setonly doesn't exist here, since it is defined in \inset, +% rely on the existence of setc instead. +% We also make sure to skip the actual @set entries and display +% the fake ones. +\patchcmd{\blx@bbl@endentry} + {\nottoggle{blx@setonly}} + {\ifentrytype{set} + {\ifcsundef{blx@isfakeset@\the\c@refsection @\abx@field@entrykey} + {\blx@writefakeset@oo{\abx@field@entrykey}{\abx@field@entryset}% + \settoggle{blx@skipbib}{true}% + \settoggle{blx@skipbiblist}{true}% + \settoggle{blx@skiplab}{true}} + {\listcsxadd{blx@fakesetplist@\the\c@refsection}{% + \abx@field@entrykey}}} + {}% + \ifcsundef{blx@setc@\the\c@refsection @\abx@field@entrykey}} + {} + {\blx@error + {Failed to patch '\string\blx@bbl@endentry'} + {Patching '\string\blx@bbl@endentry' failed for some reason. + \MessageBreak + Please report this bug}} + +% cite the fake set for our current set +% the \expandafter party essentially does +% \blx@citation@entry{\blx@fakeset@prefix#1}{\blx@msg@cundef} +% (just correctly \detokenize'd and all) \def\blx@citation@set#1#2{% \blx@citation@entry{#1}{#2}% + \ifcsundef{blx@isfakeset@\the\c@refsection @#1} + {\begingroup + \expandafter\def\expandafter\blx@tempa\expandafter{% + \expandafter\detokenize\expandafter{\blx@fakeset@prefix#1}}% + \expandafter\expandafter\expandafter\blx@citation@entry + \expandafter\expandafter\expandafter{\blx@tempa}{\blx@msg@cundef}% + \endgroup} + {}% \begingroup \def\do##1{\blx@citation@entry{##1}\blx@msg@cundef}% \expandafter\expandafter\expandafter\docsvlist @@ -375,25 +451,141 @@ {\blx@citation@set{#1}} {\blx@citation@entry{#1}}} -\def\blx@citation@xref#1{% +\def\blx@appentrydatato#1#2{% + \ifdef#2 + {\appto#1{% + \def\noexpand#2{\expandonce#2}}} + {}} + +% if we have a fakeset, load the real @set to get the right entrykey +% if we have a real @set, load the fakeset for all entry data +% but make sure that the entrykey fits +% in any case copy over some label data from its first child +\def\blx@getdata#1{% + \csuse{blx@data@\the\c@refsection @\blx@refcontext@context @#1}% + \ifcsundef{blx@isfakeset@\the\c@refsection @#1} + {} + {\csuse{blx@data@\the\c@refsection @\blx@refcontext@context + @\csuse{blx@isfakeset@\the\c@refsection @#1}}}% + \ifcsundef{blx@getfakeset@\the\c@refsection @#1} + {} + {\let\blx@real@abx@field@entrykey\abx@field@entrykey + \csuse{blx@data@\the\c@refsection @\blx@refcontext@context + @\csuse{blx@getfakeset@\the\c@refsection @#1}}% + \let\abx@field@entrykey\blx@real@abx@field@entrykey}% + \ifcsundef{blx@setp@\the\c@refsection @\abx@field@entrykey} + {} + {\begingroup + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\blx@tempa + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter\blx@grabfirstcsvitem + \csname blx@setp@\the\c@refsection + @\abx@field@entrykey\endcsname,\blx@grabfirstcsvitem@end}% + \let\blx@tempb\@empty + \blx@ifdata{\blx@tempa} + {\blx@getdata{\blx@tempa}% + \blx@appentrydatato\blx@tempb\abx@field@labelyear + \blx@appentrydatato\blx@tempb\abx@field@labelendyear + \blx@appentrydatato\blx@tempb\abx@field@labelmonth + \blx@appentrydatato\blx@tempb\abx@field@labelendmonth + \blx@appentrydatato\blx@tempb\abx@field@labelday + \blx@appentrydatato\blx@tempb\abx@field@labelendday + \blx@appentrydatato\blx@tempb\abx@field@labelprefix + \blx@appentrydatato\blx@tempb\abx@field@labelalpha + \blx@appentrydatato\blx@tempb\abx@field@extraalpha + \blx@appentrydatato\blx@tempb\abx@field@extradate} + {}% + \edef\blx@tempb{\endgroup\blx@tempb}% + \blx@tempb}% + \blx@adjustyears + \blx@getlabeldata + \blx@aliasfields + \blx@setcitecounter} + + +\def\blx@bblend@redosetlabelwidth@i#1{% \begingroup - \edef\blx@tempa{blx@refp@\the\c@refsection @% - \csname blx@refc@\the\c@refsection @#1\endcsname}% - \ifcsdef\blx@tempa - {\ifinlistcs{#1}\blx@tempa - {} - {\listcsxadd\blx@tempa{#1}}% - \blx@tempcnta\z@ - \def\do##1{\advance\blx@tempcnta\@ne}% - \dolistcsloop\blx@tempa} - {\listcsxadd\blx@tempa{#1}% - \blx@tempcnta\@ne}% - \expandafter\endgroup\ifnum\blx@tempcnta<\blx@minxrefs\relax - \else - \expandafter\expandafter\expandafter\blx@citation@entry - \expandafter\expandafter\expandafter{% - \csname blx@refc@\the\c@refsection @#1\endcsname}\blx@msg@cundef - \fi} + \blx@ifdata{#1} + {\blx@getdata{#1}% + \nottoggle{blx@skiplab} + {\iftoggle{blx@labelnumber} + {\ifdefempty\abx@field@localnumber + {} + {\ifundef\abx@field@shorthand + {\blx@bbl@labelnumberwidth@numeric{}} + {\blx@bbl@labelnumberwidth@shorthand{}}}} + {}% + \iftoggle{blx@labelalpha} + {\blx@bbl@labelalpha} + {}% + \iftoggle{blx@labeltitle} + {\blx@bbl@labeltitle} + {}% + \iftoggle{blx@labeltitleyear} + {\blx@bbl@labeltitleyear} + {}% + \iftoggle{blx@labeldateparts} + {\blx@bbl@labeldate} + {}% + \blx@bbl@labelname} + {}} + {}% + \endgroup +} + +\def\blx@bblend@redosetlabelwidth{% + \forlistcsloop{\blx@bblend@redosetlabelwidth@i} + {blx@fakesetplist@\the\c@refsection}} + +\appto\blx@bblend{\blx@bblend@redosetlabelwidth} + +% categories need the correct entry key for fake sets +\def\blx@addtocategory#1#2{% + % If we are adding a set member to a category, make sure we also add the + % set parent if it is cited. If it is cited, we should be using the set + % parent in the category, not the set child member. blx@setc@... will + % only exist if the set parent is also cited as it is only defined when a + % member contains \inset which only happens when the set parent is cited. + \ifcsdef{blx@setc@\the\c@refsection @#2} + {\blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}% + \abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}} + {}% + \ifcsundef{blx@getfakeset@\the\c@refsection @#2} + {} + {\blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{\csuse{blx@getfakeset@\the\c@refsection @#2}}}% + \abx@aux@category{#1}{\csuse{blx@getfakeset@\the\c@refsection @#2}}}% + \blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{#2}}% + \abx@aux@category{#1}{#2}} + +% dynamic entry sets + +\def\blx@btx@citeset#1#2{% + \blx@nl + @set{#1,\blx@nl + \space\space entryset = {#2},\blx@nl + }% +} + +\protected\def\blx@setreq#1#2{% + \blx@auxwrite\blx@bcfout{}{\blx@btx@citeset{#1}{#2}}% + \blx@nocite@do{#1}} + +% xref and @set +\def\blx@citation@i#1#2{% + \ifbool{citerequest} + {\ifcsdef{blx@setp@\the\c@refsection @#1} + {\blx@citation@set{#1}{#2}} + {\ifcsdef{blx@setc@\the\c@refsection @#1} + {\blx@citation@inset{#1}{#2}} + {\blx@citation@entry{#1}{#2}}}% + \ifcsdef{blx@refc@\the\c@refsection @#1}% + {\blx@citation@xref{#1}} + {}} + {}} % refcontexts are out, but we can try to save labelprefix @@ -406,7 +598,7 @@ % in \blx@refcontext@labelprefix@real and pass it to the aux file. % There are differences to the result obtained with Biber, % but it should be good enough for very simple applications. -\define@key{blx@refcontext}{labelprefix}{% +\blx@kv@defkey{blx@refcontext}{labelprefix}{% \xdef\blx@refcontext@labelprefix@real{#1}% \iftoggle{blx@defernumbers} {}% @@ -432,7 +624,7 @@ The option will be ignored}} \def\blx@bibtexrefcontext@disable#1{% - \define@key{blx@refcontext}{#1}{% + \blx@kv@defkey{blx@refcontext}{#1}{% \blx@warn@bibtexrefcontext{#1}}} \forcsvlist{\blx@bibtexrefcontext@disable}{% @@ -539,12 +731,63 @@ } \def\blx@ctrlwrite{% - % \sortalphaothers should only contain safe characters, - % so we should be able to \edef it + \begingroup + \blx@safe@actives + \let\protect\string \edef\blx@sortalphaothers{\sortalphaothers}% \immediate\openout\blx@write\blx@ctrlfile\blxauxsuffix.bib\relax \blx@auxwrite\blx@write{}{\blx@ctrl}% - \immediate\closeout\blx@write} + \endgroup + \AfterEndDocument{\immediate\closeout\blx@write}} + + +% {<string>} +% This mustn't be robust as it's likely to be used mainly in tests and so +% needs to be expandable +\renewcommand*\rangelen[1]{% + \ifblank{#1} + {0}% + {\expandafter\blx@rangelen@range\romannumeral-`\q% + #1\bibrangedash\bibrangedash&% + }} + +\def\blx@rangelen@range#1\bibrangedash#2\bibrangedash#3&{% + \ifblank{#3} + {\blx@rangelen@hyphen#1--&} + {\blx@rangelen@check{#1}{#2}}% +} +\def\blx@rangelen@hyphen#1-#2-#3&{% + \ifblank{#3} + {1}% No range at all: assume one page + {\blx@rangelen@check{#1}{#2}}% +} +\def\blx@rangelen@check#1#2{% + \expandafter\blx@rangelen@check@aux + \number\numexpr + \blx@rangelen@check@int{#2} + - + \blx@rangelen@check@int{#1} + + 1 + \relax + &\stop +} +\def\blx@rangelen@check@aux#1\stop{% + \ifblank{#2} + {#1} + {-1}% +} +\def\blx@rangelen@check@int#1{% + \ifblank{#1} + {0&} + {% + \if\number\numexpr0#1-0#1\relax0 + #1 + \else + 0& + \fi + }% +} + % Disable some interfaces diff --git a/macros/latex/contrib/biblatex/latex/blx-case-expl3.def b/macros/latex/contrib/biblatex/latex/blx-case-expl3.def new file mode 100644 index 0000000000..e9b7f23289 --- /dev/null +++ b/macros/latex/contrib/biblatex/latex/blx-case-expl3.def @@ -0,0 +1,271 @@ +\RequirePackage{expl3}[2020/04/06] +\RequirePackage{xparse} +\ProvidesExplFile {blx-case-expl3} {\abx@date} {\abx@version} + {expl3 case changing code for biblatex} + +% Map for babel/polyglossia names +% to BCP-47-like l3text names. +% We only need maps for l3text names that do something +% as of 2020/04/06 those names are +% az, de-alt, el, lt, nl, tr. +% biblatex currently only supports dutch, greek and turkish +% so we only map those. +% de-alt is optional and still unusual, so *we* don't map it, +% but a user could map it themselves. + +\prop_new:N \l__biblatex_babel_to_pseudobcp_prop + +\cs_generate_variant:Nn \msg_info:nnnnn { nnnxn } + +\cs_new_protected:Npn \biblatex_maplang_babel_to_pseudobcp:nn #1 #2 + { + \prop_if_in:NnT \l__biblatex_babel_to_pseudobcp_prop {#1} + { + \msg_info:nnnxn { biblatex } + { overwrite-babel-to-pseudobcp-map } + {#1} + {\prop_item:Nn \l__biblatex_babel_to_pseudobcp_prop {#1}} + {#2} + } + \prop_put:Nnn \l__biblatex_babel_to_pseudobcp_prop {#1} {#2} + } + +\NewDocumentCommand \DeclareBabelToExplLanguageMapping {mm} + { + \biblatex_maplang_babel_to_pseudobcp:nn {#1} {#2} + } + +\cs_generate_variant:Nn \msg_info:nnnn { nnnx } + +\cs_new_protected:Npn \biblatex_unmaplang_babel_to_pseudobcp:n #1 + { + \prop_if_in:NnT \l__biblatex_babel_to_pseudobcp_prop {#1} + { + \msg_info:nnnx { biblatex } + { remove-babel-to-pseudobcp-map } + {#1} + { \prop_item:Nn \l__biblatex_babel_to_pseudobcp_prop {#1} } + } + \prop_remove:Nn \l__biblatex_babel_to_pseudobcp_prop {#1} + } + +\NewDocumentCommand \UndeclareBabelToExplLanguageMapping {m} + { + \str_if_eq:nnTF {#1} {*} + { \prop_clear:N \l__biblatex_babel_to_pseudobcp_prop } + { \biblatex_unmaplang_babel_to_pseudobcp:n {#1} } + } + +% Don't put this into biblatex.sty, since +% \DeclareBabelToExplLanguageMapping has no equivalent in the LaTeX2e +% code. +\DeclareBabelToExplLanguageMapping{dutch}{nl} +\DeclareBabelToExplLanguageMapping{greek}{el} +\DeclareBabelToExplLanguageMapping{turkish}{tr} + +% Our copy of \l_text_titlecase_check_letter_bool +\bool_new:N \l_biblatex_titlecase_check_letter_bool +% Just to be clear: unlike l3text our default is "false" +\bool_set_false:N \l_biblatex_titlecase_check_letter_bool + +% Helper macro to avoid unnecessary repetition of the same structure +% {<case [lowercase|uppercase|titlecase|titlecase_first]>} +% {<babel language>}{<text>} +% We use that \prop_item:Nn is empty if the item is not present +% and that \text_...:nn becomes \text_...:n if the first argument +% is empty. +\cs_new_protected:Npn \__biblatex_text_makeconverter:nnn #1 #2 #3 + { + \group_begin: + \bool_if_exist:NTF \l_text_titlecase_check_letter_bool + { + \bool_set_eq:NN \l_text_titlecase_check_letter_bool + \l_biblatex_titlecase_check_letter_bool + } + { + % should we raise an error or at least issue a warning here? + } + \use:c { text_#1:nn } + { \prop_item:Nn \l__biblatex_babel_to_pseudobcp_prop {#2} } {#3} + \group_end: + } + + +\cs_new:Npn \biblatex_text_lowercase:nn #1 #2 + { + \__biblatex_text_makeconverter:nnn {lowercase} {#1} {#2} + } + +\cs_generate_variant:Nn \biblatex_text_lowercase:nn { Vn } + +\cs_new:Npn \biblatex_text_lowercase:n #1 + { + \biblatex_text_lowercase:Vn \blx@languagename {#1} + } + +\cs_set_eq:NN \blx@maketext@lowercase \biblatex_text_lowercase:n + + +\cs_new:Npn \biblatex_text_uppercase:nn #1 #2 + { + \__biblatex_text_makeconverter:nnn {uppercase} {#1} {#2} + } + +\cs_generate_variant:Nn \biblatex_text_uppercase:nn { Vn } + +\cs_new:Npn \biblatex_text_uppercase:n #1 + { + \biblatex_text_uppercase:Vn \blx@languagename {#1} + } + +\cs_set_eq:NN \blx@maketext@uppercase \biblatex_text_uppercase:n + + +\cs_new:Npn \biblatex_text_makecapital:nn #1 #2 + { + \__biblatex_text_makeconverter:nnn {titlecase_first} {#1} {#2} + } + +\cs_generate_variant:Nn \biblatex_text_makecapital:nn { Vn } + +\cs_new:Npn \biblatex_text_makecapital:n #1 + { + \biblatex_text_makecapital:Vn \blx@languagename {#1} + } + +\cs_set_eq:NN \blx@maketext@makecapital \biblatex_text_makecapital:n + +\NewDocumentCommand \MakeCapital {m} + { + \biblatex_text_makecapital:n {#1} + } + + + +% BibTeX to expl3 case protection code by Joseph Wright +% https://github.com/plk/biblatex/issues/960#issuecomment-578435859 +% and Bruno Le Floch +% https://github.com/moewew/biblatex/commit/c485f1b8079d56497b17343d7883b8fcd42f961a#r39225533 +\tl_put_right:Nn \l_text_expand_exclude_tl { \NoCaseChange } + +\tl_put_right:Nn \l_text_case_exclude_arg_tl { \NoCaseChange } + +\cs_new:Npn \biblatex_text_bibtex_to_expl:n #1 + { + \__biblatex_text_bibtex_loop:w #1 + { \q_recursion_tail } \q_recursion_stop + } + +\cs_new:Npn \__biblatex_text_bibtex_loop:w #1 # + { + \exp_not:n {#1} + \__biblatex_text_bibtex_group:n + } + +\cs_new:Npn \__biblatex_text_bibtex_group:n #1 + { + \quark_if_recursion_tail_stop:n {#1} + { + \bool_lazy_and:nnTF + { \tl_if_head_is_N_type_p:n {#1} } + { \exp_after:wN \token_if_cs_p:N \tl_head:w #1 \q_stop } + { \exp_not:n {#1} } + { \exp_not:n { \NoCaseChange {#1} } } + } + \__biblatex_text_bibtex_loop:w + } + +\cs_new_eq:NN \biblatex_text_sentencecase_preprocess:n + \biblatex_text_bibtex_to_expl:n + + +% By default we emulate BibTeX's brace case protection rules +% but the user can turn that off for a more sane behaviour +% that only relies on \NoCaseChange. +\DeclareBiblatexOption{global,type,entry}[boolean]{bibtexcaseprotection}[true]{% + \str_case:nnF {#1} + { + { true } + { + \cs_set_eq:NN \biblatex_text_sentencecase_preprocess:n + \biblatex_text_bibtex_to_expl:n + } + { false } + { + \cs_set_eq:NN \biblatex_text_sentencecase_preprocess:n + \use:n + } + } + { + \msg_error:nnn { biblatex } { invalid-value-bibtexcaseprotection } + {#1} + } +} + + +\cs_new:Npn \biblatex_text_sentencecase:nn #1 #2 + { + \__biblatex_text_makeconverter:nnn {titlecase} {#1} {#2} + } + + +\cs_generate_variant:Nn \clist_if_in:NnTF { NxTF } + +\cs_generate_variant:Nn \biblatex_text_sentencecase:nn { Vo, xo } + +% If \DeclareCaseLangs says we should apply sentence casing, +% we go for it and pass the language along to the sentence casing macro. +% Preprocess is either the BibTeX-to-expl3 brace translator +% or \@firstofone (do nothing), +% we need to expand once to get rid of the latter. +\NewDocumentCommand \MakeSentenceCase {sm} + { + \IfBooleanTF {#1} + { + \clist_if_in:NxTF + \l__biblatex_caselangs_clist { \blx@mksc@lang } + { + \biblatex_text_sentencecase:xo { \blx@mksc@lang } + { \biblatex_text_sentencecase_preprocess:n {#2} } + } + {#2} + } + { + \biblatex_text_sentencecase:Vo \blx@languagename + { \biblatex_text_sentencecase_preprocess:n {#2} } + } + } + + +\clist_new:N \l__biblatex_caselangs_clist + +% {<language,language,...>} +\NewDocumentCommand \DeclareCaseLangs {sm} + { + \IfBooleanF {#1} + { \clist_clear:N \l__biblatex_caselangs_clist } + \clist_put_left:Nn \l__biblatex_caselangs_clist {#2} + } + +% \DeclareCaseLangs invocation is in biblatex.sty + + +\NewDocumentCommand \ifcaselang {O{\blx@languagename}} + { + \clist_if_in:NxTF \l__biblatex_caselangs_clist {#1} + } + + + +\msg_new:nnnn { biblatex } { invalid-value-bibtexcaseprotection } + { Invalid~value~'#1'~for~option~'bibtexcaseprotection'. } + { Valid~values~for~'bibtexcaseprotection'~are~'true'~and~'false'. } + +\msg_new:nnn { biblatex } { remove-babel-to-pseudobcp-map } + { Removing~babel->l3text~language~mapping~for~'#1'~to~'#2'. } + +\msg_new:nnn { biblatex } { overwrite-babel-to-pseudobcp-map } + { Overwriting~babel->l3text~language~mapping~for~'#1'~from~ + '#2'~to~'#3'. } + +\endinput diff --git a/macros/latex/contrib/biblatex/latex/blx-case-latex2e.def b/macros/latex/contrib/biblatex/latex/blx-case-latex2e.def new file mode 100644 index 0000000000..85641d2e66 --- /dev/null +++ b/macros/latex/contrib/biblatex/latex/blx-case-latex2e.def @@ -0,0 +1,290 @@ +\ProvidesFile{blx-case-latex2e.def} +[\abx@cptid] + +% we don't have l3text's (pseudo)BCP47 language codes here +\newrobustcmd*{\DeclareBabelToExplLanguageMapping}[2]{% + \blx@warning{The command '\string\DeclareBabelToExplLanguageMapping'% + \MessageBreak + is only available with the expl3 case changing\MessageBreak + implementation ('casechanger=expl3').\MessageBreak + Ignoring}} + +\newrobustcmd*{\UndeclareBabelToExplLanguageMapping}[1]{% + \blx@warning{The command '\string\UndeclareBabelToExplLanguageMapping'% + \MessageBreak + is only available with the expl3 case changing\MessageBreak + implementation ('casechanger=expl3').\MessageBreak + Ignoring}} + +\def\blx@maketext@lowercase{\MakeLowercase} + +\def\blx@maketext@uppercase{\MakeUppercase} + +\def\blx@maketext@makecapital{\MakeCapital} + +% {<text>} +\newrobustcmd{\MakeCapital}[1]{% + \begingroup + \blx@mkcp@init + \protected@edef\blx@tempa{#1}% + \expandafter\blx@mkcp@parse\blx@tempa\@empty\blx@mkcp@end} + +\def\blx@mkcp@init{% + \def\blx@mkcp@iec{\noexpand\blx@mkcp@iec\noexpand}% + \def\blx@mkcp@bbl{\noexpand\blx@mkcp@bbl\noexpand}% + \def\blx@mkcp@sgl{\noexpand\blx@mkcp@sgl\noexpand}% + \def\blx@mkcp@dbl{\noexpand\blx@mkcp@dbl\noexpand}% + \def\do##1{\def##1{\blx@mkcp@sgl##1}}\abx@dosingleaccents + \def\do##1{\def##1{\blx@mkcp@dbl##1}}\abx@dodoubleaccents + \def\IeC##1{\blx@mkcp@iec\IeC{##1}}% + \def\@tabacckludge##1{% + \expandafter\blx@mkcp@sgl\csname\string##1\endcsname}} + +\begingroup +\catcode`\"=\active +\gappto\blx@mkcp@init{% + \ifnum\catcode`\"=\active + \def"#1{\blx@mkcp@bbl"\noexpand#1}% + \fi} +\endgroup + +\def\blx@mkcp@parse{% + \futurelet\@let@token\blx@mkcp@eval} + +\long\def\blx@mkcp@eval{% + \ifx\@let@token\blx@mkcp@iec + \expandafter\blx@mkcp@getiec + \fi + \ifx\@let@token\blx@mkcp@bbl + \expandafter\blx@mkcp@gettwo + \fi + \ifx\@let@token\blx@mkcp@sgl + \expandafter\blx@mkcp@gettwo + \fi + \ifx\@let@token\blx@mkcp@dbl + \expandafter\blx@mkcp@getthree + \fi + \blx@mkcp@case} + +\def\blx@mkcp@getiec#1\blx@mkcp@case#2#3#4{% + \blx@mkcp@case{#2#3{#4}}} + +\def\blx@mkcp@gettwo#1\blx@mkcp@case#2#3#4{% + \blx@mkcp@case{#2#3#4}} + +\def\blx@mkcp@getthree#1\blx@mkcp@case#2#3#4#5{% + \blx@mkcp@case{#2#3#4#5}} + +\long\def\blx@mkcp@case#1{% + \begingroup + \def\i{I}\def\j{J}% + \def\do##1##2{\let##1##2\do}% + \expandafter\do\@uclclist\relax{\relax\@gobble}% + \uppercase{\protected@edef\blx@tempa{\endgroup\blx@mkcp@end#1}}% + \blx@tempa} + +\protected\long\def\blx@mkcp@end#1\blx@mkcp@end{% + \let\blx@mkcp@iec\noexpand + \let\blx@mkcp@bbl\noexpand + \let\blx@mkcp@sgl\noexpand + \let\blx@mkcp@dbl\noexpand + \protected@edef\blx@tempa{\endgroup#1}% + \blx@tempa} + + +\DeclareBiblatexOption{global,type,entry}[boolean]{bibtexcaseprotection}[true]{% + \ifstrequal{#1}{true} + {} + {\ifstrequal{#1}{false} + {\blx@warning + {The option 'bibtexcaseprotection=false' is only\MessageBreak + available with expl3}} + {\blx@err@invopt{bibtexcaseprotection=#1} + {Valid values for 'bibtexcaseprotection' are 'true' and + 'false'\MessageBreak + (but 'false' only works with expl3 code)}}}} + +% {<text>} +\newrobustcmd*{\MakeSentenceCase}{% + \@ifstar\blx@mksc@i\blx@mksc@ii} + +% \blx@cmksc@lang is defined in biblatex.sty +% it expands to the applicable language for the title field +\def\blx@mksc@i{% + \xifinlist\blx@mksc@lang\blx@cmksc@lang + {\blx@mksc@ii} + {\@firstofone}} + +\long\def\blx@mksc@ii#1{% + \begingroup + \let\blx@tempa\@empty + \let\blx@tempb\@empty + \blx@mksc@init + \protected@edef\@tempa{#1}% + \expandafter\blx@mksc@parse\@tempa\blx@mksc@end} + +\def\blx@mksc@init{% + \blx@mkcp@init + \def\blx@mkcp@nil{\noexpand\blx@mkcp@nil\noexpand}% + \def\i{\blx@mkcp@nil\i}\def\j{\blx@mkcp@nil\j}% + \def\do##1{% + \ifx##1\relax + \else + \def##1{\blx@mkcp@nil##1}% + \expandafter\do + \fi}% + \expandafter\do\@uclclist\relax} + +\def\blx@mksc@parse{% + \futurelet\@let@token\blx@mksc@eval} + +\let\blx@asttoken=* + +\def\blx@mksc@eval{% + \ifx\@let@token\blx@mksc@end + \expandafter\blx@mksc@end + \fi + \ifx\@let@token\bgroup + \expandafter\blx@mksc@group + \fi + \ifx\@let@token\@sptoken + \expandafter\blx@mksc@space + \fi + \ifx\@let@token\blx@mkcp@nil + \expandafter\blx@mksc@getone + \fi + \ifx\@let@token\blx@mkcp@iec + \expandafter\blx@mksc@getiec + \fi + \ifx\@let@token\blx@mkcp@bbl + \expandafter\blx@mksc@gettwo + \fi + \ifx\@let@token\blx@mkcp@sgl + \expandafter\blx@mksc@gettwo + \fi + \ifx\@let@token\blx@mkcp@dbl + \expandafter\blx@mksc@getthree + \fi + \ifx\@let@token\blx@asttoken + \expandafter\blx@mksc@cs + \fi + \if\noexpand\@let@token\relax + \expandafter\blx@mksc@cs + \fi + \blx@mksc@other} + +\def\blx@mksc@end#1\blx@mksc@end{% + \blx@mksc@eject + \let\blx@mkcp@nil\noexpand + \let\blx@mkcp@iec\noexpand + \let\blx@mkcp@bbl\noexpand + \let\blx@mkcp@sgl\noexpand + \let\blx@mkcp@dbl\noexpand + \let\MakeUppercase\relax + \let\MakeLowercase\relax + \protected@edef\blx@tempa{\endgroup\blx@tempa}% + \blx@tempa} + +\long\def\blx@mksc@group#1\blx@mksc@other#2{% + \futurelet\@let@token\blx@mksc@ingroup#2&{#2}% + \blx@mksc@endhead + \blx@mksc@parse} + +\long\def\blx@mksc@ingroup#1{% + \if\noexpand\@let@token\relax + \ifx\@let@token\blx@mkcp@sgl + \blx@mksc@nocase{{#2}}% + \else + \ifx\@let@token\blx@mkcp@dbl + \blx@mksc@nocase{{#2}}% + \else + \blx@mksc@locase{{#2}}% + \fi + \fi + \else + \blx@mksc@nocase{{#2}}% + \fi} + +\def\blx@mksc@space{\def\blx@mksc@space##1\blx@mksc@other} +\csuse{blx@mksc@space} {% + \blx@mksc@anycase{ }% + \blx@mksc@endhead + \blx@mksc@parse} + +\long\def\blx@mksc@cs#1\blx@mksc@other#2{% + \ifcat\noexpand~\noexpand#2% + \blx@mksc@locase{#2}% + \else + \blx@mksc@nocase{#2}% + \fi + \blx@mksc@endhead + \blx@mksc@parse} + +\def\blx@mksc@getiec#1\blx@mksc@other#2#3#4{% + \blx@mksc@other{#2#3{#4}}} + +\def\blx@mksc@getone#1\blx@mksc@other#2#3{% + \blx@mksc@other{#2#3}} + +\def\blx@mksc@gettwo#1\blx@mksc@other#2#3#4{% + \blx@mksc@other{#2#3#4}} + +\def\blx@mksc@getthree#1\blx@mksc@other#2#3#4#5{% + \blx@mksc@other{#2#3#4#5}} + +\long\def\blx@mksc@other#1{% + \blx@mksc@locase{#1}% + \blx@mksc@endhead + \blx@mksc@parse} + +\def\blx@mksc@locase{% + \appto\blx@tempb} + +\def\blx@mksc@nocase{% + \blx@mksc@eject + \appto\blx@tempa} + +\def\blx@mksc@anycase{% + \ifx\blx@tempb\@empty + \expandafter\appto + \expandafter\blx@tempa + \else + \expandafter\appto + \expandafter\blx@tempb + \fi} + +\def\blx@mksc@eject{% + \ifx\blx@tempb\@empty + \else + \eappto\blx@tempa{\noexpand\MakeLowercase{\expandonce\blx@tempb}}% + \let\blx@tempb\@empty + \fi} + +\def\blx@mksc@endhead{% + \ifx\blx@tempb\@empty + \else + \eappto\blx@tempa{\noexpand\MakeCapital{\expandonce\blx@tempb}}% + \let\blx@tempb\@empty + \fi + \let\blx@mksc@endhead\relax} + + + +% {<language,language,...>} +\newrobustcmd*{\DeclareCaseLangs}{% + \@ifstar + {\blx@defcaselangs} + {\global\let\blx@cmksc@lang\@empty + \blx@defcaselangs}} + +\def\blx@defcaselangs#1{% + \ifblank{#1} + {} + {\forcsvlist{\listgadd\blx@cmksc@lang}{#1}}} + +% \DeclareCaseLangs invocation is in biblatex.sty + +\newrobustcmd*{\ifcaselang}[1][\blx@languagename]{% + \xifinlist{#1}\blx@cmksc@lang} + +\endinput diff --git a/macros/latex/contrib/biblatex/latex/blx-compat.def b/macros/latex/contrib/biblatex/latex/blx-compat.def index e315c5cc88..546f16af43 100644 --- a/macros/latex/contrib/biblatex/latex/blx-compat.def +++ b/macros/latex/contrib/biblatex/latex/blx-compat.def @@ -119,29 +119,29 @@ % biblatex <1.6 -\define@key{blx@bib}{maxnames}{\blx@warn@depropt{maxnames}} -\define@key{blx@los}{maxnames}{\blx@warn@depropt{maxnames}} -\define@key{blx@bbs}{maxnames}{\blx@warn@depropt{maxnames}} -\define@key{blx@bbg}{maxnames}{\blx@warn@depropt{maxnames}} -\define@key{blx@bbc}{maxnames}{\blx@warn@depropt{maxnames}} - -\define@key{blx@bib}{minnames}{\blx@warn@depropt{minnames}} -\define@key{blx@los}{minnames}{\blx@warn@depropt{minnames}} -\define@key{blx@bbs}{minnames}{\blx@warn@depropt{minnames}} -\define@key{blx@bbg}{minnames}{\blx@warn@depropt{minnames}} -\define@key{blx@bbc}{minnames}{\blx@warn@depropt{minnames}} - -\define@key{blx@bib}{maxitems}{\blx@warn@depropt{maxitems}} -\define@key{blx@los}{maxitems}{\blx@warn@depropt{maxitems}} -\define@key{blx@bbs}{maxitems}{\blx@warn@depropt{maxitems}} -\define@key{blx@bbg}{maxitems}{\blx@warn@depropt{maxitems}} -\define@key{blx@bbc}{maxitems}{\blx@warn@depropt{maxitems}} - -\define@key{blx@bib}{minitems}{\blx@warn@depropt{minitems}} -\define@key{blx@los}{minitems}{\blx@warn@depropt{minitems}} -\define@key{blx@bbs}{minitems}{\blx@warn@depropt{minitems}} -\define@key{blx@bbg}{minitems}{\blx@warn@depropt{minitems}} -\define@key{blx@bbc}{minitems}{\blx@warn@depropt{minitems}} +\blx@kv@defkey{blx@bib}{maxnames}{\blx@warn@depropt{maxnames}} +\blx@kv@defkey{blx@los}{maxnames}{\blx@warn@depropt{maxnames}} +\blx@kv@defkey{blx@bbs}{maxnames}{\blx@warn@depropt{maxnames}} +\blx@kv@defkey{blx@bbg}{maxnames}{\blx@warn@depropt{maxnames}} +\blx@kv@defkey{blx@bbc}{maxnames}{\blx@warn@depropt{maxnames}} + +\blx@kv@defkey{blx@bib}{minnames}{\blx@warn@depropt{minnames}} +\blx@kv@defkey{blx@los}{minnames}{\blx@warn@depropt{minnames}} +\blx@kv@defkey{blx@bbs}{minnames}{\blx@warn@depropt{minnames}} +\blx@kv@defkey{blx@bbg}{minnames}{\blx@warn@depropt{minnames}} +\blx@kv@defkey{blx@bbc}{minnames}{\blx@warn@depropt{minnames}} + +\blx@kv@defkey{blx@bib}{maxitems}{\blx@warn@depropt{maxitems}} +\blx@kv@defkey{blx@los}{maxitems}{\blx@warn@depropt{maxitems}} +\blx@kv@defkey{blx@bbs}{maxitems}{\blx@warn@depropt{maxitems}} +\blx@kv@defkey{blx@bbg}{maxitems}{\blx@warn@depropt{maxitems}} +\blx@kv@defkey{blx@bbc}{maxitems}{\blx@warn@depropt{maxitems}} + +\blx@kv@defkey{blx@bib}{minitems}{\blx@warn@depropt{minitems}} +\blx@kv@defkey{blx@los}{minitems}{\blx@warn@depropt{minitems}} +\blx@kv@defkey{blx@bbs}{minitems}{\blx@warn@depropt{minitems}} +\blx@kv@defkey{blx@bbg}{minitems}{\blx@warn@depropt{minitems}} +\blx@kv@defkey{blx@bbc}{minitems}{\blx@warn@depropt{minitems}} % Legacy alias for \printshorthands \def\printshorthands{% @@ -149,7 +149,7 @@ {\blx@printshorthands} {\blx@printshorthands[]}} -\def\blx@printshorthands[#1]{\printbiblist[#1]{shorthand}} +\def\blx@printshorthands[#1]{\printbiblist[{#1}]{shorthand}} % Legacy aliases \def\AtBeginShorthands{\AtBeginBiblist{shorthand}} @@ -164,17 +164,17 @@ 'sortlos' option is deprecated.\MessageBreak Please use 'sorting' option to '\string\printbiblist'}} -\define@key{blx@bib1}{sorting}{% +\blx@kv@defkey{blx@bib1}{sorting}{% \blx@warning@noline{% 'sorting' option to '\string\printbibliography' is no longer supported.\MessageBreak Please use 'sorting' option to '\string\newrefcontext'}} -\define@key{blx@biblist1}{sorting}{% +\blx@kv@defkey{blx@biblist1}{sorting}{% \blx@warning@noline{% 'sorting' option to '\string\printbiblist' is no longer supported.\MessageBreak Please use 'sorting' option to '\string\newrefcontext'}} -\define@key{blx@bib2}{prefixnumbers}{% +\blx@kv@defkey{blx@bib2}{prefixnumbers}{% \blx@warning@noline{% 'prefixnumbers' option to '\string\printbibliography' is no longer supported.\MessageBreak Please use 'labelprefix' option to '\string\newrefcontext'}} @@ -198,17 +198,17 @@ \settoggle{blx@skipbiblist}{#1}} % Legacy options moved to \namepart in \DeclareLabelalphaNameTemplate -\define@key{blx@latem@field}{compound}{% deprecated +\blx@kv@defkey{blx@latem@field}{compound}{% deprecated \blx@warning@noline{% Ignored 'compound' option to '\string\field' in '\string\DeclareLabelalphaNameTemplate'\MessageBreak This is now the 'compound' option of '\string\namepart\space' in\MessageBreak '\string\DeclareLabelalphaNameTemplate'}} -\define@key{blx@latem@field}{pcompound}{% deprecated +\blx@kv@defkey{blx@latem@field}{pcompound}{% deprecated \blx@warning@noline{% Ignored 'pcompound' option to '\string\field' in '\string\DeclareLabelalphaNameTemplate'\MessageBreak This is now the 'compound' option of '\string\namepart' in\MessageBreak '\string\DeclareLabelalphaNameTemplate'}} -\define@key{blx@latem@field}{pstrwidth}{% deprecated +\blx@kv@defkey{blx@latem@field}{pstrwidth}{% deprecated \blx@warning@noline{% Ignored 'pstrwidth' option to '\string\field' in '\string\DeclareLabelalphaNameTemplate'\MessageBreak This is now the 'strwidth' option of '\string\namepart' in\MessageBreak @@ -240,14 +240,14 @@ Please use 'inits' option to '\string\namepart'\MessageBreak in '\string\DeclareSortingNamekeyTemplate' instead}} -\define@key{blx@refcontext}{prefixnumbers}{%LEGACY(<3.3) +\blx@kv@defkey{blx@refcontext}{prefixnumbers}{%LEGACY(<3.3) \blx@warning@noline{% prefixnumbers option to '\string\newrefcontext' has been renamed.\MessageBreak Please use 'labelprefix' option instead}% - \setkeys{blx@refcontext}{labelprefix=#1}} + \blx@kv@setkeys{blx@refcontext}{labelprefix=#1}} % biblatex < 3.4 -\define@key{blx@bib1}{prefixnumbers}{}%LEGACY(<3.4) legacy name for labelprefix +\blx@kv@defkey{blx@bib1}{prefixnumbers}{}%LEGACY(<3.4) legacy name for labelprefix \DeprecateFieldWithReplacement{prefixnumber}{labelprefix} \DeclareFieldAlias{prefixnumber}{labelprefix} @@ -256,7 +256,7 @@ \blx@warning@noline{% 'datelabel' option is deprecated.\MessageBreak Please use 'labeldate' instead}% - \setkeys{blx@opt@pre}{labeldate=#1}} + \blx@kv@setkeys{blx@opt@pre}{labeldate=#1}} \DeclareBibliographyOption[boolean]{labelyear}[true]{% \blx@warning@noline{% @@ -307,12 +307,12 @@ \mkdaterangeisoextra} % biblatex < 3.8 -\define@key{blx@refcontext}{sortingnamekeyscheme}{% +\blx@kv@defkey{blx@refcontext}{sortingnamekeyscheme}{% \blx@warning@noline{'sortingnamekeyscheme' is deprecated.\MessageBreak Please use 'sortingnamekeytemplatename' instead}% \gdef\blx@refcontext@sortingnamekeytemplatename{#1}} -\define@key{blx@assignrefcontext}{sortingnamekeyscheme}{% +\blx@kv@defkey{blx@assignrefcontext}{sortingnamekeyscheme}{% \blx@warning@noline{'sortingnamekeyscheme' is deprecated.\MessageBreak Please use 'sortingnamekeytemplatename' instead}% \def\blx@tempb{#1}} @@ -351,4 +351,5 @@ Please use '\string\mkdaterangeisoextra'}% \mkdaterangeisoextra} + \endinput diff --git a/macros/latex/contrib/biblatex/latex/blx-dm.def b/macros/latex/contrib/biblatex/latex/blx-dm.def index 4cbdfa5bb8..0667b577ae 100644 --- a/macros/latex/contrib/biblatex/latex/blx-dm.def +++ b/macros/latex/contrib/biblatex/latex/blx-dm.def @@ -106,11 +106,11 @@ \blx@xml@datamodel@entrytype{\blx@tempa}{##1}}}% \ifblank{#1} {\docsvlist{#2}} - {\setkeys{blx@datamodel@entrytypes}{#1} + {\blx@kv@setkeys{blx@datamodel@entrytypes}{#1} \docsvlist{#2}}% \endgroup} -\define@key{blx@datamodel@entrytypes}{skipout}[true]{% true|false +\blx@kv@defkey{blx@datamodel@entrytypes}{skipout}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempa{ skip\string_output="true"}} {}} @@ -128,7 +128,7 @@ \boolfalse{dmskipout}% \boolfalse{dmlabelfield}% \let\blx@tempa\@empty - \setkeys{blx@datamodel@field}{#1}% + \blx@kv@setkeys{blx@datamodel@field}{#1}% \def\do##1{% % Generic lists of field/datatypes for testing bib fields \ifinlistcs{##1}{blx@datamodelfields@fieldtypes@\blx@dm@fieldtype} @@ -240,7 +240,7 @@ \xifinlistcs{\blx@datetype ####1}{blx@datamodel@fields} {} {\listcsxadd{blx@datamodel@fields}{\blx@datetype ####1}}% - \setkeys{blx@datamodel@field}{type=field,datatype=datepart,nullok}% + \blx@kv@setkeys{blx@datamodel@field}{type=field,datatype=datepart,nullok}% \xappto\blx@bcf@datamodel@fields{% \blx@xml@datamodel@field{\blx@tempa}{\blx@datetype ####1}}}% \expandafter\docsvlist\expandafter{\blx@nullokdateparts}% @@ -252,7 +252,7 @@ \xifinlistcs{\blx@datetype ####1}{blx@datamodel@fields} {} {\listcsxadd{blx@datamodel@fields}{\blx@datetype ####1}}% - \setkeys{blx@datamodel@field}{type=field,datatype=datepart}% + \blx@kv@setkeys{blx@datamodel@field}{type=field,datatype=datepart}% \xappto\blx@bcf@datamodel@fields{% \blx@xml@datamodel@field{\blx@tempa}{\blx@datetype ####1}}}% \expandafter\docsvlist\expandafter{\blx@notnulldateparts}% @@ -261,25 +261,25 @@ \docsvlist{#2} \endgroup} -\define@key{blx@datamodel@field}{type}{% characters +\blx@kv@defkey{blx@datamodel@field}{type}{% characters \eappto\blx@tempa{ fieldtype="#1"}% \def\blx@dm@fieldtype{#1}} -\define@key{blx@datamodel@field}{datatype}{% characters +\blx@kv@defkey{blx@datamodel@field}{datatype}{% characters \eappto\blx@tempa{ datatype="#1"}% \def\blx@dm@datatype{#1}} -\define@key{blx@datamodel@field}{format}{% characters +\blx@kv@defkey{blx@datamodel@field}{format}{% characters \eappto\blx@tempa{ format="#1"}% \def\blx@dm@format{#1}} -\define@key{blx@datamodel@field}{nullok}[true]{% true|false +\blx@kv@defkey{blx@datamodel@field}{nullok}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempa{ nullok="true"}} {}} -\define@key{blx@datamodel@field}{skipout}[true]{% true|false +\blx@kv@defkey{blx@datamodel@field}{skipout}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempa{ skip\string_output="true"}% \booltrue{dmskipout}} {}} -\define@key{blx@datamodel@field}{label}[true]{% true|false +\blx@kv@defkey{blx@datamodel@field}{label}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempa{ label="true"}% \booltrue{dmlabelfield}} @@ -290,13 +290,13 @@ \let\blx@tempa\@empty \ifblank{#1} {\def\blx@tempa{string}} - {\setkeys{blx@datamodel@constant}{#1}}% + {\blx@kv@setkeys{blx@datamodel@constant}{#1}}% \xappto\blx@bcf@datamodel@constants{\blx@xml@datamodel@constant{\blx@tempa}{#2}{#3}}% \csxdef{blx@datamodel@constant@#2}{#3}% \csxdef{blx@datamodel@constanttype@#2}{\blx@tempa}% \endgroup} -\define@key{blx@datamodel@constant}{type}{% +\blx@kv@defkey{blx@datamodel@constant}{type}{% \def\blx@tempa{#1}} \newrobustcmd*{\DeclareDatamodelMultiscriptEntryfields}[1]{% @@ -340,7 +340,7 @@ \newcommand*{\blx@datamodel@constraint}[2][]{% \let\blx@tempc\@empty \let\blx@tempd\@empty - \setkeys{blx@datamodel@constraint}{#1}% + \blx@kv@setkeys{blx@datamodel@constraint}{#1}% \let\constraintfieldsxor\blx@datamodel@constraintfieldsxor \let\constraintfieldsor\blx@datamodel@constraintfieldsor \let\constraintfield\blx@datamodel@constraintfield @@ -349,22 +349,22 @@ #2% \eappto\blx@tempb{\blx@xml@datamodel@constraint{\blx@tempc}{\blx@tempd}}} -\define@key{blx@datamodel@constraint}{type}{% characters +\blx@kv@defkey{blx@datamodel@constraint}{type}{% characters \eappto\blx@tempc{ type="#1"}} -\define@key{blx@datamodel@constraint}{datatype}{% characters +\blx@kv@defkey{blx@datamodel@constraint}{datatype}{% characters \eappto\blx@tempc{ datatype="#1"}} -\define@key{blx@datamodel@constraint}{rangemin}{% integer +\blx@kv@defkey{blx@datamodel@constraint}{rangemin}{% integer \eappto\blx@tempc{ rangemin="#1"}} -\define@key{blx@datamodel@constraint}{rangemax}{% integer +\blx@kv@defkey{blx@datamodel@constraint}{rangemax}{% integer \eappto\blx@tempc{ rangemax="#1"}} -\define@key{blx@datamodel@constraint}{pattern}{% regexp +\blx@kv@defkey{blx@datamodel@constraint}{pattern}{% regexp \eappto\blx@tempc{ pattern="#1"}} \newcommand*{\blx@datamodel@constraint@antecedent}[2][]{% \let\blx@tempe\@empty \let\blx@temph\@empty \let\constraintfield\blx@datamodel@constraintfieldsub - \setkeys{blx@datamodel@constraint@quant}{#1}% + \blx@kv@setkeys{blx@datamodel@constraint@quant}{#1}% #2% \let\constraintfield\blx@datamodel@constraintfield% back to default \eappto\blx@tempd{\blx@xml@datamodel@constraint@antecedent{\blx@tempe}{\blx@temph}}} @@ -373,12 +373,12 @@ \let\blx@tempe\@empty \let\blx@temph\@empty \let\constraintfield\blx@datamodel@constraintfieldsub - \setkeys{blx@datamodel@constraint@quant}{#1}% + \blx@kv@setkeys{blx@datamodel@constraint@quant}{#1}% #2% \let\constraintfield\blx@datamodel@constraintfield% back to default \eappto\blx@tempd{\blx@xml@datamodel@constraint@consequent{\blx@tempe}{\blx@temph}}} -\define@key{blx@datamodel@constraint@quant}{quantifier}{% characters +\blx@kv@defkey{blx@datamodel@constraint@quant}{quantifier}{% characters \eappto\blx@tempe{ quant="#1"}} \newcommand*{\blx@datamodel@constraintfieldsxor}[1]{% @@ -496,9 +496,11 @@ issue, issuesubtitle, issuetitle, + issuetitleaddon, iswc, journalsubtitle, journaltitle, + journaltitleaddon, label, langid, langidopts, @@ -625,6 +627,7 @@ \DeclareDatamodelFields[type=field, datatype=code]{execute} +% fields for all entry types \DeclareDatamodelEntryfields{ abstract, annotation, @@ -632,6 +635,10 @@ bookpagination, crossref, day, + doi, + eprint, + eprintclass, + eprinttype, endday, endhour, endminute, @@ -665,6 +672,12 @@ listf, minute, month, + namea, + nameb, + namec, + nameatype, + namebtype, + namectype, nameaddon, options, origday, @@ -743,7 +756,6 @@ annotator, author, commentator, - doi, editor, editora, editorb, @@ -753,15 +765,14 @@ editorbtype, editorctype, eid, - eprint, - eprintclass, - eprinttype, issn, issue, issuetitle, issuesubtitle, + issuetitleaddon, journalsubtitle, journaltitle, + journaltitleaddon, language, note, number, @@ -785,7 +796,6 @@ annotator, chapter, commentator, - doi, edition, editor, editora, @@ -795,9 +805,7 @@ editoratype, editorbtype, editorctype, - eprint, - eprintclass, - eprinttype, + eid, foreword, introduction, isbn, @@ -828,7 +836,6 @@ annotator, author, commentator, - doi, edition, editor, editora, @@ -838,9 +845,6 @@ editoratype, editorbtype, editorctype, - eprint, - eprintclass, - eprinttype, foreword, introduction, isbn, @@ -871,7 +875,6 @@ booktitleaddon, chapter, commentator, - doi, edition, editor, editora, @@ -881,9 +884,7 @@ editoratype, editorbtype, editorctype, - eprint, - eprintclass, - eprinttype, + eid, foreword, introduction, isbn, @@ -911,12 +912,9 @@ addendum, author, chapter, - doi, editor, editortype, - eprint, - eprintclass, - eprinttype, + eid, howpublished, language, location, @@ -935,7 +933,6 @@ annotator, chapter, commentator, - doi, edition, editor, editora, @@ -945,9 +942,7 @@ editoratype, editorbtype, editorctype, - eprint, - eprintclass, - eprinttype, + eid, foreword, introduction, isbn, @@ -978,7 +973,6 @@ annotator, author, commentator, - doi, edition, editor, editora, @@ -988,9 +982,6 @@ editoratype, editorbtype, editorctype, - eprint, - eprintclass, - eprinttype, foreword, introduction, isbn, @@ -1018,7 +1009,6 @@ booktitleaddon, chapter, commentator, - doi, edition, editor, editora, @@ -1028,9 +1018,7 @@ editoratype, editorbtype, editorctype, - eprint, - eprintclass, - eprinttype, + eid, foreword, introduction, isbn, @@ -1057,13 +1045,9 @@ \DeclareDatamodelEntryfields[dataset]{ addendum, author, - doi, edition, editor, editortype, - eprint, - eprintclass, - eprinttype, language, location, note, @@ -1082,13 +1066,10 @@ addendum, author, chapter, - doi, edition, editor, editortype, - eprint, - eprintclass, - eprinttype, + eid, isbn, language, location, @@ -1109,12 +1090,8 @@ \DeclareDatamodelEntryfields[misc,software]{ addendum, author, - doi, editor, editortype, - eprint, - eprintclass, - eprinttype, howpublished, language, location, @@ -1130,12 +1107,8 @@ \DeclareDatamodelEntryfields[online]{ addendum, author, - doi, editor, editortype, - eprint, - eprintclass, - eprinttype, language, note, organization, @@ -1148,10 +1121,6 @@ \DeclareDatamodelEntryfields[patent]{ addendum, author, - doi, - eprint, - eprintclass, - eprinttype, holder, location, note, @@ -1165,7 +1134,6 @@ \DeclareDatamodelEntryfields[periodical]{ addendum, - doi, editor, editora, editorb, @@ -1174,13 +1142,11 @@ editoratype, editorbtype, editorctype, - eprint, - eprintclass, - eprinttype, issn, issue, issuesubtitle, issuetitle, + issuetitleaddon, language, note, number, @@ -1189,16 +1155,13 @@ series, subtitle, title, + titleaddon, volume} \DeclareDatamodelEntryfields[mvproceedings]{ addendum, - doi, editor, editortype, - eprint, - eprintclass, - eprinttype, eventday, eventendday, eventendhour, @@ -1236,12 +1199,9 @@ \DeclareDatamodelEntryfields[proceedings]{ addendum, chapter, - doi, editor, editortype, - eprint, - eprintclass, - eprinttype, + eid, eventday, eventendday, eventendhour, @@ -1289,12 +1249,9 @@ booktitle, booktitleaddon, chapter, - doi, editor, editortype, - eprint, - eprintclass, - eprinttype, + eid, eventday, eventendday, eventendhour, @@ -1338,10 +1295,7 @@ addendum, author, chapter, - doi, - eprint, - eprintclass, - eprinttype, + eid, institution, isrn, language, @@ -1361,10 +1315,7 @@ addendum, author, chapter, - doi, - eprint, - eprintclass, - eprinttype, + eid, institution, language, location, @@ -1431,8 +1382,10 @@ introduction, issuesubtitle, issuetitle, + issuetitleaddon, journalsubtitle, journaltitle, + journaltitleaddon, location, mainsubtitle, maintitle, @@ -1598,7 +1551,6 @@ \DeclareDatamodelConstraints[proceedings,mvproceedings]{ \constraint[type=mandatory]{ - \constraintfield{editor} \constraintfield{title} } } diff --git a/macros/latex/contrib/biblatex/latex/blx-mcite.def b/macros/latex/contrib/biblatex/latex/blx-mcite.def index b4a8976e50..ea757f2086 100644 --- a/macros/latex/contrib/biblatex/latex/blx-mcite.def +++ b/macros/latex/contrib/biblatex/latex/blx-mcite.def @@ -11,6 +11,9 @@ \newrobustcmd*{\Mtextcite}{\mcitelike\Textcite} \newrobustcmd*{\msupercite}{\mcitelike\supercite} +\newrobustcmd*{\mautocite}{\mcitelike\autocite} +\newrobustcmd*{\Mautocite}{\mcitelike\Autocite} + % \mcite{key1,setA,*keyA1,*keyA2,*keyA3,key2,setB,*keyB1,*keyB2,*keyB3} % => \mcitelike\cite{key1,setA,*keyA1,*keyA2,*keyA3,key2,setB,*keyB1,*keyB2,*keyB3} % => \defbibentryset{setA}{keyA1,keyA2,keyA3} @@ -28,7 +31,7 @@ \let\blx@mclike@tempb\@empty \let\blx@mclike@tempc\@empty \blx@xsanitizeafter\blx@mclike@i{#4}% - \edef\blx@mclike@tempa{\endgroup\unexpanded{#1[#2][#3]}{\blx@mclike@tempa}}% + \edef\blx@mclike@tempa{\endgroup\unexpanded{#1[{#2}][{#3}]}{\blx@mclike@tempa}}% \blx@mclike@tempa} \def\blx@mclike@i#1{% diff --git a/macros/latex/contrib/biblatex/latex/blx-unicode.def b/macros/latex/contrib/biblatex/latex/blx-unicode.def index 79e003c190..01009c028c 100644 --- a/macros/latex/contrib/biblatex/latex/blx-unicode.def +++ b/macros/latex/contrib/biblatex/latex/blx-unicode.def @@ -46,17 +46,17 @@ {\blx@normrange@endash#1––&} {\ifblank{#2} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}% + \blx@range@out@item@process{\unexpanded{#1}}% \noexpand\bibrangedash}}% \blx@tempc} {\ifblank{#1} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{% + \blx@range@out@item@process{% \unexpanded{#2}}}}% \blx@tempc} {\blx@range@process{#1}{#2}}}}} @@ -66,17 +66,17 @@ {\blx@normrange@hyphen#1--&} {\ifblank{#2} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}% + \blx@range@out@item@process{\unexpanded{#1}}% \noexpand\bibrangedash}}% \blx@tempc} {\ifblank{#1} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{\unexpanded{#2}}}}% + \blx@range@out@item@process{\unexpanded{#2}}}}% \blx@tempc} {\blx@range@process{#1}{#2}}}}} @@ -85,15 +85,15 @@ {\blx@firstpage@endash#1––&} {\ifblank{#1} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{\unexpanded{#2}}}}% + \blx@range@out@item@process{\unexpanded{#2}}}}% \blx@tempc} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}}}% + \blx@range@out@item@process{\unexpanded{#1}}}}% \blx@tempc}}} \def\blx@firstpage@endash#1–#2–#3&{% @@ -101,15 +101,15 @@ {\blx@firstpage@hyphen#1--&} {\ifblank{#1} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% \noexpand\bibrangedash - \expandonce\blx@range@out@item@process{\unexpanded{#2}}}}% + \blx@range@out@item@process{\unexpanded{#2}}}}% \blx@tempc} {\begingroup - \edef\blx@tempc{\endgroup + \protected@edef\blx@tempc{\endgroup \blx@range@out@value{% - \expandonce\blx@range@out@item@process{\unexpanded{#1}}}}% + \blx@range@out@item@process{\unexpanded{#1}}}}% \blx@tempc}}} \endinput diff --git a/macros/latex/contrib/biblatex/latex/cbx/numeric-comp.cbx b/macros/latex/contrib/biblatex/latex/cbx/numeric-comp.cbx index b649cbeaee..86dfce242d 100644 --- a/macros/latex/contrib/biblatex/latex/cbx/numeric-comp.cbx +++ b/macros/latex/contrib/biblatex/latex/cbx/numeric-comp.cbx @@ -1,7 +1,12 @@ \ProvidesFile{numeric-comp.cbx} [\abx@cbxid] -\ExecuteBibliographyOptions{labelnumber,sortcites,autocite=inline} +\newtoggle{cbx:subentrycomp} +\DeclareBiblatexOption{global,type,entry}[boolean]{subentrycomp}[true]{% + \settoggle{cbx:subentrycomp}{#1}} + +\ExecuteBibliographyOptions{labelnumber,sortcites,autocite=inline, + subentrycomp=true} \renewcommand*{\multicitedelim}{\addcomma\space} \renewcommand*{\iffinalcitedelim}{% @@ -10,21 +15,44 @@ \providebool{bbx:subentry} \newbool{cbx:parens} -\newcounter{cbx@tempcnta} -\newcounter{cbx@tempcntb} +\newcounter{cbx@tempcnta}% no. of labelnumbers skipped +\newcounter{cbx@tempcntb}% 'predicted' labelnumber for current cite +\newcounter{cbx@tempcntc}% no. of entrysetcounts we skipped +\newcounter{cbx@tempcntd}% 'predicted' entrysetcount \DeclareFieldFormat{entrysetcount}{\mknumalph{#1}} +\newcommand*{\cbx@iflabelnumberequalslast}{% + \iffieldequals{labelnumber}{\cbx@lastnumber}} + +% \iffieldequals is false even if both are empty/undef +% so we need a special test for that case +% this test is optimised for performance and laziness +% rather than prettiness, not that it would matter a lot... +\newcommand*{\cbx@iflabelprefixequalslast}{% + \ifundef\cbx@lastprefix + {\iffieldundef{labelprefix}} + {\iffieldequals{labelprefix}{\cbx@lastprefix}}} + +% \cbx@iflabelnumberequalslast and \cbx@iflabelprefixequalslast +\newcommand*{\cbx@iflabelnumberandprefixequallast}{% + \cbx@iflabelnumberequalslast + {\cbx@iflabelprefixequalslast} + {\@secondoftwo}} + \newbibmacro*{cite:init}{% \global\boolfalse{cbx:parens}% \global\undef\cbx@lasthash \global\undef\cbx@lastnumber \global\undef\cbx@lastprefix + \global\undef\cbx@lastentrysetcount \setcounter{cbx@tempcnta}{0}% - \setcounter{cbx@tempcntb}{-2}} + \setcounter{cbx@tempcntb}{-2}% + \setcounter{cbx@tempcntc}{0}% + \setcounter{cbx@tempcntd}{-1}} \newbibmacro*{cite:comp}{% - \addtocounter{cbx@tempcntb}{1}% + \stepcounter{cbx@tempcntb}% \iffieldundef{shorthand} {\ifbool{bbx:subentry} {\iffieldundef{entrysetcount} @@ -33,25 +61,22 @@ {\usebibmacro{cite:comp:comp}}} {\usebibmacro{cite:comp:shand}}} +% we externalise printing the citations to +% cite:print:... macros for easier customisation + \newbibmacro*{cite:comp:comp}{% - \ifboolexpr{ - ( test {\iffieldundef{labelprefix}} and test {\ifundef\cbx@lastprefix} ) - or - test {\iffieldequals{labelprefix}{\cbx@lastprefix}} - } + \cbx@iflabelprefixequalslast {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}} {\savefield{entrykey}{\cbx@lastkey}% \savefield{labelnumber}{\cbx@lastnumber}% - \addtocounter{cbx@tempcnta}{1}} + \stepcounter{cbx@tempcnta}} {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}-1} - {} - {\usebibmacro{cite:dump}% - \ifnumgreater{\value{cbx@tempcntb}}{-1} - {\multicitedelim} - {}% - \printtext[bibhyperref]{% - \printfield{labelprefix}% - \printfield{labelnumber}}}}} + {% current cite is *exactly* the same a previous source + % this can only happen if the same source is cited twice + % and sortcites is turned off + % print nothing + } + {\usebibmacro{cite:comp:end}}}} {\usebibmacro{cite:comp:end}}% \setcounter{cbx@tempcntb}{\thefield{labelnumber}}% \savefield{labelprefix}{\cbx@lastprefix}} @@ -59,44 +84,104 @@ \newbibmacro*{cite:comp:end}{% \usebibmacro{cite:dump}% \ifnumgreater{\value{cbx@tempcntb}}{-1} - {\multicitedelim} + {\setunit{\multicitedelim}} {}% - \printtext[bibhyperref]{% - \printfield{labelprefix}% - \printfield{labelnumber}}} + \usebibmacro{cite:print:labelnumber}} \newbibmacro*{cite:comp:inset}{% - \usebibmacro{cite:dump}% - \ifnumgreater{\value{cbx@tempcntb}}{-1} - {\multicitedelim} - {}% - \printtext[bibhyperref]{% - \printfield{labelprefix}% - \printfield{labelnumber}% - \printfield{entrysetcount}}% - \setcounter{cbx@tempcntb}{-1}} + \stepcounter{cbx@tempcntd}% + \ifboolexpr{ togl {cbx:subentrycomp} + and test {\cbx@iflabelnumberandprefixequallast}} + {\ifnumequal{\thefield{entrysetcount}}{\value{cbx@tempcntd}} + {\savefield{entrykey}{\cbx@lastkey}% + \savefield{entrysetcount}{\cbx@lastentrysetcount}% + \stepcounter{cbx@tempcntc}} + {\ifnumequal{\thefield{entrysetcount}}{\value{cbx@tempcntd}-1} + {% current cite is *exactly* the same a previous source + % this can only happen if the same source is cited twice + % and sortcites is turned off + % print nothing + } + {\usebibmacro{cite:dump:inset}% + \ifnumgreater{\value{cbx@tempcntd}}{-1} + {\setunit{\multicitesubentrydelim}} + {}% + \usebibmacro{cite:print:subentry:comp}}}} + {\usebibmacro{cite:dump}% + \ifnumgreater{\value{cbx@tempcntb}}{-1} + {\multicitedelim} + {}% + \setcounter{cbx@tempcntd}{-1}% + \usebibmacro{cite:print:subentry:full}% + \savefield{labelprefix}{\cbx@lastprefix}% + \savefield{labelnumber}{\cbx@lastnumber}}% + \setcounter{cbx@tempcntd}{\thefield{entrysetcount}}% + \setcounter{cbx@tempcntb}{-1}} \newbibmacro*{cite:comp:shand}{% \usebibmacro{cite:dump}% \ifnumgreater{\value{cbx@tempcntb}}{-1} - {\multicitedelim} + {\setunit{\multicitedelim}} {}% - \printtext[bibhyperref]{\printfield{shorthand}}% + \usebibmacro{cite:print:shorthand}% \setcounter{cbx@tempcntb}{-1}} +\newbibmacro{cite:dump:inset}{% + % dump subentry + \ifnumgreater{\value{cbx@tempcntc}}{0} + {\ifnumgreater{\value{cbx@tempcntc}}{1} + {\setunit{\multicitesubentryrangedelim}} + {\setunit{\multicitesubentrydelim}}% + \usebibmacro{cite:print:last:subentry:comp}% + \global\undef\cbx@lastentrysetcount} + {}% + \setcounter{cbx@tempcntc}{0}% +} + \newbibmacro*{cite:dump}{% + \usebibmacro{cite:dump:inset}% + % dump labelnumber (+labelprefix) \ifnumgreater{\value{cbx@tempcnta}}{0} {\ifnumgreater{\value{cbx@tempcnta}}{1} - {\bibrangedash} - {\multicitedelim}% - \bibhyperref[\cbx@lastkey]{% - \ifdef\cbx@lastprefix - {\printtext[labelprefix]{\cbx@lastprefix}} - {}% - \printtext[labelnumber]{\cbx@lastnumber}}} + {\setunit{\multiciterangedelim}} + {\setunit{\multicitedelim}}% + \usebibmacro{cite:print:last:labelnumber}% + \global\undef\cbx@lastprefix} {}% \setcounter{cbx@tempcnta}{0}% - \global\undef\cbx@lastprefix} +} + +% these macros do the actual printing + +\newbibmacro*{cite:print:shorthand}{% + \printtext[bibhyperref]{\printfield{shorthand}}} + +\newbibmacro*{cite:print:labelnumber}{% + \printtext[bibhyperref]{% + \printfield{labelprefix}% + \printfield{labelnumber}}} + +\newbibmacro*{cite:print:subentry:comp}{% + \printtext[bibhyperref]{\printfield{entrysetcount}}} + +\newbibmacro*{cite:print:subentry:full}{% + \printtext[bibhyperref]{% + \printfield{labelprefix}% + \printfield{labelnumber}% + \printfield{entrysetcount}}} + +\DeclareFieldFormat{bibhyperref:lastkey}{\bibhyperref[\cbx@lastkey]{#1}} + +\newbibmacro*{cite:print:last:subentry:comp}{% + \printtext[bibhyperref:lastkey]{% + \printtext[entrysetcount]{\cbx@lastentrysetcount}}} + +\newbibmacro*{cite:print:last:labelnumber}{% + \printtext[bibhyperref:lastkey]{% + \ifdef\cbx@lastprefix + {\printtext[labelprefix]{\cbx@lastprefix}} + {}% + \printtext[labelnumber]{\cbx@lastnumber}}} \newbibmacro*{textcite}{% \iffieldequals{namehash}{\cbx@lasthash} @@ -107,7 +192,7 @@ {}% \iffirstcitekey {} - {\textcitedelim}% + {\setunit{\textcitedelim}}% \usebibmacro{cite:init}% \ifnameundef{labelname} {\printfield[citetitle]{labeltitle}} @@ -169,6 +254,9 @@ \DeclareCiteCommand{\supercite}[\mkbibsuperscript] {\usebibmacro{cite:init}% \let\multicitedelim=\supercitedelim + \let\multicitesubentrydelim=\supercitesubentrydelim + \let\multiciterangedelim=\superciterangedelim + \let\multicitesubentryrangedelim=\supercitesubentryrangedelim \iffieldundef{prenote} {} {\BibliographyWarning{Ignoring prenote argument}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/brazilian.lbx b/macros/latex/contrib/biblatex/latex/lbx/brazilian.lbx index 43fb19712c..8d92cc663f 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/brazilian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/brazilian.lbx @@ -43,13 +43,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -463,14 +467,17 @@ langjapanese = {{japon\^es}{japon\^es}}, langlatin = {{latim}{latim}}, langlatvian = {{let\~ao}{let\~ao}}, + langlithuanian = {{lituano}{lituano}}, langnorwegian = {{noruegu\^es}{noruegu\^es}}, langpolish = {{polon\^es}{polon\^es}}, langportuguese = {{portugu{\^e}s}{portugu{\^e}s}}, langrussian = {{russo}{russo}}, + langserbian = {{s\'ervio}{s\'ervio}}, langslovak = {{eslovaco}{eslovaco}}, langslovene = {{esloveno}{esloveno}}, langspanish = {{espanhol}{espanhol}}, langswedish = {{sueco}{sueco}}, + langturkish = {{turco}{turco}}, langukrainian = {{ucraniano}{ucraniano}}, fromamerican = {{do ingl\^es}{do ingl\^es}}, frombrazilian = {{do portugu{\^e}s}{do portugu{\^e}s}}, @@ -492,14 +499,17 @@ fromjapanese = {{do japon\^es}{do japon\^es}}, fromlatin = {{do latim}{do latim}}, fromlatvian = {{do let\~ao}{do let\~ao}}, + fromlithuanian = {{do lituano}{do lituano}}, fromnorwegian = {{do noruegu\^es}{do noruegu\^es}}, frompolish = {{do polon\^es}{do polon\^es}}, fromportuguese = {{do portugu{\^e}s}{do portugu{\^e}s}}, fromrussian = {{do russo}{do russo}}, + fromserbian = {{do s\'ervio}{do s\'ervio}}, fromslovak = {{do eslovaco}{do eslovaco}}, fromslovene = {{do esloveno}{do esloveno}}, fromspanish = {{do espanhol}{do espanhol}}, fromswedish = {{do sueco}{do sueco}}, + fromturkish = {{do turco}{do turco}}, fromukrainian = {{do ucraniano}{do ucraniano}}, countryde = {{Alemanha}{DE}}, countryeu = {{Uni\~ao Europeia}{EU}}, diff --git a/macros/latex/contrib/biblatex/latex/lbx/british.lbx b/macros/latex/contrib/biblatex/latex/lbx/british.lbx index 87411636e9..7bfdfced5d 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/british.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/british.lbx @@ -42,13 +42,17 @@ {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/bulgarian.lbx b/macros/latex/contrib/biblatex/latex/lbx/bulgarian.lbx index dcc8c695c1..fb64a01ab5 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/bulgarian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/bulgarian.lbx @@ -70,13 +70,17 @@ \def\mkbibordedition{\mkbibneutord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/catalan.lbx b/macros/latex/contrib/biblatex/latex/lbx/catalan.lbx index 973b91b597..4f1878ac4d 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/catalan.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/catalan.lbx @@ -66,13 +66,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -243,9 +247,9 @@ translatorsaf = {{traductors i autors de l'ep\'{\i}leg} {trad\adddotspace i aut\adddotspace de l'ep\adddot}}, translatorcoin = {{traductor, comentarista i autor de la introducci\'o} - {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddotspace}}, + {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}}, translatorscoin = {{traductors, comentaristes i autors de la introducci\'o} - {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddotspace}}, + {trad.,\addabbrvspace com\adddotspace i aut\adddotspace de la intr\adddot}}, translatorcofo = {{traductor, comentarista i autor del pr\`oleg} {trad.,\addabbrvspace com\adddotspace i aut\adddotspace del pr\`ol\adddot}}, translatorscofo = {{traductors, comentaristes i autors del pr\`oleg} @@ -422,7 +426,7 @@ version = {{versi\'o}{vers\adddot}}, url = {{adre\c{c}a}{adr\adddot}}, urlfrom = {{disponible a}{disp\adddotspace a}}, - urlseen = {{consultat}{cons\adddotspace}}, % Possibly better «consultat \smartel», but \smartel unavailable + urlseen = {{consultat}{cons\adddot}}, % Possibly better «consultat \smartel», but \smartel unavailable inpreparation = {{en preparaci\'o}{en prep\adddot}}, inpress = {{a impremta}{a impr\adddot}},% Per revisar prepublished = {{pre-publicat}{pre-publicat}}, diff --git a/macros/latex/contrib/biblatex/latex/lbx/croatian.lbx b/macros/latex/contrib/biblatex/latex/lbx/croatian.lbx index b3b92e03ac..5938649490 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/croatian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/croatian.lbx @@ -45,13 +45,17 @@ \def\mkbibordedition{\mkbibordinal}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/czech.lbx b/macros/latex/contrib/biblatex/latex/lbx/czech.lbx index 716b3a1ee8..d23131f072 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/czech.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/czech.lbx @@ -38,13 +38,17 @@ {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -81,35 +85,49 @@ compilers = {{sestavili}{sest\adddot}}, redactor = {{redaktor}{red\adddot}}, redactors = {{redakto\v{r}i}{red\adddot}}, + reviser = {{korektor}{kor\adddot}}, + revisers = {{korekto\v{r}i}{kor\adddot}}, founder = {{zakladatel}{zakl\adddot}}, founders = {{zakladatel\'{e}}{zakl\adddot}}, continuator = {{pokra\v{c}ovatel}{pokr\adddot}},% FIXME: unsure continuators = {{pokra\v{c}ovatel\'{e}}{pokr\adddot}},% FIXME: unsure - collaborator = {{spolupracovn\'{i}k}{spoluprac\adddot}},% FIXME: unsure - collaborators = {{spolupracovn\'{i}ci}{spoluprac\adddot}},% FIXME: unsure + collaborator = {{spolupracovn\'{\i}k}{spoluprac\adddot}},% FIXME: unsure + collaborators = {{spolupracovn\'{\i}ci}{spoluprac\adddot}},% FIXME: unsure translator = {{p\v{r}ekladatel}{p\v{r}ekl\adddot}}, translators = {{p\v{r}ekladatel\'{e}}{p\v{r}ekl\adddot}}, commentator = {{koment\'{a}tor}{kom\adddot}}, commentators = {{koment\'{a}to\v{r}i}{kom\adddot}}, annotator = {{anot\'{a}tor}{anot\adddot}}, annotators = {{anot\'{a}to\v{r}i}{anot\adddot}}, - commentary = {{koment\'{a}tor}{komm\adddot}},% FIXME: unsure - annotations = {{anotatace}{anot\adddot}}, + commentary = {{koment\'{a}\v{r}}{kom\adddot}}, + annotations = {{anotace}{anot\adddot}}, introduction = {{\'{u}vod}{\'{u}v\adddot}}, foreword = {{p\v{r}edmluva}{p\v{r}edml\adddot}}, afterword = {{doslov}{dosl\adddot}}, - editortr = {{editor a p\v{r}ekladatel}{ed\adddotspace a p\v{r}ekl\adddot}}, - editorstr = {{edito\v{r}i a p\v{r}ekladatel\'{e}}{ed\adddotspace a p\v{r}ekl\adddot}}, - editorco = {{editor a koment\'{a}tor}{ed\adddotspace a kom\adddot}}, - editorsco = {{editor a koment\'{a}to\v{r}i}{ed\adddotspace a kom\adddot}}, - editoran = {{editor a anot\'{a}tor}{ed\adddotspace a anot\adddot}}, - editorsan = {{editor a anot\'{a}to\v{r}i}{ed\adddotspace a anot\adddot}}, - editorin = {{editor a \'{u}vod}{ed\adddotspace \'{u}v\adddot}}, - editorsin = {{edito\v{r}i a \'{u}vod}{ed\adddotspace a \'{u}v\adddot}}, - editorfo = {{editor a p\v{r}edmluva}{ed\adddotspace a p\v{r}edml\adddot}}, - editorsfo = {{edito\v{r}i a p\v{r}edmluva}{ed\adddotspace a p\v{r}edml\adddot}}, - editoraf = {{editor a doslov}{ed\adddotspace a dosl\adddot}}, - editorsaf = {{edito\v{r}i a doslov}{ed\adddotspace a dosl\adddot}}, + editortr = {{editor a p\v{r}ekladatel}% + {ed\adddotspace a p\v{r}ekl\adddot}}, + editorstr = {{edito\v{r}i a p\v{r}ekladatel\'{e}}% + {ed\adddotspace a p\v{r}ekl\adddot}}, + editorco = {{editor a koment\'{a}tor}% + {ed\adddotspace a kom\adddot}}, + editorsco = {{editor a koment\'{a}to\v{r}i}% + {ed\adddotspace a kom\adddot}}, + editoran = {{editor a anot\'{a}tor}% + {ed\adddotspace a anot\adddot}}, + editorsan = {{editor a anot\'{a}to\v{r}i}% + {ed\adddotspace a anot\adddot}}, + editorin = {{editor a \'{u}vod}% + {ed\adddotspace a \'{u}v\adddot}}, + editorsin = {{edito\v{r}i a \'{u}vod}% + {ed\adddotspace a \'{u}v\adddot}}, + editorfo = {{editor a p\v{r}edmluva}% + {ed\adddotspace a p\v{r}edml\adddot}}, + editorsfo = {{edito\v{r}i a p\v{r}edmluva}% + {ed\adddotspace a p\v{r}edml\adddot}}, + editoraf = {{editor a doslov}% + {ed\adddotspace a dosl\adddot}}, + editorsaf = {{edito\v{r}i a doslov}% + {ed\adddotspace a dosl\adddot}}, editortrco = {{editor, p\v{r}eklad\ a koment\'{a}tor}% {ed.,\addabbrvspace p\v{r}ekl\adddot\ a kom\adddot}},% FIXME: hruznost editorstrco = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a koment\'{a}to\v{r}i}% @@ -119,191 +137,227 @@ editorstran = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a anot\'{a}to\v{r}i}% {ed.,\addabbrvspace p\v{r}ekl\adddot\ a anot\adddot}}, editortrin = {{editor, p\v{r}ekladatel\ a \'{u}vod}% - {ed.,\addabbrvspace p\v{r}ekl\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace p\v{r}ekl\adddot\ a \'{u}v\adddot}}, editorstrin = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a \'{u}vod}% - {ed.,\addabbrvspace p\v{r}ekl\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace p\v{r}ekl\adddot\ a \'{u}v\adddot}}, editortrfo = {{editor, p\v{r}ekladatel\ a p\v{r}edmluva}% {ed.,\addabbrvspace p\v{r}ekl\adddot\ a p\v{r}edml\adddot}}, editorstrfo = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a p\v{r}edmluva}% {ed.,\addabbrvspace p\v{r}ekl\adddot\ a p\v{r}edml\adddot}}, - editortraf = {{editor, p\v{r}ekladatel\ a doslov}% - {ed.,\addabbrvspace p\v{r}ekl\adddot\ a afterw\adddot}}, - editorstraf = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a doslov}% - {ed.,\addabbrvspace p\v{r}ekl\adddot\ a afterw\adddot}}, + editortraf = {{editor, p\v{r}ekladatel\ a doslov}% + {ed.,\addabbrvspace p\v{r}ekl\adddot\ a dosl\adddot}}, + editorstraf = {{edito\v{r}i, p\v{r}ekladatel\'{e}\ a doslov}% + {ed.,\addabbrvspace p\v{r}ekl\adddot\ a dosl\adddot}}, editorcoin = {{editor, koment\'{a}tor\ a \'{u}vod}% - {ed.,\addabbrvspace kom\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace kom\adddot\ a \'{u}v\adddot}}, editorscoin = {{edito\v{r}i, koment\'{a}to\v{r}i\ a \'{u}vod}% - {ed.,\addabbrvspace kom\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace kom\adddot\ a \'{u}v\adddot}}, editorcofo = {{editor, koment\'{a}tor\ a p\v{r}edmluva}% {ed.,\addabbrvspace kom\adddot\ a p\v{r}edml\adddot}}, editorscofo = {{edito\v{r}i, koment\'{a}to\v{r}i\ a p\v{r}edmluva}% {ed.,\addabbrvspace kom\adddot\ a p\v{r}edml\adddot}}, - editorcoaf = {{editor, koment\'{a}tor\ a doslov}% + editorcoaf = {{editor, koment\'{a}tor\ a doslov}% {ed.,\addabbrvspace kom\adddot\ a dosl\adddot}}, - editorscoaf = {{edito\v{r}i, koment\'{a}to\v{r}i\ a doslov}% + editorscoaf = {{edito\v{r}i, koment\'{a}to\v{r}i\ a doslov}% {ed.,\addabbrvspace kom\adddot\ a dosl\adddot}}, editoranin = {{editor, anot\'{a}tor\ a \'{u}vod}% - {ed.,\addabbrvspace anot\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace anot\adddot\ a \'{u}v\adddot}}, editorsanin = {{edito\v{r}i, anot\'{a}to\v{r}i\ a \'{u}vod}% - {ed.,\addabbrvspace anot\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace anot\adddot\ a \'{u}v\adddot}}, editoranfo = {{editor, anot\'{a}tor\ a p\v{r}edmluva}% {ed.,\addabbrvspace anot\adddot\ a p\v{r}edml\adddot}}, editorsanfo = {{edito\v{r}i, anot\'{a}to\v{r}i\ a p\v{r}edmluva}% {ed.,\addabbrvspace anot\adddot\ a p\v{r}edml\adddot}}, - editoranaf = {{editor, anot\'{a}tor\ a doslov}{ed.,\addabbrvspace anot\adddot\ a dosl\adddot}}, - editorsanaf = {{edito\v{r}i, anot\'{a}to\v{r}i\ a doslov}% + editoranaf = {{editor, anot\'{a}tor\ a doslov}% + {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}}, + editorsanaf = {{edito\v{r}i, anot\'{a}to\v{r}i\ a doslov}% {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}}, editortrcoin = {{editor, p\v{r}ekladatel, koment\'{a}tor\ a \'{u}vod}% - {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}}, editorstrcoin = {{edito\v{r}i, p\v{r}ekladatel\'{e}, koment\'{a}to\v{r}i\ a \'{u}vod}% - {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}}, editortrcofo = {{editor, p\v{r}ekladatel, koment\'{a}tor\ a p\v{r}edmluva}% {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}}, editorstrcofo = {{edito\v{r}i, p\v{r}ekladatel\'{e}, koment\'{a}to\v{r}i\ a p\v{r}edmluva}% {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}}, - editortrcoaf = {{editor, p\v{r}ekladatel, koment\'{a}tor\ a doslov}% + editortrcoaf = {{editor, p\v{r}ekladatel, koment\'{a}tor\ a doslov}% {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a dosl\adddot}}, - editorstrcoaf = {{edito\v{r}i, p\v{r}ekladatel\'{e}, koment\'{a}to\v{r}i\ a doslov}% + editorstrcoaf = {{edito\v{r}i, p\v{r}ekladatel\'{e}, koment\'{a}to\v{r}i\ a doslov}% {ed.,\addabbrvspace p\v{r}ekl., kom\adddot\ a dosl\adddot}}, editortranin = {{editor, p\v{r}ekladatel, anot\'{a}tor\ a \'{u}vod}% - {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}}, editorstranin = {{edito\v{r}i, p\v{r}ekladatel\'{e}, anot\'{a}to\v{r}i\ a \'{u}vod}% - {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a \'{u}vod\adddot}}, + {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}}, editortranfo = {{editor, p\v{r}ekladatel, anot\'{a}tor\ a p\v{r}edmluva}% {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}}, editorstranfo = {{edito\v{r}i, p\v{r}ekladatel\'{e}, anot\'{a}to\v{r}i\ a p\v{r}edmluva}% {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}}, - editortranaf = {{editor, p\v{r}ekladatel, anot\'{a}tor\ a doslov}% + editortranaf = {{editor, p\v{r}ekladatel, anot\'{a}tor\ a doslov}% {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a dosl\adddot}}, - editorstranaf = {{edito\v{r}i, p\v{r}ekladatel\'{e}, anot\'{a}to\v{r}i\ a doslov}% + editorstranaf = {{edito\v{r}i, p\v{r}ekladatel\'{e}, anot\'{a}to\v{r}i\ a doslov}% {ed.,\addabbrvspace p\v{r}ekl., anot\adddot\ a dosl\adddot}}, - translatorco = {{p\v{r}ekladatel a koment\'{a}tor}{p\v{r}ekl\adddot\ a kom\adddot}}, - translatorsco = {{p\v{r}ekladatel\'{e} a koment\'{a}to\v{r}i}{p\v{r}ekl\adddot\ a kom\adddot}}, - translatoran = {{p\v{r}ekladatel a anot\'{a}tor}{p\v{r}ekl\adddot\ a anot\adddot}}, - translatorsan = {{p\v{r}ekladatel\'{e} a anot\'{a}to\v{r}i}{p\v{r}ekl\adddot\ a anot\adddot}}, - translatorin = {{p\v{r}eklad a \'{u}vod}{p\v{r}ekl\adddot\ a \'{u}vod\adddot}}, - translatorsin = {{p\v{r}eklad a \'{u}vod}{p\v{r}ekl\adddot\ a \'{u}vod\adddot}}, - translatorfo = {{p\v{r}eklad a p\v{r}edmluva}{p\v{r}ekl\adddot\ a p\v{r}edml\adddot}}, - translatorsfo = {{p\v{r}eklad a p\v{r}edmluva}{p\v{r}ekl\adddot\ a p\v{r}edml\adddot}}, - translatoraf = {{p\v{r}eklad a doslov}{p\v{r}ekl\adddot\ a dosl\adddot}}, - translatorsaf = {{p\v{r}eklad a doslov}{p\v{r}ekl\adddot\ a dosl\adddot}}, - translatorcoin = {{p\v{r}eklad, koment\'{a}\v{r}\ a \'{u}vod}{p\v{r}ekl., kom\adddot\ a \'{u}vod\adddot}}, - translatorscoin = {{p\v{r}eklad, koment\'{a}\v{r}\ a \'{u}vod}{p\v{r}ekl., kom\adddot\ a \'{u}vod\adddot}}, - translatorcofo = {{p\v{r}eklad, koment\'{a}\v{r}\ a p\v{r}edmluva}{p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}}, - translatorscofo = {{p\v{r}eklad, koment\'{a}\v{r}\ a p\v{r}edmluva}{p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}}, - translatorcoaf = {{p\v{r}eklad, koment\'{a}\v{r}\ a doslov}{p\v{r}ekl., kom\adddot\ a dosl\adddot}}, - translatorscoaf = {{p\v{r}eklad, koment\'{a}\v{r}\ a doslov}{p\v{r}ekl., kom\adddot\ a dosl\adddot}}, - translatoranin = {{p\v{r}eklad, anotace,\ a \'{u}vod}{p\v{r}ekl., anot\adddot\ a \'{u}vod\adddot}}, - translatorsanin = {{p\v{r}eklad, anotace,\ a \'{u}vod}{p\v{r}ekl., anot\adddot\ a \'{u}vod\adddot}}, - translatoranfo = {{p\v{r}eklad, anotace,\ a p\v{r}edmluva}{p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}}, - translatorsanfo = {{p\v{r}eklad, anotace,\ a p\v{r}edmluva}{p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}}, - translatoranaf = {{p\v{r}eklad, anotace,\ a doslov}{p\v{r}ekl., anot\adddot\ a dosl\adddot}}, - translatorsanaf = {{p\v{r}eklad, anotace,\ a doslov}{p\v{r}ekl., anot\adddot\ a dosl\adddot}}, -% organizer = {{}{}},% FIXME: missing -% organizers = {{}{}},% FIXME: missing -% byorganizer = {{}{}},% FIXME: missing - byauthor = {{by}{by}}, - byeditor = {{editov\'{a}no}{ed\adddotspace}}, - bycompiler = {{sestaveno}{comp\adddotspace}}, - byredactor = {{redigov\'{a}no}{red\adddotspace}}, - byfounder = {{zalo\v{z}eno}{found\adddotspace}}, - bycontinuator = {{pokra\v{c}ov\'{a}no}{cont\adddotspace}}, - bycollaborator = {{ve spolupr\'{a}ci s}{ve spol\adddotspace s}},% FIXME: unsure + translatorco = {{p\v{r}ekladatel a koment\'{a}tor}% + {p\v{r}ekl\adddot\ a kom\adddot}}, + translatorsco = {{p\v{r}ekladatel\'{e} a koment\'{a}to\v{r}i}% + {p\v{r}ekl\adddot\ a kom\adddot}}, + translatoran = {{p\v{r}ekladatel a anot\'{a}tor}% + {p\v{r}ekl\adddot\ a anot\adddot}}, + translatorsan = {{p\v{r}ekladatel\'{e} a anot\'{a}to\v{r}i}% + {p\v{r}ekl\adddot\ a anot\adddot}}, + translatorin = {{p\v{r}eklad a \'{u}vod}% + {p\v{r}ekl\adddot\ a \'{u}v\adddot}}, + translatorsin = {{p\v{r}eklad a \'{u}vod}% + {p\v{r}ekl\adddot\ a \'{u}v\adddot}}, + translatorfo = {{p\v{r}eklad a p\v{r}edmluva}% + {p\v{r}ekl\adddot\ a p\v{r}edml\adddot}}, + translatorsfo = {{p\v{r}eklad a p\v{r}edmluva}% + {p\v{r}ekl\adddot\ a p\v{r}edml\adddot}}, + translatoraf = {{p\v{r}eklad a doslov}% + {p\v{r}ekl\adddot\ a dosl\adddot}}, + translatorsaf = {{p\v{r}eklad a doslov}% + {p\v{r}ekl\adddot\ a dosl\adddot}}, + translatorcoin = {{p\v{r}eklad, koment\'{a}\v{r}\ a \'{u}vod}% + {p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}}, + translatorscoin = {{p\v{r}eklad, koment\'{a}\v{r}\ a \'{u}vod}% + {p\v{r}ekl., kom\adddot\ a \'{u}v\adddot}}, + translatorcofo = {{p\v{r}eklad, koment\'{a}\v{r}\ a p\v{r}edmluva}% + {p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}}, + translatorscofo = {{p\v{r}eklad, koment\'{a}\v{r}\ a p\v{r}edmluva}% + {p\v{r}ekl., kom\adddot\ a p\v{r}edml\adddot}}, + translatorcoaf = {{p\v{r}eklad, koment\'{a}\v{r}\ a doslov}% + {p\v{r}ekl., kom\adddot\ a dosl\adddot}}, + translatorscoaf = {{p\v{r}eklad, koment\'{a}\v{r}\ a doslov}% + {p\v{r}ekl., kom\adddot\ a dosl\adddot}}, + translatoranin = {{p\v{r}eklad, anotace,\ a \'{u}vod}% + {p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}}, + translatorsanin = {{p\v{r}eklad, anotace,\ a \'{u}vod}% + {p\v{r}ekl., anot\adddot\ a \'{u}v\adddot}}, + translatoranfo = {{p\v{r}eklad, anotace,\ a p\v{r}edmluva}% + {p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}}, + translatorsanfo = {{p\v{r}eklad, anotace,\ a p\v{r}edmluva}% + {p\v{r}ekl., anot\adddot\ a p\v{r}edml\adddot}}, + translatoranaf = {{p\v{r}eklad, anotace,\ a doslov}% + {p\v{r}ekl., anot\adddot\ a dosl\adddot}}, + translatorsanaf = {{p\v{r}eklad, anotace,\ a doslov}% + {p\v{r}ekl., anot\adddot\ a dosl\adddot}}, + organizer = {{organiz\'{a}tor}{org\adddot}},% FIXME: unsure + organizers = {{organiz\'{a}to\v{r}i}{org\adddot}},% FIXME: unsure + byorganizer = {{organizov\'{a}no}{org\adddot}},% FIXME: unsure + byauthor = {{}{}}, + byeditor = {{editov\'{a}no}{ed\adddot}}, + bycompiler = {{sestaveno}{sest\adddot}}, + byredactor = {{redigov\'{a}no}{red\adddot}}, + byreviser = {{korigov\'{a}no}{kor\adddot}}, + byreviewer = {{recenzov\'{a}no}{recenz\adddot}}, + byfounder = {{zalo\v{z}eno}{zal\adddot}}, + bycontinuator = {{pokra\v{c}ov\'{a}no}{pokr\adddot}}, + bycollaborator = {{ve spolupr\'{a}ci s\addnbspace}{ve spol\adddotspace s\addnbspace}}, bytranslator = {{p\v{r}elo\v{z}eno \lbx@lfromlang}{p\v{r}el\adddot\ \lbx@sfromlang}}, - bycommentator = {{komentov\'{a}no}{kom\adddotspace}}, - byannotator = {{anotov\'{a}no}{anot\adddotspace}}, - withcommentator = {{s koment\'{a}\v{r}em}{s kom\adddotspace}},%mozna: s komentarem od? - withannotator = {{s anotacemi od}{s anot\adddot\ od}}, - withintroduction = {{s \'{u}vodem od}{u \'{u}v\adddot\ od}}, - withforeword = {{s p\v{r}edmluvou od}{s p\v{r}edml\adddot\ od}}, - withafterword = {{s doslovem}{s dosl\adddot\ }}, - byeditortr = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang\ }% - {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang\ }}, - byeditorco = {{editov\'{a}no a komentov\'{a}no}{ed\adddotspace a kom\adddot\ }}, - byeditoran = {{editov\'{a}no a anotov\'{a}no}{ed\adddotspace a anot\adddot\ }}, - byeditorin = {{editov\'{a}no, s \'{u}vodem}{ed.,\addabbrvspace s \'{u}vodem}}, - byeditorfo = {{editov\'{a}no, s p\v{r}edmluvou}{ed.,\addabbrvspace s p\v{r}edml., }}, - byeditoraf = {{editov\'{a}no, s doslovem}{ed.,\addabbrvspace s dosl.,}}, + bycommentator = {{komentov\'{a}no}{kom\adddot}}, + byannotator = {{anotov\'{a}no}{anot\adddot}}, + withcommentator = {{s\addnbspace koment\'{a}\v{r}em od}{s\addnbspace kom\adddot\ od}}, + withannotator = {{s\addnbspace anotacemi od}{s\addnbspace anot\adddot\ od}}, + withintroduction = {{s\addnbspace \'{u}vodem od}{s\addnbspace \'{u}v\adddot\ od}}, + withforeword = {{s\addnbspace p\v{r}edmluvou od}{s\addnbspace p\v{r}edml\adddot\ od}}, + withafterword = {{s\addnbspace doslovem od}{s\addnbspace dosl\adddot\ od}}, + byeditortr = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang}% + {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang}}, + byeditorco = {{editov\'{a}no a komentov\'{a}no}% + {ed\adddotspace a kom\adddot}}, + byeditoran = {{editov\'{a}no a anotov\'{a}no}% + {ed\adddotspace a anot\adddot}}, + byeditorin = {{editov\'{a}no, s\addnbspace \'{u}vodem}% + {ed.,\addabbrvspace s\addnbspace \'{u}v\adddot}}, + byeditorfo = {{editov\'{a}no, s\addnbspace p\v{r}edmluvou}% + {ed.,\addabbrvspace s\addnbspace p\v{r}edml\adddot}}, + byeditoraf = {{editov\'{a}no, s\addnbspace doslovem}% + {ed.,\addabbrvspace s\addnbspace dosl\adddot}}, byeditortrco = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no}% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom\adddot\ }}, + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom\adddot}}, byeditortran = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no}% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot\ }}, - byeditortrin = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s \'{u}vodem}% - {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s \'{u}vodem}}, - byeditortrfo = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s p\v{r}edmluvou}% - {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s p\v{r}edmluvou}}, - byeditortraf = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s doslovem}% - {ed\adddotspace a p\v{r}ekl\adddot\ \lbx@sfromlang, s doslovem}}, - byeditorcoin = {{editov\'{a}no a komentov\'{a}no, s \'{u}vodem}{ed\adddotspace a kom., s \'{u}vodem}}, - byeditorcofo = {{editov\'{a}no a komentov\'{a}no, s p\v{r}edmluvou}{ed\adddotspace a kom., s p\v{r}edml\adddot}}, - byeditorcoaf = {{editov\'{a}no a komentov\'{a}no, s doslovem}{ed\adddotspace a kom., s dosl.}}, - byeditoranin = {{editov\'{a}no a anotov\'{a}no, s \'{u}vodem}{ed\adddotspace a anot., s \'{u}vodem}}, - byeditoranfo = {{editov\'{a}no a anotov\'{a}no, s p\v{r}edmluvou}{ed\adddotspace a anot., s p\v{r}edml\adddot}}, - byeditoranaf = {{editov\'{a}no a anotov\'{a}no, s doslovem}{ed\adddotspace a anot., s dosl\adddot}}, - byeditortrcoin = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s \'{u}vodem}% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s \'{u}vodem}}, - byeditortrcofo = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s p\v{r}edmluvou }% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s p\v{r}edml\adddot}}, - byeditortrcoaf = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s doslovem}% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s dosl\adddot}}, - byeditortranin = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s \'{u}vodem}% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot, s \'{u}vodem}}, - byeditortranfo = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s p\v{r}edmluvou}% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot, s p\v{r}edml\adddot}}, - byeditortranaf = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s doslovem}% - {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot, s dosl\adddot}}, + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot}}, + byeditortrin = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace \'{u}vodem}% + {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace \'{u}v\adddot}}, + byeditortrfo = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace p\v{r}edmluvou}% + {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace p\v{r}edml\adddot}}, + byeditortraf = {{editov\'{a}no a p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace doslovem}% + {ed\adddotspace a p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}}, + byeditorcoin = {{editov\'{a}no a komentov\'{a}no, s\addnbspace \'{u}vodem}% + {ed\adddotspace a kom., s\addnbspace \'{u}v\adddot}}, + byeditorcofo = {{editov\'{a}no a komentov\'{a}no, s\addnbspace p\v{r}edmluvou}% + {ed\adddotspace a kom., s\addnbspace p\v{r}edml\adddot}}, + byeditorcoaf = {{editov\'{a}no a komentov\'{a}no, s\addnbspace doslovem}% + {ed\adddotspace a kom., s\addnbspace dosl\adddot}}, + byeditoranin = {{editov\'{a}no a anotov\'{a}no, s\addnbspace \'{u}vodem}% + {ed\adddotspace a anot., s\addnbspace \'{u}v\adddot}}, + byeditoranfo = {{editov\'{a}no a anotov\'{a}no, s\addnbspace p\v{r}edmluvou}% + {ed\adddotspace a anot., s\addnbspace p\v{r}edml\adddot}}, + byeditoranaf = {{editov\'{a}no a anotov\'{a}no, s\addnbspace doslovem}% + {ed\adddotspace a anot., s\addnbspace dosl\adddot}}, + byeditortrcoin = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace \'{u}vodem}% + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace \'{u}v\adddot}}, + byeditortrcofo = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace p\v{r}edmluvou }% + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace p\v{r}edml\adddot}}, + byeditortrcoaf = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace doslovem}% + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace dosl\adddot}}, + byeditortranin = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace \'{u}vodem}% + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot, s\addnbspace \'{u}v\adddot}}, + byeditortranfo = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace p\v{r}edmluvou}% + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace p\v{r}edml\adddot}}, + byeditortranaf = {{editov\'{a}no, p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace doslovem}% + {ed.,\addabbrvspace p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace dosl\adddot}}, bytranslatorco = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a kom\adddot\ }}, + {p\v{r}el\adddot\ \lbx@sfromlang\ a kom\adddot}}, bytranslatoran = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot\ }}, - bytranslatorin = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s \'{u}vodem}% - {p\v{r}el\adddot\ \lbx@sfromlang, s \'{u}vodem}}, - bytranslatorfo = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s p\v{r}edmluvou}% - {p\v{r}el\adddot\ \lbx@sfromlang, s p\v{r}edml\adddot}}, - bytranslatoraf = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s doslovem}% - {p\v{r}el\adddot\ \lbx@sfromlang, s dosl\adddot}}, - bytranslatorcoin = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s \'{u}vodem}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s \'{u}vodem}}, - bytranslatorcofo = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s p\v{r}edmluvou}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s p\v{r}edml\adddot}}, - bytranslatorcoaf = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}ns doslovem}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s dosl\adddot}}, - bytranslatoranin = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s \'{u}vodem}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s \'{u}vodem}}, - bytranslatoranfo = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s p\v{r}edmluvou}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s p\v{r}edml\adddot}}, - bytranslatoranaf = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s doslovem}% - {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s dosl\adddot}}, + {p\v{r}el\adddot\ \lbx@sfromlang\ a anot\adddot}}, + bytranslatorin = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace \'{u}vodem}% + {p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace \'{u}v\adddot}}, + bytranslatorfo = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace p\v{r}edmluvou}% + {p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace p\v{r}edml\adddot}}, + bytranslatoraf = {{p\v{r}elo\v{z}eno \lbx@lfromlang, s\addnbspace doslovem}% + {p\v{r}el\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}}, + bytranslatorcoin = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace \'{u}vodem}% + {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace \'{u}v\adddot}}, + bytranslatorcofo = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace p\v{r}edmluvou}% + {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace p\v{r}edml\adddot}}, + bytranslatorcoaf = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a komentov\'{a}no, s\addnbspace doslovem}% + {p\v{r}el\adddot\ \lbx@sfromlang\ a kom., s\addnbspace dosl\adddot}}, + bytranslatoranin = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace \'{u}vodem}% + {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace \'{u}v\adddot}}, + bytranslatoranfo = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace p\v{r}edmluvou}% + {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace p\v{r}edml\adddot}}, + bytranslatoranaf = {{p\v{r}elo\v{z}eno \lbx@lfromlang\ a anotov\'{a}no, s\addnbspace doslovem}% + {p\v{r}el\adddot\ \lbx@sfromlang\ a anot., s\addnbspace dosl\adddot}}, and = {{a}{a}}, andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}}, andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}}, volume = {{svazek}{sv\adddot}}, volumes = {{svazky}{sv\adddot}}, involumes = {{in}{in}}, - jourvol = {{ro\v{c}n\'ik}{ro\v{c}\adddot}}, - jourser = {{\v{r}ada}{\v{r}\adddot}},% m\r{u}\v{z}e b\'{a}t t\'{e}\v{z} s\'{e}rie, ale \v{r}ada zn\'{i} l\'{e}pe + jourvol = {{ro\v{c}n\'{\i}k}{ro\v{c}\adddot}}, + jourser = {{\v{r}ada}{\v{r}\adddot}},% FIXME: s\'{e}rie ? book = {{kniha}{kniha}}, part = {{\v{c}\'{a}st}{\v{c}\'{a}st}}, - issue = {{\v{c}\'{i}slo}{\v{c}\'{i}slo}}, - newseries = {{nov\'{a} \v{r}ada}{n. \v{r}ada\adddot}},% FIXME: unsure - oldseries = {{star\'{a} \v{r}ada}{st. \v{r}ada\adddot}}, - edition = {{vyd\'{a}n\'{i}}{vyd\adddot}}, - reprint = {{reprint}{repr\adddot}}, - reprintof = {{reprint}{repr\adddotspace}}, - reprintas = {{reprintov\'{a}no jako}{repr\adddotspace jako}}, - reprintfrom = {{reprintov\'{a}no z}{repr\adddotspace z}}, - reviewof = {{review of}{rev\adddotspace of}}, - translationof = {{p\v{r}eklad}{p\v{r}ekl\adddotspace}}, + issue = {{\v{c}\'{\i}slo}{\v{c}\'{\i}slo}}, + newseries = {{nov\'{a} \v{r}ada}{n\adddotspace \v{r}ada\adddot}},% FIXME: unsure + oldseries = {{star\'{a} \v{r}ada}{st\adddotspace \v{r}ada\adddot}}, + edition = {{vyd\'{a}n\'{\i}}{vyd\adddot}}, + reprint = {{dotisk}{dotisk}}, + reprintof = {{dotisk}{dotisk}}, + reprintas = {{dotisknuto jako}{dotisknuto jako}}, + reprintfrom = {{dotisknuto z\addnbspace}{dotisknuto z\addnbspace}}, + reviewof = {{recenze}{recenz\adddot}}, + translationof = {{p\v{r}eklad}{p\v{r}ekl\adddot}}, translationas = {{p\v{r}elo\v{z}eno jako}{p\v{r}el\adddotspace jako}}, - translationfrom = {{p\v{r}elo\v{z}eno z}{p\v{r}el\adddotspace}}, + translationfrom = {{p\v{r}elo\v{z}eno z\addnbspace}{p\v{r}el\adddotspace z\addnbspace}}, origpubas = {{p\r{u}vodn\v{e} vyd\'{a}no jako}{p\r{u}v\adddotspace vyd\adddotspace jako}}, - origpubin = {{p\r{u}vodn\v{e} vyd\'{a}no v}{p\r{u}v\adddotspace vyd\adddotspace v}}, - astitle = {{jako}{as}}, - bypublisher = {{od}{od}},% nejist\'{e} - nodate = {{n\adddot d\adddot}{n\adddot d\adddot}},%FIXME + origpubin = {{p\r{u}vodn\v{e} vyd\'{a}no v\addnbspace roce}{p\r{u}v\adddotspace vyd\adddotspace v\addnbspace r\adddot}}, + astitle = {{jako}{jako}}, + bypublisher = {{}{}}, + nodate = {{nedatov\'{a}no}{b\adddot r\adddot}},% bez roku page = {{strana}{s\adddot}}, pages = {{strany}{s\adddot}}, - column = {{sloupek}{sl\adddot}},% nebo sloupec? + column = {{sloupec}{sl\adddot}}, columns = {{sloupce}{sl\adddot}}, line = {{\v{r}\'{a}dek}{\v{r}\adddot}}, lines = {{\v{r}\'{a}dky}{\v{r}\adddot}}, @@ -313,46 +367,45 @@ sections = {{sekce}{\S\S}}, paragraph = {{odstavec}{ods\adddot}}, paragraphs = {{odstavce}{ods\adddot}}, -% pagetotal = {{}{}},% FIXME: missing -% pagetotals = {{}{}},% FIXME: missing -% columntotal = {{}{}},% FIXME: missing -% columntotals = {{}{}},% FIXME: missing -% linetotal = {{}{}},% FIXME: missing -% linetotals = {{}{}},% FIXME: missing -% versetotal = {{}{}},% FIXME: missing -% versetotals = {{}{}},% FIXME: missing -% sectiontotal = {{}{}},% FIXME: missing -% sectiontotals = {{}{}},% FIXME: missing -% paragraphtotal = {{}{}},% FIXME: missing -% paragraphtotals = {{}{}},% FIXME: missing - in = {{in}{in}},% Pouziti napriklad u sborniku nebo - inseries = {{in}{in}},% casopisu, zni to lip new "v". - % V pripade potreby pouzit lokalni lbx soubor - ofseries = {{z}{z}},% taky prostor pro lokalni lbx - number = {{\v{c}\'{i}slo}{\v{c}\adddot}}, + pagetotal = {{strana}{s\adddot}}, + pagetotals = {{strany}{s\adddot}}, + columntotal = {{sloupec}{sl\adddot}}, + columntotals = {{sloupce}{sl\adddot}}, + linetotal = {{\v{r}\'{a}dek}{\v{r}\adddot}}, + linetotals = {{\v{r}\'{a}dky}{\v{r}\adddot}}, + versetotal = {{ver\v{s}}{v\adddot}}, + versetotals = {{ver\v{s}e}{v\adddot}}, + sectiontotal = {{sekce}{\S}}, + sectiontotals = {{sekce}{\S\S}}, + paragraphtotal = {{odstavec}{ods\adddot}}, + paragraphtotals = {{odstavce}{ods\adddot}}, + in = {{in}{in}}, + inseries = {{in}{in}}, + ofseries = {{z}{z}}, + number = {{\v{c}\'{\i}slo}{\v{c}\adddot}}, chapter = {{kapitola}{kap\adddot}}, -% bathesis = {{}{}},% FIXME: missing - mathesis = {{diplomov\'{a} pr\'{a}ce}{dipl\addabbrvspace}}, - phdthesis = {{diserta\v{c}n\'{i}\addabbrvspace pr\'{a}ce}{dis\addabbrvspace}}, - candthesis = {{kandid\'{a}tsk\'{a} pr\'{a}ce}{kand\adddotspace pr\adddotspace}},% mozna, + bathesis = {{bakal\'{a}\v{r}sk\'{a} pr\'{a}ce}{bak\adddotspace pr\adddot}}, + mathesis = {{diplomov\'{a} pr\'{a}ce}{dipl\adddotspace pr\adddot}}, + phdthesis = {{diserta\v{c}n\'{\i} pr\'{a}ce}{dis\adddotspace pr\adddot}}, + candthesis = {{kandid\'{a}tsk\'{a} pr\'{a}ce}{kand\adddotspace pr\adddot}},% FIXME: unsure resreport = {{v\'{y}zkumn\'{a} zpr\'{a}va}{v\'{y}zk\adddot\ zpr\adddot}}, techreport = {{technick\'{a} zpr\'{a}va}{tech\adddotspace zpr\adddot}}, - software = {{po\v{c}\'{i}ta\v{c}ov\'{y} software}{soft\adddot}}, + software = {{po\v{c}\'{\i}ta\v{c}ov\'{y} software}{soft\adddot}}, datacd = {{CD-ROM}{CD-ROM}}, audiocd = {{audio CD}{audio CD}}, - version = {{verze}{ver\adddotspace}}, - url = {{dostupn\'y z WWW}{WWW}}, -% urlfrom = {{}{}},% FIXME: missing - urlseen = {{citov\'ano}{cit\adddot}}, - inpreparation = {{v p\v{r}\'{i}prav\v{e}}{v p\v{r}\'{i}prav\v{e}}}, - submitted = {{odesl\'{a}no}{odes\adddotspace}}, - forthcoming = {{budouc\'{i}}{bud\adddotspace}}, - inpress = {{v tisku}{v tisku}}, - prepublished = {{p\v{r}ed publikov\'{a}n\'{i}m}{p\v{r}ed \adddotspace}}, - citedas = {{d\'{a}le citov\'{a}no jako}{d\'{a}le citov\'{a}no jako}}, + version = {{verze}{ver\adddot}}, + url = {{URL}{URL}}, + urlfrom = {{dostupn\'{e} z\addnbspace}{dostupn\'{e} z\addnbspace}}, + urlseen = {{citov\'{a}no}{cit\adddot}}, + inpreparation = {{v\addnbspace p\v{r}\'{\i}prav\v{e}}{v\addnbspace p\v{r}\'{\i}prav\v{e}}}, + submitted = {{odesl\'{a}no}{odesl\adddot}}, + forthcoming = {{budouc\'{\i}}{bud\adddot}}, + inpress = {{v\addnbspace tisku}{v\addnbspace tisku}}, + prepublished = {{p\v{r}ed publikov\'{a}n\'{\i}m}{p\v{r}ed publ\adddot}}, + citedas = {{d\'{a}le citov\'{a}no jako}{d\'{a}le cit\adddotspace jako}}, thiscite = {{zvl\'{a}\v{s}t\v{e}}{zvl\adddot}}, - seenote = {{viz pozn\'{a}mka}{viz poz\adddot}}, - quotedin = {{citov\'{a}no v}{cit\adddotspace v}}, + seenote = {{viz pozn\'{a}mka}{viz pozn\adddot}}, + quotedin = {{citov\'{a}no v\addnbspace}{cit\adddotspace v\addnbspace}}, idem = {{idem}{idem}}, idemsm = {{idem}{idem}}, idemsf = {{eadem}{eadem}}, @@ -370,105 +423,113 @@ passim = {{passim}{pass\adddot}}, see = {{viz}{viz}}, seealso = {{viz t\'{e}\v{z}}{viz t\'{e}\v{z}}}, - backrefpage = {{citov\'{a}no na stran\v{e}}{cit\adddotspace na s\adddot}}, + backrefpage = {{citov\'{a}no na stran\v{e}}{cit\adddotspace na str\adddot}}, backrefpages = {{citov\'{a}no na stran\'{a}ch}{cit\adddotspace na s\adddot}}, - january = {{ledna}{led\adddot}}, - february = {{\'{u}nora}{\'{u}n\adddot}}, - march = {{b\v{r}ezna}{b\v{r}ez\adddot}}, - april = {{dubna}{dub\adddot}}, - may = {{kvetna}{kv\v{e}t\adddot}}, - june = {{\v{c}ervna}{\v{c}erv\adddot}}, - july = {{\v{c}ervence}{\v{c}vc}}, - august = {{srpna}{srp\adddot}}, - september = {{z\'{a}\v{r}\'{i}}{z\'{a}\v{r}\adddot}}, - october = {{\v{r}\'{i}jna}{\v{r}\'{i}j\adddot}}, - november = {{listopadu}{lis\adddot}}, - december = {{prosince}{pros\adddot}}, - langamerican = {{americk\'{a} angli\v{c}tina}{am\adddot angl\adddot}}, - langbrazilian = {{brazilsk\'{a} portugal\v{s}tina}{braz\adddot portugal\adddot}}, -% langbulgarian = {{}{}},% FIXME: missing -% langcatalan = {{}{}},% FIXME: missing + january = {{leden}{led\adddot}}, + february = {{\'{u}nor}{\'{u}n\adddot}}, + march = {{b\v{r}ezen}{b\v{r}ez\adddot}}, + april = {{duben}{dub\adddot}}, + may = {{kv\v{e}ten}{kv\v{e}t\adddot}}, + june = {{\v{c}erven}{\v{c}vn\adddot}}, + july = {{\v{c}ervenec}{\v{c}vc\adddot}}, + august = {{srpen}{srp\adddot}}, + september = {{z\'{a}\v{r}\'{\i}}{z\'{a}\v{r}\adddot}}, + october = {{\v{r}\'{\i}jen}{\v{r}\'{\i}j\adddot}}, + november = {{listopad}{lis\adddot}}, + december = {{prosinec}{pros\adddot}}, + langamerican = {{americk\'{a} angli\v{c}tina}{am\adddot\ angl\adddot}}, + langbrazilian = {{brazilsk\'{a} portugal\v{s}tina}{braz\adddot\ portugal\adddot}}, + langbulgarian = {{bulhar\v{s}tina}{bulh\adddot}}, + langcatalan = {{katal\'{a}n\v{s}tina}{katal\adddot}}, langcroatian = {{chorvat\v{s}tina}{chorv\adddot}}, -% langczech = {{}{}},% FIXME: missing + langczech = {{\v{c}e\v{s}tina}{\v{c}e\v{s}tina}}, langdanish = {{d\'{a}n\v{s}tina}{d\'{a}n\adddot}}, - langdutch = {{holand\v{s}tina}{hol.\adddot}}, + langdutch = {{holand\v{s}tina}{hol\adddot}}, langenglish = {{angli\v{c}tina}{angl\adddot}}, -% langestonian = {{}{}},% FIXME: missing + langestonian = {{eston\v{s}tina}{est\adddot}}, langfinnish = {{fin\v{s}tina}{fin\adddot}}, langfrench = {{francouz\v{s}tina}{franc\adddot}}, langgalician = {{galicij\v{s}tina}{gal\adddot}}, langgerman = {{n\v{e}m\v{c}ina}{n\v{e}m\adddot}}, langgreek = {{\v{r}e\v{c}tina}{\v{r}e\v{c}\adddot}}, -% langhungarian = {{}{}}, % FIXME: missing + langhungarian = {{ma\v{d}ar\v{s}tina}{ma\v{d}\adddot}}, langitalian = {{ital\v{s}tina}{ital\adddot}}, + langjapanese = {{japon\v{s}tina}{jap\adddot}}, langlatin = {{latina}{lat\adddot}}, -% langlatvian = {{}{}},% FIXME: missing - langnorwegian = {{nor\v{s}tina}{nor\v{s}\adddot}}, -% langpolish = {{}{}},% FIXME: missing - langportuguese = {{portugal\v{s}tina}{port\adddot}}, -% langslovak = {{}{}},% FIXME: missing -% langslovene = {{}{}},% FIXME: missing + langlatvian = {{loty\v{s}tina}{lot\adddot}}, + langnorwegian = {{nor\v{s}tina}{nor\adddot}}, + langpolish = {{pol\v{s}tina}{pol\adddot}}, + langportuguese = {{portugal\v{s}tina}{portugal\adddot}}, + langrussian = {{ru\v{s}tina}{ru\v{s}tina}}, + langserbian = {{srb\v{s}tina}{srb\adddot}}, + langslovak = {{sloven\v{s}tina}{sloven\v{s}tina}}, + langslovene = {{slovin\v{s}tina}{slovin\v{s}tina}}, langspanish = {{\v{s}pan\v{e}l\v{s}tina}{\v{s}pa\v{n}\adddot}}, langswedish = {{\v{s}v\'{e}d\v{s}tina}{\v{s}v\'{e}d\adddot}}, - fromamerican = {{z americk\'{e} angli\v{c}tiny}{z amer\adddot angl\adddot}}, - frombrazilian = {{z brazilsk\'{e} portugal\v{s}tiny}{z braz\adddotspace port\adddot}}, -% frombulgarian = {{}{}},% FIXME: missing -% fromcatalan = {{}{}},% FIXME: missing - fromcroatian = {{z chorvat\v{s}tiny}{z chorv.}}, -% fromczech = {{}{}},% FIXME: missing - fromdanish = {{z d\'{a}n\v{s}tiny}{z d\'{a}n\adddot}}, - fromdutch = {{z holand\v{s}tiny}{z hol\adddot}}, - fromenglish = {{z angli\v{c}tiny}{z angl\adddot}}, -% fromestonian = {{}{}},% FIXME: missing - fromfinnish = {{z fin\v{s}tiny}{z fin.}}, - fromfrench = {{z francouz\v{s}tiny}{z franc\adddot}}, - fromgalician = {{z galicij\v{s}tiny}{z gal\adddot}}, - fromgerman = {{z n\v{e}m\v{c}iny}{z n\v{e}m\adddot}}, - fromgreek = {{z \v{r}e\v{c}tiny}{z \v{r}e\v{c}\adddot}}, -% fromhungarian = {{}{}}, % FIXME: missing - fromitalian = {{z ital\v{s}tiny}{z ital\adddot}}, - fromlatin = {{z latiny}{z lat\adddot}}, -% fromlatvian = {{}{}},% FIXME: missing - fromnorwegian = {{z nor\v{s}tiny}{z nor\adddot}}, -% frompolish = {{}{}},% FIXME: missing - fromportuguese = {{z portugal\v{s}tiny}{z portugal\v{s}tiny}}, -% fromslovak = {{}{}},% FIXME: missing -% fromslovene = {{}{}},% FIXME: missing + langukrainian = {{ukrajin\v{s}tina}{ukr\adddot}}, + fromamerican = {{z\addnbspace americk\'{e} angli\v{c}tiny}{z\addnbspace amer\adddot\ angl\adddot}}, + frombrazilian = {{z\addnbspace brazilsk\'{e} portugal\v{s}tiny}{z\addnbspace braz\adddotspace portugal\adddot}}, + frombulgarian = {{z\addnbspace bulhar\v{s}tiny}{z\addnbspace bulh\adddot}}, + fromcatalan = {{z\addnbspace katal\'{a}n\v{s}tiny}{z\addnbspace katal\adddot}}, + fromcroatian = {{z\addnbspace chorvat\v{s}tiny}{z\addnbspace chorv\adddot}}, + fromczech = {{z\addnbspace \v{c}e\v{s}tiny}{z\addnbspace \v{c}e\v{s}tiny}}, + fromdanish = {{z\addnbspace d\'{a}n\v{s}tiny}{z\addnbspace d\'{a}n\adddot}}, + fromdutch = {{z\addnbspace holand\v{s}tiny}{z\addnbspace hol\adddot}}, + fromenglish = {{z\addnbspace angli\v{c}tiny}{z\addnbspace angl\adddot}}, + fromestonian = {{z\addnbspace eston\v{s}tiny}{z\addnbspace est\adddot}}, + fromfinnish = {{z\addnbspace fin\v{s}tiny}{z\addnbspace fin\adddot}}, + fromfrench = {{z\addnbspace francouz\v{s}tiny}{z\addnbspace franc\adddot}}, + fromgalician = {{z\addnbspace galicij\v{s}tiny}{z\addnbspace gal\adddot}}, + fromgerman = {{z\addnbspace n\v{e}m\v{c}iny}{z\addnbspace n\v{e}m\adddot}}, + fromgreek = {{z\addnbspace \v{r}e\v{c}tiny}{z\addnbspace \v{r}e\v{c}\adddot}}, + fromhungarian = {{z\addnbspace ma\v{d}ar\v{s}tiny}{z\addnbspace ma\v{d}\adddot}}, + fromitalian = {{z\addnbspace ital\v{s}tiny}{z\addnbspace ital\adddot}}, + fromjapanese = {{z\addnbspace japon\v{s}tiny}{z\addnbspace jap\adddot}}, + fromlatin = {{z\addnbspace latiny}{z\addnbspace lat\adddot}}, + fromlatvian = {{z\addnbspace loty\v{s}tiny}{z\addnbspace lot\adddot}}, + fromnorwegian = {{z\addnbspace nor\v{s}tiny}{z\addnbspace nor\adddot}}, + frompolish = {{z\addnbspace pol\v{s}tiny}{z\addnbspace pol\adddot}}, + fromportuguese = {{z\addnbspace portugal\v{s}tiny}{z\addnbspace portugal\adddot}}, + fromrussian = {{z\addnbspace ru\v{s}tiny}{z\addnbspace ru\v{s}tiny}}, + fromserbian = {{zo srb\v{s}tiny}{zo srb\adddot}}, + fromslovak = {{ze sloven\v{s}tiny}{ze sloven\v{s}tiny}}, + fromslovene = {{ze slovin\v{s}tiny}{ze slovin\v{s}tiny}}, fromspanish = {{ze \v{s}pan\v{e}l\v{s}tiny}{ze \v{s}pa\v{n}\adddot}}, fromswedish = {{ze \v{s}v\'{e}d\v{s}tiny}{ze \v{s}v\'{e}d\adddot}}, + fromukrainian = {{z\addnbspace ukrajin\v{s}tiny}{z\addnbspace ukr\adddot}}, countryde = {{N\v{e}mecko}{DE}}, countryeu = {{Evropsk\'{a} unie}{EU}}, countryep = {{Evropsk\'{a} unie}{EP}}, countryfr = {{Francie}{FR}}, countryuk = {{Velk\'{a} Brit\'{a}nie}{GB}}, - countryus = {{Spojen\'{e} St\'{a}ty Americk\'{e}}{US}}, + countryus = {{Spojen\'{e} st\'{a}ty americk\'{e}}{US}}, patent = {{patent}{pat\adddot}}, patentde = {{n\v{e}meck\'{y} patent}{n\v{e}m\adddot\ pat\adddot}}, patenteu = {{evropsk\'{y} patent}{evr\adddot\ pat\adddot}}, patentfr = {{francouzsk\'{y} patent}{franc\adddot\ pat\adddot}}, - patentuk = {{britsk\'{y} patent}{britsk\'{y} pat\adddot}}, - patentus = {{americk\'{y} patent}{US\adddotspace pat\adddot}}, + patentuk = {{britsk\'{y} patent}{brit\adddot\ pat\adddot}}, + patentus = {{US patent}{US pat\adddot}}, patreq = {{patentov\'{a} \v{z}\'{a}dost}{pat\adddot\ \v{z}\'{a}d\adddot}}, patreqde = {{n\v{e}meck\'{a} patentov\'{a} \v{z}\'{a}dost}{n\v{e}meck\'{a} pat\adddot\ \v{z}\'{a}d\adddot}}, - patreqeu = {{evropsk\'{a} patentov\'{a} \v{z}\'{a}dost}{ev\adddot\ pat\adddot\ \v{z}\'{a}d\adddot}}, + patreqeu = {{evropsk\'{a} patentov\'{a} \v{z}\'{a}dost}{evr\adddot\ pat\adddot\ \v{z}\'{a}d\adddot}}, patreqfr = {{francouzsk\'{a} patentov\'{a} \v{z}\'{a}dost}{franc\adddot\ pat\adddot\ \v{z}\'{a}d\adddot}}, patrequk = {{britsk\'{a} patentov\'{a} \v{z}\'{a}dost}{brit\adddot\ pat\adddot\ \v{z}\'{a}d\adddot}}, - patrequs = {{US\adddotspace patentov\'{a} \v{z}\'{a}dost}{US\adddotspace pat\adddot\ \v{z}\'{a}d\adddot}}, + patrequs = {{US patentov\'{a} \v{z}\'{a}dost}{US pat\adddot\ \v{z}\'{a}d\adddot}}, file = {{soubor}{soub\adddot}}, library = {{knihovna}{knih\adddot}}, abstract = {{abstrakt}{abst\adddot}}, annotation = {{anotace}{anot\adddot}}, -% commonera = {{}{}}, -% beforecommonera = {{}{}}, - annodomini = {{n\adddotspace l\adddot}{n\adddotspace l\adddot}}, - beforechrist = {{p\v{r}\adddotspace n\adddotspace l\adddot}{p\v{r}\adddotspace n\adddotspace l\adddot}}, -% circa = {{}{}},% FIXME: missing -% spring = {{}{}},% FIXME: missing -% summer = {{}{}},% FIXME: missing -% autumn = {{}{}},% FIXME: missing -% winter = {{}{}},% FIXME: missing - am = {{dop\adddot}{dop\adddot}}, - pm = {{odp\adddot}{odp\adddot}}, + commonera = {{n\'{a}\v{s} letopo\v{c}et}{n\adddotspace l\adddot}}, + beforecommonera = {{p\v{r}ed na\v{s}\'{\i}m letopo\v{c}tem}{p\v{r}\adddotspace n\adddotspace l\adddot}}, + annodomini = {{po Kristu}{po Kr\adddot}}, + beforechrist = {{p\v{r}ed Kristem}{p\v{r}\adddotspace Kr\adddot}}, + circa = {{cirka}{ca\adddot}}, + spring = {{jaro}{jaro}}, + summer = {{l\'{e}to}{l\'{e}to}}, + autumn = {{podzim}{podzim}}, + winter = {{zima}{zima}}, + am = {{AM}{AM}}, + pm = {{PM}{PM}}, } \endinput diff --git a/macros/latex/contrib/biblatex/latex/lbx/danish.lbx b/macros/latex/contrib/biblatex/latex/lbx/danish.lbx index 2c57242bd9..2b360a0c0c 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/danish.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/danish.lbx @@ -36,13 +36,17 @@ {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -245,7 +249,7 @@ byreviewer = {{bed\o mt af}{bed\adddotspace af}}, byfounder = {{stiftet af}{stiftet af}}, bycontinuator = {{videref\o rt af}{videref\adddotspace af}}, - bycollaborator = {{i samarbejde med}{i samarb\adddotspace m\adddotspace}}, + bycollaborator = {{i samarbejde med}{i samarb\adddotspace m\adddot}}, bytranslator = {{oversat \lbx@lfromlang\ af}% {overs\adddot \lbx@sfromlang\ af}}, bycommentator = {{kommenteret af}{komm\adddot\ af}}, diff --git a/macros/latex/contrib/biblatex/latex/lbx/dutch.lbx b/macros/latex/contrib/biblatex/latex/lbx/dutch.lbx index 6d6822fd72..880c0643dc 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/dutch.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/dutch.lbx @@ -57,13 +57,17 @@ {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -474,14 +478,17 @@ langjapanese = {{Japaans}{Japaans}}, langlatin = {{Latijn}{Latijn}}, langlatvian = {{Lets}{Lets}}, + langlithuanian = {{Litouws}{Litouws}}, langnorwegian = {{Noors}{Noors}}, langpolish = {{Pools}{Pools}}, langportuguese = {{Portugees}{Portugees}}, langrussian = {{Russisch}{Russisch}}, + langserbian = {{Servisch}{Servisch}}, langslovak = {{Slowaaks}{Slowaaks}},% FIXME: or Slovaaks langslovene = {{Sloveens}{Sloveens}}, langspanish = {{Spaans}{Spaans}}, langswedish = {{Zweeds}{Zweeds}}, + langturkish = {{Turks}{Turks}}, langukrainian = {{Oekra\"iens}{Oekra\"iens}}, fromamerican = {{uit het Amerikaans Engels}{uit het Amerikaans Engels}}, frombrazilian = {{uit het Braziliaans Portugees}{uit het Braziliaans Portugees}}, @@ -503,14 +510,17 @@ fromjapanese = {{uit het Japaans}{uit het Japaans}}, fromlatin = {{uit het Latijn}{uit het Latijn}}, fromlatvian = {{uit het Lets}{uit het Lets}}, + fromlithuanian = {{uit het Litouws}{uit het Litouws}}, fromnorwegian = {{uit het Noors}{uit het Noors}}, frompolish = {{uit het Pools}{uit het Pools}}, fromportuguese = {{uit het Portugees}{uit het Portugees}}, fromrussian = {{uit het Russisch}{uit het Russisch}}, + fromserbian = {{uit het Servisch}{uit het Servisch}}, fromslovak = {{uit het Slowaaks}{uit het Slowaaks}},% FIXME: or Slovaaks fromslovene = {{uit het Sloveens}{uit het Sloveens}}, fromspanish = {{uit het Spaans}{uit het Spaans}}, fromswedish = {{uit het Zweeds}{uit het Zweeds}}, + fromturkish = {{uit het Turks}{uit het Turks}}, fromukrainian = {{uit het Oekra\"iens}{uit het Oekra\"iens}}, countryde = {{Duitsland}{DE}}, countryeu = {{Europese Unie}{EU}}, diff --git a/macros/latex/contrib/biblatex/latex/lbx/english.lbx b/macros/latex/contrib/biblatex/latex/lbx/english.lbx index 109014dafb..1ade8c7f81 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/english.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/english.lbx @@ -50,13 +50,17 @@ canadian,australian,newzealand,USenglish,UKenglish} {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -329,11 +333,11 @@ canadian,australian,newzealand,USenglish,UKenglish} byeditortrcoaf = {{edited, translated \lbx@lfromlang\finalandcomma\ and commented, with an afterword, by}% {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and comm., with an afterw., by}}, byeditortranin = {{edited, translated \lbx@lfromlang\finalandcomma\ and annotated, with an introduction, by}% - {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot, with an introd., by}}, + {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot., with an introd., by}}, byeditortranfo = {{edited, translated \lbx@lfromlang\finalandcomma\ and annotated, with a foreword, by}% - {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot, with a forew., by}}, + {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot., with a forew., by}}, byeditortranaf = {{edited, translated \lbx@lfromlang\finalandcomma\ and annotated, with an afterword, by}% - {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot, with an afterw., by}}, + {ed.,\addabbrvspace trans\adddot\ \lbx@sfromlang\finalandcomma\ and annot., with an afterw., by}}, bytranslatorco = {{translated \lbx@lfromlang\ and commented by}% {trans\adddot\ \lbx@sfromlang\ and comm\adddot\ by}}, bytranslatoran = {{translated \lbx@lfromlang\ and annotated by}% @@ -485,14 +489,17 @@ canadian,australian,newzealand,USenglish,UKenglish} langjapanese = {{Japanese}{Japanese}}, langlatin = {{Latin}{Latin}}, langlatvian = {{Latvian}{Latvian}}, + langlithuanian = {{Lithuanian}{Lithuanian}}, langnorwegian = {{Norwegian}{Norwegian}}, langpolish = {{Polish}{Polish}}, langportuguese = {{Portuguese}{Portuguese}}, langrussian = {{Russian}{Russian}}, + langserbian = {{Serbian}{Serbian}}, langslovak = {{Slovak}{Slovak}}, langslovene = {{Slovene}{Slovene}}, langspanish = {{Spanish}{Spanish}}, langswedish = {{Swedish}{Swedish}}, + langturkish = {{Turkish}{Turkish}}, langukrainian = {{Ukrainian}{Ukrainian}}, fromamerican = {{from the American}{from the American}}, frombrazilian = {{from the Brazilian}{from the Brazilian}}, @@ -514,14 +521,17 @@ canadian,australian,newzealand,USenglish,UKenglish} fromjapanese = {{from the Japanese}{from the Japanese}}, fromlatin = {{from the Latin}{from the Latin}}, fromlatvian = {{from the Latvian}{from the Latvian}}, + fromlithuanian = {{from the Lithuanian}{from the Lithuanian}}, fromnorwegian = {{from the Norwegian}{from the Norwegian}}, frompolish = {{from the Polish}{from the Polish}}, fromportuguese = {{from the Portuguese}{from the Portuguese}}, fromrussian = {{from the Russian}{from the Russian}}, + fromserbian = {{from the Serbian}{from the Serbian}}, fromslovak = {{from the Slovak}{from the Slovak}}, fromslovene = {{from the Slovene}{from the Slovene}}, fromspanish = {{from the Spanish}{from the Spanish}}, fromswedish = {{from the Swedish}{from the Swedish}}, + fromturkish = {{from the Turkish}{from the Turkish}}, fromukrainian = {{from the Ukrainian}{from the Ukrainian}}, countryde = {{Germany}{DE}}, countryeu = {{European Union}{EU}}, @@ -568,7 +578,7 @@ canadian,australian,newzealand,USenglish,UKenglish} \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\ifdateyearsequal{#2}{#2end} @@ -607,7 +617,7 @@ canadian,australian,newzealand,USenglish,UKenglish} \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\ifdateyearsequal{#2}{#2end} @@ -637,12 +647,12 @@ canadian,australian,newzealand,USenglish,UKenglish} {\mkdaterangefullextra{#1}{#2}} {\lbx@us@mkdaterangetruncextra@long@i{#1}{#2}}} -\protected\gdef\lbx@us@mkdaterangetruncextra@long#1#2{% +\protected\gdef\lbx@us@mkdaterangetruncextra@long@i#1#2{% \begingroup \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\ifdateyearsequal{#2}{#2end} @@ -678,12 +688,12 @@ canadian,australian,newzealand,USenglish,UKenglish} {\mkdaterangefullextra{#1}{#2}} {\lbx@us@mkdaterangetruncextra@short@i{#1}{#2}}} -\protected\gdef\lbx@us@mkdaterangetruncextra@short#1#2{% +\protected\gdef\lbx@us@mkdaterangetruncextra@short@i#1#2{% \begingroup \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\ifdateyearsequal{#2}{#2end} diff --git a/macros/latex/contrib/biblatex/latex/lbx/estonian.lbx b/macros/latex/contrib/biblatex/latex/lbx/estonian.lbx index 2b0b32f115..07b58d529d 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/estonian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/estonian.lbx @@ -56,17 +56,22 @@ {\printlist[sfromoriglanguage]{origlanguage}\space}}% \savebibmacro{in:}% \renewbibmacro{in:}{% - \iffieldequalstr{entrytype}{article} + \ifentrytype{article} {} - {\printtext{\bibstring{in}\intitlepunct}}}% + {\bibstring{in}% + \printunit{\intitlepunct}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -276,7 +281,7 @@ byfounder = {{asutanud}{asutanud}}, bycontinuator = {{j\"{a}tkanud}{j\"{a}tkanud}}, bycollaborator = {{koost\"{o}\"{o}s}{koost\"{o}\"{o}s}}, - bytranslator = {{\lbx@lfromlang t\~{o}lkinud}{\lbx@sfromlang t\~{o}lk\adddotspace}}, + bytranslator = {{\lbx@lfromlang t\~{o}lkinud}{\lbx@sfromlang t\~{o}lk\adddot}}, bycommentator = {{kommenteerinud}{kommenteerinud}}, byannotator = {{kommenteerinud}{kommenteerinud}},% FIXME: unsure withcommentator = {{koos kommentaaridega}{koos kommentaaridega}},% FIXME: commentator name should be in the middle diff --git a/macros/latex/contrib/biblatex/latex/lbx/finnish.lbx b/macros/latex/contrib/biblatex/latex/lbx/finnish.lbx index 372b537d97..99db65676d 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/finnish.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/finnish.lbx @@ -75,17 +75,22 @@ {\printlist[sfromoriglanguage]{origlanguage}\space}}% \savebibmacro{in:}% \renewbibmacro{in:}{% - \iffieldequalstr{entrytype}{article} + \ifentrytype{article} {} - {\printtext{\bibstring{in}\intitlepunct}}}% + {\bibstring{in}% + \printunit{\intitlepunct}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/french.lbx b/macros/latex/contrib/biblatex/latex/lbx/french.lbx index 31f436e1df..d2e441b66e 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/french.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/french.lbx @@ -1,8 +1,6 @@ \ProvidesFile{french.lbx} [\abx@lbxid] -% Translations by non-native speaker: this file needs an overhaul! - \DeclareRedundantLanguages{french}{french} \DeclareBibliographyExtras{% @@ -66,13 +64,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -110,7 +112,7 @@ \DeclareBibliographyStrings{% bibliography = {{Bibliographie}{Bibliographie}}, references = {{R\'ef\'erences}{R\'ef\'erences}}, - shorthands = {{Liste des sigles}{Sigles}}, + shorthands = {{Liste des abr\'eviations}{Abr\'eviations}}, editor = {{\'editeur}{\'ed\adddot}}, editors = {{\'editeurs}{\'ed\adddot}}, compiler = {{compilateur}{comp\adddot}}, @@ -150,13 +152,13 @@ {\'ed\adddotspace et introd\adddot}}, editorsin = {{\'editeurs et introduction}% {\'ed\adddotspace et introd\adddot}}, - editorfo = {{\'editeur et pr\'efacier}% + editorfo = {{\'editeur et pr\'eface}% {\'ed\adddotspace et pr\'ef\adddot}}, - editorsfo = {{\'editeurs et pr\'efaciers}% + editorsfo = {{\'editeurs et pr\'eface}% {\'ed\adddotspace et pr\'ef\adddot}}, - editoraf = {{\'editeur et postfacier}% + editoraf = {{\'editeur et postface}% {\'ed\adddotspace et postf\adddot}}, - editorsaf = {{\'editeurs et postfaciers}% + editorsaf = {{\'editeurs et postface}% {\'ed\adddotspace et postf\adddot}}, editortrco = {{\'editeur, traducteur et commentateur}% {\'ed.,\addabbrvspace trad\adddotspace et comm\adddot}}, @@ -170,61 +172,61 @@ {\'ed.,\addabbrvspace trad\adddotspace et introd\adddot}}, editorstrin = {{\'editeurs, traducteurs et introduction}% {\'ed.,\addabbrvspace trad\adddotspace et introd\adddot}}, - editortrfo = {{\'editeur, traducteur et pr\'efacier}% + editortrfo = {{\'editeur, traducteur et pr\'eface}% {\'ed.,\addabbrvspace trad\adddotspace et pr\'ef\adddot}}, - editorstrfo = {{\'editeurs, traducteurs et pr\'efaciers}% + editorstrfo = {{\'editeurs, traducteurs et pr\'eface}% {\'ed.,\addabbrvspace trad\adddotspace et pr\'ef\adddot}}, - editortraf = {{\'editeur, traducteur et postfacier}% + editortraf = {{\'editeur, traducteur et postface}% {\'ed.,\addabbrvspace trad\adddotspace et postf\adddot}}, - editorstraf = {{\'editeurs, traducteurs et postfaciers}% + editorstraf = {{\'editeurs, traducteurs et postface}% {\'ed.,\addabbrvspace trad\adddot et postf\adddot}}, editorcoin = {{\'editeur, commentateur et introduction}% {\'ed.,\addabbrvspace comm\adddotspace et introd\adddot}}, editorscoin = {{\'editeurs, commentateurs et introduction}% {\'ed.,\addabbrvspace comm\adddotspace et introd\adddot}}, - editorcofo = {{\'editeur, commentateur et pr\'efacier}% + editorcofo = {{\'editeur, commentateur et pr\'eface}% {\'ed.,\addabbrvspace comm\adddotspace et pr\'ef\adddot}}, - editorscofo = {{\'editeurs, commentateurs et pr\'efaciers}% + editorscofo = {{\'editeurs, commentateurs et pr\'eface}% {\'ed.,\addabbrvspace comm\adddotspace et pr\'ef\adddot}}, - editorcoaf = {{\'editeur, commentateur et postfacier}% + editorcoaf = {{\'editeur, commentateur et postface}% {\'ed.,\addabbrvspace comm\adddotspace et postf\adddot}}, - editorscoaf = {{\'editeurs, commentateurs et postfaciers}% + editorscoaf = {{\'editeurs, commentateurs et postface}% {\'ed.,\addabbrvspace comm\adddotspace et postf\adddot}}, editoranin = {{\'editeur, annotateur et introduction}% {\'ed.,\addabbrvspace annot\adddotspace et introd\adddot}}, editorsanin = {{\'editeurs, annotateurs et introduction}% {\'ed.,\addabbrvspace annot\adddotspace et introd\adddot}}, - editoranfo = {{\'editeur, annotateur et pr\'efacier}% + editoranfo = {{\'editeur, annotateur et pr\'eface}% {\'ed.,\addabbrvspace annot\adddotspace et pr\'ef\adddot}}, - editorsanfo = {{\'editeurs, annotateurs et pr\'efaciers}% + editorsanfo = {{\'editeurs, annotateurs et pr\'eface}% {\'ed.,\addabbrvspace annot\adddotspace et pr\'ef\adddot}}, - editoranaf = {{\'editeur, annotateur et postfacier}% + editoranaf = {{\'editeur, annotateur et postface}% {\'ed.,\addabbrvspace annot\adddotspace et postf\adddot}}, - editorsanaf = {{\'editeurs, annotateurs et postfaciers}% + editorsanaf = {{\'editeurs, annotateurs et postface}% {\'ed.,\addabbrvspace annot\adddotspace et postf\adddot}}, editortrcoin = {{\'editeur, traducteur, commentateur et introduction}% {\'ed.,\addabbrvspace trad., comm\adddotspace et introd\adddot}}, editorstrcoin = {{\'editeurs, traducteurs, commentateurs et introduction}% {\'ed.,\addabbrvspace trad., comm\adddotspace et introd\adddot}}, - editortrcofo = {{\'editeur, traducteur, commentateur et pr\'efacier}% + editortrcofo = {{\'editeur, traducteur, commentateur et pr\'eface}% {\'ed.,\addabbrvspace trad., comm\adddotspace et pr\'ef\adddot}}, - editorstrcofo = {{\'editeurs, traducteurs, commentateurs et pr\'efaciers}% + editorstrcofo = {{\'editeurs, traducteurs, commentateurs et pr\'eface}% {\'ed.,\addabbrvspace trad., comm\adddotspace et pr\'ef\adddot}}, - editortrcoaf = {{\'editeur, traducteur, commentateur et postfacier}% + editortrcoaf = {{\'editeur, traducteur, commentateur et postface}% {\'ed.,\addabbrvspace trad., comm\adddotspace et postf\adddot}}, - editorstrcoaf = {{\'editeurs, traducteurs, commentateurs et postfaciers}% + editorstrcoaf = {{\'editeurs, traducteurs, commentateurs et postface}% {\'ed.,\addabbrvspace trad., comm\adddotspace et postf\adddot}}, editortranin = {{\'editeur, traducteur, annotateur et introduction}% {\'ed.,\addabbrvspace trad., annot\adddotspace et introd\adddot}}, editorstranin = {{\'editeurs, traducteurs, annotateurs et introduction}% {\'ed.,\addabbrvspace trad., annot\adddotspace et introd\adddot}}, - editortranfo = {{\'editeur, traducteur, annotateur et pr\'efacier}% + editortranfo = {{\'editeur, traducteur, annotateur et pr\'eface}% {\'ed.,\addabbrvspace trad., annot\adddotspace et pr\'ef\adddot}}, - editorstranfo = {{\'editeurs, traducteurs, annotateurs et pr\'efaciers}% + editorstranfo = {{\'editeurs, traducteurs, annotateurs et pr\'eface}% {\'ed.,\addabbrvspace trad., annot\adddotspace et pr\'ef\adddot}}, - editortranaf = {{\'editeur, traducteur, annotateur et postfacier}% + editortranaf = {{\'editeur, traducteur, annotateur et postface}% {\'ed.,\addabbrvspace trad., annot\adddotspace et postf\adddot}}, - editorstranaf = {{\'editeurs, traducteurs, annotateurs et postfaciers}% + editorstranaf = {{\'editeurs, traducteurs, annotateurs et postface}% {\'ed.,\addabbrvspace trad., annot\adddotspace et postf\adddot}}, translatorco = {{traducteur et commentateur}% {trad\adddotspace et comm\adddot}}, @@ -385,7 +387,7 @@ origpubin = {{publi\'e \`a l'origine en}{pub\adddotspace \`a l'orig\adddotspace en}}, astitle = {{sous le titre}{sous le titre}}, bypublisher = {{par}{par}}, - nodate = {{pas\space de\space date}{{}p\adddotspace d\adddot}}, + nodate = {{sans\space date}{{}s\adddotspace d\adddot}}, page = {{page}{p\adddot}}, pages = {{pages}{p\adddot}}, column = {{colonne}{col\adddot}}, @@ -394,10 +396,10 @@ lines = {{lignes}{l\adddot}}, verse = {{vers}{v\adddot}}, verses = {{vers}{v\adddot}}, - section = {{section}{\S}}, - sections = {{sections}{\S}}, - paragraph = {{paragraphe}{par\adddot}}, - paragraphs = {{paragraphes}{par\adddot}}, + section = {{section}{sect\adddot}}, + sections = {{sections}{sect\adddot}}, + paragraph = {{paragraphe}{\S}}, + paragraphs = {{paragraphes}{\S}}, pagetotal = {{page}{p\adddot}}, pagetotals = {{pages}{p\adddot}}, columntotal = {{colonne}{col\adddot}}, @@ -406,10 +408,10 @@ linetotals = {{lignes}{l\adddot}}, versetotal = {{vers}{v\adddot}}, versetotals = {{vers}{v\adddot}}, - sectiontotal = {{section}{\S}}, - sectiontotals = {{sections}{\S}}, - paragraphtotal = {{paragraphe}{par\adddot}}, - paragraphtotals = {{paragraphes}{par\adddot}}, + sectiontotal = {{section}{sect\adddot}}, + sectiontotals = {{sections}{sect\adddot}}, + paragraphtotal = {{paragraphe}{\S}}, + paragraphtotals = {{paragraphes}{\S}}, in = {{in}{in}}, inseries = {{in}{in}}, ofseries = {{de}{de}}, @@ -458,11 +460,11 @@ backrefpages = {{cf\adddotspace pages}{cf\adddotspace p\adddot}}, january = {{janvier}{jan\adddot}}, february = {{f\'evrier}{f\'ev\adddot}}, - march = {{mars}{mar\adddot}}, + march = {{mars}{mars}}, april = {{avril}{avr\adddot}}, may = {{mai}{mai}}, june = {{juin}{juin}}, - july = {{juillet}{juil\adddot}}, + july = {{juillet}{juill\adddot}}, august = {{ao\^ut}{ao\^ut}}, september = {{septembre}{sept\adddot}}, october = {{octobre}{oct\adddot}}, @@ -492,6 +494,7 @@ langpolish = {{polonais}{polonais}}, langportuguese = {{portugais}{portugais}}, langrussian = {{russe}{russe}}, + langserbian = {{serbe}{serbe}}, langslovak = {{slovaque}{slovaque}}, langslovene = {{slov\`ene}{slov\`ene}}, langspanish = {{espagnol}{espagnol}}, @@ -521,6 +524,7 @@ frompolish = {{du polonais}{du polonais}}, fromportuguese = {{du portugais}{du portugais}}, fromrussian = {{du russe}{du russe}}, + fromserbian = {{du serbe}{du serbe}}, fromslovak = {{du slovaque}{du slovaque}}, fromslovene = {{du slov\`ene}{du slov\`ene}}, fromspanish = {{de l'espagnol}{de l'espagnol}}, diff --git a/macros/latex/contrib/biblatex/latex/lbx/galician.lbx b/macros/latex/contrib/biblatex/latex/lbx/galician.lbx index 5cd3085e00..293fe87520 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/galician.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/galician.lbx @@ -43,13 +43,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -426,7 +430,7 @@ nodate = {{sen data}{s\adddot d\adddot}}, sequens = {{sq\adddot}{sq\adddot}}, sequentes = {{sqq\adddot}{sqq\adddot}}, passim = {{p\'assim}{p\'ass\adddot}}, - see = {{v\'exase}{vid\adddotspace}}, + see = {{v\'exase}{vid\adddot}}, seealso = {{v\'exase tam\'en}{vid\adddotspace tam\'en}}, backrefpage = {{v\'exase p\'axina}{vid\adddotspace p\adddot}}, backrefpages = {{v\'exanse p\'axinas}{vid\adddotspace pp\adddot}}, diff --git a/macros/latex/contrib/biblatex/latex/lbx/german.lbx b/macros/latex/contrib/biblatex/latex/lbx/german.lbx index d133f04c53..3aba7d6739 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/german.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/german.lbx @@ -50,13 +50,17 @@ {} {\printlist[sfromoriglanguage]{origlanguage}\space}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -118,141 +122,141 @@ foreword = {{Vorwort}{Vorw\adddot}}, afterword = {{Nachwort}{Nachw\adddot}}, editortr = {{Herausgeber und \"Ubersetzer}% - {Hrsg\adddot\ und \"Ubers\adddot}}, + {Hrsg\adddotspace und \"Ubers\adddot}}, editorstr = {{Herausgeber und \"Ubersetzer}% - {Hrsg\adddot\ und \"Ubers\adddot}}, + {Hrsg\adddotspace und \"Ubers\adddot}}, editorco = {{Herausgeber und Kommentator}% - {Hrsg\adddot\ und Komm\adddot}}, + {Hrsg\adddotspace und Komm\adddot}}, editorsco = {{Herausgeber und Kommentatoren}% - {Hrsg\adddot\ und Komm\adddot}}, + {Hrsg\adddotspace und Komm\adddot}}, editoran = {{Herausgeber und Kommentator}% - {Hrsg\adddot\ und Komm\adddot}}, + {Hrsg\adddotspace und Komm\adddot}}, editorsan = {{Herausgeber und Kommentatoren}% - {Hrsg\adddot\ und Komm\adddot}}, + {Hrsg\adddotspace und Komm\adddot}}, editorin = {{Herausgabe und Einleitung}% - {Hrsg\adddot\ und Einl\adddot}}, + {Hrsg\adddotspace und Einl\adddot}}, editorsin = {{Herausgeber und Einleitung}% - {Hrsg\adddot\ und Einl\adddot}}, + {Hrsg\adddotspace und Einl\adddot}}, editorfo = {{Herausgeber und Vorwort}% - {Hrsg\adddot\ und Vorw\adddot}}, + {Hrsg\adddotspace und Vorw\adddot}}, editorsfo = {{Herausgabe und Vorwort}% - {Hrsg\adddot\ und Vorw\adddot}}, + {Hrsg\adddotspace und Vorw\adddot}}, editoraf = {{Herausgabe und Nachwort}% - {Hrsg\adddot\ und Nachw\adddot}}, + {Hrsg\adddotspace und Nachw\adddot}}, editorsaf = {{Herausgabe und Nachwort}% - {Hrsg\adddot\ und Nachw\adddot}}, + {Hrsg\adddotspace und Nachw\adddot}}, editortrco = {{Herausgeber, \"Ubersetzer und Kommentator}% - {Hrsg., \"Ubers\adddot\ und Komm\adddot}}, + {Hrsg., \"Ubers\adddotspace und Komm\adddot}}, editorstrco = {{Herausgeber, \"Ubersetzer und Kommentatoren}% - {Hrsg., \"Ubers\adddot\ und Komm\adddot}}, + {Hrsg., \"Ubers\adddotspace und Komm\adddot}}, editortran = {{Herausgeber, \"Ubersetzer und Kommentator}% - {Hrsg., \"Ubers\adddot\ und Komm\adddot}}, + {Hrsg., \"Ubers\adddotspace und Komm\adddot}}, editorstran = {{Herausgeber, \"Ubersetzer und Kommentatoren}% - {Hrsg., \"Ubers\adddot\ und Komm\adddot}}, + {Hrsg., \"Ubers\adddotspace und Komm\adddot}}, editortrin = {{Herausgabe, \"Ubersetzung und Einleitung}% - {Hrsg., \"Ubers\adddot\ und Einl\adddot}}, + {Hrsg., \"Ubers\adddotspace und Einl\adddot}}, editorstrin = {{Herausgabe, \"Ubersetzung und Einleitung}% - {Hrsg., \"Ubers\adddot\ und Einl\adddot}}, + {Hrsg., \"Ubers\adddotspace und Einl\adddot}}, editortrfo = {{Herausgabe, \"Ubersetzung und Vorwort}% - {Hrsg., \"Ubers\adddot\ und Vorw\adddot}}, + {Hrsg., \"Ubers\adddotspace und Vorw\adddot}}, editorstrfo = {{Herausgabe, \"Ubersetzung und Vorwort}% - {Hrsg., \"Ubers\adddot\ und Vorw\adddot}}, + {Hrsg., \"Ubers\adddotspace und Vorw\adddot}}, editortraf = {{Herausgabe, \"Ubersetzung und Nachwort}% - {Hrsg., \"Ubers\adddot\ und Nachw\adddot}}, + {Hrsg., \"Ubers\adddotspace und Nachw\adddot}}, editorstraf = {{Herausgabe, \"Ubersetzung und Nachwort}% - {Hrsg., \"Ubers\adddot\ und Nachw\adddot}}, + {Hrsg., \"Ubers\adddotspace und Nachw\adddot}}, editorcoin = {{Herausgabe, Kommentar und Einleitung}% - {Hrsg., Komm\adddot\ und Einl\adddot}}, + {Hrsg., Komm\adddotspace und Einl\adddot}}, editorscoin = {{Herausgabe, Kommentar und Einleitung}% - {Hrsg., Komm\adddot\ und Einl\adddot}}, + {Hrsg., Komm\adddotspace und Einl\adddot}}, editorcofo = {{Herausgabe, Kommentar und Vorwort}% - {Hrsg., Komm\adddot\ und Vorw\adddot}}, + {Hrsg., Komm\adddotspace und Vorw\adddot}}, editorscofo = {{Herausgabe, Kommentar und Vorwort}% - {Hrsg., Komm\adddot\ und Vorw\adddot}}, + {Hrsg., Komm\adddotspace und Vorw\adddot}}, editorcoaf = {{Herausgabe, Kommentar und Nachwort}% - {Hrsg., Komm\adddot\ und Nachw\adddot}}, + {Hrsg., Komm\adddotspace und Nachw\adddot}}, editorscoaf = {{Herausgabe, Kommentar und Nachwort}% - {Hrsg., Komm\adddot\ und Nachw\adddot}}, + {Hrsg., Komm\adddotspace und Nachw\adddot}}, editoranin = {{Herausgabe, Erl\"auterungen und Einleitung}% - {Hrsg., Erl\"aut\adddot\ und Einl\adddot}}, + {Hrsg., Erl\"aut\adddotspace und Einl\adddot}}, editorsanin = {{Herausgabe, Erl\"auterungen und Einleitung}% - {Hrsg., Erl\"aut\adddot\ und Einl\adddot}}, + {Hrsg., Erl\"aut\adddotspace und Einl\adddot}}, editoranfo = {{Herausgabe, Erl\"auterungen und Vorwort}% - {Hrsg., Erl\"aut\adddot\ und Vorw\adddot}}, + {Hrsg., Erl\"aut\adddotspace und Vorw\adddot}}, editorsanfo = {{Herausgabe, Erl\"auterungen und Vorwort}% - {Hrsg., Erl\"aut\adddot\ und Vorw\adddot}}, + {Hrsg., Erl\"aut\adddotspace und Vorw\adddot}}, editoranaf = {{Herausgabe, Erl\"auterungen und Nachwort}% - {Hrsg., Erl\"aut\adddot\ und Nachw\adddot}}, + {Hrsg., Erl\"aut\adddotspace und Nachw\adddot}}, editorsanaf = {{Herausgabe, Erl\"auterungen und Nachwort}% - {Hrsg., Erl\"aut\adddot\ und Nachw\adddot}}, + {Hrsg., Erl\"aut\adddotspace und Nachw\adddot}}, editortrcoin = {{Herausgabe, \"Ubersetzung, Kommentar und Einleitung}% - {Hrsg., \"Ubers., Komm\adddot\ und Einl\adddot}}, + {Hrsg., \"Ubers., Komm\adddotspace und Einl\adddot}}, editorstrcoin = {{Herausgabe, \"Ubersetzung, Kommentar und Einleitung}% - {Hrsg., \"Ubers., Komm\adddot\ und Einl\adddot}}, + {Hrsg., \"Ubers., Komm\adddotspace und Einl\adddot}}, editortrcofo = {{Herausgabe, \"Ubersetzung, Kommentar und Vorwort}% - {Hrsg., \"Ubers., Komm\adddot\ und Vorw\adddot}}, + {Hrsg., \"Ubers., Komm\adddotspace und Vorw\adddot}}, editorstrcofo = {{Herausgabe, \"Ubersetzung, Kommentar und Vorwort}% - {Hrsg., \"Ubers., Komm\adddot\ und Vorw\adddot}}, + {Hrsg., \"Ubers., Komm\adddotspace und Vorw\adddot}}, editortrcoaf = {{Herausgabe, \"Ubersetzung, Kommentar und Nachwort}% - {Hrsg., \"Ubers., Komm\adddot\ und Nachw\adddot}}, + {Hrsg., \"Ubers., Komm\adddotspace und Nachw\adddot}}, editorstrcoaf = {{Herausgabe, \"Ubersetzung, Kommentar und Nachwort}% - {Hrsg., \"Ubers., Komm\adddot\ und Nachw\adddot}}, + {Hrsg., \"Ubers., Komm\adddotspace und Nachw\adddot}}, editortranin = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Einleitung}% - {Hrsg., \"Ubers., Erl\"aut\adddot\ und Einl\adddot}}, + {Hrsg., \"Ubers., Erl\"aut\adddotspace und Einl\adddot}}, editorstranin = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Einleitung}% - {Hrsg., \"Ubers., Erl\"aut\adddot\ und Einl\adddot}}, + {Hrsg., \"Ubers., Erl\"aut\adddotspace und Einl\adddot}}, editortranfo = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Vorwort}% - {Hrsg., \"Ubers., Erl\"aut\adddot\ und Vorw\adddot}}, + {Hrsg., \"Ubers., Erl\"aut\adddotspace und Vorw\adddot}}, editorstranfo = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Vorwort}% - {Hrsg., \"Ubers., Erl\"aut\adddot\ und Vorw\adddot}}, + {Hrsg., \"Ubers., Erl\"aut\adddotspace und Vorw\adddot}}, editortranaf = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Nachwort}% - {Hrsg., \"Ubers., Erl\"aut\adddot\ und Nachw\adddot}}, + {Hrsg., \"Ubers., Erl\"aut\adddotspace und Nachw\adddot}}, editorstranaf = {{Herausgabe, \"Ubersetzung, Erl\"auterungen und Nachwort}% - {Hrsg., \"Ubers., Erl\"aut\adddot\ und Nachw\adddot}}, + {Hrsg., \"Ubers., Erl\"aut\adddotspace und Nachw\adddot}}, translatorco = {{\"Ubersetzung und Kommentar}% - {\"Ubers\adddot\ und Komm\adddot}}, + {\"Ubers\adddotspace und Komm\adddot}}, translatorsco = {{\"Ubersetzung und Kommentar}% - {\"Ubers\adddot\ und Komm\adddot}}, + {\"Ubers\adddotspace und Komm\adddot}}, translatoran = {{\"Ubersetzung und Erl\"auterungen}% - {\"Ubers\adddot\ und Erl\"aut\adddot}}, + {\"Ubers\adddotspace und Erl\"aut\adddot}}, translatorsan = {{\"Ubersetzung und Erl\"auterungen}% - {\"Ubers\adddot\ und Erl\"aut\adddot}}, + {\"Ubers\adddotspace und Erl\"aut\adddot}}, translatorin = {{\"Ubersetzung und Einleitung}% - {\"Ubers\adddot\ und Einl\adddot}}, + {\"Ubers\adddotspace und Einl\adddot}}, translatorsin = {{\"Ubersetzung und Einleitung}% - {\"Ubers\adddot\ und Einl\adddot}}, + {\"Ubers\adddotspace und Einl\adddot}}, translatorfo = {{\"Ubersetzung und Vorwort}% - {\"Ubers\adddot\ und Vorw\adddot}}, + {\"Ubers\adddotspace und Vorw\adddot}}, translatorsfo = {{\"Ubersetzung und Vorwort}% - {\"Ubers\adddot\ und Vorw\adddot}}, + {\"Ubers\adddotspace und Vorw\adddot}}, translatoraf = {{\"Ubersetzung und Nachwort}% - {\"Ubers\adddot\ und Nachw\adddot}}, + {\"Ubers\adddotspace und Nachw\adddot}}, translatorsaf = {{\"Ubersetzung und Nachwort}% - {\"Ubers\adddot\ und Nachw\adddot}}, + {\"Ubers\adddotspace und Nachw\adddot}}, translatorcoin = {{\"Ubersetzung, Kommentar und Einleitung}% - {\"Ubers., Komm\adddot\ und Einl\adddot}}, + {\"Ubers., Komm\adddotspace und Einl\adddot}}, translatorscoin = {{\"Ubersetzung, Kommentar und Einleitung}% - {\"Ubers., Komm\adddot\ und Einl\adddot}}, + {\"Ubers., Komm\adddotspace und Einl\adddot}}, translatorcofo = {{\"Ubersetzung, Kommentar und Vorwort}% - {\"Ubers., Komm\adddot\ und Vorw\adddot}}, + {\"Ubers., Komm\adddotspace und Vorw\adddot}}, translatorscofo = {{\"Ubersetzung, Kommentar und Vorwort}% - {\"Ubers., Komm\adddot\ und Vorw\adddot}}, + {\"Ubers., Komm\adddotspace und Vorw\adddot}}, translatorcoaf = {{\"Ubersetzung, Kommentar und Nachwort}% - {\"Ubers., Komm\adddot\ und Nachw\adddot}}, + {\"Ubers., Komm\adddotspace und Nachw\adddot}}, translatorscoaf = {{\"Ubersetzung, Kommentar und Nachwort}% - {\"Ubers., Komm\adddot\ und Nachw\adddot}}, + {\"Ubers., Komm\adddotspace und Nachw\adddot}}, translatoranin = {{\"Ubersetzung, Erl\"auterungen und Einleitung}% - {\"Ubers., Erl\"aut\adddot\ und Einl\adddot}}, + {\"Ubers., Erl\"aut\adddotspace und Einl\adddot}}, translatorsanin = {{\"Ubersetzung, Erl\"auterungen und Einleitung}% - {\"Ubers., Erl\"aut\adddot\ und Einl\adddot}}, + {\"Ubers., Erl\"aut\adddotspace und Einl\adddot}}, translatoranfo = {{\"Ubersetzung, Erl\"auterungen und Vorwort}% - {\"Ubers., Erl\"aut\adddot\ und Vorw\adddot}}, + {\"Ubers., Erl\"aut\adddotspace und Vorw\adddot}}, translatorsanfo = {{\"Ubersetzung, Erl\"auterungen und Vorwort}% - {\"Ubers., Erl\"aut\adddot\ und Vorw\adddot}}, + {\"Ubers., Erl\"aut\adddotspace und Vorw\adddot}}, translatoranaf = {{\"Ubersetzung, Erl\"auterungen und Nachwort}% - {\"Ubers., Erl\"aut\adddot\ und Nachw\adddot}}, + {\"Ubers., Erl\"aut\adddotspace und Nachw\adddot}}, translatorsanaf = {{\"Ubersetzung, Erl\"auterungen und Nachwort}% - {\"Ubers., Erl\"aut\adddot\ und Nachw\adddot}}, + {\"Ubers., Erl\"aut\adddotspace und Nachw\adddot}}, % organizer = {{}{}},% FIXME: missing % organizers = {{}{}},% FIXME: missing % byorganizer = {{}{}},% FIXME: missing @@ -263,84 +267,84 @@ byreviser = {{\"uberarbeitet von}{\"uberarb\adddotspace von}}, byreviewer = {{rezensiert von}{rez\adddotspace von}}, byfounder = {{begr\"undet von}{begr\adddotspace von}}, - bycontinuator = {{fortgef\"urt von}{fortgef\adddotspace von}}, + bycontinuator = {{fortgef\"uhrt von}{fortgef\adddotspace von}}, bycollaborator = {{unter Mitarbeit von}{unter Mitarb\adddotspace von}}, - bytranslator = {{\lbx@lfromlang \"ubersetzt von}{\lbx@sfromlang \"ubers\adddot\ von}}, - bycommentator = {{kommentiert von}{komm\adddot\ von}}, - byannotator = {{erl\"autert von}{erl\"aut\adddot\ von}}, - withcommentator = {{mit einem Kommentar von}{mit einem Komm\adddot\ von}}, - withannotator = {{mit Erl\"auterungen von}{mit Erl\"aut\adddot\ von}}, - withintroduction = {{mit einer Einleitung von}{mit einer Einl\adddot\ von}}, - withforeword = {{mit einem Vorwort von}{mit einem Vorw\adddot\ von}}, - withafterword = {{mit einem Nachwort von}{mit einem Nachw\adddot\ von}}, + bytranslator = {{\lbx@lfromlang \"ubersetzt von}{\lbx@sfromlang \"ubers\adddotspace von}}, + bycommentator = {{kommentiert von}{komm\adddotspace von}}, + byannotator = {{erl\"autert von}{erl\"aut\adddotspace von}}, + withcommentator = {{mit einem Kommentar von}{mit einem Komm\adddotspace von}}, + withannotator = {{mit Erl\"auterungen von}{mit Erl\"aut\adddotspace von}}, + withintroduction = {{mit einer Einleitung von}{mit einer Einl\adddotspace von}}, + withforeword = {{mit einem Vorwort von}{mit einem Vorw\adddotspace von}}, + withafterword = {{mit einem Nachwort von}{mit einem Nachw\adddotspace von}}, byeditortr = {{herausgegeben und \lbx@lfromlang \"ubersetzt von}% - {hrsg\adddotspace und \lbx@sfromlang \"ubers\adddot\ von}}, + {hrsg\adddotspace und \lbx@sfromlang \"ubers\adddotspace von}}, byeditorco = {{herausgegeben und kommentiert von}% - {hrsg\adddotspace und komm\adddot\ von}}, + {hrsg\adddotspace und komm\adddotspace von}}, byeditoran = {{herausgegeben und erl\"autert von}% - {hrsg\adddotspace und erl\"aut\adddot\ von}}, + {hrsg\adddotspace und erl\"aut\adddotspace von}}, byeditorin = {{herausgegeben und mit einer Einleitung versehen von}% - {hrsg\adddotspace und mit einer Einl\adddot\ vers\adddot\ von}}, + {hrsg\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, byeditorfo = {{herausgegeben und mit einem Vorwort versehen von}% - {hrsg\adddotspace und mit einem Vorw\adddot\ vers\adddot\ von}}, + {hrsg\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, byeditoraf = {{herausgegeben und mit einem Nachwort versehen von}% - {hrsg\adddotspace und mit einem Nachw\adddot\ vers\adddot\ von}}, + {hrsg\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, byeditortrco = {{herausgegeben, \lbx@lfromlang \"ubersetzt und kommentiert von}% - {hrsg., \lbx@sfromlang \"ubers\adddot\ und komm\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers\adddotspace und komm\adddotspace von}}, byeditortran = {{herausgegeben, \lbx@lfromlang \"ubersetzt und erl\"autert von}% - {hrsg., \lbx@sfromlang \"ubers\adddot\ und erl\"aut\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers\adddotspace und erl\"aut\adddotspace von}}, byeditortrin = {{herausgegeben, \lbx@lfromlang \"ubersetzt und mit einer Einleitung versehen von}% - {hrsg., \lbx@sfromlang \"ubers\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, byeditortrfo = {{herausgegeben, \lbx@lfromlang \"ubersetzt und mit einem Vorwort versehen von}% - {hrsg., \lbx@sfromlang \"ubers\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, byeditortraf = {{herausgegeben, \lbx@lfromlang \"ubersetzt und mit einem Nachwort versehen von}% - {hrsg., \lbx@sfromlang \"ubers\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, byeditorcoin = {{herausgegeben, kommentiert und mit einer Einleitung versehen von}% - {hrsg., komm\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {hrsg., komm\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, byeditorcofo = {{herausgegeben, kommentiert und mit einem Vorwort versehen von}% - {hrsg., komm\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {hrsg., komm\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, byeditorcoaf = {{herausgegeben, kommentiert und mit einem Nachwort versehen von}% - {hrsg., komm\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {hrsg., komm\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, byeditoranin = {{herausgegeben, erl\"autert und mit einer Einleitung versehen von}% - {hrsg., erl\"aut\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {hrsg., erl\"aut\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, byeditoranfo = {{herausgegeben, erl\"autert und mit einem Vorwort versehen von}% - {hrsg., erl\"aut\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {hrsg., erl\"aut\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, byeditoranaf = {{herausgegeben, erl\"autert und mit einem Nachwort versehen von}% - {hrsg., erl\"aut\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {hrsg., erl\"aut\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, byeditortrcoin = {{herausgegeben, \lbx@lfromlang \"ubersetzt, kommentiert und mit einer Einleitung versehen von}% - {hrsg., \lbx@sfromlang \"ubers., komm\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers., komm\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, byeditortrcofo = {{herausgegeben, \lbx@lfromlang \"ubersetzt, kommentiert und mit einem Vorwort versehen von}% - {hrsg., \lbx@sfromlang \"ubers., komm\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers., komm\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, byeditortrcoaf = {{herausgegeben, \lbx@lfromlang \"ubersetzt, kommentiert und mit einem Nachwort versehen von}% - {hrsg., \lbx@sfromlang \"ubers., komm\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers., komm\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, byeditortranin = {{herausgegeben, \lbx@lfromlang \"ubersetzt, erl\"autert und mit einer Einleitung versehen von}% - {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, byeditortranfo = {{herausgegeben, \lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Vorwort versehen von}% - {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, byeditortranaf = {{herausgegeben, \lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Nachwort versehen von}% - {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {hrsg., \lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, bytranslatorco = {{\lbx@lfromlang \"ubersetzt und kommentiert von}% - {\lbx@sfromlang \"ubers\adddot\ und komm\adddot\ von}}, + {\lbx@sfromlang \"ubers\adddotspace und komm\adddotspace von}}, bytranslatoran = {{\lbx@lfromlang \"ubersetzt und erl\"autert von}% - {\lbx@sfromlang \"ubers\adddot\ und erl\"aut\adddot\ von}}, + {\lbx@sfromlang \"ubers\adddotspace und erl\"aut\adddotspace von}}, bytranslatorin = {{\lbx@lfromlang \"ubersetzt und mit einer Einleitung versehen von}% - {\lbx@sfromlang \"ubers\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, bytranslatorfo = {{\lbx@lfromlang \"ubersetzt und mit einem Vorwort versehen von}% - {\lbx@sfromlang \"ubers\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, bytranslatoraf = {{\lbx@lfromlang \"ubersetzt und mit einem Nachwort versehen von}% - {\lbx@sfromlang \"ubers\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, bytranslatorcoin = {{\lbx@lfromlang \"ubersetzt, kommentiert und mit einer Einleitung versehen von}% - {\lbx@sfromlang \"ubers., komm\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers., komm\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, bytranslatorcofo = {{\lbx@lfromlang \"ubersetzt, kommentiert und mit einem Vorwort versehen von}% - {\lbx@sfromlang \"ubers., komm\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers., komm\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, bytranslatorcoaf = {{\lbx@lfromlang \"ubersetzt, kommentiert und mit einem Nachwort versehen von}% - {\lbx@sfromlang \"ubers., komm\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers., komm\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, bytranslatoranin = {{\lbx@lfromlang \"ubersetzt, erl\"autert und mit einer Einleitung versehen von}% - {\lbx@sfromlang \"ubers., erl\"aut\adddot\ und mit einer Einl\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einer Einl\adddotspace vers\adddotspace von}}, bytranslatoranfo = {{\lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Vorwort versehen von}% - {\lbx@sfromlang \"ubers., erl\"aut\adddot\ und mit einem Vorw\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Vorw\adddotspace vers\adddotspace von}}, bytranslatoranaf = {{\lbx@lfromlang \"ubersetzt, erl\"autert und mit einem Nachwort versehen von}% - {\lbx@sfromlang \"ubers., erl\"aut\adddot\ und mit einem Nachw\adddot\ vers\adddot\ von}}, + {\lbx@sfromlang \"ubers., erl\"aut\adddotspace und mit einem Nachw\adddotspace vers\adddotspace von}}, and = {{und}{und}}, andothers = {{u.\,a\adddot}{u.\,a\adddot}}, andmore = {{u.\,a\adddot}{u.\,a\adddot}}, @@ -367,7 +371,7 @@ origpubin = {{zuerst publiziert in}{zuerst publ\adddotspace in}}, astitle = {{unter dem Titel}{unter dem Titel}}, bypublisher = {{von}{von}}, - nodate = {{ohne\space Datum}{{}o\adddot D\adddot}}, + nodate = {{ohne\space Datum}{{}o.\,D\adddot}}, page = {{Seite}{S\adddot}}, pages = {{Seiten}{S\adddot}}, column = {{Spalte}{Sp\adddot}}, @@ -417,7 +421,7 @@ prepublished = {{Vorver\"offentlichung}{Vorver\"offentlichung}}, citedas = {{im folgenden zitiert als}{im folgenden zit\adddotspace als}}, thiscite = {{hier}{hier}}, - seenote = {{siehe Anmerkung}{s\adddotspace Anm\adddot}}, + seenote = {{siehe Anmerkung}{s.~Anm\adddot}}, quotedin = {{zitiert nach}{zit\adddotspace nach}}, idem = {{derselbe}{ders\adddot}}, idemsf = {{dieselbe}{dies\adddot}}, @@ -435,7 +439,7 @@ sequentes = {{ff\adddot}{ff\adddot}}, passim = {{passim}{pass\adddot}}, see = {{siehe}{siehe}}, - seealso = {{siehe auch}{s.\,auch}}, + seealso = {{siehe auch}{s.~auch}}, backrefpage = {{siehe Seite}{siehe S\adddot}}, backrefpages = {{siehe Seiten}{siehe S\adddot}}, january = {{Januar}{Jan\adddot}}, @@ -470,14 +474,17 @@ langjapanese = {{Japanisch}{Japanisch}}, langlatin = {{Lateinisch}{Lateinisch}}, langlatvian = {{Lettisch}{Lettisch}}, + langlithuanian = {{Litauisch}{Litauisch}}, langnorwegian = {{Norwegisch}{Norwegisch}}, langpolish = {{Polnisch}{Polnisch}}, langportuguese = {{Portugiesisch}{Portugiesisch}}, langrussian = {{Russisch}{Russisch}}, + langserbian = {{Serbisch}{Serbisch}}, langslovak = {{Slowakisch}{Slowakisch}}, langslovene = {{Slowenisch}{Slowenisch}}, langspanish = {{Spanisch}{Spanisch}}, langswedish = {{Schwedisch}{Schwedisch}}, + langturkish = {{T\"urkisch}{T\"urkisch}}, langukrainian = {{Ukrainisch}{Ukrainisch}}, fromamerican = {{aus dem Amerikanischen}{aus dem Amerikanischen}}, frombrazilian = {{aus dem Brasilianischen}{aus dem Brasilianischen}}, @@ -499,14 +506,17 @@ fromjapanese = {{aus dem Japanischen}{aus dem Japanischen}}, fromlatin = {{aus dem Lateinischen}{aus dem Lateinischen}}, fromlatvian = {{aus dem Lettischen}{aus dem Lettischen}}, + fromlithuanian = {{aus dem Litauischen}{aus dem Litauischen}}, fromnorwegian = {{aus dem Norwegischen}{aus dem Norwegischen}}, frompolish = {{aus dem Polnischen}{aus dem Polnischen}}, fromportuguese = {{aus dem Portugiesischen}{aus dem Portugiesischen}}, fromrussian = {{aus dem Russischen}{aus dem Russischen}}, + fromserbian = {{aus dem Serbian}{aus dem Serbian}}, fromslovak = {{aus dem Slowakischen}{aus dem Slowakischen}}, fromslovene = {{aus dem Slowenischen}{aus dem Slowenischen}}, fromspanish = {{aus dem Spanischen}{aus dem Spanischen}}, fromswedish = {{aus dem Schwedischen}{aus dem Schwedischen}}, + fromturkish = {{aus dem T\"urkischen}{T\"urkischen}}, fromukrainian = {{aus dem Ukrainischen}{aus dem Ukrainischen}}, countryde = {{Deutschland}{DE}}, countryep = {{Europ\"aische Union}{EP}}, @@ -516,29 +526,29 @@ countryus = {{USA}{US}}, patent = {{Patent}{Pat\adddot}}, patentde = {{deutsches Patent}{dt\adddotspace Pat\adddot}}, - patenteu = {{europ\"aisches Patent}{europ\adddot\ Pat\adddot}}, - patentfr = {{franz\"osisches Patent}{frz\adddot\ Pat\adddot}}, - patentuk = {{britisches Patent}{brit\adddot\ Pat\adddot}}, + patenteu = {{europ\"aisches Patent}{europ\adddotspace Pat\adddot}}, + patentfr = {{franz\"osisches Patent}{frz\adddotspace Pat\adddot}}, + patentuk = {{britisches Patent}{brit\adddotspace Pat\adddot}}, patentus = {{US-Patent}{US-Pat\adddot}}, patreq = {{Patentanmeldung}{Patentanmeld\adddot}}, patreqde = {{deutsche Patentanmeldung}{dt\adddotspace Patentanmeld\adddot}}, - patreqeu = {{europ\"aische Patentanmeldung}{europ\adddot\ Patentanmeld\adddot}}, - patreqfr = {{franz\"osische Patentanmeldung}{frz\adddot\ Patentanmeld\adddot}}, - patrequk = {{britische Patentanmeldung}{brit\adddot\ Patentanmeld\adddot}}, + patreqeu = {{europ\"aische Patentanmeldung}{europ\adddotspace Patentanmeld\adddot}}, + patreqfr = {{franz\"osische Patentanmeldung}{frz\adddotspace Patentanmeld\adddot}}, + patrequk = {{britische Patentanmeldung}{brit\adddotspace Patentanmeld\adddot}}, patrequs = {{US-Patentanmeldung}{US-Patentanmeld\adddot}}, file = {{Datei}{Datei}}, library = {{Bibliothek}{Bibliothek}}, abstract = {{Zusammenfassung}{Zusammenfassung}}, annotation = {{Anmerkungen}{Anmerkungen}}, - commonera = {{unserer Zeitrechnung}{u\adddotspace Z\adddot}}, - beforecommonera = {{vor unserer Zeitrechnung}{v\adddotspace u\adddotspace Z\adddot}}, - annodomini = {{n\adddotspace Chr\adddot}{n\adddotspace Chr\adddot}}, - beforechrist = {{v\adddotspace Chr\adddot}{v\adddotspace Chr\adddot}}, + commonera = {{u.\,Z\adddot}{u.\,Z\adddot}}, + beforecommonera = {{v.\,u.\,Z\adddot}{v.\,u.\,Z\adddot}}, + annodomini = {{n.\,Chr\adddot}{n.\,Chr\adddot}}, + beforechrist = {{v.\,Chr\adddot}{v.\,Chr\adddot}}, circa = {{circa}{ca\adddot}}, - spring = {{Fr\"uhling}{Fr\adddot}}, - summer = {{Sommer}{So\adddot}}, - autumn = {{Herbst}{He\adddot}}, - winter = {{Winter}{Wi\adddot}}, + spring = {{Fr\"uhling}{Frühling}}, + summer = {{Sommer}{Sommer}}, + autumn = {{Herbst}{Herbst}}, + winter = {{Winter}{Winter}}, am = {{vorm\adddot}{vorm\adddot}}, pm = {{nachm\adddot}{nachm\adddot}}, } diff --git a/macros/latex/contrib/biblatex/latex/lbx/greek.lbx b/macros/latex/contrib/biblatex/latex/lbx/greek.lbx index 69f2fd708b..6d86ddc4a4 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/greek.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/greek.lbx @@ -15,7 +15,7 @@ {} {\PackageError{biblatex} {Greek requires UTF-8 support} - {The 'greek.lbx' file requires UTF-8 encoding but you + {The file 'greek.lbx' requires UTF-8 encoding but you seem\MessageBreak to be using a different encoding. This is a fatal error. I will\MessageBreak abort loading greek.lbx now.}% @@ -78,13 +78,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/icelandic.lbx b/macros/latex/contrib/biblatex/latex/lbx/icelandic.lbx index 0429de4e13..dc3ff3207a 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/icelandic.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/icelandic.lbx @@ -56,13 +56,17 @@ % \bibstring{bytranslator}% % }}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/italian.lbx b/macros/latex/contrib/biblatex/latex/lbx/italian.lbx index 07339b2653..b0469ad796 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/italian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/italian.lbx @@ -43,13 +43,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -280,7 +284,7 @@ newseries = {{nuova serie}{nuova ser\adddot}}, oldseries = {{vecchia serie}{vecchia ser\adddot}}, edition = {{edizione}{ed\adddot}}, - reprint = {{ristampa}{rist\adddotspace}}, + reprint = {{ristampa}{rist\adddot}}, reprintof = {{ristampa di}{rist\adddotspace di}}, % reprintas = {{}{}},% FIXME: missing % reprintfrom = {{}{}},% FIXME: missing diff --git a/macros/latex/contrib/biblatex/latex/lbx/latvian.lbx b/macros/latex/contrib/biblatex/latex/lbx/latvian.lbx index 33a95360cb..137e97e6dd 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/latvian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/latvian.lbx @@ -83,13 +83,17 @@ {} {\adddot}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -146,7 +150,7 @@ % this redefines \mkpageprefix to put the page number as suffix \savecommand\blx@mkpageprefix \protected\long\def\blx@mkpageprefix#1[#2]#3{% - \blx@mkpageprefix@i[#2]{#3}% + \blx@mkpageprefix@i[{#2}]{#3}% \ifnumeral{#3} {\ppspace\bibstring{#1}} {\ifnumerals{#3} @@ -716,7 +720,7 @@ \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\ifdateyearsequal{#2}{#2end} @@ -754,7 +758,7 @@ \blx@metadateinfo{#2}% \iffieldundef{#2year} {\blx@nounit} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\ifdateyearsequal{#2}{#2end} diff --git a/macros/latex/contrib/biblatex/latex/lbx/lithuanian.lbx b/macros/latex/contrib/biblatex/latex/lbx/lithuanian.lbx new file mode 100644 index 0000000000..60d5476076 --- /dev/null +++ b/macros/latex/contrib/biblatex/latex/lbx/lithuanian.lbx @@ -0,0 +1,838 @@ +\ProvidesFile{lithuanian.lbx} +[\abx@lbxid] + +\DeclareRedundantLanguages{lithuanian}{lithuanian} + +% This file requires UTF-8 support! + +\lbx@ifutfinput + {} + {\PackageError{biblatex} + {Lithuanian requires UTF-8 support} + {The file 'lithuanian.lbx' requires UTF-8 encoding but you + seem\MessageBreak to be using a different encoding. + This is a fatal error. I will\MessageBreak abort loading + russian.lbx now.}% + \endinput} + +\DeclareBibliographyExtras{% + \DeclareCapitalPunctuation{.:!?}% + \protected\def\bibrangedash{% + \textendash\penalty\hyphenpenalty}% breakable endash + \def\lbx@lt@bibdaterangeseplong{\space\textendash\space}% + \def\lbx@lt@bibnumdaterangeseplong{\textendash}% + \def\lbx@lt@bibdaterangesepshort{\textendash}% + \let\lbx@lt@bibnumdaterangesepshort\lbx@lt@bibdaterangesepshort + \savecommand\bibdatesep + \protected\def\bibdatesep{\nobreakspace}% + \let\finalandcomma=\empty + \let\finalandsemicolon=\empty + \undef\mkbibordinal + \protected\def\mkbibmascord#1{\stripzeros{#1}-as}% + \protected\def\mkbibfemord#1{\stripzeros{#1}-a}% + \undef\mkbibneutord + \savecommand\mkbibordedition + \savecommand\mkbibordseries + \def\mkbibordedition{\mkbibmascord}% + \def\mkbibordseries{\mkbibfemord}% + \savecommand\lbx@lfromlang + \savecommand\lbx@sfromlang + \def\lbx@lfromlang{% + \iflistundef{origlanguage} + {} + {\printlist[lfromoriglanguage]{origlanguage}\space}}% + \def\lbx@sfromlang{% + \iflistundef{origlanguage} + {} + {\printlist[sfromoriglanguage]{origlanguage}\space}}% + \let\lbx@lt@ifdayrange\@secondoftwo + \def\lbx@lt@ifdropdaystring{\lbx@lt@ifdayrange}% + \let\lbx@lt@ifmonthrange\@secondoftwo + \def\lbx@lt@ifdropmonthstring{\lbx@lt@ifmonthrange}% + \let\lbx@lt@ifyearrange\@secondoftwo + \def\lbx@lt@ifdropyearstring{\lbx@lt@ifyearrange}% + \protected\def\mkbibdatelong#1#2#3{% + \iffieldundef{#1} + {} + {\iffieldbibstring{#1} + {\bibstring{\thefield{#1}}} + {\dateeraprintpre{#1}% + \stripzeros{\thefield{#1}}% + \lbx@lt@ifdropyearstring + {} + {\addnbspace\bibstring{year}}}% + \iffieldundef{#2}{}{\addnbspace}}% + \iffieldundef{#2} + {} + {\lbx@lt@mkgenmonth{\thefield{#2}}% + \iffieldundef{#3} + {\lbx@lt@ifdropmonthstring + {} + {\addnbspace\bibstring{month}}} + {\addnbspace}}% + \iffieldundef{#3} + {} + {\stripzeros{\thefield{#3}}% + \lbx@lt@ifdropdaystring{}{\addnbspace\bibstring{day}}}% + }% + \protected\def\mkbibdateshort#1#2#3{% + \iffieldundef{#1} + {} + {\iffieldbibstring{#1} + {\bibstring{\thefield{#1}}} + {\dateeraprintpre{#1}% + \forcezerosy{\thefield{#1}}}}% + \iffieldundef{#2} + {} + {\iffieldundef{#1}{}{\bibdatesep}% + \forcezerosmdt{\thefield{#2}}}% + \iffieldundef{#3} + {} + {\iffieldundef{#2}{}{\bibdatesep}% + \forcezerosmdt{\thefield{#3}}}% + }% + \let\mkbibseasondatelong\mkbibseasondateshort + \savecommand\mkdaterangefull + \savecommand\mkdaterangefullextra + \savecommand\mkdaterangetrunc + \savecommand\mkdaterangetruncextra + \protected\def\mkdaterangefull{% + \lbx@lt@mkdaterangefull}% + \protected\def\mkdaterangefullextra{% + \lbx@lt@mkdaterangefullextra}% + \protected\def\mkdaterangetrunc{% + \lbx@lt@mkdaterangetrunc}% + \protected\def\mkdaterangetruncextra{% + \lbx@lt@mkdaterangetruncextra}% + \savecommand\bibtimesep + \protected\def\bibtimesep{.}% + \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% + \iffieldundef{#4}{} + {\bibtimezonesep + \mkbibtimezone{\thefield{#4}}}}% + \csletcs{mkbibtime12h}{mkbibtime24h}% + \protected\def\mkbibseasondateshort#1#2{% + \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}% + \iffieldundef{#1}{}{\addspace}% + \mkbibseason{\thefield{#2}}% + }% + \let\mkbibseasondatelong\mkbibseasondateshort +}% + +\UndeclareBibliographyExtras{% + \restorecommand\bibdatesep + \restorecommand\mkbibordedition + \restorecommand\mkbibordseries + \restorecommand\lbx@lfromlang + \restorecommand\lbx@sfromlang + \restorecommand\bibtimesep + \restorecommand\mkdaterangefull + \restorecommand\mkdaterangefullextra + \restorecommand\mkdaterangetrunc + \restorecommand\mkdaterangetruncextra +} + +\NewBibliographyString{% + genjanuary, + genfebruary, + genmarch, + genapril, + genmay, + genjune, + genjuly, + genaugust, + genseptember, + genoctober, + gennovember, + gendecember, + year, + month, + day, +} + +\DeclareBibliographyStrings{% + bibliography = {{Bibliografija}{Bibliografija}}, + references = {{Literatūros sąrašas}{Literatūra}}, + shorthands = {{Santrumpų sąrašas}{Santrumpos}}, + editor = {{sudarytojas}{sud\adddot}}, + editors = {{sudarytojai}{sud\adddot}}, + compiler = {{parengėjas}{pareng\adddot}},% FIXME: unsure + compilers = {{parengėjai}{pareng\adddot}},% FIXME: unsure + redactor = {{redaktorius}{red\adddot}}, + redactors = {{redaktoriai}{red\adddot}}, + reviser = {{korektorius}{kor\adddot}}, + revisers = {{korektoriai}{kor\adddot}}, + founder = {{pradininkas}{prad\adddot}},% FIXME: unsure + founders = {{pradininkai}{prad\adddot}},% FIXME: unsure + continuator = {{tęsėjas}{tęs\adddot}}, + continuators = {{tęsėjai}{tęs\adddot}}, + collaborator = {{bendradarbis}{bendr\adddot}}, + collaborators = {{bendradarbiai}{bendr\adddot}}, + translator = {{vertėjas}{vert\adddot}}, + translators = {{vertėjai}{vert\adddot}}, + commentator = {{komentarų autorius}{koment\adddotspace aut\adddot}}, + commentators = {{komentarų autoriai}{koment\adddotspace aut\adddot}}, + annotator = {{paaiškinimų autorius}{paaišk\adddotspace aut\adddot}}, + annotators = {{paaiškinimų autoriai}{paaišk\adddotspace aut\adddot}}, + commentary = {{komentarai}{koment\adddot}}, + annotations = {{paaiškinimai}{paaišk\adddot}}, + introduction = {{įvadas}{įv\adddot}}, + foreword = {{pratarmė}{prat\adddot}}, + afterword = {{pabaigos žodis}{pab\adddotspace žodis}}, + editortr = {{sudarytojas ir vertėjas}% + {sud\adddotspace ir vert\adddot}}, + editorstr = {{sudarytojai ir vertėjai}% + {sud\adddotspace ir vert\adddot}}, + editorco = {{sudarytojas ir komentarų autorius}% + {sud\adddotspace ir koment\adddotspace aut\adddot}}, + editorsco = {{sudarytojai ir komentarų autoriai}% + {sud\adddotspace ir koment\adddotspace aut\adddot}}, + editoran = {{sudarytojas ir paaiškinimų autorius}% + {sud\adddotspace ir paaišk\adddotspace aut\adddot}}, + editorsan = {{sudarytojai ir paaiškinimų autoriai}% + {sud\adddotspace ir paaišk\adddotspace aut\adddot}}, + editorin = {{sudarytojas ir įvado autorius}% + {sud\adddotspace ir įv\adddotspace aut\adddot}}, + editorsin = {{sudarytojai ir įvado autoriai}% + {sud\adddotspace ir įv\adddotspace aut\adddot}}, + editorfo = {{sudarytojas ir pratarmės autorius}% + {sud\adddotspace ir prat\adddotspace aut\adddot}}, + editorsfo = {{sudarytojai ir pratarmės autoriai}% + {sud\adddotspace ir prat\adddotspace aut\adddot}}, + editoraf = {{sudarytojas ir pabaigos žodžio autorius}% + {sud\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editorsaf = {{sudarytojai ir pabaigos žodžio autoriai}% + {sud\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editortrco = {{sudarytojas, vertėjas ir komentarų autorius}% + {sud., vert\adddotspace ir koment\adddotspace aut\adddot}}, + editorstrco = {{sudarytojai, vertėjai ir komentarų autoriai}% + {sud., vert\adddotspace ir koment\adddotspace aut\adddot}}, + editortran = {{sudarytojas, vertėjas ir paaiškinimų autorius}% + {sud., vert\adddotspace ir paaišk\adddotspace aut\adddot}}, + editorstran = {{sudarytojai, vertėjai ir paaiškinimų autoriai}% + {sud., vert\adddotspace ir paaišk\adddotspace aut\adddot}}, + editortrin = {{sudarytojas, vertėjas ir įvado autorius}% + {sud., vert\adddotspace ir įv\adddotspace aut\adddot}}, + editorstrin = {{sudarytojai, vertėjai ir įvado autoriai}% + {sud., vert\adddotspace ir įv\adddotspace aut\adddot}}, + editortrfo = {{sudarytojas, vertėjas ir pratarmės autorius}% + {sud., vert\adddotspace ir pratarmės\adddotspace aut\adddot}}, + editorstrfo = {{sudarytojai, vertėjai ir pratarmės autoriai}% + {sud., vert\adddotspace ir prat\adddotspace aut\adddot}}, + editortraf = {{sudarytojas, vertėjas ir pabaigos žodžio autorius}% + {sud., vert\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editorstraf = {{sudarytojai, vertėjai ir pabaigos žodžio autoriai}% + {sud., vert\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editorcoin = {{sudarytojas, komentarų ir įvado autorius}% + {sud., koment\adddotspace ir įv\adddotspace aut\adddot}}, + editorscoin = {{sudarytojai, komentarų ir įvado autoriai}% + {sud., koment\adddotspace ir įv\adddotspace aut\adddot}}, + editorcofo = {{sudarytojas, komentarų ir pratarmės autorius}% + {sud., koment\adddotspace ir prat\adddotspace aut\adddot}}, + editorscofo = {{sudarytojai, komentarų ir pratarmės autoriai}% + {sud., koment\adddotspace ir prat\adddotspace aut\adddot}}, + editorcoaf = {{sudarytojas, komentarų ir pabaigos žodžio autorius}% + {sud., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editorscoaf = {{sudarytojai, komentarų ir pabaigos žodžio autoriai}% + {sud., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editoranin = {{sudarytojas, paaiškinimų ir įvado autorius}% + {sud., paaišk\adddotspace ir įv\adddotspace aut\adddot}}, + editorsanin = {{sudarytojai, paaiškinimų ir įvado autoriai}% + {sud., paaišk\adddotspace ir įv\adddotspace aut\adddot}}, + editoranfo = {{sudarytojas, paaiškinimų ir pratarmės autorius}% + {sud., paaišk\adddotspace ir prat\adddotspace aut\adddot}}, + editorsanfo = {{sudarytojai, paaiškinimų ir pratarmės autoriai}% + {sud., paaišk\adddotspace ir prat\adddotspace aut\adddot}}, + editoranaf = {{sudarytojas, paaiškinimų ir pabaigos žodžio autorius}% + {sud., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editorsanaf = {{sudarytojai, paaiškinimų ir pabaigos žodžio autoriai}% + {sud., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editortrcoin = {{sudarytojas, vertėjas, komentarų ir įvado autorius}% + {sud., vert., koment\adddotspace ir įv\adddotspace aut\adddot}}, + editorstrcoin = {{sudarytojai, vertėjai, komentarų ir įvado autoriai}% + {sud., vert., koment\adddotspace ir įv\adddotspace aut\adddot}}, + editortrcofo = {{sudarytojas, vertėjas, komentarų ir pratarmės autorius}% + {sud., vert., koment\adddotspace ir prat\adddotspace aut\adddot}}, + editorstrcofo = {{sudarytojai, vertėjai, komentarų ir pratarmės autoriai}% + {sud., vert., koment\adddotspace ir prat\adddotspace aut\adddot}}, + editortrcoaf = {{sudarytojas, vertėjas, komentarų ir pabaigos žodžio autorius}% + {sud., vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editorstrcoaf = {{sudarytojai, vertėjai, komentarų ir pabaigos žodžio autoriai}% + {sud., vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editortranin = {{sudarytojas, vertėjas, paaiškinimų ir įvado autorius}% + {sud., vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}}, + editorstranin = {{sudarytojai, vertėjai, paaiškinimų ir įvado autoriai}% + {sud., vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}}, + editortranfo = {{sudarytojas, vertėjas, paaiškinimų ir pratarmės autorius}% + {sud., vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}}, + editorstranfo = {{sudarytojai, vertėjai, paaiškinimų ir pratarmės autoriai}% + {sud., vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}}, + editortranaf = {{sudarytojas, vertėjas, paaiškinimų ir pabaigos žodžio autorius}% + {sud., vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + editorstranaf = {{sudarytojai, vertėjai, paaiškinimų ir pabaigos žodžio autoriai}% + {sud., vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + translatorco = {{vertėjas ir komentarų autorius}% + {vert\adddotspace ir koment\adddotspace aut\adddot}}, + translatorsco = {{vertėjai ir komentarų autoriai}% + {vert\adddotspace ir koment\adddotspace aut\adddot}}, + translatoran = {{vertėjas ir paaiškinimų autorius}% + {vert\adddotspace ir paaišk\adddotspace aut\adddot}}, + translatorsan = {{vertėjai ir paaiškinimų autoriai}% + {vert\adddotspace ir paaišk\adddotspace aut\adddot}}, + translatorin = {{vertėjas ir įvado autorius}% + {vert\adddotspace ir įv\adddotspace aut\adddot}}, + translatorsin = {{vertėjai ir įvado autoriai}% + {vert\adddotspace ir įv\adddotspace aut\adddot}}, + translatorfo = {{vertėjas ir pratarmės autorius}% + {vert\adddotspace ir prat\adddotspace aut\adddot}}, + translatorsfo = {{vertėjai ir pratarmės autoriai}% + {vert\adddotspace ir prat\adddotspace aut\adddot}}, + translatoraf = {{vertėjas ir pabaigos žodžio autorius}% + {vert\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + translatorsaf = {{vertėjai ir pabaigos žodžio autoriai}% + {vert\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + translatorcoin = {{vertėjas, komentarų ir įvado autorius}% + {vert., koment\adddotspace ir įv\adddotspace aut\adddot}}, + translatorscoin = {{vertėjai, komentarų ir įvado autoriai}% + {vert., koment\adddotspace ir įv\adddotspace aut\adddot}}, + translatorcofo = {{vertėjas, komentarų ir pratarmės autorius}% + {vert., koment\adddotspace ir prat\adddotspace aut\adddot}}, + translatorscofo = {{vertėjai, komentarų ir pratarmės autoriai}% + {vert., koment\adddotspace ir prat\adddotspace aut\adddot}}, + translatorcoaf = {{vertėjas, komentarų ir pabaigos žodžio autorius}% + {vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + translatorscoaf = {{vertėjai, komentarų ir pabaigos žodžio autoriai}% + {vert., koment\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + translatoranin = {{vertėjas, paaiškinimų ir įvado autorius}% + {vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}}, + translatorsanin = {{vertėjai, paaiškinimų ir įvado autoriai}% + {vert., paaišk\adddotspace ir įv\adddotspace aut\adddot}}, + translatoranfo = {{vertėjas, paaiškinimų ir pratarmės autorius}% + {vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}}, + translatorsanfo = {{vertėjai, paaiškinimų ir pratarmės autoriai}% + {vert., paaišk\adddotspace ir prat\adddotspace aut\adddot}}, + translatoranaf = {{vertėjas, paaiškinimų ir pabaigos žodžio autorius}% + {vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + translatorsanaf = {{vertėjai, paaiškinimų ir pabaigos žodžio autoriai}% + {vert., paaišk\adddotspace ir pab\adddotspace žodžio aut\adddot}}, + organizer = {{organizatorius}{org\adddot}}, + organizers = {{organizatoriai}{org\adddot}}, + byorganizer = {{organizavo}{org\adddot}}, +% byauthor = {{}{}}, %or sukūrė, or parašė + byeditor = {{sudarė}{sud\adddotspace}}, + bycompiler = {{parengė}{pareng\adddotspace}}, + byredactor = {{redagavo}{red\adddotspace}}, + byreviser = {{tikrino}{tikr\adddotspace}}, + byreviewer = {{recenzavo}{rec\adddotspace}}, + byfounder = {{pradėjo}{prad\adddotspace}}, + bycontinuator = {{tęsė}{tęs\adddotspace}}, + bycollaborator = {{bendradarbiaujant su}{bendradarb\adddotspace su}},% FIXME: unsure + bytranslator = {{\lbx@lfromlang išvertė}{\lbx@sfromlang vert\adddot}}, + bycommentator = {{komentarus parengė}{koment\adddot}}, + byannotator = {{paaiškinimus parengė}{paaišk\adddot}}, + withcommentator = {{komentarų autorius}{koment\adddotspace aut\adddot}}, + withannotator = {{paaiškinimų autorius}{paaišk\adddotspace aut\adddot}}, + withintroduction = {{įvado autorius}{įv\adddotspace aut\adddot}}, + withforeword = {{pratarmės autorius}{prat\adddotspace aut\adddot}}, + withafterword = {{pabaigos žodžio autorius}{pab\adddotspace žodžio aut\adddot}}, + byeditortr = {{sudarė ir \lbx@lfromlang išvertė}% + {sud\adddotspace ir \lbx@sfromlang vert\adddot}}, + byeditorco = {{sudarė ir komentarus parengė}% + {sud\adddotspace ir koment\adddotspace parengė}}, + byeditoran = {{sudarė ir paaiškinimus parengė}% + {sud\adddotspace ir paaišk\adddotspace parengė}}, + byeditorin = {{sudarė ir įvadą parašė}% + {sud\adddotspace ir įv\adddotspace parašė}}, + byeditorfo = {{sudarė ir pratarmę parašė}% + {sud\adddotspace ir prat\adddotspace parašė}}, + byeditoraf = {{sudarė ir pabaigos žodį parašė}% + {sud\adddotspace ir pab\adddotspace žodį parašė}}, + byeditortrco = {{sudarė, \lbx@lfromlang išvertė ir komentarus parengė}% + {sud., \lbx@sfromlang vert\adddotspace ir koment\adddotspace parengė}}, + byeditortran = {{sudarė, \lbx@lfromlang išvertė ir paaiškinimus parengė}% + {sud., \lbx@sfromlang vert\adddotspace ir paaišk\adddotspace parengė}}, + byeditortrin = {{sudarė, \lbx@lfromlang išvertė ir įvadą parašė}% + {sud., \lbx@sfromlang vert\adddotspace ir įv\adddotspace parašė}}, + byeditortrfo = {{sudarė, \lbx@lfromlang išvertė ir pratarmę parašė}% + {sud., \lbx@sfromlang vert\adddotspace ir prat\adddotspace parašė}}, + byeditortraf = {{sudarė, \lbx@lfromlang išvertė ir pabaigos žodį parašė}% + {sud., \lbx@sfromlang vert\adddotspace ir pab\adddotspace žodį parašė}}, + byeditorcoin = {{sudarė, komentarus parengė ir įvadą parašė}% + {sud., koment\adddotspace ir įv\adddotspace parašė}}, + byeditorcofo = {{sudarė, komentarus parengė ir pratarmę parašė}% + {sud., koment\adddotspace ir prat\adddotspace parašė}}, + byeditorcoaf = {{sudarė, komentarus parengė ir pabaigos žodį parašė}% + {sud., koment\adddotspace ir pab\adddotspace žodį parašė}}, + byeditoranin = {{sudarė, paaiškinimus parengė ir įvadą parašė}% + {sud., paaišk\adddotspace ir įv\adddotspace parašė}}, + byeditoranfo = {{sudarė, paaiškinimus parengė ir pratarmę parašė}% + {sud., paaišk\adddotspace ir prat\adddotspace parašė}}, + byeditoranaf = {{sudarė, paaiškinimus parengė ir pabaigos žodį parašė}% + {sud., paaišk\adddotspace ir pab\adddotspace žodį parašė}}, + byeditortrcoin = {{sudarė, \lbx@lfromlang išvertė, komentarus parengė ir įvadą parašė}% + {sud., \lbx@sfromlang vert\adddot, koment\adddotspace ir įvad\adddotspace parašė}}, + byeditortrcofo = {{sudarė, \lbx@lfromlang išvertė, komentarus parengė ir pratarmę parašė}% + {sud., \lbx@sfromlang vert\adddot, koment\adddotspace ir prat\adddotspace parašė}}, + byeditortrcoaf = {{sudarė, \lbx@lfromlang išvertė, komentarus ir pabaigos žodį parašė}% + {sud., \lbx@sfromlang vert\adddot, koment\adddotspace ir pab\adddotspace žodį parašė}}, + byeditortranin = {{sudarė, \lbx@lfromlang išvertė, paaiškinimus parengė ir įvadą parašė}% + {sud., \lbx@sfromlang vert\adddot, paaišk\adddotspace ir pab\adddotspace žodį parašė}}, + byeditortranfo = {{sudarė, \lbx@lfromlang išvertė, paaiškinimus parengė ir pratarmę parašė}% + {sud., \lbx@sfromlang vert\adddot, paaišk\adddotspace ir prat\adddotspace parašė}}, + byeditortranaf = {{sudarė, \lbx@lfromlang išvertė, paaiškinimus parengė ir pabaigos žodį parašė}% + {sud., \lbx@sfromlang vert\adddot, paaišk\adddotspace ir pab\adddotspace žodį parašė}}, + bytranslatorco = {{\lbx@lfromlang išvertė ir komentarus parengė}% + {\lbx@sfromlang vert\adddotspace ir koment\adddotspace parengė}}, + bytranslatoran = {{\lbx@lfromlang išvertė ir paaiškinimus parengė}% + {\lbx@sfromlang vert\adddotspace ir paaišk\adddotspace parengė}}, + bytranslatorin = {{\lbx@lfromlang išvertė ir įvadą parašė}% + {\lbx@sfromlang vert\adddotspace ir įv\adddotspace parašė}}, + bytranslatorfo = {{\lbx@lfromlang išvertė ir pratarmę parašė}% + {\lbx@sfromlang vert\adddotspace ir prat\adddotspace parašė}}, + bytranslatoraf = {{\lbx@lfromlang išvertė ir pabaigos žodį parašė}% + {\lbx@sfromlang vert\adddotspace ir pab\adddotspace žodį parašė}}, + bytranslatorcoin = {{\lbx@lfromlang išvertė, komentarus parengė ir įvadą parašė}% + {\lbx@sfromlang vert\adddot, koment\adddotspace ir įv\adddotspace parašė}}, + bytranslatorcofo = {{\lbx@lfromlang išvertė, komentarus parengė ir pratarmę parašė}% + {\lbx@sfromlang vert\adddot, koment\adddotspace ir prat\adddotspace parašė}}, + bytranslatorcoaf = {{\lbx@lfromlang išvertė, komentarus parengė ir pabaigos žodį parašė}% + {\lbx@sfromlang vert\adddot, koment\adddotspace ir pab\adddotspace žodį parašė}}, + bytranslatoranin = {{\lbx@lfromlang išvertė, paaiškinimus parengė ir įvadą parašė}% + {\lbx@sfromlang vert\adddot, paaišk\adddotspace ir įv\adddotspace parašė}}, + bytranslatoranfo = {{\lbx@lfromlang išvertė, paaiškinimus parengė ir pratarmę parašė}% + {\lbx@sfromlang vert\adddot, paaišk\adddotspace ir prat\adddotspace parašė}}, + bytranslatoranaf = {{\lbx@lfromlang išvertė, paaiškinimus parengė ir pabaigos žodį parašė}% + {\lbx@sfromlang vert\adddot, paaišk\adddotspace ir pab\adddotspace žodį parašė}}, % + and = {{ir}{ir}}, + andothers = {{ir kiti}{ir kt\adddot}}, + andmore = {{ir taip toliau}{ir t\adddotspace t\adddot}}, + volume = {{tomas}{t\adddot}}, + volumes = {{tomai}{t\adddot}}, +% involumes = {{}{}}, + jourvol = {{tomas}{t\adddot}}, + jourser = {{serija}{ser\adddot}}, + book = {{knyga}{kn\adddot}}, + part = {{dalis}{d\adddot}}, + issue = {{numeris}{Nr.}}, + newseries = {{nauja serija}{nauj\adddotspace ser\adddot}}, + oldseries = {{sena serija}{sen\adddotspace ser\adddot}}, + edition = {{leidimas}{leid\adddot}}, + reprint = {{pakartotinis leidimas}{pakartot\adddotspace leid\adddot}}, + reprintof = {{pakartotinis leidimas}{pakartot\adddotspace leid\adddot}},% FIXME: unsure + reprintas = {{perspausdinta kaip}{perspausdinta kaip}}, + reprintfrom = {{perspausdinta iš}{perspausdinta iš}}, + reviewof = {{recenzija}{rec\adddotspace}}, + translationof = {{versta iš leidinio}{vert\adddotspace iš leid\adddot}}, + translationas = {{išversta kaip}{išversta kaip}}, + translationfrom = {{vertimas iš}{vert\adddotspace iš}}, + origpubas = {{originaliai publikuotas kaip}{orig\adddotspace publ\adddotspace kaip}}, + origpubin = {{originaliai publikuotas}{orig\adddotspace publ\adddotspace}}, + astitle = {{pavadinimu}{pavadinimu}},%or kaip + bypublisher = {{leidykloje}{leidykloje}},% FIXME: unsure + page = {{puslapis}{p\adddot}}, + pages = {{puslapiai}{p\adddot}}, + column = {{skiltis}{skilt\adddot}}, + columns = {{skiltys}{skilt\adddot}}, + line = {{eilutė}{eil\adddot}}, + lines = {{eilutės}{eil\adddot}}, + nodate = {{sine anno}{s\adddotspace a\adddot}}, + verse = {{eilutė}{eil\adddot}}, + verses = {{eilutės}{eil\adddot}}, + section = {{paragrafas}{paragr\adddot}}, + sections = {{paragrafai}{paragr\adddot}}, + paragraph = {{pastraipa}{pastr\adddot}}, + paragraphs = {{pastraipos}{pastr\adddot}}, + pagetotal = {{puslapis}{p\adddot}}, + pagetotals = {{puslapiai}{p\adddot}}, + columntotal = {{skiltis}{skilt\adddot}}, + columntotals = {{skiltys}{skilt\adddot}}, + linetotal = {{eilutė}{eil\adddot}}, + linetotals = {{eilutės}{eil\adddot}}, + versetotal = {{eilutė}{eil\adddot}}, + versetotals = {{eilutės}{eil\adddot}}, + sectiontotal = {{paragrafas}{paragr\adddot}}, + sectiontotals = {{paragrafai}{paragr\adddot}}, + paragraphtotal = {{pastraipa}{pastr\adddot}}, + paragraphtotals = {{pastraipos}{pastr\adddot}}, + in = {{in}{in}}, +% inseries = {{}{}},%or in + ofseries = {{iš}{iš}}, + number = {{numeris}{Nr\adddot}}, + chapter = {{skyrius}{sk\adddot}}, + bathesis = {{bakalauro darbas}{bak\adddotspace darb\adddot}}, + mathesis = {{magistro darbas}{mag\adddotspace darb\adddot}}, + phdthesis = {{disertacija}{disert\adddot}}, + candthesis = {{disertacija}{disert\adddot}}, + resreport = {{mokslinė ataskaita}{moksl\adddotspace atask\adddot}}, + techreport = {{techninė ataskaita}{techn\adddotspace atask\adddot}}, + software = {{programinė įranga}{PĮ}}, + datacd = {{CD-ROM}{CD-ROM}}, + audiocd = {{audio CD}{audio CD}}, + version = {{versija}{vers\adddot}}, + url = {{interaktyvus}{interaktyvus}}, + urlfrom = {{pasiekiamas per}{pasiekiamas per}}, + urlseen = {{tikrinta}{tikrinta}}, + inpreparation = {{rengiamas}{rengiamas}}, + submitted = {{pateiktas}{pateiktas}}, + forthcoming = {{pasirodysiantis}{pasirodysiantis}}, + inpress = {{spaudoje}{spaudoje}}, + prepublished = {{išankstinė publikacija}{išankstinė publ\adddot}}, + citedas = {{nuo šiol cituojamas kaip}{nuo šiol}}, + thiscite = {{čia}{čia}}, + seenote = {{žiūrėk nuorodą}{žr\adddotspace nuor\adddot}}, + quotedin = {{cituota}{cituota}}, + idem = {{tas pats}{t\adddotspace p\adddot}}, + idemsm = {{tas pats}{t\adddotspace p\adddot}}, + idemsf = {{ta pati}{t\adddotspace p\adddot}}, + idemsn = {{tas pats}{t\adddotspace p\adddot}}, + idempm = {{tie patys}{t\adddotspace p\adddot}}, + idempf = {{tos pačios}{t\adddotspace p\adddot}}, + idempn = {{tie patys}{t\adddotspace p\adddot}}, + idempp = {{tie patys}{t\adddotspace p\adddot}}, + ibidem = {{ten pat}{ten pat}}, + opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}}, + loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}}, + confer = {{palygink}{plg\adddot}}, + sequens = {{ir sekantis}{ir kt\adddot}}, + sequentes = {{ir sekantys}{ir kt\adddot}}, + passim = {{passim}{pass\adddot}}, + see = {{žiūrėk}{žr\adddot}}, + seealso = {{taip pat žiūrėk}{t\adddotspace p\adddotspace žr\adddot}}, + backrefpage = {{cituota puslapyje}{cit\adddotspace psl\adddot}}, + backrefpages = {{cituota puslapiuose}{cit\adddotspace psl\adddot}}, + january = {{sausis}{saus\adddot}}, + february = {{vasaris}{vas\adddot}}, + march = {{kovas}{kov\adddot}}, + april = {{balandis}{bal\adddot}}, + may = {{gegužė}{geg\adddot}}, + june = {{birželis}{birž\adddot}}, + july = {{liepa}{liepa}}, + august = {{rugpjūtis}{rugpj\adddot}}, + september = {{rugsėjis}{rugs\adddot}}, + october = {{spalis}{spal\adddot}}, + november = {{lapkritis}{lapkr\adddot}}, + december = {{gruodis}{gruod\adddot}}, + genjanuary = {{sausio}{saus\adddot}}, + genfebruary = {{vasario}{vas\adddot}}, + genmarch = {{kovo}{kov\adddot}}, + genapril = {{balandžio}{bal\adddot}}, + genmay = {{gegužės}{geg\adddot}}, + genjune = {{birželio}{birž\adddot}}, + genjuly = {{liepos}{liep\adddot}}, + genaugust = {{rugpjūčio}{rugpj\adddot}}, + genseptember = {{rugsėjo}{rugs\adddot}}, + genoctober = {{spalio}{spal\adddot}}, + gennovember = {{lapkričio}{lapkr\adddot}}, + gendecember = {{gruodžio}{gruod\adddot}}, + langamerican = {{amerikiečių kalba}{amer\adddotspace k\adddot}}, + langbrazilian = {{brazilų kalba}{braz\adddotspace k\adddot}}, + langbulgarian = {{bulgarų kalba}{bulgarų k\adddot}}, + langcatalan = {{katalonų kalba}{katalonų k\adddot}}, + langcroatian = {{kroatų kalba}{kroatų k\adddot}}, + langczech = {{čekų kalba}{čekų k\adddot}}, + langdanish = {{danų kalba}{danų k\adddot}}, + langdutch = {{olandų kalba}{olandų k\adddot}}, + langenglish = {{anglų kalba}{anglų k\adddot}}, + langestonian = {{estų kalba}{estų k\adddot}}, + langfinnish = {{suomių kalba}{suomių k\adddot}}, + langfrench = {{prancūzų kalba}{pranc\adddotspace k\adddot}}, + langgerman = {{vokiečių kalba}{vok\adddotspace k\adddot}}, + langgreek = {{graikų kalba}{graikų k\adddot}}, + langhungarian = {{vengrų kalba}{vengrų k\adddot}}, + langitalian = {{italų kalba}{it\adddotspace k\adddot}}, + langjapanese = {{japonų kalba}{japonų k\adddot}}, + langlatin = {{lotynų kalba}{lot\adddotspace k\adddot}}, + langlatvian = {{latvių kalba}{latv\adddotspace k\adddot}}, + langlithuanian = {{lietuvių kalba}{liet\adddotspace k\adddot}}, + langnorwegian = {{norvegų kalba}{norv\adddotspace k\adddot}}, + langpolish = {{lenkų kalba}{lenkų k\adddot}}, + langportuguese = {{portugalų kalba}{portug\adddotspace k\adddot}}, + langrussian = {{rusų kalba}{rusų k\adddot}}, + langserbian = {{serbų kalba}{serbų k\adddot}}, + langslovak = {{slovakų kalba}{slovakų k\adddot}}, + langslovene = {{slovėnų kalba}{slovėnų k\adddot}}, + langspanish = {{ispanų kalba}{isp\adddotspace k\adddot}}, + langswedish = {{švedų kalba}{švedų k\adddot}}, + langturkish = {{turkų kalba}{turkų k\adddot}}, + langukrainian = {{ukrainiečių kalba}{ukrain\adddotspace k\adddot}}, + fromamerican = {{iš amerikiečių kalbos}{iš amer\adddotspace k\adddot}}, + frombrazilian = {{iš brazilų kalbos}{iš braz\adddotspace k\adddot}}, + frombulgarian = {{iš bulgarų kalbos}{iš bulgarų k\adddot}}, + fromcatalan = {{iš katalonų kalbos}{iš katalonų k\adddot}}, + fromcroatian = {{iš kroatų kalbos}{iš kroatų k\adddot}}, + fromczech = {{iš čekų kalbos}{iš čekų k\adddot}}, + fromdanish = {{iš danų kalbos}{iš danų k\adddot}}, + fromdutch = {{iš olandų kalbos}{iš olandų k\adddot}}, + fromenglish = {{iš anglų kalbos}{iš anglų k\adddot}}, + fromestonian = {{iš estų kalbos}{iš estų k\adddot}}, + fromfinnish = {{iš suomių kalbos}{iš suomių k\adddot}}, + fromfrench = {{iš prancūzų kalbos}{iš pranc\adddotspace k\adddot}}, + fromgerman = {{iš vokiečių kalbos}{iš vok\adddotspace k\adddot}}, + fromgreek = {{iš graikų kalbos}{iš graikų k\adddot}}, + fromhungarian = {{iš vengrų kalbos}{iš vengrų k\adddot}}, + fromitalian = {{iš italų kalbos}{iš italų k\adddot}}, + fromjapanese = {{iš japonų kalbos}{iš japonų k\adddot}}, + fromlatin = {{iš lotynų kalbos}{iš lot\adddotspace k\adddot}}, + fromlatvian = {{iš latvių kalbos}{iš latvių k\adddot}}, + fromnorwegian = {{iš norvegų kalbos}{iš norv\adddotspace k\adddot}}, + frompolish = {{iš lenkų kalbos}{iš lenkų k\adddot}}, + fromportuguese = {{iš portugalų kalbos}{iš portug\adddotspace k\adddot}}, + fromrussian = {{iš rusų kalbos}{iš rusų k\adddot}}, + fromserbian = {{iš serbų kalbos}{iš serbų k\adddot}}, + fromslovak = {{iš slovakų kalbos}{iš slovakų k\adddot}}, + fromslovene = {{iš slovėnų kalbos}{iš slovėnų k\adddot}}, + fromspanish = {{iš ispanų kalbos}{iš isp\adddotspace k\adddot}}, + fromswedish = {{iš švedų kalbos}{iš švedų k\adddot}}, + fromturkish = {{iš turkų kalbos}{iš turkų k\adddot}}, + fromukrainian = {{iš ukrainiečių kalbos}{iš ukrain\adddotspace k\adddot}}, + countryde = {{Vokietija}{DE}}, + countryeu = {{Europos Sąjunga}{EU}}, + countryep = {{Europos Sąjunga}{EP}}, + countryfr = {{Prancūzija}{FR}}, + countryuk = {{Didžioji Britanija}{DB}}, + countryus = {{Jungtinės Amerikos Valstijos}{JAV}}, + patent = {{patentas}{pat\adddot}}, + patentde = {{vokiškas patentas}{vokiškas pat\adddot}}, + patenteu = {{europinis patentas}{europinis pat\adddot}}, + patentfr = {{prancūziškas patentas}{prancūziškas pat\adddot}}, + patentuk = {{angliškas patentas}{angliškas pat\adddot}}, + patentus = {{JAV\addspace patentas}{JAV\addspace pat\adddot}}, + patreq = {{patento prašymas}{pat\adddotspace praš\adddot}}, + patreqde = {{vokiško patento prašymas}{vokiško pat\adddotspace praš\adddot}}, + patreqeu = {{europinio patento prašymas}{europinio pat\adddotspace praš\adddot}}, + patreqfr = {{prancūziško patento prašymas}{prancūziško pat\adddotspace praš\adddot}}, + patrequk = {{angliško patento prašymas}{angliško pat\adddotspace praš\adddot}}, + patrequs = {{JAV\addspace patento prašymas}{JAV\addspace pat\adddot\ praš\adddot}}, + file = {{byla}{b\adddot}}, + library = {{biblioteka}{bibl\adddot}}, + abstract = {{santrauka}{santr\adddot}}, + annotation = {{paaiškinimas}{paaišk\adddot}}, + commonera = {{mūsų eros}{m\adddotspace e\adddot}}, + beforecommonera = {{prieš mūsų erą}{pr\adddotspace m\adddotspace e\adddot}}, + annodomini = {{po Kristaus gimimo}{po\space Kr\adddot}}, + beforechrist = {{prieš Kristaus giminimą}{pr\adddotspace Kr\adddot}}, + circa = {{apie}{apie}}, + spring = {{pavasaris}{pav\adddot}}, + summer = {{vasara}{vas\adddot}}, + autumn = {{ruduo}{ruduo}}, + winter = {{žiema}{žiema}}, +% am = {{}{}}, +% pm = {{}{}}, + year = {{m\adddot}{m\adddot}}, + month = {{mėn\adddot}{mėn\adddot}}, + day = {{d\adddot}{d\adddot}}, +} + + +\protected\gdef\lbx@lt@mkgenmonth#1{% + \ifcase0#1\relax + #1\BibliographyWarning{Month out of range}% + \or\abx@bibmonth{genjanuary}% + \or\abx@bibmonth{genfebruary}% + \or\abx@bibmonth{genmarch}% + \or\abx@bibmonth{genapril}% + \or\abx@bibmonth{genmay}% + \or\abx@bibmonth{genjune}% + \or\abx@bibmonth{genjuly}% + \or\abx@bibmonth{genaugust}% + \or\abx@bibmonth{genseptember}% + \or\abx@bibmonth{genoctober}% + \or\abx@bibmonth{gennovember}% + \or\abx@bibmonth{gendecember}% + \else + #1\BibliographyWarning{Month out of range}% + \fi}% + +\protected\gdef\lbx@lt@ifdayrange@i#1{% + \ifboolexpr{not test {\iffieldundef{#1endyear}} + and test {\iffieldsequal{#1year}{#1endyear}} + and test {\iffieldsequal{#1month}{#1endmonth}} + and (test {\iffieldundef{#1hour}} + or not togl {blx@#1dateusetime})}} + +\protected\gdef\lbx@lt@ifmonthrange@i#1{% + \ifboolexpr{not test {\iffieldundef{#1endyear}} + and test {\iffieldsequal{#1year}{#1endyear}} + and test {\iffieldundef{#1day}} + and test {\iffieldundef{#1endday}}}} + +\protected\gdef\lbx@lt@ifyearrange@i#1{% + \ifboolexpr{not test {\iffieldundef{#1endyear}} + and test {\iffieldundef{#1month}} + and test {\iffieldundef{#1endmonth}}}} + +\gdef\lbx@lt@ifdatenumrange{% + \lbx@lt@ifyearrange + {\@firstoftwo} + {\lbx@lt@ifdayrange}} + +\protected\gdef\lbx@lt@mkdaterangetrunc#1#2{% + \blx@if@printanytimes{#2} + {\mkdaterangefull{#1}{#2}} + {\lbx@lt@mkdaterangetrunc@i{#1}{#2}}} + +\protected\gdef\lbx@lt@mkdaterangetrunc@i#1#2{% + \begingroup + \blx@metadateinfo{#2}% + \edef\lbx@lt@ifdayrange{\lbx@lt@ifdayrange@i{#2}}% + \edef\lbx@lt@ifmonthrange{\lbx@lt@ifmonthrange@i{#2}}% + \edef\lbx@lt@ifyearrange{\lbx@lt@ifyearrange@i{#2}}% + \iffieldundef{#2year} + {} + {\printtext[{#2date}]{% + \datecircaprint + \iffieldundef{#2season} + {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}% + \blx@printtime{#2}{}}% + {\csuse{mkbibseasondate#1}{#2year}{#2season}}% + \dateeraprint{#2year}% + \dateuncertainprint + \iffieldundef{#2endyear} + {} + {\iffieldequalstr{#2endyear}{} + {\mbox{\csuse{lbx@lt@bibdaterangesep#1}}} + {\lbx@lt@ifdatenumrange + {\csuse{lbx@lt@bibnumdaterangesep#1}} + {\csuse{lbx@lt@bibdaterangesep#1}}% + \let\lbx@lt@ifdropdaystring\@secondoftwo + \let\lbx@lt@ifdropmonthstring\@secondoftwo + \let\lbx@lt@ifdropyearstring\@secondoftwo + \enddatecircaprint + \iffieldundef{#2season} + {\iffieldsequal{#2year}{#2endyear} + {\iffieldsequal{#2month}{#2endmonth} + {\csuse{mkbibdate#1}{}{}{#2endday}} + {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}} + {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}% + \blx@printtime{#2}{end}} + {\iffieldsequal{#2year}{#2endyear} + {\csuse{mkbibseasondate#1}{}{#2endseason}} + {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% + \enddateuncertainprint + \dateeraprint{#2endyear}}}}}% + \endgroup} + +\protected\gdef\lbx@lt@mkdaterangetruncextra#1#2{% + \blx@if@printanytimes{#2} + {\mkdaterangefullextra{#1}{#2}} + {\lbx@lt@mkdaterangetruncextra@i{#1}{#2}}} + +\protected\gdef\lbx@lt@mkdaterangetruncextra@i#1#2{% + \begingroup + \blx@metadateinfo{#2}% + \edef\lbx@lt@ifdayrange{\lbx@lt@ifdayrange@i{#2}}% + \edef\lbx@lt@ifmonthrange{\lbx@lt@ifmonthrange@i{#2}}% + \edef\lbx@lt@ifyearrange{\lbx@lt@ifyearrange@i{#2}}% + \iffieldundef{#2year} + {} + {\printtext[{#2date}]{% + \datecircaprint + \iffieldundef{#2season} + {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}% + \blx@printtime{#2}{}}% + {\csuse{mkbibseasondate#1}{#2year}{#2season}}% + \dateeraprint{#2year}% + \dateuncertainprint + \iffieldundef{#2endyear} + {\printfield{extradate}} + {\iffieldequalstr{#2endyear}{} + {\printfield{extradate}% + \mbox{\csuse{lbx@lt@bibdaterangesep#1}}} + {\lbx@lt@ifdatenumrange + {\csuse{lbx@lt@bibnumdaterangesep#1}} + {\csuse{lbx@lt@bibdaterangesep#1}}% + \let\lbx@lt@ifdropdaystring\@secondoftwo + \let\lbx@lt@ifdropmonthstring\@secondoftwo + \let\lbx@lt@ifdropyearstring\@secondoftwo + \enddatecircaprint + \iffieldundef{#2season} + {\iffieldsequal{#2year}{#2endyear} + {\iffieldsequal{#2month}{#2endmonth} + {\csuse{mkbibdate#1}{}{}{#2endday}} + {\csuse{mkbibdate#1}{}{#2endmonth}{#2endday}}} + {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}% + \blx@printtime{#2}{end}} + {\iffieldsequal{#2year}{#2endyear} + {\csuse{mkbibseasondate#1}{}{#2endseason}} + {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% + \printfield{extradate}% + \enddateuncertainprint + \dateeraprint{#2endyear}}}}}% + \endgroup} + +\protected\gdef\lbx@lt@mkdaterangefull#1#2{% + \begingroup + \blx@metadateinfo{#2}% + \iffieldundef{#2year} + {\blx@nounit} + {\printtext[{#2date}]{% + \datecircaprint + % Such a season component can only come from an ISO8601 season which replaces + % a normal month so if it exists, we know that a normal date print is ruled out + \iffieldundef{#2season} + {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}% + % Optionally print the time after the date + \blx@printtime{#2}{}} + {\csuse{mkbibseasondate#1}{#2year}{#2season}}% + \dateuncertainprint + \dateeraprint{#2year}% + \iffieldundef{#2endyear} + {} + {\iffieldequalstr{#2endyear}{} + {\mbox{\csuse{lbx@lt@bibdaterangesep#1}}} + {\csuse{lbx@lt@bibdaterangesep#1}% + \enddatecircaprint + \iffieldundef{#2endseason} + {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}% + % Optionally print the time after the date + \blx@printtime{#2}{end}} + {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}% + \enddateuncertainprint + \dateeraprint{#2endyear}}}}}% + \endgroup} + +\protected\gdef\lbx@lt@mkdaterangefullextra#1#2{% + \begingroup + \blx@metadateinfo{#2}% + \iffieldundef{#2year} + {\blx@nounit} + {\printtext[{#2date}]{% + \datecircaprint + % Such a season component can only come from an ISO8601 season which replaces + % a normal month so if it exists, we know that a normal date print is ruled out + \iffieldundef{#2season} + {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}% + % Optionally print the time after the date + \blx@printtime{#2}{}} + {\csuse{mkbibseasondate#1}{#2year}{#2season}}% + \dateuncertainprint + \dateeraprint{#2year}% + \iffieldundef{#2endyear} + {\printfield{extradate}} + {\iffieldequalstr{#2endyear}{} + {\printfield{extradate}% + \mbox{\csuse{lbx@lt@bibdaterangesep#1}}} + {\csuse{lbx@lt@bibdaterangesep#1}% + \enddatecircaprint + \iffieldundef{#2endseason} + {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}% + % Optionally print the time after the date + \blx@printtime{#2}{end}} + {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% + \printfield{extradate}% + \enddateuncertainprint + \dateeraprint{#2endyear}}}}% + \endgroup} + +\endinput diff --git a/macros/latex/contrib/biblatex/latex/lbx/magyar.lbx b/macros/latex/contrib/biblatex/latex/lbx/magyar.lbx index f94e50eaa8..73bfdebbea 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/magyar.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/magyar.lbx @@ -29,7 +29,8 @@ \protected\def\mkbibmascord{\mkbibordinal}% \protected\def\mkbibfemord{\mkbibordinal}% \protected\def\mkbibneutord{\mkbibordinal}% - \let\lbx@hu@dayrange\@secondoftwo + \let\lbx@hu@ifdayrange\@secondoftwo + \def\lbx@hu@ifplainday{\lbx@hu@ifdayrange}% \protected\def\mkbibdatelong#1#2#3{% \iffieldundef{#1} {} @@ -45,7 +46,7 @@ \iffieldundef{#3}{}{\nobreakspace}}% \iffieldundef{#3} {} - {\lbx@hu@dayrange{\thefield{#3}}{\mkbibordinal{\thefield{#3}}}}% + {\lbx@hu@ifplainday{\thefield{#3}}{\mkbibordinal{\thefield{#3}}}}% }% \protected\def\mkbibdateshort#1#2#3{% \iffieldundef{#1} @@ -62,7 +63,7 @@ \iffieldundef{#3}{}{\nobreakspace}}% \iffieldundef{#3} {} - {\mkdayzeros{\thefield{#3}}\lbx@hu@dayrange{}{\adddot}}% + {\mkdayzeros{\thefield{#3}}\lbx@hu@ifdayrange{}{\adddot}}% }% \let\mkbibseasondatelong\mkbibseasondateshort \savecommand\mkdaterangecomp @@ -77,21 +78,25 @@ \lbx@hu@mkdaterangetruncextra{long}}% \protected\def\mkdaterangeterseextra{% \lbx@hu@mkdaterangetruncextra{short}}% -\expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% \csletcs{mkbibtime12h}{mkbibtime24h}% \protected\def\mkbibseasondateshort#1#2{% \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}% - \iffieldundef{#1}{}{\adddot\space} + \iffieldundef{#1}{}{\adddot\space}% \mkbibseason{\thefield{#2}}% }% \let\mkbibseasondatelong\mkbibseasondateshort @@ -111,7 +116,7 @@ % this redefines \mkpageprefix to put the page number as suffix \savecommand\blx@mkpageprefix \protected\long\def\blx@mkpageprefix#1[#2]#3{% - \blx@mkpageprefix@i[#2]{#3}% + \blx@mkpageprefix@i[{#2}]{#3}% \ifnumeral{#3} {\ppspace\bibstring{#1}} {\ifnumerals{#3} @@ -139,12 +144,12 @@ \mkpageprefix[pagination][\lbx@hu@mkdottednormrange]{#1}}% \savefieldformat{chapter}% \DeclareFieldFormat{chapter}{% - \ifnumerals{#1}{\mkbibordinal{#1}}{#1} + \ifnumerals{#1}{\mkbibordinal{#1}}{#1}% \addnbspace \bibstring{chapter}}% \savefieldformat{volume}% \DeclareFieldFormat{volume}{% - \ifnumerals{#1}{\mkbibordinal{#1}}{#1} + \ifnumerals{#1}{\mkbibordinal{#1}}{#1}% \addnbspace \bibstring{volume}}% \savefieldformat{part}% @@ -160,7 +165,7 @@ \bibstring{part}}% \savefieldformat{version}% \DeclareFieldFormat{version}{% - \ifnumerals{#1}{\mkbibordinal{#1}}{#1} + \ifnumerals{#1}{\mkbibordinal{#1}}{#1}% \addnbspace \bibstring{version}}% } @@ -462,7 +467,7 @@ % translationfrom = {{}{}},% FIXME need example reviewof = {{recenzi\'oja}{rec\adddot}},% FIXME swap word order origpubas = {{eredeti c\'ime}{ered\adddotspace c\'im}}, - origpubin = {{eredeti kiad\'as}{ered\adddotspace kiad\adddotspace}}, + origpubin = {{eredeti kiad\'as}{ered\adddotspace kiad\adddot}}, % astitle = {{}{}},% FIXME need example % bypublisher = {{\addcomma}{\addcomma}},% FIXME: this is a cludge that can not be guaranteed to work in most situations, so it stays commented out nodate = {{\'ev n\'elk\"ul}{\'e\adddotspace n\adddot}}, @@ -641,7 +646,7 @@ pm = {{d\'elut\'an}{du\adddot}}, } -\protected\gdef\lbx@hu@dayrange@i#1{% +\protected\gdef\lbx@hu@ifdayrange@i#1{% \ifboolexpr{not test {\iffieldundef{#1endyear}} and test {\iffieldsequal{#1year}{#1endyear}} and test {\iffieldsequal{#1month}{#1endmonth}} @@ -656,10 +661,10 @@ \protected\gdef\lbx@hu@mkdaterangetrunc@i#1#2{% \begingroup \blx@metadateinfo{#2}% - \edef\lbx@hu@dayrange{\lbx@hu@dayrange@i{#2}}% + \edef\lbx@hu@ifdayrange{\lbx@hu@ifdayrange@i{#2}}% \iffieldundef{#2year} {} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}% @@ -671,8 +676,8 @@ {} {\iffieldequalstr{#2endyear}{} {\mbox{\bibdaterangesep}} - {\lbx@hu@dayrange{\bibrangedash}{\bibdaterangesep}% - \let\lbx@hu@dayrange\@secondoftwo + {\lbx@hu@ifdayrange{\bibrangedash}{\bibdaterangesep}% + \let\lbx@hu@ifplainday\@secondoftwo \enddatecircaprint \iffieldundef{#2season} {\iffieldsequal{#2year}{#2endyear} @@ -696,10 +701,10 @@ \protected\gdef\lbx@hu@mkdaterangetruncextra@i#1#2{% \begingroup \blx@metadateinfo{#2}% - \edef\lbx@hu@dayrange{\lbx@hu@dayrange@i{#2}}% + \edef\lbx@hu@ifdayrange{\lbx@hu@ifdayrange@i{#2}}% \iffieldundef{#2year} {} - {\printtext[#2date]{% + {\printtext[{#2date}]{% \datecircaprint \iffieldundef{#2season} {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}% @@ -712,8 +717,8 @@ {\iffieldequalstr{#2endyear}{} {\printfield{extradate}% \mbox{\bibdaterangesep}} - {\lbx@hu@dayrange{\bibrangedash}{\bibdaterangesep}% - \let\lbx@hu@dayrange\@secondoftwo + {\lbx@hu@ifdayrange{\bibrangedash}{\bibdaterangesep}% + \let\lbx@hu@ifplainday\@secondoftwo \enddatecircaprint \iffieldundef{#2season} {\iffieldsequal{#2year}{#2endyear} diff --git a/macros/latex/contrib/biblatex/latex/lbx/norsk.lbx b/macros/latex/contrib/biblatex/latex/lbx/norsk.lbx index c03ddca2da..76aa28fee6 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/norsk.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/norsk.lbx @@ -36,13 +36,17 @@ {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/polish.lbx b/macros/latex/contrib/biblatex/latex/lbx/polish.lbx index 7618a69ec5..50ae2383f4 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/polish.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/polish.lbx @@ -44,13 +44,17 @@ \def\mkbibordedition{\mkbibneutord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/portuguese.lbx b/macros/latex/contrib/biblatex/latex/lbx/portuguese.lbx index 3526b7968f..d408904515 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/portuguese.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/portuguese.lbx @@ -43,13 +43,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/russian.lbx b/macros/latex/contrib/biblatex/latex/lbx/russian.lbx index bc7817c546..7d2cf694b1 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/russian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/russian.lbx @@ -9,7 +9,7 @@ {} {\PackageError{biblatex} {Russian requires UTF-8 support} - {The 'russian.lbx' file requires UTF-8 encoding but you + {The file 'russian.lbx' requires UTF-8 encoding but you seem\MessageBreak to be using a different encoding. This is a fatal error. I will\MessageBreak abort loading russian.lbx now.}% @@ -70,13 +70,17 @@ \def\mkbibordedition{\mkbibneutord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/serbian.lbx b/macros/latex/contrib/biblatex/latex/lbx/serbian.lbx new file mode 100644 index 0000000000..52faffd931 --- /dev/null +++ b/macros/latex/contrib/biblatex/latex/lbx/serbian.lbx @@ -0,0 +1,440 @@ +\ProvidesFile{serbian.lbx} +[\abx@lbxid] + +% Translator's notes: +% +% This file is generated from a template and YAML localization string +% collection by a script +% You can said files at https://gitlab.com/andrejr/biblatex-serbian. +% Please don't modify this file by hand -- contribute your changes upstream and +% then send a pull request with the generated file to the official biblatex +% repo (https://github.com/plk/biblatex). +% +% This is done so we could generate both `serbian.lbx` (Latin) and +% `serbianc.lbx` (Cyrillic) from the same set of localization strings. + + +\DeclareRedundantLanguages{serbian}{serbian} + +\DeclareBibliographyExtras{% + \protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}% + \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}% + \protected\def\mkbibmascord{\mkbibordinal}% + \protected\def\mkbibfemord{\mkbibordinal}% + \protected\def\mkbibneutord{\mkbibordinal}% + \protected\def\bibtimesep{.}% + %\savecommand\mkbibordedition + %\savecommand\mkbibordseries + \def\mkbibordedition{\mkbibordinal}% + \def\mkbibordseries{\mkbibfemord}% + \protected\def\mkbibdatelong#1#2#3{% + % day field + \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}% if day exists, display + \iffieldundef{#2}{}{\nobreakspace}}% space before month if month exists + % month field + \iffieldundef{#2}{}{\mkbibmonth{\thefield{#2}}% + \iffieldundef{#1}{}{\space}}% space before year if year exists + % year field + \iffieldbibstring{#1}% year + {\bibstring{\thefield{#1}}}% + {\dateeraprintpre{#1}\mkbibordinal{\thefield{#1}}}}% + \protected\def\mkbibdateshort#1#2#3{% + \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}% + \iffieldundef{#2}{}{\addnbspace}}% + \iffieldundef{#2}{}{\mkbibordinal{\thefield{#2}}% + \iffieldundef{#1}{}{\addnbspace}}% + \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}% + {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}}% + \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% + \iffieldundef{#4}{} + {\bibtimezonesep + \mkbibtimezone{\thefield{#4}}}}% + \expandafter\protected\expandafter\def\csname mkbibtime12h% + \endcsname#1#2#3#4{% + \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep% + \forcezerosmdt{\thefield{#2}}% + \iffieldundef{#3}{} + {\bibtimesep% + \forcezerosmdt{\thefield{#3}}}% + \space + \ifnumless{\thefield{#1}}{12} + {\bibstring{am}} + {\bibstring{pm}}% + \iffieldundef{#4}{} + {\space\bibtimezonesep% + \parentext{\mkbibtimezone{\thefield{#4}}}}}% + \protected\def\mkbibseasondateshort#1#2{% + \mkbibseason{\thefield{#2}}% + \iffieldundef{#1}{}{\space}% + \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}% + \protected\def\mkbibseasondatelong#1#2{% + \mkbibseason{\thefield{#2}}% + \iffieldundef{#1}{}{\space}% + \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}% +} + +\DeclareBibliographyStrings{% + abstract = {{apstrakt}{apstrakt}}, + afterword = {{pogovor}{pogovor}}, + am = {{AM}{AM}}, + and = {{i}{i}}, + andmore = {{i drugi}{i\addabbrvspace dr\adddot}}, + andothers = {{i drugi}{i\addabbrvspace dr\adddot}}, + annodomini = {{posle Hrista}{p\adddotspace Hr\adddot}}, + annotation = {{bele\v ska}{bel\adddot}}, + annotations = {{bele\v ske}{bel\adddot}}, + annotator = {{autor bele\v zaka}{aut\adddot\ bel\adddot}}, + annotators = {{autori bele\v zaka}{aut\adddot\ bel\adddot}}, + april = {{april}{apr\adddot}}, + astitle = {{pod naslovom}{pod naslovom}}, + audiocd = {{audio CD}{audio CD}}, + august = {{avgust}{avg\adddot}}, + autumn = {{jesen}{jesen}}, + backrefpage = {{citirano na stranici}{cit\adddot\ na str\adddot}}, + backrefpages = {{citirano na stranicama}{cit\adddot\ na str\adddot}}, + bathesis = {{ba\v celor rad}{BA\addabbrvspace rad}}, + beforechrist = {{pre Hrista}{pr\adddotspace Hr\adddot}}, + beforecommonera = {{pre nove ere}{pre\addabbrvspace n\adddotspace e\adddot}}, + bibliography = {{Bibliografija}{Bibliografija}}, + book = {{knjiga}{knj\adddot}}, + byannotator = {{autor bele\v zaka}{autor bele\v zaka}}, + byauthor = {{autor}{autor}}, + bycollaborator = {{u saradnji sa}{u saradnji sa}}, + bycommentator = {{komentar}{komentar}}, + bycompiler = {{odabir}{odabir}}, + bycontinuator = {{autor nastavka}{autor nastavka}}, + byeditor = {{urednik}{urednik}}, + byeditoraf = {{obrada i pogovor}{obrada i pogovor}}, + byeditoran = {{obrada i bele\v ske}{obrada i bele\v ske}}, + byeditoranaf = {{obrada, bele\v ske i pogovor}{obrada, bele\v ske i pogovor}}, + byeditoranfo = {{obrada, bele\v ske i predgovor}{obrada, bele\v ske i predgovor}}, + byeditoranin = {{obrada, bele\v ske i uvod}{obrada, bele\v ske i uvod}}, + byeditorco = {{obrada i komentar}{obrada i komentar}}, + byeditorcoaf = {{obrada, komentar i pogovor}{obrada, komentar i pogovor}}, + byeditorcofo = {{obrada, komentar i predgovor}{obrada, komentar i predgovor}}, + byeditorcoin = {{obrada, komentar i uvod}{obrada, komentar i uvod}}, + byeditorfo = {{obrada i predgovor}{obrada i predgovor}}, + byeditorin = {{obrada i uvod}{obrada i uvod}}, + byeditortr = {{obrada i prevod}{obrada i prevod}}, + byeditortraf = {{obrada, prevod i pogovor}{obrada, prevod i pogovor}}, + byeditortran = {{obrada, prevod i bele\v ske}{obrada, prevod i bele\v ske}}, + byeditortranaf = {{obrada, prevod, bele\v ske i pogovor}{obrada, prevod, bele\v ske i pogovor}}, + byeditortranfo = {{obrada, prevod, bele\v ske i predgovor}{obrada, prevod, bele\v ske i predgovor}}, + byeditortranin = {{obrada, prevod, bele\v ske i uvod}{obrada, prevod, bele\v ske i uvod}}, + byeditortrco = {{obrada, prevod i komentar}{obrada, prevod i komentar}}, + byeditortrcoaf = {{obrada, prevod, komentar i pogovor}{obrada, prevod, komentar i pogovor}}, + byeditortrcofo = {{obrada, prevod, komentar i predgovor}{obrada, prevod, komentar i predgovor}}, + byeditortrcoin = {{obrada, prevod, komentar i uvod}{obrada, prevod, komentar i uvod}}, + byeditortrfo = {{obrada, prevod i predgovor}{obrada, prevod i predgovor}}, + byeditortrin = {{obrada, prevod i uvod}{obrada, prevod i uvod}}, + byfounder = {{osniva\v c}{osniva\v c}}, + byorganizer = {{organizator}{organizator}}, + bypublisher = {{izdava\v c}{izdava\v c}}, + byredactor = {{redaktor}{redaktor}}, + byreviewer = {{recenzent}{recenzent}}, + byreviser = {{korektor}{korektor}}, + bytranslator = {{prevod}{prevod}}, + bytranslatoraf = {{prevod i pogovor}{prevod i pogovor}}, + bytranslatoran = {{prevod i bele\v ske}{prevod i bele\v ske}}, + bytranslatoranaf = {{prevod, bele\v ske i pogovor}{prevod, bele\v ske i pogovor}}, + bytranslatoranfo = {{prevod, bele\v ske i predgovor}{prevod, bele\v ske i predgovor}}, + bytranslatoranin = {{prevod, bele\v ske i uvod}{prevod, bele\v ske i uvod}}, + bytranslatorco = {{prevod i komentar}{prevod i komentar}}, + bytranslatorcoaf = {{prevod, komentar i pogovor}{prevod, komentar i pogovor}}, + bytranslatorcofo = {{prevod, komentar i predgovor}{prevod, komentar i predgovor}}, + bytranslatorcoin = {{prevod, komentar i uvod}{prevod, komentar i uvod}}, + bytranslatorfo = {{prevod i predgovor}{prevod i predgovor}}, + bytranslatorin = {{prevod i uvod}{prevod i uvod}}, + candthesis = {{kandidatski rad}{kandidatski rad}}, + chapter = {{glava}{glava}}, + circa = {{cirka}{cca}}, + citedas = {{citirano kao}{cit\adddotspace kao}}, + collaborator = {{saradnik}{sar\adddot}}, + collaborators = {{saradnici}{sar\adddot}}, + column = {{stupac}{stupac}}, + columns = {{stupci}{stupci}}, + columntotal = {{stupac}{stupac}}, + columntotals = {{stupci}{stupci}}, + commentary = {{komentar}{kom\adddot}}, + commentator = {{komentator}{kom\adddot}}, + commentators = {{komentatori}{kom\adddot}}, + commonera = {{nove ere}{n.\addnbspace e\adddot}}, + compiler = {{prire\dj iva\v c}{prire\dj iva\v c}}, + compilers = {{priredili}{priredili}}, + confer = {{cf\adddot}{cf\adddot}}, + continuator = {{nastavlja\v c}{nast\adddot}}, + continuators = {{nastavlja\v ci}{nast\adddot}}, + countryde = {{Nema\v cka}{DE}}, + countryep = {{Evropska unija}{EP}}, + countryeu = {{Evropska unija}{EU}}, + countryfr = {{Francuska}{FR}}, + countryuk = {{Velika Britanija}{GB}}, + countryus = {{Sjedinjene Ameri\v cke Dr\v zave}{SAD}}, + datacd = {{CD-ROM}{CD-ROM}}, + december = {{decembar}{dec\adddot}}, + edition = {{izdanje}{izdanje}}, + editor = {{urednik}{ur\adddot}}, + editoraf = {{urednik i autor pogovora}{urednik i autor pogovora}}, + editoran = {{urednik i autor bele\v zaka}{urednik i autor bele\v zaka}}, + editoranaf = {{urednik, autor bele\v zaka i autor pogovora}{urednik, autor bele\v zaka i autor pogovora}}, + editoranfo = {{urednik, autor bele\v zaka i autor predgovora}{urednik, autor bele\v zaka i autor predgovora}}, + editoranin = {{urednik, autor bele\v zaka i autor uvoda}{urednik, autor bele\v zaka i autor uvoda}}, + editorco = {{urednik i komentator}{urednik i komentator}}, + editorcoaf = {{urednik, komentator i autor pogovora}{urednik, komentator i autor pogovora}}, + editorcofo = {{urednik, komentator i autor predgovora}{urednik, komentator i autor predgovora}}, + editorcoin = {{urednik, komentator i autor uvoda}{urednik, komentator i autor uvoda}}, + editorfo = {{urednik i autor predgovora}{urednik i autor predgovora}}, + editorin = {{urednik i autor uvoda}{urednik i autor uvoda}}, + editors = {{urednici}{urednici}}, + editorsaf = {{urednici i pisci pogovora}{urednici i pisci pogovora}}, + editorsan = {{urednici i autori bele\v zaka}{urednici i autori bele\v zaka}}, + editorsanaf = {{urednici, autori bele\v zaka i autori pogovora}{urednici, autori bele\v zaka i autori pogovora}}, + editorsanfo = {{urednici, autori bele\v zaka i autori predgovora}{urednici, autori bele\v zaka i autori predgovora}}, + editorsanin = {{urednici, autori bele\v zaka i autori uvoda}{urednici, autori bele\v zaka i autori uvoda}}, + editorsco = {{urednici i komentatori}{urednici i komentatori}}, + editorscoaf = {{urednici, komentatori i pisci pogovora}{urednici, komentatori i pisci pogovora}}, + editorscofo = {{urednici, komentatori i autori predgovora}{urednici, komentatori i autori predgovora}}, + editorscoin = {{urednici, komentatori i autori uvoda}{urednici, komentatori i autori uvoda}}, + editorsfo = {{urednici i pisci predgovora}{urednici i pisci predgovora}}, + editorsin = {{urednici i autori uvoda}{urednici i autori uvoda}}, + editorstr = {{urednici i prevodioci}{urednici i prevodioci}}, + editorstraf = {{urednici, prevodioci i autori pogovora}{urednici, prevodioci i autori pogovora}}, + editorstran = {{urednici, prevodioci i autori bele\v zaka}{urednici, prevodioci i autori bele\v zaka}}, + editorstranaf = {{urednici, prevodioci, autori bele\v zaka i pisci pogovora}{urednici, prevodioci, autori bele\v zaka i pisci pogovora}}, + editorstranfo = {{urednici, prevodioci, autori bele\v zaka i autori predgovora}{urednici, prevodioci, autori bele\v zaka i autori predgovora}}, + editorstranin = {{urednici, prevodioci, autori bele\v zaka i autori uvoda}{urednici, prevodioci, autori bele\v zaka i autori uvoda}}, + editorstrco = {{urednici, prevodioci i komentatori}{urednici, prevodioci i komentatori}}, + editorstrcoaf = {{urednici, prevodioci, komentatori i pisci pogovora}{urednici, prevodioci, komentatori i pisci pogovora}}, + editorstrcofo = {{urednici, prevodioci, komentatori i autori predgovora}{urednici, prevodioci, komentatori i autori predgovora}}, + editorstrcoin = {{urednici, prevodioci, komentatori i autori uvoda}{urednici, prevodioci, komentatori i autori uvoda}}, + editorstrfo = {{urednici, prevodioci i autori predgovora}{urednici, prevodioci i autori predgovora}}, + editorstrin = {{urednici, prevodioci i autori uvoda}{urednici, prevodioci i autori uvoda}}, + editortr = {{urednik i prevodilac}{urednik i prevodilac}}, + editortraf = {{urednik, prevodilac i autor pogovora}{urednik, prevodilac i autor pogovora}}, + editortran = {{urednik, prevodilac i autor bele\v zaka}{urednik, prevodilac i autor bele\v zaka}}, + editortranaf = {{urednik, prevodilac, autor bele\v zaka i autor pogovora}{urednik, prevodilac, autor bele\v zaka i autor pogovora}}, + editortranfo = {{urednik, prevodilac, autor bele\v zaka i autor predgovora}{urednik, prevodilac, autor bele\v zaka i autor predgovora}}, + editortranin = {{urednik, prevodilac, autor bele\v zaka i autor uvoda}{urednik, prevodilac, autor bele\v zaka i autor uvoda}}, + editortrco = {{urednik, prevodilac i komentator}{urednik, prevodilac i komentator}}, + editortrcoaf = {{urednik, prevodilac, komentator i autor pogovora}{urednik, prevodilac, komentator i autor pogovora}}, + editortrcofo = {{urednik, prevodilac, komentator i autor predgovora}{urednik, prevodilac, komentator i autor predgovora}}, + editortrcoin = {{urednik, prevodilac, komentator i autor uvoda}{urednik, prevodilac, komentator i autor uvoda}}, + editortrfo = {{urednik, prevodilac i autor predgovora}{urednik, prevodilac i autor predgovora}}, + editortrin = {{urednik, prevodilac i autor uvoda}{urednik, prevodilac i autor uvoda}}, + february = {{februar}{feb\adddot}}, + file = {{datoteka}{datoteka}}, + foreword = {{predgovor}{predgovor}}, + forthcoming = {{dolaze\'ce}{dolaze\'ce}}, + founder = {{osniva\v c}{osn\adddot}}, + founders = {{osniva\v ci}{osn\adddot}}, + fromamerican = {{sa ameri\v ckog}{sa ameri\v ckog}}, + frombrazilian = {{sa brazilskog}{sa brazilskog}}, + frombulgarian = {{sa bugarskog}{sa bugarskog}}, + fromcatalan = {{sa katalonskog}{sa katalonskog}}, + fromcroatian = {{sa hrvatskog}{sa hrvatskog}}, + fromczech = {{sa \v ce\v skog}{sa \v ce\v skog}}, + fromdanish = {{sa danskog}{sa danskog}}, + fromdutch = {{sa holandskog}{sa holandskog}}, + fromenglish = {{sa engleskog}{sa engleskog}}, + fromestonian = {{sa estonskog}{sa estonskog}}, + fromfinnish = {{sa finskog}{sa finskog}}, + fromfrench = {{sa francuskog}{sa francuskog}}, + fromgalician = {{sa galicijskog}{sa galicijskog}}, + fromgerman = {{sa nema\v ckog}{sa nema\v ckog}}, + fromgreek = {{sa gr\v ckog}{sa gr\v ckog}}, + fromhungarian = {{sa ma\dj arskog}{sa ma\dj arskog}}, + fromitalian = {{sa italijanskog}{sa italijanskog}}, + fromjapanese = {{sa japanskog}{sa japanskog}}, + fromlatin = {{sa latinskog}{sa latinskog}}, + fromlatvian = {{sa letonskog}{sa letonskog}}, + fromnorwegian = {{sa norve\v skog}{sa norve\v skog}}, + frompolish = {{sa poljskog}{sa poljskog}}, + fromportuguese = {{sa portugalskog}{sa portugalskog}}, + fromrussian = {{sa ruskog}{sa ruskog}}, + fromslovak = {{sa slova\v ckog}{sa slova\v ckog}}, + fromslovene = {{sa slovena\v ckog}{sa slovena\v ckog}}, + fromspanish = {{sa \v spanskog}{sa \v spanskog}}, + fromswedish = {{sa \v svedskog}{sa \v svedskog}}, + fromukrainian = {{sa ukrajinskog}{sa ukrajinskog}}, + ibidem = {{ibidem}{ibid\adddot}}, + idem = {{idem}{idem}}, + idempf = {{eaedem}{eaedem}}, + idempm = {{eidem}{eidem}}, + idempn = {{eadem}{eadem}}, + idempp = {{eidem}{eidem}}, + idemsf = {{eadem}{eadem}}, + idemsm = {{idem}{idem}}, + idemsn = {{idem}{idem}}, + in = {{u}{u}}, + inpreparation = {{u pripremi}{u pripremi}}, + inpress = {{u \v stampi}{u \v stampi}}, + inseries = {{u}{u}}, + introduction = {{uvod}{uv\adddot}}, + involumes = {{u}{u}}, + issue = {{izdanje}{izdanje}}, + january = {{januar}{jan\adddot}}, + jourser = {{serija}{ser\adddot}}, + jourvol = {{sveska}{sv\adddot}}, + july = {{jul}{jul}}, + june = {{jun}{jun}}, + langamerican = {{ameri\v cki}{ameri\v cki}}, + langbrazilian = {{brazilski}{brazilski}}, + langbulgarian = {{bugarski}{bugarski}}, + langcatalan = {{katalanski}{katalanski}}, + langcroatian = {{hrvatski}{hrvatski}}, + langczech = {{\v ce\v ski}{\v ce\v ski}}, + langdanish = {{danski}{danski}}, + langdutch = {{holandski}{holandski}}, + langenglish = {{engleski}{engleski}}, + langestonian = {{estonski}{estonski}}, + langfinnish = {{finski}{finski}}, + langfrench = {{francuski}{francuski}}, + langgalician = {{galicijski}{galicijski}}, + langgerman = {{nema\v cki}{nema\v cki}}, + langgreek = {{gr\v cki}{gr\v cki}}, + langhungarian = {{ma\dj arski}{ma\dj arski}}, + langitalian = {{italijanski}{italijanski}}, + langjapanese = {{japanski}{japanski}}, + langlatin = {{latinski}{latinski}}, + langlatvian = {{letonski}{letonski}}, + langnorwegian = {{norve\v ski}{norve\v ski}}, + langpolish = {{poljski}{poljski}}, + langportuguese = {{portugalski}{portugalski}}, + langrussian = {{ruski}{ruski}}, + langslovak = {{slova\v cki}{slova\v cki}}, + langslovene = {{slovena\v cki}{slovena\v cki}}, + langspanish = {{\v spanski}{\v spanski}}, + langswedish = {{\v svedski}{\v svedski}}, + langukrainian = {{ukrajinski}{ukrajinski}}, + library = {{biblioteka}{biblioteka}}, + line = {{red}{r\adddot}}, + lines = {{redovi}{r\adddot}}, + linetotal = {{red}{r\adddot}}, + linetotals = {{redovi}{r\adddot}}, + loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}}, + march = {{mart}{mar\adddot}}, + mathesis = {{master rad}{master rad}}, + may = {{maj}{maj}}, + newseries = {{nova serija}{nova serija}}, + nodate = {{bez datuma}{bez datuma}}, + november = {{novembar}{nov\adddot}}, + number = {{broj}{br\adddot}}, + october = {{oktobar}{okt\adddot}}, + ofseries = {{serija}{ser\adddot}}, + oldseries = {{stara serija}{stara serija}}, + opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}}, + organizer = {{organizator}{org\adddot}}, + organizers = {{organizatori}{org\adddot}}, + origpubas = {{originalno izdato kao}{originalno izdato kao}}, + origpubin = {{originalno izdato}{originalno izdato}}, + page = {{strana}{str\adddot}}, + pages = {{strane}{str\adddot}}, + pagetotal = {{strana}{str\adddot}}, + pagetotals = {{strane}{str\adddot}}, + paragraph = {{pasus}{pas\adddot}}, + paragraphs = {{pasusi}{pas\adddot}}, + paragraphtotal = {{pasus}{pas\adddot}}, + paragraphtotals = {{pasusi}{pas\adddot}}, + part = {{deo}{deo}}, + passim = {{passim}{pass\adddot}}, + patent = {{patent}{pat\adddot}}, + patentde = {{nema\v cki patent}{nem\adddot\ pat\adddot}}, + patenteu = {{evropski patent}{evr\adddot\ pat\adddot}}, + patentfr = {{francuski patent}{franc\adddot\ pat\adddot}}, + patentuk = {{britanski patent}{brit\adddot\ pat\adddot}}, + patentus = {{SAD patent}{SAD pat\adddot}}, + patreq = {{zahtev za patent}{zahtev za patent}}, + patreqde = {{nema\v cki zahtev za patent}{nema\v cki zahtev za patent}}, + patreqeu = {{evropski zahtev za patent}{evropski zahtev za patent}}, + patreqfr = {{francuski zahtev za patent}{francuski zahtev za patent}}, + patrequk = {{britanski zahtev za patent}{britanski zahtev za patent}}, + patrequs = {{SAD zahtev za patent}{SAD zahtev za patent}}, + phdthesis = {{doktorska teza}{doktorska teza}}, + pm = {{PM}{PM}}, + prepublished = {{preliminarno izdanje}{preliminarno izdanje}}, + quotedin = {{citirano u}{cit\adddotspace u}}, + redactor = {{redaktor}{red\adddot}}, + redactors = {{redaktori}{red\adddot}}, + references = {{Literatura}{Literatura}}, + reprint = {{reprint}{reprint}}, + reprintas = {{ponovo izdato kao kao}{ponovo izdato kao kao}}, + reprintfrom = {{reprint iz}{reprint iz}}, + reprintof = {{reprint}{reprint}}, + resreport = {{istra\v ziva\v cki izve\v staj}{istra\v ziva\v cki izve\v staj}}, + reviewof = {{recenzija}{recenzija}}, + reviser = {{korektor}{korektor}}, + revisers = {{korektori}{korektori}}, + section = {{sekcija}{sek\adddot}}, + sections = {{sekcije}{sek\adddot}}, + sectiontotal = {{sekcija}{sek\adddot}}, + sectiontotals = {{sekcije}{sek\adddot}}, + see = {{vidi}{vidi}}, + seealso = {{vidi\addabbrvspace i}{vidi}}, + seenote = {{vidi fusnotu}{vidi fusnotu}}, + september = {{septembar}{sept\adddot}}, + sequens = {{sq\adddot}{sq\adddot}}, + sequentes = {{sqq\adddot}{sqq\adddot}}, + shorthands = {{Spisak skra\'cenica}{Skra\'cenice}}, + software = {{ra\v cunarski softver}{ra\v c\adddot\ softver}}, + spring = {{prole\'ce}{prole\'ce}}, + submitted = {{poslato}{poslato}}, + summer = {{leto}{leto}}, + techreport = {{tehni\v cki izve\v staj}{tehn\adddotspace izv\adddot}}, + thiscite = {{posebno}{posebno}}, + translationas = {{prevedeno kao}{prevedeno kao}}, + translationfrom = {{prevedeno sa}{prevedeno sa}}, + translationof = {{prevod}{prevod}}, + translator = {{prevodilac}{prevodilac}}, + translatoraf = {{prevodilac i autor pogovora}{prevodilac i autor pogovora}}, + translatoran = {{prevodilac i anotator}{prevodilac i anotator}}, + translatoranaf = {{prevodilac, autor anotacija i autor pogovora}{prevodilac, autor anotacija i autor pogovora}}, + translatoranfo = {{prevodilac, autor anotacija i autor predgovora}{prevodilac, autor anotacija i autor predgovora}}, + translatoranin = {{prevodilac, autor anotacija i autor uvoda}{prevodilac, autor anotacija i autor uvoda}}, + translatorco = {{prevodilac i komentator}{prevodilac i komentator}}, + translatorcoaf = {{prevodilac, komentar i autor pogovora}{prevodilac, komentar i autor pogovora}}, + translatorcofo = {{prevodilac, komentar i autor predgovora}{prevodilac, komentar i autor predgovora}}, + translatorcoin = {{prevodilac, komentar i autor uvoda}{prevodilac, komentar i autor uvoda}}, + translatorfo = {{prevodilac i autor predgovora}{prevodilac i autor predgovora}}, + translatorin = {{prevodilac i autor uvoda}{prevodilac i autor uvoda}}, + translators = {{prevodioci}{prevodioci}}, + translatorsaf = {{prevodilac i autor pogovora}{prevodilac i autor pogovora}}, + translatorsan = {{prevodioci i autori bele\v ski}{prevodioci i autori bele\v ski}}, + translatorsanaf = {{prevodilac, autor anotacija i autor pogovora}{prevodilac, autor anotacija i autor pogovora}}, + translatorsanfo = {{prevodilac, autor anotacija i autor predgovora}{prevodilac, autor anotacija i autor predgovora}}, + translatorsanin = {{prevodilac, autor anotacija i autor uvoda}{prevodilac, autor anotacija i autor uvoda}}, + translatorsco = {{prevodioci i komentatori}{prevodioci i komentatori}}, + translatorscoaf = {{prevodilac, komentar i autor pogovora}{prevodilac, komentar i autor pogovora}}, + translatorscofo = {{prevodilac, komentar i autor predgovora}{prevodilac, komentar i autor predgovora}}, + translatorscoin = {{prevodilac, komentar i autor uvoda}{prevodilac, komentar i autor uvoda}}, + translatorsfo = {{prevodilac i autor predgovora}{prevodilac i autor predgovora}}, + translatorsin = {{prevodilac i autor uvoda}{prevodilac i autor uvoda}}, + url = {{adresa}{adresa}}, + urlfrom = {{dostupno na}{dostupno na}}, + urlseen = {{pose\'ceno}{pose\'ceno}}, + verse = {{strofa}{str\adddot}}, + verses = {{strofe}{str\adddot}}, + versetotal = {{strofa}{str\adddot}}, + versetotals = {{strofe}{str\adddot}}, + version = {{verzija}{verzija}}, + volume = {{sveska}{sv\adddot}}, + volumes = {{sveske}{sv\adddot}}, + winter = {{zima}{zima}}, + withafterword = {{sa pogovorom}{sa pogovorom}}, + withannotator = {{sa bele\v skama}{sa bele\v skama}}, + withcommentator = {{sa komentarom}{sa komentarom}}, + withforeword = {{sa predgovorom}{sa predgovorom}}, + withintroduction = {{sa uvodom}{sa uvodom}}, +} + +\endinput
\ No newline at end of file diff --git a/macros/latex/contrib/biblatex/latex/lbx/serbianc.lbx b/macros/latex/contrib/biblatex/latex/lbx/serbianc.lbx new file mode 100644 index 0000000000..1e11519af0 --- /dev/null +++ b/macros/latex/contrib/biblatex/latex/lbx/serbianc.lbx @@ -0,0 +1,449 @@ +\ProvidesFile{serbianc.lbx} +[\abx@lbxid] + +% Translator's notes: +% +% This file is generated from a template and YAML localization string +% collection by a script +% You can said files at https://gitlab.com/andrejr/biblatex-serbian. +% Please don't modify this file by hand -- contribute your changes upstream and +% then send a pull request with the generated file to the official biblatex +% repo (https://github.com/plk/biblatex). +% +% This is done so we could generate both `serbian.lbx` (Latin) and +% `serbianc.lbx` (Cyrillic) from the same set of localization strings. + +\lbx@ifutfinput + {} + {\PackageError{biblatex} + {Serbian Cyrillic biblatex localization requires UTF-8 support} + {The 'serbianc.lbx' file requires UTF-8 encoding but you + seem\MessageBreak to be using a different encoding. + This is a fatal error. I will\MessageBreak abort loading + serbianc.lbx now.}% + \endinput} + +\DeclareRedundantLanguages{serbianc}{serbianc} + +\DeclareBibliographyExtras{% + \protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}% + \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}% + \protected\def\mkbibmascord{\mkbibordinal}% + \protected\def\mkbibfemord{\mkbibordinal}% + \protected\def\mkbibneutord{\mkbibordinal}% + \protected\def\bibtimesep{.}% + %\savecommand\mkbibordedition + %\savecommand\mkbibordseries + \def\mkbibordedition{\mkbibordinal}% + \def\mkbibordseries{\mkbibfemord}% + \protected\def\mkbibdatelong#1#2#3{% + % day field + \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}% if day exists, display + \iffieldundef{#2}{}{\nobreakspace}}% space before month if month exists + % month field + \iffieldundef{#2}{}{\mkbibmonth{\thefield{#2}}% + \iffieldundef{#1}{}{\space}}% space before year if year exists + % year field + \iffieldbibstring{#1}% year + {\bibstring{\thefield{#1}}}% + {\dateeraprintpre{#1}\mkbibordinal{\thefield{#1}}}}% + \protected\def\mkbibdateshort#1#2#3{% + \iffieldundef{#3}{}{\mkbibordinal{\thefield{#3}}% + \iffieldundef{#2}{}{\addnbspace}}% + \iffieldundef{#2}{}{\mkbibordinal{\thefield{#2}}% + \iffieldundef{#1}{}{\addnbspace}}% + \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}% + {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}}% + \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% + \iffieldundef{#4}{} + {\bibtimezonesep + \mkbibtimezone{\thefield{#4}}}}% + \expandafter\protected\expandafter\def\csname mkbibtime12h% + \endcsname#1#2#3#4{% + \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep% + \forcezerosmdt{\thefield{#2}}% + \iffieldundef{#3}{} + {\bibtimesep% + \forcezerosmdt{\thefield{#3}}}% + \space + \ifnumless{\thefield{#1}}{12} + {\bibstring{am}} + {\bibstring{pm}}% + \iffieldundef{#4}{} + {\space\bibtimezonesep% + \parentext{\mkbibtimezone{\thefield{#4}}}}}% + \protected\def\mkbibseasondateshort#1#2{% + \mkbibseason{\thefield{#2}}% + \iffieldundef{#1}{}{\space}% + \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}% + \protected\def\mkbibseasondatelong#1#2{% + \mkbibseason{\thefield{#2}}% + \iffieldundef{#1}{}{\space}% + \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}\adddot}% +} + +\DeclareBibliographyStrings{% + abstract = {{апстракт}{апстракт}}, + afterword = {{поговор}{поговор}}, + am = {{AM}{AM}}, + and = {{и}{и}}, + andmore = {{и други}{и\addabbrvspace др\adddot}}, + andothers = {{и други}{и\addabbrvspace др\adddot}}, + annodomini = {{после Христа}{п\adddotspace Хр\adddot}}, + annotation = {{белешка}{бел\adddot}}, + annotations = {{белешке}{бел\adddot}}, + annotator = {{аутор бележака}{аут\adddot\ бел\adddot}}, + annotators = {{аутори бележака}{аут\adddot\ бел\adddot}}, + april = {{април}{апр\adddot}}, + astitle = {{под насловом}{под насловом}}, + audiocd = {{аудио ЦД}{аудио ЦД}}, + august = {{август}{авг\adddot}}, + autumn = {{јесен}{јесен}}, + backrefpage = {{цитирано на страници}{цит\adddot\ на стр\adddot}}, + backrefpages = {{цитирано на страницама}{цит\adddot\ на стр\adddot}}, + bathesis = {{бачелор рад}{БА\addabbrvspace рад}}, + beforechrist = {{пре Христа}{пр\adddotspace Хр\adddot}}, + beforecommonera = {{пре нове ере}{пре\addabbrvspace н\adddotspace е\adddot}}, + bibliography = {{Библиографија}{Библиографија}}, + book = {{књига}{књ\adddot}}, + byannotator = {{аутор бележака}{аутор бележака}}, + byauthor = {{аутор}{аутор}}, + bycollaborator = {{у сарадњи са}{у сарадњи са}}, + bycommentator = {{коментар}{коментар}}, + bycompiler = {{одабир}{одабир}}, + bycontinuator = {{аутор наставка}{аутор наставка}}, + byeditor = {{уредник}{уредник}}, + byeditoraf = {{обрада и поговор}{обрада и поговор}}, + byeditoran = {{обрада и белешке}{обрада и белешке}}, + byeditoranaf = {{обрада, белешке и поговор}{обрада, белешке и поговор}}, + byeditoranfo = {{обрада, белешке и предговор}{обрада, белешке и предговор}}, + byeditoranin = {{обрада, белешке и увод}{обрада, белешке и увод}}, + byeditorco = {{обрада и коментар}{обрада и коментар}}, + byeditorcoaf = {{обрада, коментар и поговор}{обрада, коментар и поговор}}, + byeditorcofo = {{обрада, коментар и предговор}{обрада, коментар и предговор}}, + byeditorcoin = {{обрада, коментар и увод}{обрада, коментар и увод}}, + byeditorfo = {{обрада и предговор}{обрада и предговор}}, + byeditorin = {{обрада и увод}{обрада и увод}}, + byeditortr = {{обрада и превод}{обрада и превод}}, + byeditortraf = {{обрада, превод и поговор}{обрада, превод и поговор}}, + byeditortran = {{обрада, превод и белешке}{обрада, превод и белешке}}, + byeditortranaf = {{обрада, превод, белешке и поговор}{обрада, превод, белешке и поговор}}, + byeditortranfo = {{обрада, превод, белешке и предговор}{обрада, превод, белешке и предговор}}, + byeditortranin = {{обрада, превод, белешке и увод}{обрада, превод, белешке и увод}}, + byeditortrco = {{обрада, превод и коментар}{обрада, превод и коментар}}, + byeditortrcoaf = {{обрада, превод, коментар и поговор}{обрада, превод, коментар и поговор}}, + byeditortrcofo = {{обрада, превод, коментар и предговор}{обрада, превод, коментар и предговор}}, + byeditortrcoin = {{обрада, превод, коментар и увод}{обрада, превод, коментар и увод}}, + byeditortrfo = {{обрада, превод и предговор}{обрада, превод и предговор}}, + byeditortrin = {{обрада, превод и увод}{обрада, превод и увод}}, + byfounder = {{оснивач}{оснивач}}, + byorganizer = {{организатор}{организатор}}, + bypublisher = {{издавач}{издавач}}, + byredactor = {{редактор}{редактор}}, + byreviewer = {{рецензент}{рецензент}}, + byreviser = {{коректор}{коректор}}, + bytranslator = {{превод}{превод}}, + bytranslatoraf = {{превод и поговор}{превод и поговор}}, + bytranslatoran = {{превод и белешке}{превод и белешке}}, + bytranslatoranaf = {{превод, белешке и поговор}{превод, белешке и поговор}}, + bytranslatoranfo = {{превод, белешке и предговор}{превод, белешке и предговор}}, + bytranslatoranin = {{превод, белешке и увод}{превод, белешке и увод}}, + bytranslatorco = {{превод и коментар}{превод и коментар}}, + bytranslatorcoaf = {{превод, коментар и поговор}{превод, коментар и поговор}}, + bytranslatorcofo = {{превод, коментар и предговор}{превод, коментар и предговор}}, + bytranslatorcoin = {{превод, коментар и увод}{превод, коментар и увод}}, + bytranslatorfo = {{превод и предговор}{превод и предговор}}, + bytranslatorin = {{превод и увод}{превод и увод}}, + candthesis = {{кандидатски рад}{кандидатски рад}}, + chapter = {{глава}{глава}}, + circa = {{цирка}{cca}}, + citedas = {{цитирано као}{цит\adddotspace као}}, + collaborator = {{сарадник}{сар\adddot}}, + collaborators = {{сарадници}{сар\adddot}}, + column = {{ступац}{ступац}}, + columns = {{ступци}{ступци}}, + columntotal = {{ступац}{ступац}}, + columntotals = {{ступци}{ступци}}, + commentary = {{коментар}{ком\adddot}}, + commentator = {{коментатор}{ком\adddot}}, + commentators = {{коментатори}{ком\adddot}}, + commonera = {{нове ере}{н.\addnbspace е\adddot}}, + compiler = {{приређивач}{приређивач}}, + compilers = {{приредили}{приредили}}, + confer = {{cf\adddot}{cf\adddot}}, + continuator = {{настављач}{наст\adddot}}, + continuators = {{настављачи}{наст\adddot}}, + countryde = {{Немачка}{ДЕ}}, + countryep = {{Европска унија}{ЕП}}, + countryeu = {{Европска унија}{ЕУ}}, + countryfr = {{Француска}{ФР}}, + countryuk = {{Велика Британија}{ГБ}}, + countryus = {{Сједињене Америчке Државе}{САД}}, + datacd = {{CD-ROM}{CD-ROM}}, + december = {{децембар}{дец\adddot}}, + edition = {{издање}{издање}}, + editor = {{уредник}{ур\adddot}}, + editoraf = {{уредник и аутор поговора}{уредник и аутор поговора}}, + editoran = {{уредник и аутор бележака}{уредник и аутор бележака}}, + editoranaf = {{уредник, аутор бележака и аутор поговора}{уредник, аутор бележака и аутор поговора}}, + editoranfo = {{уредник, аутор бележака и аутор предговора}{уредник, аутор бележака и аутор предговора}}, + editoranin = {{уредник, аутор бележака и аутор увода}{уредник, аутор бележака и аутор увода}}, + editorco = {{уредник и коментатор}{уредник и коментатор}}, + editorcoaf = {{уредник, коментатор и аутор поговора}{уредник, коментатор и аутор поговора}}, + editorcofo = {{уредник, коментатор и аутор предговора}{уредник, коментатор и аутор предговора}}, + editorcoin = {{уредник, коментатор и аутор увода}{уредник, коментатор и аутор увода}}, + editorfo = {{уредник и аутор предговора}{уредник и аутор предговора}}, + editorin = {{уредник и аутор увода}{уредник и аутор увода}}, + editors = {{уредници}{уредници}}, + editorsaf = {{уредници и писци поговора}{уредници и писци поговора}}, + editorsan = {{уредници и аутори бележака}{уредници и аутори бележака}}, + editorsanaf = {{уредници, аутори бележака и аутори поговора}{уредници, аутори бележака и аутори поговора}}, + editorsanfo = {{уредници, аутори бележака и аутори предговора}{уредници, аутори бележака и аутори предговора}}, + editorsanin = {{уредници, аутори бележака и аутори увода}{уредници, аутори бележака и аутори увода}}, + editorsco = {{уредници и коментатори}{уредници и коментатори}}, + editorscoaf = {{уредници, коментатори и писци поговора}{уредници, коментатори и писци поговора}}, + editorscofo = {{уредници, коментатори и аутори предговора}{уредници, коментатори и аутори предговора}}, + editorscoin = {{уредници, коментатори и аутори увода}{уредници, коментатори и аутори увода}}, + editorsfo = {{уредници и писци предговора}{уредници и писци предговора}}, + editorsin = {{уредници и аутори увода}{уредници и аутори увода}}, + editorstr = {{уредници и преводиоци}{уредници и преводиоци}}, + editorstraf = {{уредници, преводиоци и аутори поговора}{уредници, преводиоци и аутори поговора}}, + editorstran = {{уредници, преводиоци и аутори бележака}{уредници, преводиоци и аутори бележака}}, + editorstranaf = {{уредници, преводиоци, аутори бележака и писци поговора}{уредници, преводиоци, аутори бележака и писци поговора}}, + editorstranfo = {{уредници, преводиоци, аутори бележака и аутори предговора}{уредници, преводиоци, аутори бележака и аутори предговора}}, + editorstranin = {{уредници, преводиоци, аутори бележака и аутори увода}{уредници, преводиоци, аутори бележака и аутори увода}}, + editorstrco = {{уредници, преводиоци и коментатори}{уредници, преводиоци и коментатори}}, + editorstrcoaf = {{уредници, преводиоци, коментатори и писци поговора}{уредници, преводиоци, коментатори и писци поговора}}, + editorstrcofo = {{уредници, преводиоци, коментатори и аутори предговора}{уредници, преводиоци, коментатори и аутори предговора}}, + editorstrcoin = {{уредници, преводиоци, коментатори и аутори увода}{уредници, преводиоци, коментатори и аутори увода}}, + editorstrfo = {{уредници, преводиоци и аутори предговора}{уредници, преводиоци и аутори предговора}}, + editorstrin = {{уредници, преводиоци и аутори увода}{уредници, преводиоци и аутори увода}}, + editortr = {{уредник и преводилац}{уредник и преводилац}}, + editortraf = {{уредник, преводилац и аутор поговора}{уредник, преводилац и аутор поговора}}, + editortran = {{уредник, преводилац и аутор бележака}{уредник, преводилац и аутор бележака}}, + editortranaf = {{уредник, преводилац, аутор бележака и аутор поговора}{уредник, преводилац, аутор бележака и аутор поговора}}, + editortranfo = {{уредник, преводилац, аутор бележака и аутор предговора}{уредник, преводилац, аутор бележака и аутор предговора}}, + editortranin = {{уредник, преводилац, аутор бележака и аутор увода}{уредник, преводилац, аутор бележака и аутор увода}}, + editortrco = {{уредник, преводилац и коментатор}{уредник, преводилац и коментатор}}, + editortrcoaf = {{уредник, преводилац, коментатор и аутор поговора}{уредник, преводилац, коментатор и аутор поговора}}, + editortrcofo = {{уредник, преводилац, коментатор и аутор предговора}{уредник, преводилац, коментатор и аутор предговора}}, + editortrcoin = {{уредник, преводилац, коментатор и аутор увода}{уредник, преводилац, коментатор и аутор увода}}, + editortrfo = {{уредник, преводилац и аутор предговора}{уредник, преводилац и аутор предговора}}, + editortrin = {{уредник, преводилац и аутор увода}{уредник, преводилац и аутор увода}}, + february = {{фебруар}{феб\adddot}}, + file = {{датотека}{датотека}}, + foreword = {{предговор}{предговор}}, + forthcoming = {{долазеће}{долазеће}}, + founder = {{оснивач}{осн\adddot}}, + founders = {{оснивачи}{осн\adddot}}, + fromamerican = {{са америчког}{са америчког}}, + frombrazilian = {{са бразилског}{са бразилског}}, + frombulgarian = {{са бугарског}{са бугарског}}, + fromcatalan = {{са каталонског}{са каталонског}}, + fromcroatian = {{са хрватског}{са хрватског}}, + fromczech = {{са чешког}{са чешког}}, + fromdanish = {{са данског}{са данског}}, + fromdutch = {{са холандског}{са холандског}}, + fromenglish = {{са енглеског}{са енглеског}}, + fromestonian = {{са естонског}{са естонског}}, + fromfinnish = {{са финског}{са финског}}, + fromfrench = {{са француског}{са француског}}, + fromgalician = {{са галицијског}{са галицијског}}, + fromgerman = {{са немачког}{са немачког}}, + fromgreek = {{са грчког}{са грчког}}, + fromhungarian = {{са мађарског}{са мађарског}}, + fromitalian = {{са италијанског}{са италијанског}}, + fromjapanese = {{са јапанског}{са јапанског}}, + fromlatin = {{са латинског}{са латинског}}, + fromlatvian = {{са летонског}{са летонског}}, + fromnorwegian = {{са норвешког}{са норвешког}}, + frompolish = {{са пољског}{са пољског}}, + fromportuguese = {{са португалског}{са португалског}}, + fromrussian = {{са руског}{са руског}}, + fromslovak = {{са словачког}{са словачког}}, + fromslovene = {{са словеначког}{са словеначког}}, + fromspanish = {{са шпанског}{са шпанског}}, + fromswedish = {{са шведског}{са шведског}}, + fromukrainian = {{са украјинског}{са украјинског}}, + ibidem = {{ibidem}{ibid\adddot}}, + idem = {{idem}{idem}}, + idempf = {{eaedem}{eaedem}}, + idempm = {{eidem}{eidem}}, + idempn = {{eadem}{eadem}}, + idempp = {{eidem}{eidem}}, + idemsf = {{eadem}{eadem}}, + idemsm = {{idem}{idem}}, + idemsn = {{idem}{idem}}, + in = {{у}{у}}, + inpreparation = {{у припреми}{у припреми}}, + inpress = {{у штампи}{у штампи}}, + inseries = {{у}{у}}, + introduction = {{увод}{ув\adddot}}, + involumes = {{у}{у}}, + issue = {{издање}{издање}}, + january = {{јануар}{јан\adddot}}, + jourser = {{серија}{сер\adddot}}, + jourvol = {{свеска}{св\adddot}}, + july = {{јул}{јул}}, + june = {{јун}{јун}}, + langamerican = {{амерички}{амерички}}, + langbrazilian = {{бразилски}{бразилски}}, + langbulgarian = {{бугарски}{бугарски}}, + langcatalan = {{каталански}{каталански}}, + langcroatian = {{хрватски}{хрватски}}, + langczech = {{чешки}{чешки}}, + langdanish = {{дански}{дански}}, + langdutch = {{холандски}{холандски}}, + langenglish = {{енглески}{енглески}}, + langestonian = {{естонски}{естонски}}, + langfinnish = {{фински}{фински}}, + langfrench = {{француски}{француски}}, + langgalician = {{галицијски}{галицијски}}, + langgerman = {{немачки}{немачки}}, + langgreek = {{грчки}{грчки}}, + langhungarian = {{мађарски}{мађарски}}, + langitalian = {{италијански}{италијански}}, + langjapanese = {{јапански}{јапански}}, + langlatin = {{латински}{латински}}, + langlatvian = {{летонски}{летонски}}, + langnorwegian = {{норвешки}{норвешки}}, + langpolish = {{пољски}{пољски}}, + langportuguese = {{португалски}{португалски}}, + langrussian = {{руски}{руски}}, + langslovak = {{словачки}{словачки}}, + langslovene = {{словеначки}{словеначки}}, + langspanish = {{шпански}{шпански}}, + langswedish = {{шведски}{шведски}}, + langukrainian = {{украјински}{украјински}}, + library = {{библиотека}{библиотека}}, + line = {{ред}{р\adddot}}, + lines = {{редови}{р\adddot}}, + linetotal = {{ред}{р\adddot}}, + linetotals = {{редови}{р\adddot}}, + loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}}, + march = {{март}{мар\adddot}}, + mathesis = {{мастер рад}{мастер рад}}, + may = {{мај}{мај}}, + newseries = {{нова серија}{нова серија}}, + nodate = {{без датума}{без датума}}, + november = {{новембар}{нов\adddot}}, + number = {{број}{бр\adddot}}, + october = {{октобар}{окт\adddot}}, + ofseries = {{серија}{сер\adddot}}, + oldseries = {{стара серија}{стара серија}}, + opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}}, + organizer = {{организатор}{орг\adddot}}, + organizers = {{организатори}{орг\adddot}}, + origpubas = {{оригинално издато као}{оригинално издато као}}, + origpubin = {{оригинално издато}{оригинално издато}}, + page = {{страна}{стр\adddot}}, + pages = {{стране}{стр\adddot}}, + pagetotal = {{страна}{стр\adddot}}, + pagetotals = {{стране}{стр\adddot}}, + paragraph = {{пасус}{пас\adddot}}, + paragraphs = {{пасуси}{пас\adddot}}, + paragraphtotal = {{пасус}{пас\adddot}}, + paragraphtotals = {{пасуси}{пас\adddot}}, + part = {{део}{део}}, + passim = {{passim}{pass\adddot}}, + patent = {{патент}{пат\adddot}}, + patentde = {{немачки патент}{нем\adddot\ пат\adddot}}, + patenteu = {{европски патент}{евр\adddot\ пат\adddot}}, + patentfr = {{француски патент}{франц\adddot\ пат\adddot}}, + patentuk = {{британски патент}{брит\adddot\ пат\adddot}}, + patentus = {{САД патент}{САД пат\adddot}}, + patreq = {{захтев за патент}{захтев за патент}}, + patreqde = {{немачки захтев за патент}{немачки захтев за патент}}, + patreqeu = {{европски захтев за патент}{европски захтев за патент}}, + patreqfr = {{француски захтев за патент}{француски захтев за патент}}, + patrequk = {{британски захтев за патент}{британски захтев за патент}}, + patrequs = {{САД захтев за патент}{САД захтев за патент}}, + phdthesis = {{докторска теза}{докторска теза}}, + pm = {{PM}{PM}}, + prepublished = {{прелиминарно издање}{прелиминарно издање}}, + quotedin = {{цитирано у}{цит\adddotspace у}}, + redactor = {{редактор}{ред\adddot}}, + redactors = {{редактори}{ред\adddot}}, + references = {{Литература}{Литература}}, + reprint = {{репринт}{репринт}}, + reprintas = {{поново издато као као}{поново издато као као}}, + reprintfrom = {{репринт из}{репринт из}}, + reprintof = {{репринт}{репринт}}, + resreport = {{истраживачки извештај}{истраживачки извештај}}, + reviewof = {{рецензија}{рецензија}}, + reviser = {{коректор}{коректор}}, + revisers = {{коректори}{коректори}}, + section = {{секција}{сек\adddot}}, + sections = {{секције}{сек\adddot}}, + sectiontotal = {{секција}{сек\adddot}}, + sectiontotals = {{секције}{сек\adddot}}, + see = {{види}{види}}, + seealso = {{види\addabbrvspace и}{види}}, + seenote = {{види фусноту}{види фусноту}}, + september = {{септембар}{септ\adddot}}, + sequens = {{sq\adddot}{sq\adddot}}, + sequentes = {{sqq\adddot}{sqq\adddot}}, + shorthands = {{Списак скраћеница}{Скраћенице}}, + software = {{рачунарски софтвер}{рач\adddot\ софтвер}}, + spring = {{пролеће}{пролеће}}, + submitted = {{послато}{послато}}, + summer = {{лето}{лето}}, + techreport = {{технички извештај}{техн\adddotspace изв\adddot}}, + thiscite = {{посебно}{посебно}}, + translationas = {{преведено као}{преведено као}}, + translationfrom = {{преведено са}{преведено са}}, + translationof = {{превод}{превод}}, + translator = {{преводилац}{преводилац}}, + translatoraf = {{преводилац и аутор поговора}{преводилац и аутор поговора}}, + translatoran = {{преводилац и анотатор}{преводилац и анотатор}}, + translatoranaf = {{преводилац, аутор анотација и аутор поговора}{преводилац, аутор анотација и аутор поговора}}, + translatoranfo = {{преводилац, аутор анотација и аутор предговора}{преводилац, аутор анотација и аутор предговора}}, + translatoranin = {{преводилац, аутор анотација и аутор увода}{преводилац, аутор анотација и аутор увода}}, + translatorco = {{преводилац и коментатор}{преводилац и коментатор}}, + translatorcoaf = {{преводилац, коментар и аутор поговора}{преводилац, коментар и аутор поговора}}, + translatorcofo = {{преводилац, коментар и аутор предговора}{преводилац, коментар и аутор предговора}}, + translatorcoin = {{преводилац, коментар и аутор увода}{преводилац, коментар и аутор увода}}, + translatorfo = {{преводилац и аутор предговора}{преводилац и аутор предговора}}, + translatorin = {{преводилац и аутор увода}{преводилац и аутор увода}}, + translators = {{преводиоци}{преводиоци}}, + translatorsaf = {{преводилац и аутор поговора}{преводилац и аутор поговора}}, + translatorsan = {{преводиоци и аутори белешки}{преводиоци и аутори белешки}}, + translatorsanaf = {{преводилац, аутор анотација и аутор поговора}{преводилац, аутор анотација и аутор поговора}}, + translatorsanfo = {{преводилац, аутор анотација и аутор предговора}{преводилац, аутор анотација и аутор предговора}}, + translatorsanin = {{преводилац, аутор анотација и аутор увода}{преводилац, аутор анотација и аутор увода}}, + translatorsco = {{преводиоци и коментатори}{преводиоци и коментатори}}, + translatorscoaf = {{преводилац, коментар и аутор поговора}{преводилац, коментар и аутор поговора}}, + translatorscofo = {{преводилац, коментар и аутор предговора}{преводилац, коментар и аутор предговора}}, + translatorscoin = {{преводилац, коментар и аутор увода}{преводилац, коментар и аутор увода}}, + translatorsfo = {{преводилац и аутор предговора}{преводилац и аутор предговора}}, + translatorsin = {{преводилац и аутор увода}{преводилац и аутор увода}}, + url = {{адреса}{адреса}}, + urlfrom = {{доступно на}{доступно на}}, + urlseen = {{посећено}{посећено}}, + verse = {{строфа}{стр\adddot}}, + verses = {{строфе}{стр\adddot}}, + versetotal = {{строфа}{стр\adddot}}, + versetotals = {{строфе}{стр\adddot}}, + version = {{верзија}{верзија}}, + volume = {{свеска}{св\adddot}}, + volumes = {{свеске}{св\adddot}}, + winter = {{зима}{зима}}, + withafterword = {{са поговором}{са поговором}}, + withannotator = {{са белешкама}{са белешкама}}, + withcommentator = {{са коментаром}{са коментаром}}, + withforeword = {{са предговором}{са предговором}}, + withintroduction = {{са уводом}{са уводом}}, +} + +\endinput
\ No newline at end of file diff --git a/macros/latex/contrib/biblatex/latex/lbx/slovak.lbx b/macros/latex/contrib/biblatex/latex/lbx/slovak.lbx index 4548ff67df..2e7201e9c8 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/slovak.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/slovak.lbx @@ -40,13 +40,17 @@ {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -74,62 +78,34 @@ } \DeclareBibliographyStrings{% - bibliography = {{Zoznam bibliografick\'{y}ch odkazov}% - {Bibliografia}}, - references = {{Cit\'{a}cie}% % ISO 690 -- section 2.15 - {Cit\'{a}cie}}, - shorthands = {{Zoznam skratiek}% - {Skratky}}, - editor = {{editor}% - {ed\adddot}}, - editors = {{editori}% - {ed\adddot}}, - compiler = {{zostavovate\v{l}}% % ISO 690 -- section 5.1 -- c) - {zost\adddot}}, - compilers = {{zostavovatelia}% - {zost\adddot}}, - redactor = {{redaktor}% - {red\adddot}}, - redactors = {{redaktori}% - {red\adddot}}, - reviser = {{korektor}% - {kor\adddot}}, - revisers = {{korektori}% - {kor\adddot}}, - founder = {{zakladate\v{l}}% - {zakl\adddot}}, - founders = {{zakladatelia}% - {zakl\adddot}}, - continuator = {{pokra\v{c}ovate\v{l}}% - {pokr\adddot}}, - continuators = {{pokra\v{c}ovatelia}% - {pokr\adddot}}, - collaborator = {{spolupracovn\'{i}k}% - {spoluprac\adddot}}, - collaborators = {{spolupracovn\'{i}ci}% - {spoluprac\adddot}}, - translator = {{prekladate\v{l}}% - {prekl\adddot}}, - translators = {{prekladatelia}% - {prekl\adddot}}, - commentator = {{koment\'{a}tor}% - {kom\adddot}}, - commentators = {{koment\'{a}tori}% - {kom\adddot}}, - annotator = {{anot\'{a}tor}% - {anot\adddot}}, - annotators = {{anot\'{a}tori}% - {anot\adddot}}, - commentary = {{koment\'{a}r}% - {kom\adddot}}, - annotations = {{anot\'{a}cia}% - {anot\adddot}}, - introduction = {{\'{u}vod}% - {\'{u}v\adddot}}, - foreword = {{predhovor}% - {predh\adddot}}, - afterword = {{doslov}% - {dosl\adddot}}, + bibliography = {{Zoznam literat\'{u}ry}{Bibliografia}}, + references = {{Referencie}{Referencie}}, + shorthands = {{Zoznam skratiek}{Skratky}}, + editor = {{editor}{ed\adddot}}, + editors = {{editori}{ed\adddot}}, + compiler = {{zostavovate\v{l}}{zost\adddot}}, + compilers = {{zostavovatelia}{zost\adddot}}, + redactor = {{redaktor}{red\adddot}}, + redactors = {{redaktori}{red\adddot}}, + reviser = {{korektor}{kor\adddot}}, + revisers = {{korektori}{kor\adddot}}, + founder = {{zakladate\v{l}}{zakl\adddot}}, + founders = {{zakladatelia}{zakl\adddot}}, + continuator = {{pokra\v{c}ovate\v{l}}{pokr\adddot}},% FIXME: unsure + continuators = {{pokra\v{c}ovatelia}{pokr\adddot}},% FIXME: unsure + collaborator = {{spolupracovn\'{\i}k}{spoluprac\adddot}}, + collaborators = {{spolupracovn\'{\i}ci}{spoluprac\adddot}}, + translator = {{prekladate\v{l}}{prekl\adddot}}, + translators = {{prekladatelia}{prekl\adddot}}, + commentator = {{koment\'{a}tor}{kom\adddot}}, + commentators = {{koment\'{a}tori}{kom\adddot}}, + annotator = {{anot\'{a}tor}{anot\adddot}}, + annotators = {{anot\'{a}tori}{anot\adddot}}, + commentary = {{koment\'{a}r}{kom\adddot}}, + annotations = {{anot\'{a}cie}{anot\adddot}}, + introduction = {{\'{u}vod}{\'{u}v\adddot}}, + foreword = {{predhovor}{predh\adddot}}, + afterword = {{doslov}{dosl\adddot}}, editortr = {{editor a prekladate\v{l}}% {ed\adddotspace a prekl\adddot}}, editorstr = {{editori a prekladatelia}% @@ -230,97 +206,84 @@ {prekl\adddot\ a anot\adddot}}, translatorsan = {{prekladatelia a anot\'{a}tori}% {prekl\adddot\ a anot\adddot}}, - translatorin = {{prekladate\v{l} a \'{u}vod}% + translatorin = {{preklad a \'{u}vod}% {prekl\adddot\ a \'{u}v\adddot}}, - translatorsin = {{prekladatelia a \'{u}vod}% + translatorsin = {{preklad a \'{u}vod}% {prekl\adddot\ a \'{u}v\adddot}}, - translatorfo = {{prekladate\v{l} a predhovor}% + translatorfo = {{preklad a predhovor}% {prekl\adddot\ a predh\adddot}}, - translatorsfo = {{prekladatelia a predhovor}% + translatorsfo = {{preklad a predhovor}% {prekl\adddot\ a predh\adddot}}, - translatoraf = {{prekladate\v{l} a doslov}% + translatoraf = {{preklad a doslov}% {prekl\adddot\ a dosl\adddot}}, - translatorsaf = {{prekladatelia a doslov}% + translatorsaf = {{preklad a doslov}% {prekl\adddot\ a dosl\adddot}}, - translatorcoin = {{prekladate\v{l}, koment\'{a}tor\ a \'{u}vod}% + translatorcoin = {{preklad, koment\'{a}r\ a \'{u}vod}% {prekl., kom\adddot\ a \'{u}v\adddot}}, - translatorscoin = {{prekladatelia, koment\'{a}tori\ a \'{u}vod}% + translatorscoin = {{preklad, koment\'{a}r\ a \'{u}vod}% {prekl., kom\adddot\ a \'{u}v\adddot}}, - translatorcofo = {{prekladate\v{l}, koment\'{a}tor\ a predhovor}% + translatorcofo = {{preklad, koment\'{a}r\ a predhovor}% {prekl., kom\adddot\ a predh\adddot}}, - translatorscofo = {{prekladatelia, koment\'{a}tori\ a predhovor}% + translatorscofo = {{preklad, koment\'{a}r\ a predhovor}% {prekl., kom\adddot\ a predh\adddot}}, - translatorcoaf = {{prekladate\v{l}, koment\'{a}tor\ a doslov}% + translatorcoaf = {{preklad, koment\'{a}r\ a doslov}% {prekl., kom\adddot\ a dosl\adddot}}, - translatorscoaf = {{prekladatelia, koment\'{a}tori\ a doslov}% + translatorscoaf = {{preklad, koment\'{a}r\ a doslov}% {prekl., kom\adddot\ a dosl\adddot}}, - translatoranin = {{prekladate\v{l}, anot\'{a}tor\ a \'{u}vod}% + translatoranin = {{preklad, anot\'{a}cia\ a \'{u}vod}% {prekl., anot\adddot\ a \'{u}v\adddot}}, - translatorsanin = {{prekladatelia, anot\'{a}tori\ a \'{u}vod}% + translatorsanin = {{preklad, anot\'{a}cie\ a \'{u}vod}% {prekl., anot\adddot\ a \'{u}v\adddot}}, - translatoranfo = {{prekladate\v{l}, anot\'{a}tor\ a predhovor}% + translatoranfo = {{preklad, anot\'{a}cia\ a predhovor}% {prekl., anot\adddot\ a predh\adddot}}, - translatorsanfo = {{prekladatelia, anot\'{a}tori\ a predhovor}% + translatorsanfo = {{preklad, anot\'{a}cie\ a predhovor}% {prekl., anot\adddot\ a predh\adddot}}, - translatoranaf = {{prekladate\v{l}, anot\'{a}tor\ a doslov}% + translatoranaf = {{preklad, anot\'{a}cia\ a doslov}% {prekl., anot\adddot\ a dosl\adddot}}, - translatorsanaf = {{prekladatelia, anot\'{a}tori\ a doslov}% + translatorsanaf = {{preklad, anot\'{a}cie\ a doslov}% {prekl., anot\adddot\ a dosl\adddot}}, -% organizer = {{}{}},% FIXME: missing -% organizers = {{}{}},% FIXME: missing -% byorganizer = {{}{}},% FIXME: missing - byauthor = {{}% - {}}, - byeditor = {{editovan\'{e}}% - {ed\adddot}}, - bycompiler = {{zostaven\'{e}}% - {zost\adddot}}, - byredactor = {{redigovan\'{e}}% - {red\adddot}}, - byfounder = {{zalo\v{z}en\'{e}}% - {zal\adddot}}, - bycontinuator = {{pokra\v{c}ovan\'{e}}% - {pokr\adddot}}, - bycollaborator = {{v\addnbspace spolupr\'{a}ci s}% - {v\addnbspace spol\adddotspace s}}, - bytranslator = {{prelo\v{z}en\'{e} \lbx@lfromlang}% - {prel\adddot\ \lbx@sfromlang}}, - bycommentator = {{komentovan\'{e}}% - {kom\adddot}}, - byannotator = {{anotovan\'{e}}% - {anot\adddot}}, - withcommentator = {{s\addnbspace koment\'{a}rom od}% - {s\addnbspace kom\adddotspace od}}, - withannotator = {{s\addnbspace anot\'{a}ciami od}% - {s\addnbspace anot\adddot\ od}}, - withintroduction = {{s\addnbspace \'{u}vodom od}% - {s\addnbspace \'{u}v\adddot\ od}}, - withforeword = {{s\addnbspace predhovorom od}% - {s\addnbspace predh\adddot\ od}}, - withafterword = {{s\addnbspace doslovom od}% - {s\addnbspace dosl\adddot\ od}}, - byeditortr = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang\ }% - {ed\adddotspace a prel\adddot\ \lbx@sfromlang\ }}, + organizer = {{organiz\'{a}tor}{org\adddot}},% FIXME: unsure + organizers = {{organiz\'{a}tori}{org\adddot}},% FIXME: unsure + byorganizer = {{organizovan\'{e}}{org\adddot}},% FIXME: unsure + byauthor = {{}{}}, + byeditor = {{editovan\'{e}}{ed\adddot}}, + bycompiler = {{zostaven\'{e}}{zost\adddot}}, + byredactor = {{redigovan\'{e}}{red\adddot}}, + byreviser = {{korigovan\'{e}}{kor\adddot}}, + byreviewer = {{recenzovan\'{e}}{recenz\adddot}}, + byfounder = {{zalo\v{z}en\'{e}}{zal\adddot}}, + bycontinuator = {{pokra\v{c}ovan\'{e}}{pokr\adddot}}, + bycollaborator = {{v\addnbspace spolupr\'{a}ci s\addnbspace}{v\addnbspace spol\adddotspace s\addnbspace}}, + bytranslator = {{prelo\v{z}en\'{e} \lbx@lfromlang}{prel\adddot\ \lbx@sfromlang}}, + bycommentator = {{komentovan\'{e}}{kom\adddot}}, + byannotator = {{anotovan\'{e}}{anot\adddot}}, + withcommentator = {{s\addnbspace koment\'{a}rom od}{s\addnbspace kom\adddot\ od}}, + withannotator = {{s\addnbspace anot\'{a}ciami od}{s\addnbspace anot\adddot\ od}}, + withintroduction = {{s\addnbspace \'{u}vodom od}{s\addnbspace \'{u}v\adddot\ od}}, + withforeword = {{s\addnbspace predhovorom od}{s\addnbspace predh\adddot\ od}}, + withafterword = {{s\addnbspace doslovom od}{s\addnbspace dosl\adddot\ od}}, + byeditortr = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang}% + {ed\adddotspace a prel\adddot\ \lbx@sfromlang}}, byeditorco = {{editovan\'{e} a komentovan\'{e}}% - {ed\adddotspace a kom\adddot\ }}, + {ed\adddotspace a kom\adddot}}, byeditoran = {{editovan\'{e} a anotovan\'{e}}% - {ed\adddotspace a anot\adddot\ }}, + {ed\adddotspace a anot\adddot}}, byeditorin = {{editovan\'{e}, s\addnbspace \'{u}vodom}% {ed.,\addabbrvspace s\addnbspace \'{u}v\adddot}}, byeditorfo = {{editovan\'{e}, s\addnbspace predhovorom}% - {ed.,\addabbrvspace s\addnbspace predh.,}}, + {ed.,\addabbrvspace s\addnbspace predh\adddot}}, byeditoraf = {{editovan\'{e}, s\addnbspace doslovom}% - {ed.,\addabbrvspace s\addnbspace dosl.,}}, + {ed.,\addabbrvspace s\addnbspace dosl\adddot}}, byeditortrco = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a komentovan\'{e}}% - {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a kom\adddot\ }}, + {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a kom\adddot}}, byeditortran = {{editovan\'{e}, prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}}% - {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a anot\adddot\ }}, + {ed.,\addabbrvspace prel\adddot\ \lbx@sfromlang\ a anot\adddot}}, byeditortrin = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace \'{u}vodom}% {ed\adddotspace a prel\adddot\ \lbx@sfromlang, s\addnbspace \'{u}v\adddot}}, byeditortrfo = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace predhovorom}% {ed\adddotspace a prel\adddot\ \lbx@sfromlang, s\addnbspace predh\adddot}}, byeditortraf = {{editovan\'{e} a prelo\v{z}en\'{e} \lbx@lfromlang, s\addnbspace doslovom}% - {ed\adddotspace a prekl\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}}, + {ed\adddotspace a prel\adddot\ \lbx@sfromlang, s\addnbspace dosl\adddot}}, byeditorcoin = {{editovan\'{e} a komentovan\'{e}, s\addnbspace \'{u}vodom}% {ed\adddotspace a kom., s\addnbspace \'{u}v\adddot}}, byeditorcofo = {{editovan\'{e} a komentovan\'{e}, s\addnbspace predhovorom}% @@ -367,356 +330,206 @@ {prel\adddot\ \lbx@sfromlang\ a anot., s\addnbspace predh\adddot}}, bytranslatoranaf = {{prelo\v{z}en\'{e} \lbx@lfromlang\ a anotovan\'{e}, s\addnbspace doslovom}% {prel\adddot\ \lbx@sfromlang\ a anot., s\addnbspace dosl\adddot}}, - and = {{a}% - {a}}, - andothers = {{et\addabbrvspace al\adddot}% %et\addabbrvspace alii - {et\addabbrvspace al\adddot}}, - andmore = {{et\addabbrvspace al\adddot}% %et\addabbrvspace alii - {et\addabbrvspace al\adddot}}, - volume = {{zv\"{a}zok}% - {zv\adddot}}, - volumes = {{zv\"{a}zky}% - {zv\adddot}}, - involumes = {{in}% - {in}}, - jourvol = {{ro\v{c}n\'{i}k}% - {ro\v{c}\adddot}}, - jourser = {{ed\'{i}cia}% % ISO 690 -- section 2.17 - {ed\adddot}}, - book = {{kniha}% - {kniha}}, - part = {{\v{c}as\v{t}}% - {\v{c}as\v{t}}}, - issue = {{\v{c}\'{i}slo}% - {\v{c}\'{i}slo}}, - newseries = {{nov\'{a} ed\'{i}cia}% % ISO 690 -- section 2.17 - {n\adddotspace ed\adddot}}, - oldseries = {{star\'{a} ed\'{i}cia}% % ISO 690 -- section 2.17 - {st\adddotspace ed\adddot}}, - edition = {{vydanie}% - {vyd\adddot}}, - reprint = {{dotla\v{c}}% - {dotl\adddot}}, - reprintof = {{dotla\v{c}}% - {dotl\adddot}}, - reprintas = {{dotla\v{c}en\'{e} ako}% - {dotl\adddotspace ako}}, - reprintfrom = {{dotla\v{c}en\'{e} z}% - {dotl\adddotspace z}}, - reviewof = {{hodnotenie}% - {hodn\adddot}}, - translationof = {{preklad}% - {prekl\adddot}}, - translationas = {{prelo\v{z}en\'{e} ako}% - {prel\adddotspace ako}}, - translationfrom = {{prelo\v{z}en\'{e} z}% - {prel\adddotspace z}}, - origpubas = {{p\^{o}vodne vydan\'{e} ako}% - {p\^{o}v\adddotspace vyd\adddotspace ako}}, - origpubin = {{p\^{o}vodne vydan\'{e} v\addnbspace roku}% - {p\^{o}v\adddotspace vyd\adddotspace v\addnbspace r\adddot}}, - astitle = {{ako}% - {ako}}, - bypublisher = {{}% - {}}, - page = {{strana}% - {s\adddot}}, - pages = {{strany}% - {s\adddot}}, - column = {{st\'{l}pec}% - {st\'{l}p\adddot}}, - columns = {{st\'{l}pce}% - {st\'{l}p\adddot}}, - line = {{riadok}% - {r\adddot}}, - lines = {{riadky}% - {r\adddot}}, - nodate = {{nedatovan\'{e}}% % ISO 690 -- section 9.3.4 - {b\adddotspace r\adddot}}, % bez roku - verse = {{ver\v{s}}% - {v\adddot}}, - verses = {{ver\v{s}e}% - {v\adddot}}, - section = {{paragraf}% - {\S}}, - sections = {{paragrafy}% - {\S\S}}, - paragraph = {{odsek}% - {ods\adddot}}, - paragraphs = {{odseky}% - {ods\adddot}}, - in = {{in}% - {in}}, - inseries = {{v}% - {v}}, - ofseries = {{z}% - {z}}, - number = {{\v{c}\'{i}slo}% - {\v{c}\adddot}}, - chapter = {{kapitola}% - {kap\adddot}}, -% bathesis = {{}{}},% FIXME: missing - mathesis = {{diplomov\'{a} pr\'{a}ca}% - {dipl\adddotspace pr\adddot}}, - phdthesis = {{dizerta\v{c}n\'{a} pr\'{a}ca}% - {diz\adddotspace pr\adddot}}, - candthesis = {{kandid\'{a}tska pr\'{a}ca}% - {kand\adddotspace pr\adddot}}, - resreport = {{v\'{y}skumn\'{a} spr\'{a}va}% - {v\'{y}sk\adddot\ spr\adddot}}, - techreport = {{technick\'{a} spr\'{a}va}% - {tech\adddotspace spr\adddot}}, - software = {{po\v{c}\'{i}ta\v{c}ov\'{y} softv\'{e}r}% - {soft\adddot}}, - datacd = {{CD-ROM}% - {CD-ROM}}, - audiocd = {{audio CD}% - {audio CD}}, - version = {{verzia}% - {ver\adddot}}, - url = {{url}% - {url}}, - urlfrom = {{dostupn\'{e} z}% % ISO 690 -- section 15.2.6 - {dostupn\'{e} z}}, - urlseen = {{citovane\'{e}}% - {cit\adddot}}, - inpreparation = {{v\addnbspace pr\'{i}prave}% - {v\addnbspace pr\'{i}prave}}, - submitted = {{predlo\v{z}en\'{e}}% - {predl\adddot}}, - forthcoming = {{prijat\'{e}}% - {prij\adddot}}, - inpress = {{v\addnbspace tla\v{c}i}% - {v\addnbspace tla\v{c}i}}, - prepublished = {{pred publikovan\'{i}m}% - {pred publ\adddot}}, - citedas = {{\v{d}alej citovan\'{e} ako}% - {\v{d}alej cit\adddotspace ako}}, - thiscite = {{obzvl\'{a}\v{s}\v{t}}% - {obzvl\adddot}}, - seenote = {{vi\v{d} pozn\'{a}mka}% - {vi\v{d} pozn\adddot}}, - quotedin = {{citovan\'{e} v}% - {cit\adddotspace v}}, - idem = {{idem}% - {idem}}, - idemsm = {{idem}% - {idem}}, - idemsf = {{eadem}% - {eadem}}, - idemsn = {{idem}% - {idem}}, - idempm = {{eidem}% - {eidem}}, - idempf = {{eaedem}% - {eaedem}}, - idempn = {{eadem}% - {eadem}}, - idempp = {{eidem}% - {eidem}}, - ibidem = {{ibidem}% - {ibid\adddot}}, - opcit = {{op\adddotspace cit\adddot}% - {op\adddotspace cit\adddot}}, - loccit = {{loc\adddotspace cit\adddot}% - {loc\adddotspace cit\adddot}}, - confer = {{cf\adddot}% - {cf\adddot}}, - sequens = {{sq\adddot}% - {sq\adddot}}, - sequentes = {{sqq\adddot}% - {sqq\adddot}}, - passim = {{passim}% - {pass\adddot}}, - see = {{vi\v{d}}% - {vi\v{d}}}, - seealso = {{vi\v{d} tie\v{z}}% - {vi\v{d} tie\v{z}}}, - backrefpage = {{citovan\'{e} na strane}% - {cit\adddotspace na s\adddot}}, - backrefpages = {{citovan\'{e} na stran\'{a}ch}% - {cit\adddotspace na str\adddot}}, - january = {{janu\'{a}r}% - {jan\adddot}}, - february = {{febru\'{a}r}% - {feb\adddot}}, - march = {{marec}% - {mar\adddot}}, - april = {{apr\'{i}l}% - {apr\adddot}}, - may = {{m\'{a}j}% - {m\'{a}j}}, - june = {{j\'{u}n}% - {j\'{u}n}}, - july = {{j\'{u}l}% - {j\'{u}l}}, - august = {{august}% - {aug\adddot}}, - september = {{september}% - {sept\adddot}}, - october = {{okt\'{o}ber}% - {okt\adddot}}, - november = {{november}% - {nov\adddot}}, - december = {{december}% - {dec\adddot}}, - langamerican = {{americk\'{a} angli\v{c}tina}% - {am\adddot angl\adddot}}, - langbrazilian = {{braz\'{i}lska portugal\v{c}ina}% - {braz\adddot portugal\adddot}}, -% langbulgarian = {{}{}},% FIXME: missing - langcatalan = {{katal\'{a}n\v{c}ina}% - {katal\adddot}}, - langcroatian = {{chorv\'{a}t\v{c}ina}% - {chorv\adddot}}, - langczech = {{\v{c}e\v{s}tina}% - {\v{c}e\v{s}tina}}, - langdanish = {{d\'{a}n\v{c}ina}% - {d\'{a}n\adddot}}, - langdutch = {{holand\v{c}ina}% - {hol\adddot}}, - langenglish = {{angli\v{c}tina}% - {angl\adddot}}, -% langestonian = {{}{}},% FIXME: missing - langfinnish = {{f\'{i}n\v{c}ina}% - {f\'{i}n\adddot}}, - langfrench = {{franc\'{u}z\v{s}tina}% - {franc\adddot}}, - langgalician = {{gal\'icij\v{c}ina}% - {gal\adddot}}, - langgerman = {{nem\v{c}ina}% - {nem\adddot}}, - langgreek = {{gr\'{e}\v{c}tina}% - {gr\'{e}\v{c}tina}}, -% langhungarian = {{}{}}, % FIXME: missing - langitalian = {{talian\v{c}ina}% - {tal\adddot}}, - langjapanese = {{japon\v{c}ina}% - {jap\adddot}}, - langlatin = {{latin\v{c}ina}% - {lat\adddot}}, -% langlatvian = {{}{}},% FIXME: missing - langnorwegian = {{n\'{o}r\v{c}ina}% - {n\'{o}r\adddot}}, - langpolish = {{po\v{l}\v{s}tina}% - {po\v{l}\adddot}}, - langportuguese = {{portugal\v{c}ina}% - {portugal\adddot}}, - langrussian = {{ru\v{s}tina}% - {ru\v{s}tina}}, - langslovak = {{sloven\v{c}ina}% - {sloven\v{c}ina}}, - langslovene = {{slovin\v{c}ina}% - {slovin\v{c}ina}}, - langspanish = {{\v{s}paniel\v{c}ina}% - {\v{s}pan\adddot}}, - langswedish = {{\v{s}v\'{e}d\v{c}ina}% - {\v{s}v\'{e}d\adddot}}, - fromamerican = {{z\addnbspace americkej angli\v{c}tiny}% - {z\addnbspace amer\adddot angl\adddot}}, - frombrazilian = {{z\addnbspace braz\'{i}lskej portugal\v{c}iny}% - {z\addnbspace braz\adddotspace portugal\adddot}}, -% frombulgarian = {{}{}},% FIXME: missing - fromcatalan = {{z\addnbspace katal\'{a}n\v{c}iny}% - {z\addnbspace katal\adddot}}, - fromcroatian = {{z\addnbspace chorvat\v{c}iny}% - {z\addnbspace chorv\adddot}}, - fromczech = {{z\addnbspace \v{c}e\v{s}tiny}% - {z\addnbspace \v{c}e\v{s}tiny}}, - fromdanish = {{z\addnbspace d\'{a}n\v{c}iny}% - {z\addnbspace d\'{a}n\adddot}}, - fromdutch = {{z\addnbspace holand\v{c}iny}% - {z\addnbspace hol\adddot}}, - fromenglish = {{z\addnbspace angli\v{c}tiny}% - {z\addnbspace angl\adddot}}, -% fromestonian = {{}{}},% FIXME: missing - fromfinnish = {{z\addnbspace f\'{i}n\v{c}iny}% - {z\addnbspace f\'{i}n\adddot}}, - fromfrench = {{z\addnbspace franc\'{u}z\v{s}tiny}% - {z\addnbspace franc\adddot}}, - fromgalician = {{z\addnbspace gal\'icij\v{c}ina}% - {z\addbnspace gal\adddot}}, - fromgerman = {{z\addnbspace nem\v{c}iny}% - {z\addnbspace nem\adddot}}, - fromgreek = {{z\addnbspace gr\'{e}\v{c}tiny}% - {z\addnbspace gr\'{e}\v{c}tiny}}, -% fromhungarian = {{}{}}, % FIXME: missing - fromitalian = {{z\addnbspace talian\v{c}iny}% - {z\addnbspace tal\adddot}}, - fromjapanese = {{z\addnbspace japon\v{c}iny}% - {z\addnbspace jap\adddot}}, - fromlatin = {{z\addnbspace latin\v{c}iny}% - {z\addnbspace lat\adddot}}, -% fromlatvian = {{}{}},% FIXME: missing - fromnorwegian = {{z\addnbspace n\'{o}r\v{c}iny}% - {z\addnbspace n\'{o}r\adddot}}, - frompolish = {{z\addnbspace po\v{l}\v{s}tiny}% - {z\addnbspace po\v{l}\adddot}}, - fromportuguese = {{z\addnbspace portugal\v{c}iny}% - {z\addnbspace portugal\adddot}}, - fromrussian = {{z\addnbspace ru\v{s}tiny}% - {z\addnbspace ru\v{s}tiny}}, - fromslovak = {{zo sloven\v{c}iny}% - {zo sloven\v{c}iny}}, - fromslovene = {{zo slovin\v{c}iny}% - {zo slovin\v{c}iny}}, - fromspanish = {{zo \v{s}paniel\v{c}iny}% - {zo \v{s}pan\adddot}}, - fromswedish = {{zo \v{s}v\'{e}d\v{c}iny}% - {zo \v{s}v\'{e}d\adddot}}, - countryde = {{Nemecko}% - {DE}}, - countryeu = {{Eur\'{o}pska \'{u}nia}% - {EU}}, - countryep = {{Eur\'{o}pska \'{u}nia}% - {EP}}, - countryfr = {{Franc\'{u}zsko}% - {FR}}, - countryuk = {{Ve\v{l}k\'{a} Brit\'{a}nia}% - {GB}}, - countryus = {{Spojen\'{e} \v{S}t\'{a}ty Americk\'{e}}% - {US}}, - patent = {{patent}% - {pat\adddot}}, - patentde = {{nemeck\'{y} patent}% - {nem\adddot\ pat\adddot}}, - patenteu = {{eur\'{o}psky patent}% - {eur\adddot\ pat\adddot}}, - patentfr = {{franc\'{u}zsky patent}% - {franc\adddot\ pat\adddot}}, - patentuk = {{britsk\'{y} patent}% - {britsk\'{y} pat\adddot}}, - patentus = {{americk\'{y} patent}% - {US\adddotspace pat\adddot}}, - patreq = {{patentov\'{a} \v{z}iados\v{t}}% - {pat\adddot\ \v{z}iad\adddot}}, - patreqde = {{nemeck\'{a} patentov\'{a} \v{z}iados\v{t}}% - {nem\adddot\ pat\adddot\ \v{z}iad\adddot}}, - patreqeu = {{eur\'{o}pska patentov\'{a} \v{z}iados\v{t}}% - {eur\adddot\ pat\adddot\ \v{z}iad\adddot}}, - patreqfr = {{franc\'{u}zska patentov\'{a} \v{z}iados\v{t}}% - {franc\adddot\ pat\adddot\ \v{z}iad\adddot}}, - patrequk = {{britsk\'{a} patentov\'{a} \v{z}iados\v{t}}% - {brit\adddot\ pat\adddot\ \v{z}iad\adddot}}, - patrequs = {{US\adddotspace patentov\'{a} \v{z}iados\v{t}}% - {US\adddotspace pat\adddot\ \v{z}iad\adddot}}, - file = {{s\'{u}bor}% - {s\'{u}b\adddot}}, - library = {{kni\v{z}nica}% - {kni\v{z}nica}}, - abstract = {{abstrakt}% - {abst\adddot}}, - annotation = {{anot\'{a}cia}% - {anot\adddot}}, - commonera = {{n\'a\v{s}ho letopo\v{c}tu}{n\adddotspace l\adddot}}, - beforecommonera = {{pred na\v{s}\'{\i}m letopo\v{c}tom}{pred\ n\adddotspace l\adddot}}, - annodomini = {{po Kristovi}{po\ Kr\adddot}}, - beforechrist = {{pred Kristom}{pred\ Kr\adddot}}, -% circa = {{}{}},% FIXME: missing -% spring = {{}{}},% FIXME: missing -% summer = {{}{}},% FIXME: missing -% autumn = {{}{}},% FIXME: missing -% winter = {{}{}},% FIXME: missing + and = {{a}{a}}, + andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}}, + andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}}, + volume = {{zv\"{a}zok}{zv\adddot}}, + volumes = {{zv\"{a}zky}{zv\adddot}}, + involumes = {{in}{in}}, + jourvol = {{ro\v{c}n\'{\i}k}{ro\v{c}\adddot}}, + jourser = {{ed\'{\i}cia}{ed\adddot}}, + book = {{kniha}{kniha}}, + part = {{\v{c}as\v{t}}{\v{c}as\v{t}}}, + issue = {{\v{c}\'{\i}slo}{\v{c}\'{\i}slo}}, + newseries = {{nov\'{a} ed\'{\i}cia}{n\adddotspace ed\adddot}}, + oldseries = {{star\'{a} ed\'{\i}cia}{st\adddotspace ed\adddot}}, + edition = {{vydanie}{vyd\adddot}}, + reprint = {{dotla\v{c}}{dotl\adddot}}, + reprintof = {{dotla\v{c}}{dotl\adddot}}, + reprintas = {{dotla\v{c}en\'{e} ako}{dotl\adddotspace ako}}, + reprintfrom = {{dotla\v{c}en\'{e} z\addnbspace}{dotl\adddotspace z\addnbspace}}, + reviewof = {{recenzia}{recenz\adddot}}, + translationof = {{preklad}{prekl\adddot}}, + translationas = {{prelo\v{z}en\'{e} ako}{prel\adddotspace ako}}, + translationfrom = {{prelo\v{z}en\'{e} z\addnbspace}{prel\adddotspace z\addnbspace}}, + origpubas = {{p\^{o}vodne vydan\'{e} ako}{p\^{o}v\adddotspace vyd\adddotspace ako}}, + origpubin = {{p\^{o}vodne vydan\'{e} v\addnbspace roku}{p\^{o}v\adddotspace vyd\adddotspace v\addnbspace r\adddot}}, + astitle = {{ako}{ako}}, + bypublisher = {{}{}}, + nodate = {{nedatovan\'{e}}{b\adddot r\adddot}},% bez roku + page = {{strana}{s\adddot}}, + pages = {{strany}{s\adddot}}, + column = {{st\'{l}pec}{st\'{l}p\adddot}}, + columns = {{st\'{l}pce}{st\'{l}p\adddot}}, + line = {{riadok}{r\adddot}}, + lines = {{riadky}{r\adddot}}, + verse = {{ver\v{s}}{v\adddot}}, + verses = {{ver\v{s}e}{v\adddot}}, + section = {{sekcia}{\S}}, + sections = {{sekcie}{\S\S}}, + paragraph = {{odsek}{ods\adddot}}, + paragraphs = {{odseky}{ods\adddot}}, + pagetotal = {{strana}{s\adddot}}, + pagetotals = {{strany}{s\adddot}}, + columntotal = {{st\'{l}pec}{st\'{l}p\adddot}}, + columntotals = {{st\'{l}pce}{st\'{l}p\adddot}}, + linetotal = {{riadok}{r\adddot}}, + linetotals = {{riadky}{r\adddot}}, + versetotal = {{ver\v{s}}{v\adddot}}, + versetotals = {{ver\v{s}e}{v\adddot}}, + sectiontotal = {{sekcia}{\S}}, + sectiontotals = {{sekcie}{\S\S}}, + paragraphtotal = {{odsek}{ods\adddot}}, + paragraphtotals = {{odseky}{ods\adddot}}, + in = {{in}{in}}, + inseries = {{in}{in}}, + ofseries = {{z}{z}}, + number = {{\v{c}\'{\i}slo}{\v{c}\adddot}}, + chapter = {{kapitola}{kap\adddot}}, + bathesis = {{bakal\'{a}rska pr\'{a}ca}{bak\adddotspace pr\adddot}}, + mathesis = {{diplomov\'{a} pr\'{a}ca}{dipl\adddotspace pr\adddot}}, + phdthesis = {{dizerta\v{c}n\'{a} pr\'{a}ca}{diz\adddotspace pr\adddot}}, + candthesis = {{kandid\'{a}tska pr\'{a}ca}{kand\adddotspace pr\adddot}},% FIXME: unsure + resreport = {{v\'{y}skumn\'{a} spr\'{a}va}{v\'{y}sk\adddot\ spr\adddot}}, + techreport = {{technick\'{a} spr\'{a}va}{tech\adddotspace spr\adddot}}, + software = {{po\v{c}\'{\i}ta\v{c}ov\'{y} softv\'{e}r}{soft\adddot}}, + datacd = {{CD-ROM}{CD-ROM}}, + audiocd = {{audio CD}{audio CD}}, + version = {{verzia}{ver\adddot}}, + url = {{URL}{URL}}, + urlfrom = {{dostupn\'{e} z\addnbspace}{dostupn\'{e} z\addnbspace}}, + urlseen = {{citovan\'{e}}{cit\adddot}}, + inpreparation = {{v\addnbspace pr\'{\i}prave}{v\addnbspace pr\'{\i}prave}}, + submitted = {{odoslan\'{e}}{odosl\adddot}}, + forthcoming = {{bud\'{u}ce}{bud\adddot}}, + inpress = {{v\addnbspace tla\v{c}i}{v\addnbspace tla\v{c}i}}, + prepublished = {{pred publikovan\'{\i}m}{pred publ\adddot}}, + citedas = {{\v{d}alej citovan\'{e} ako}{\v{d}alej cit\adddotspace ako}}, + thiscite = {{obzvl\'{a}\v{s}\v{t}}{obzvl\adddot}}, + seenote = {{vi\v{d} pozn\'{a}mka}{vi\v{d} pozn\adddot}}, + quotedin = {{citovan\'{e} v\addnbspace}{cit\adddotspace v\addnbspace}}, + idem = {{idem}{idem}}, + idemsm = {{idem}{idem}}, + idemsf = {{eadem}{eadem}}, + idemsn = {{idem}{idem}}, + idempm = {{eidem}{eidem}}, + idempf = {{eaedem}{eaedem}}, + idempn = {{eadem}{eadem}}, + idempp = {{eidem}{eidem}}, + ibidem = {{ibidem}{ibid\adddot}}, + opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}}, + loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}}, + confer = {{cf\adddot}{cf\adddot}}, + sequens = {{sq\adddot}{sq\adddot}}, + sequentes = {{sqq\adddot}{sqq\adddot}}, + passim = {{passim}{pass\adddot}}, + see = {{vi\v{d}}{vi\v{d}}}, + seealso = {{vi\v{d} tie\v{z}}{vi\v{d} tie\v{z}}}, + backrefpage = {{citovan\'{e} na strane}{cit\adddotspace na str\adddot}}, + backrefpages = {{citovan\'{e} na stran\'{a}ch}{cit\adddotspace na s\adddot}}, + january = {{janu\'{a}r}{jan\adddot}}, + february = {{febru\'{a}r}{feb\adddot}}, + march = {{marec}{mar\adddot}}, + april = {{apr\'{\i}l}{apr\adddot}}, + may = {{m\'{a}j}{m\'{a}j}}, + june = {{j\'{u}n}{j\'{u}n}}, + july = {{j\'{u}l}{j\'{u}l}}, + august = {{august}{aug\adddot}}, + september = {{september}{sept\adddot}}, + october = {{okt\'{o}ber}{okt\adddot}}, + november = {{november}{nov\adddot}}, + december = {{december}{dec\adddot}}, + langamerican = {{americk\'{a} angli\v{c}tina}{am\adddot\ angl\adddot}}, + langbrazilian = {{braz\'{\i}lska portugal\v{c}ina}{braz\adddot\ portugal\adddot}}, + langbulgarian = {{bulhar\v{c}ina}{bulh\adddot}}, + langcatalan = {{katal\'{a}n\v{c}ina}{katal\adddot}}, + langcroatian = {{chorv\'{a}t\v{c}ina}{chorv\adddot}}, + langczech = {{\v{c}e\v{s}tina}{\v{c}e\v{s}tina}}, + langdanish = {{d\'{a}n\v{c}ina}{d\'{a}n\adddot}}, + langdutch = {{holand\v{c}ina}{hol\adddot}}, + langenglish = {{angli\v{c}tina}{angl\adddot}}, + langestonian = {{est\'{o}n\v{c}ina}{est\adddot}}, + langfinnish = {{f\'{\i}n\v{c}ina}{f\'{\i}n\adddot}}, + langfrench = {{franc\'{u}z\v{s}tina}{franc\adddot}}, + langgalician = {{gal\'{\i}cij\v{c}ina}{gal\adddot}}, + langgerman = {{nem\v{c}ina}{nem\adddot}}, + langgreek = {{gr\'{e}\v{c}tina}{gr\'{e}\v{c}tina}}, + langhungarian = {{ma\v{d}ar\v{c}ina}{ma\v{d}\adddot}}, + langitalian = {{talian\v{c}ina}{tal\adddot}}, + langjapanese = {{japon\v{c}ina}{jap\adddot}}, + langlatin = {{latin\v{c}ina}{lat\adddot}}, + langlatvian = {{loty\v{s}tina}{lot\adddot}}, + langnorwegian = {{n\'{o}r\v{c}ina}{n\'{o}r\adddot}}, + langpolish = {{po\v{l}\v{s}tina}{po\v{l}\adddot}}, + langportuguese = {{portugal\v{c}ina}{port\adddot}}, + langrussian = {{ru\v{s}tina}{ru\v{s}tina}}, + langserbian = {{srb\v{c}ina}{srb\adddot}}, + langslovak = {{sloven\v{c}ina}{sloven\v{c}ina}}, + langslovene = {{slovin\v{c}ina}{slovin\v{c}ina}}, + langspanish = {{\v{s}paniel\v{c}ina}{\v{s}pan\adddot}}, + langswedish = {{\v{s}v\'{e}d\v{c}ina}{\v{s}v\'{e}d\adddot}}, + langukrainian = {{ukrajin\v{c}ina}{ukr\adddot}}, + fromamerican = {{z\addnbspace americkej angli\v{c}tiny}{z\addnbspace amer\adddot\ angl\adddot}}, + frombrazilian = {{z\addnbspace braz\'{\i}lskej portugal\v{c}iny}{z\addnbspace braz\adddotspace portugal\adddot}}, + frombulgarian = {{z\addnbspace bulhar\v{c}iny}{z\addnbspace bulh\adddot}}, + fromcatalan = {{z\addnbspace katal\'{a}n\v{c}iny}{z\addnbspace katal\adddot}}, + fromcroatian = {{z\addnbspace chorvat\v{c}iny}{z\addnbspace chorv\adddot}}, + fromczech = {{z\addnbspace \v{c}e\v{s}tiny}{z\addnbspace \v{c}e\v{s}tiny}}, + fromdanish = {{z\addnbspace d\'{a}n\v{c}iny}{z\addnbspace d\'{a}n\adddot}}, + fromdutch = {{z\addnbspace holand\v{c}iny}{z\addnbspace hol\adddot}}, + fromenglish = {{z\addnbspace angli\v{c}tiny}{z\addnbspace angl\adddot}}, + fromestonian = {{z\addnbspace est\'{o}n\v{c}iny}{z\addnbspace est\adddot}}, + fromfinnish = {{z\addnbspace f\'{\i}n\v{c}iny}{z\addnbspace f\'{\i}n\adddot}}, + fromfrench = {{z\addnbspace franc\'{u}z\v{s}tiny}{z\addnbspace franc\adddot}}, + fromgalician = {{z\addnbspace gal\'{\i}cij\v{c}ina}{z\addbnspace gal\adddot}}, + fromgerman = {{z\addnbspace nem\v{c}iny}{z\addnbspace nem\adddot}}, + fromgreek = {{z\addnbspace gr\'{e}\v{c}tiny}{z\addnbspace gr\'{e}\v{c}tiny}}, + fromhungarian = {{z\addnbspace ma\v{d}ar\v{c}iny}{z\addnbspace ma\v{d}\adddot}}, + fromitalian = {{z\addnbspace talian\v{c}iny}{z\addnbspace tal\adddot}}, + fromjapanese = {{z\addnbspace japon\v{c}iny}{z\addnbspace jap\adddot}}, + fromlatin = {{z\addnbspace latin\v{c}iny}{z\addnbspace lat\adddot}}, + fromlatvian = {{z\addnbspace loty\v{s}tiny}{z\addnbspace lot\adddot}}, + fromnorwegian = {{z\addnbspace n\'{o}r\v{c}iny}{z\addnbspace n\'{o}r\adddot}}, + frompolish = {{z\addnbspace po\v{l}\v{s}tiny}{z\addnbspace po\v{l}\adddot}}, + fromportuguese = {{z\addnbspace portugal\v{c}iny}{z\addnbspace portugal\adddot}}, + fromrussian = {{z\addnbspace ru\v{s}tiny}{z\addnbspace ru\v{s}tiny}}, + fromserbian = {{zo srb\v{c}iny}{zo srb\adddot}}, + fromslovak = {{zo sloven\v{c}iny}{zo sloven\v{c}iny}}, + fromslovene = {{zo slovin\v{c}iny}{zo slovin\v{c}iny}}, + fromspanish = {{zo \v{s}paniel\v{c}iny}{zo \v{s}pan\adddot}}, + fromswedish = {{zo \v{s}v\'{e}d\v{c}iny}{zo \v{s}v\'{e}d\adddot}}, + fromukrainian = {{z\addnbspace ukrajin\v{c}iny}{z\addnbspace ukr\adddot}}, + countryde = {{Nemecko}{DE}}, + countryeu = {{Eur\'{o}pska \'{u}nia}{EU}}, + countryep = {{Eur\'{o}pska \'{u}nia}{EP}}, + countryfr = {{Franc\'{u}zsko}{FR}}, + countryuk = {{Ve\v{l}k\'{a} Brit\'{a}nia}{GB}}, + countryus = {{Spojen\'{e} \v{s}t\'{a}ty americk\'{e}}{US}}, + patent = {{patent}{pat\adddot}}, + patentde = {{nemeck\'{y} patent}{nem\adddot\ pat\adddot}}, + patenteu = {{eur\'{o}psky patent}{eur\adddot\ pat\adddot}}, + patentfr = {{franc\'{u}zsky patent}{franc\adddot\ pat\adddot}}, + patentuk = {{britsk\'{y} patent}{brit\adddot\ pat\adddot}}, + patentus = {{US patent}{US pat\adddot}}, + patreq = {{patentov\'{a} \v{z}iados\v{t}}{pat\adddot\ \v{z}iad\adddot}}, + patreqde = {{nemeck\'{a} patentov\'{a} \v{z}iados\v{t}}{nem\adddot\ pat\adddot\ \v{z}iad\adddot}}, + patreqeu = {{eur\'{o}pska patentov\'{a} \v{z}iados\v{t}}{eur\adddot\ pat\adddot\ \v{z}iad\adddot}}, + patreqfr = {{franc\'{u}zska patentov\'{a} \v{z}iados\v{t}}{franc\adddot\ pat\adddot\ \v{z}iad\adddot}}, + patrequk = {{britsk\'{a} patentov\'{a} \v{z}iados\v{t}}{brit\adddot\ pat\adddot\ \v{z}iad\adddot}}, + patrequs = {{US patentov\'{a} \v{z}iados\v{t}}{US pat\adddot\ \v{z}iad\adddot}}, + file = {{s\'{u}bor}{s\'{u}b\adddot}}, + library = {{kni\v{z}nica}{kni\v{z}nica}}, + abstract = {{abstrakt}{abst\adddot}}, + annotation = {{anot\'{a}cia}{anot\adddot}}, + commonera = {{n\'{a}\v{s}ho letopo\v{c}tu}{n\adddotspace l\adddot}}, + beforecommonera = {{pred na\v{s}\'{\i}m letopo\v{c}tom}{pred n\adddotspace l\adddot}}, + annodomini = {{po Kristovi}{po Kr\adddot}}, + beforechrist = {{pred Kristom}{pred Kr\adddot}}, + circa = {{cirka}{ca\adddot}}, + spring = {{jar}{jar}}, + summer = {{leto}{leto}}, + autumn = {{jese\v{n}}{jese\v{n}}}, + winter = {{zima}{zima}}, am = {{AM}{AM}}, pm = {{PM}{PM}}, } diff --git a/macros/latex/contrib/biblatex/latex/lbx/slovene.lbx b/macros/latex/contrib/biblatex/latex/lbx/slovene.lbx index 225361ed45..d1c1df5f41 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/slovene.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/slovene.lbx @@ -40,13 +40,17 @@ \def\mkbibordedition{\mkbibordinal}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/spanish.lbx b/macros/latex/contrib/biblatex/latex/lbx/spanish.lbx index 3326fe55d2..9f07124a8d 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/spanish.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/spanish.lbx @@ -53,13 +53,17 @@ \def\mkbibordedition{\mkbibfemord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/biblatex/latex/lbx/swedish.lbx b/macros/latex/contrib/biblatex/latex/lbx/swedish.lbx index d0b3cf1747..2ac4fb301b 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/swedish.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/swedish.lbx @@ -77,13 +77,17 @@ Swedish dates. Using format 'short' instead}% \mkdaterangefull{short}}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% @@ -332,7 +336,7 @@ origpubin = {{ursprungligen publicerad}{ursprungligen publ\adddot}}, astitle = {{som}{som}}, bypublisher = {{av}{av}}, - nodate = {{u\adddot d\adddot}{n\adddot d\adddot}},%FIXME + nodate = {{u\adddot\,\aa \adddot}{u\adddot\,\aa \adddot}}, page = {{sidan}{s\adddot}}, pages = {{sidorna}{s\adddot}}, column = {{spalt}{sp\adddot}}, diff --git a/macros/latex/contrib/biblatex/latex/lbx/turkish.lbx b/macros/latex/contrib/biblatex/latex/lbx/turkish.lbx new file mode 100644 index 0000000000..ad999c180e --- /dev/null +++ b/macros/latex/contrib/biblatex/latex/lbx/turkish.lbx @@ -0,0 +1,552 @@ +\ProvidesFile{turkish.lbx} +[\abx@lbxid] + +\DeclareRedundantLanguages{turkish}{turkish} + +\DeclareBibliographyExtras{% + \DeclareCapitalPunctuation{.!?}% + \protected\def\bibrangedash{% + \textendash\penalty\hyphenpenalty}% breakable dash + \let\finalandcomma=\empty + \let\finalandsemicolon=\empty + \protected\def\mkbibordinal#1{\stripzeros{#1}\adddot}% + \protected\def\mkbibmascord{\mkbibordinal}% + \protected\def\mkbibfemord{\mkbibordinal}% + \protected\def\mkbibneutord{\mkbibordinal}% + \protected\def\mkbibdatelong#1#2#3{% + \iffieldundef{#3} + {} + {\thefield{#3}% + \iffieldundef{#2}{}{\nobreakspace}}% + \iffieldundef{#2} + {} + {\mkbibmonth{\thefield{#2}}% + \iffieldundef{#1}{}{\space}}% + \iffieldbibstring{#1} + {\bibstring{\thefield{#1}}} + {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}% + \protected\def\mkbibdateshort#1#2#3{% + \iffieldundef{#3} + {} + {\mkdayzeros{\thefield{#3}}% + \iffieldundef{#2}{}{/}}% + \iffieldundef{#2} + {} + {\mkmonthzeros{\thefield{#2}}% + \iffieldundef{#1}{}{/}}% + \iffieldbibstring{#1} + {\bibstring{\thefield{#1}}} + {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}% + \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% + \iffieldundef{#4}{} + {\bibtimezonesep + \mkbibtimezone{\thefield{#4}}}}% + \expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{% + \stripzeros{\mktimehh{\thefield{#1}}}\bibtimesep + \forcezerosmdt{\thefield{#2}}% + \iffieldundef{#3}{} + {\bibtimesep + \forcezerosmdt{\thefield{#3}}}% + \space + \ifnumless{\thefield{#1}}{12} + {\bibstring{am}} + {\bibstring{pm}}% + \iffieldundef{#4}{} + {\space\bibtimezonesep + \parentext{\mkbibtimezone{\thefield{#4}}}}}% + \protected\def\mkbibseasondateshort#1#2{% + \mkbibseason{\thefield{#2}}% + \iffieldundef{#1}{}{\space}% + \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}% + \protected\def\mkbibseasondatelong#1#2{% + \mkbibseason{\thefield{#2}}% + \iffieldundef{#1}{}{\space}% + \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}% + \savecommand\lbx@lfromlang + \savecommand\lbx@sfromlang + \def\lbx@lfromlang{% + \iflistundef{origlanguage} + {} + {\printlist[lfromoriglanguage]{origlanguage}\space}}% + \def\lbx@sfromlang{% + \iflistundef{origlanguage} + {} + {\printlist[sfromoriglanguage]{origlanguage}\space}}% +} + +\UndeclareBibliographyExtras{% + \restorecommand\lbx@lfromlang + \restorecommand\lbx@sfromlang +} + +\DeclareBibliographyStrings{% + bibliography = {{Kaynak\c{c}a}{Kaynak\c{c}a}}, + references = {{Kaynaklar}{Kaynaklar}}, + shorthands = {{K\i saltmalar dizini}{K\i saltmalar}}, + editor = {{edit\"{o}r}{ed\adddot}}, + editors = {{edit\"{o}rler}{ed\adddot}}, + compiler = {{derleyen}{der\adddot}}, + compilers = {{derleyenler}{der\adddot}}, + redactor = {{yay\i na haz\i rlayan}{yay\adddot\ haz\adddot}}, + redactors = {{yay\i na haz\i rlayanlar}{yay\adddot\ haz\adddot}}, + reviser = {{tashih eden}{tashih\adddot}}, + revisers = {{tashih edenler}{tashih\adddot}}, + founder = {{kurucu}{kur\adddot}}, + founders = {{kurucular}{kur\adddot}}, + continuator = {{tamamlayan}{tam\adddot}}, + continuators = {{tamamlayanlar}{tam\adddot}}, + collaborator = {{ortak}{ortak}}, + collaborators = {{ortaklar}{ortaklar}}, + translator = {{\c{c}eviren}{\c{c}ev\adddot}}, + translators = {{\c{c}evirenler}{\c{c}ev\adddot}}, + commentator = {{yorumlayan}{yrm\adddot}}, + commentators = {{yorumlayanlar}{yrm\adddot}}, + annotator = {{a\c{c}\i klayan}{a\c{c}\i k\adddot}}, + annotators = {{a\c{c}\i klayanlar}{a\c{c}\i k\adddot}}, + commentary = {{yorum}{yrm\adddot}}, + annotations = {{a\c{c}\i klamalar}{a\c{c}\i k\adddot}}, + introduction = {{giri\c{s}}{gir\adddot}}, + foreword = {{\"{o}ns\"{o}z}{\"{o}ns\adddot}}, + afterword = {{sons\"{o}z}{sons\adddot}}, + editortr = {{edit\"{o}r ve \c{c}eviren}% + {ed\adddot\ ve \c{c}ev\adddot}}, + editorstr = {{edit\"{o}rler ve \c{c}evirenler}% + {ed\adddot\ ve \c{c}ev\adddot}}, + editorco = {{edit\"{o}r ve yorumlayan}% + {ed\adddot\ ve yrm\adddot}}, + editorsco = {{edit\"{o}rler ve yorumlayanlar}% + {ed\adddot\ ve yrm\adddot}}, + editoran = {{edit\"{o}r ve a\c{c}\i klayan}% + {ed\adddot\ ve a\c{c}\i k\adddot}}, + editorsan = {{edit\"{o}rler ve a\c{c}\i klayanlar}% + {ed\adddot\ ve a\c{c}\i k\adddot}}, + editorin = {{edit\"{o}r ve giri\c{s}}% + {ed\adddot\ ve gir\adddot}}, + editorsin = {{edit\"{o}rler ve giri\c{s}}% + {ed\adddot\ ve gir\adddot}}, + editorfo = {{edit\"{o}r ve \"{o}ns\"{o}z}% + {ed\adddot\ ve \"{o}ns\adddot}}, + editorsfo = {{edit\"{o}rler ve \"{o}ns\"{o}z}% + {ed\adddot\ ve \"{o}ns\adddot}}, + editoraf = {{edit\"{o}r ve sons\"{o}z}% + {ed\adddot\ ve sons\adddot}}, + editorsaf = {{edit\"{o}rler ve sons\"{o}z}% + {ed\adddot\ ve sons\adddot}}, + editortrco = {{edit\"{o}r, \c{c}eviren and yorumlayan}% + {ed\adddot, \c{c}ev\adddot\ ve yrm\adddot}}, + editorstrco = {{edit\"{o}rler, \c{c}evirenler ve yorumlayanlar}% + {ed\adddot, \c{c}ev\adddot\ ve yrm\adddot}}, + editortran = {{edit\"{o}r, \c{c}eviren ve a\c{c}\i klayan}% + {ed\adddot, \c{c}ev\adddot\ ve a\c{c}\i k\adddot}}, + editorstran = {{edit\"{o}rler, \c{c}evirenler ve a\c{c}\i klayanlar}% + {ed\adddot, \c{c}ev\adddot\ ve a\c{c}\i k\adddot}}, + editortrin = {{edit\"{o}r, \c{c}eviren ve giri\c{s}}% + {ed\adddot, \c{c}ev\adddot\ ve gir\adddot}}, + editorstrin = {{edit\"{o}rler, \c{c}evirenler ve giri\c{s}}% + {ed\adddot, \c{c}ev\adddot\ ve gir\adddot}}, + editortrfo = {{edit\"{o}r, \c{c}eviren ve \"{o}ns\"{o}z}% + {ed\adddot, \c{c}ev\adddot\ ve \"{o}ns\adddot}}, + editorstrfo = {{edit\"{o}rler, \c{c}evirenler ve \"{o}ns\"{o}z}% + {ed\adddot, \c{c}ev\adddot\ ve \"{o}ns\adddot}}, + editortraf = {{edit\"{o}r, \c{c}eviren ve sons\"{o}z}% + {ed\adddot, \c{c}ev\adddot\ ve sons\adddot}}, + editorstraf = {{edit\"{o}rler, \c{c}evirenler ve sons\"{o}z}% + {ed\adddot, \c{c}ev\adddot\ ve sons\adddot}}, + editorcoin = {{edit\"{o}r, yorumlayan ve giri\c{s}}% + {ed\adddot, yrm\adddot\ ve gir\adddot}}, + editorscoin = {{edit\"{o}rler, yorumlayanlar ve giri\c{s}}% + {ed\adddot, yrm\adddot\ ve gir\adddot}}, + editorcofo = {{edit\"{o}r, yorumlayan ve \"{o}ns\"{o}z}% + {ed\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + editorscofo = {{edit\"{o}rler, yorumlayanlar ve \"{o}ns\"{o}z}% + {ed\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + editorcoaf = {{edit\"{o}r, yorumlayan ve sons\"{o}z}% + {ed\adddot, yrm\adddot\ ve sons\adddot}}, + editorscoaf = {{edit\"{o}rler, yorumlayanlar ve sons\"{o}z}% + {ed\adddot, yrm\adddot\ ve sons\adddot}}, + editoranin = {{edit\"{o}r, a\c{c}\i klayan ve giri\c{s}}% + {ed\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + editorsanin = {{edit\"{o}rler, a\c{c}\i klayanlar ve giri\c{s}}% + {ed\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + editoranfo = {{edit\"{o}r, a\c{c}\i klayan ve \"{o}ns\"{o}z}% + {ed\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + editorsanfo = {{edit\"{o}rler, a\c{c}\i klayanlar ve \"{o}ns\"{o}z}% + {ed\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + editoranaf = {{edit\"{o}r, a\c{c}\i klayan ve sons\"{o}z}% + {ed\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + editorsanaf = {{edit\"{o}rler, a\c{c}\i klayanlar ve sons\"{o}z}% + {ed\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + editortrcoin = {{edit\"{o}r, \c{c}eviren, yorumlayan ve giri\c{s}}% + {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}}, + editorstrcoin = {{edit\"{o}rler, \c{c}evirenler, yorumlayanlar ve giri\c{s}}% + {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}}, + editortrcofo = {{edit\"{o}r, \c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}% + {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + editorstrcofo = {{edit\"{o}rler, \c{c}evirenler, yorumlayanlar ve \"{o}ns\"{o}z}% + {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + editortrcoaf = {{edit\"{o}r, \c{c}eviren, yorumlayan ve sons\"{o}z}% + {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}}, + editorstrcoaf = {{edit\"{o}rler, \c{c}evirenler, yorumlayanlar ve sons\"{o}z}% + {ed\adddot, \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}}, + editortranin = {{edit\"{o}r, \c{c}eviren, a\c{c}\i klayan ve giri\c{s}}% + {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + editorstranin = {{edit\"{o}rler, \c{c}evirenler, a\c{c}\i klayanlar ve giri\c{s}}% + {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + editortranfo = {{edit\"{o}r, \c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}% + {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + editorstranfo = {{edit\"{o}rler, \c{c}evirenler, a\c{c}\i klayanlar ve \"{o}ns\"{o}z}% + {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + editortranaf = {{edit\"{o}r, \c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}% + {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + editorstranaf = {{edit\"{o}rler, \c{c}evirenler, a\c{c}\i klayanlar ve sons\"{o}z}% + {ed\adddot, \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + translatorco = {{\c{c}eviren ve yorumlayan}% + {\c{c}ev\adddot\ ve yrm\adddot}}, + translatorsco = {{\c{c}evirenler ve yorumlayanlar}% + {\c{c}ev\adddot\ ve yrm\adddot}}, + translatoran = {{\c{c}eviren ve a\c{c}\i klayan}% + {\c{c}ev\adddot\ ve a\c{c}\i k\adddot}}, + translatorsan = {{\c{c}evirenler ve a\c{c}\i klayanlar}% + {\c{c}ev\adddot\ ve a\c{c}\i k\adddot}}, + translatorin = {{\c{c}eviren ve giri\c{s}}% + {\c{c}ev\adddot\ ve gir\adddot}}, + translatorsin = {{\c{c}evirenler ve giri\c{s}}% + {\c{c}ev\adddot\ ve gir\adddot}}, + translatorfo = {{\c{c}eviren ve \"{o}ns\"{o}z}% + {\c{c}ev\adddot\ ve \"{o}ns\adddot}}, + translatorsfo = {{\c{c}evirenler ve \"{o}ns\"{o}z}% + {\c{c}ev\adddot\ ve \"{o}ns\adddot}}, + translatoraf = {{\c{c}eviren ve sons\"{o}z}% + {\c{c}ev\adddot\ ve sons\adddot}}, + translatorsaf = {{\c{c}evirenler ve sons\"{o}z}% + {\c{c}ev\adddot\ ve sons\adddot}}, + translatorcoin = {{\c{c}eviren, yorumlayan ve giri\c{s}}% + {\c{c}ev\adddot, yrm\adddot\ ve gir\adddot}}, + translatorscoin = {{\c{c}evirenler, yorumlayanlar ve giri\c{s}}% + {\c{c}ev\adddot, yrm\adddot\ ve gir\adddot}}, + translatorcofo = {{\c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}% + {\c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + translatorscofo = {{\c{c}evirenler, yorumlayanlar ve \"{o}ns\"{o}z}% + {\c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + translatorcoaf = {{\c{c}eviren, yorumlayan ve sons\"{o}z}% + {\c{c}ev\adddot, yrm\adddot\ ve sons\adddot}}, + translatorscoaf = {{\c{c}evirenler, yorumlayanlar ve sons\"{o}z}% + {\c{c}ev\adddot, yrm\adddot\ ve sons\adddot}}, + translatoranin = {{\c{c}eviren, a\c{c}\i klayan ve giri\c{s}}% + {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + translatorsanin = {{\c{c}evirenler, a\c{c}\i klayanlar ve giri\c{s}}% + {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + translatoranfo = {{\c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}% + {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + translatorsanfo = {{\c{c}evirenler, a\c{c}\i klayanlar ve \"{o}ns\"{o}z}% + {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + translatoranaf = {{\c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}% + {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + translatorsanaf = {{\c{c}evirenler, a\c{c}\i klayanlar ve sons\"{o}z}% + {\c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + organizer = {{organizat\"{o}r}{org\adddot}}, + organizers = {{organizat\"{o}rler}{org\adddot}}, + byorganizer = {{organizat\"{o}r}{org\adddot}}, + byauthor = {{yazar}{yazar}}, + byeditor = {{edit\"{o}r}{ed\adddot}}, + bycompiler = {{derleyen}{der\adddot}}, + byredactor = {{yay\i na haz\i rlayan}{yay\adddot\ haz\adddot}}, + byreviser = {{tashih}{tashih}}, + byreviewer = {{de\u{g}erlendiren}{de\u{g}\adddot}}, + byfounder = {{kurucu}{kur\adddot}}, + bycontinuator = {{tamamlayan}{tam\adddot}}, + bycollaborator = {{ortakla\c{s}a yapanlar}{ortak\adddot\ yap\adddot}}, + bytranslator = {{\lbx@lfromlang \c{c}eviren}{\lbx@sfromlang \c{c}ev\adddot}}, + bycommentator = {{yorumlayan}{yrm\adddot}}, + byannotator = {{a\c{c}\i klayan}{a\c{c}\i k\adddot}}, + withcommentator = {{yorumlar\i yla katk\i da bulunan}{yrm\adddot\ kat\adddot\ bul\adddot}}, + withannotator = {{a\c{c}\i klamalar\i yla katk\i da bulunan}{a\c{c}\i k\adddot\ kat\adddot\ bul\adddot}}, + withintroduction = {{giri\c{si yazan}}{gir\adddot\ yaz\adddot}}, + withforeword = {{\"{o}ns\"{o}z\"{u} yazan}{\"{o}ns\adddot\ yaz\adddot}},% + withafterword = {{sons\"{o}z\"{u} yazan}{sons\adddot\ yaz\adddot}}, + byeditortr = {{edit\"{o}r ve \lbx@lfromlang \c{c}eviren}% + {ed\adddot\ ve \lbx@sfromlang \c{c}ev\adddot}}, + byeditorco = {{edit\"{o}r ve yorumlayan}% + {ed\adddot\ ve yrm\adddot}}, + byeditoran = {{edit\"{o}r ve a\c{c}\i klayan}% + {ed\adddot\ ve a\c{c}\i k\adddot}}, + byeditorin = {{edit\"{o}r ve giri\c{s}}% + {ed\adddot\ ve gir\adddot}}, + byeditorfo = {{edit\"{o}r ve \"{o}ns\"{o}z}% + {ed\adddot\ ve \"{o}ns\adddot}}, + byeditoraf = {{edit\"{o}r ve sons\"{o}z}% + {ed\adddot\ ve sons\adddot}}, + byeditortrco = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve yorumlayan}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve yrm\adddot}}, + byeditortran = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve a\c{c}\i klayan}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve a\c{c}\i k\adddot}}, + byeditortrin = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve giri\c{s}}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve gir\adddot}}, + byeditortrfo = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve \"{o}ns\"{o}z}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve \"{o}ns\adddot}}, + byeditortraf = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren ve sons\"{o}z}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot\ ve sons\adddot}}, + byeditorcoin = {{edit\"{o}r, yorumlayan ve giri\c{s}}% + {ed\adddot, yrm\adddot\ ve gir\adddot}}, + byeditorcofo = {{edit\"{o}r, yorumlayan ve \"{o}ns\"{o}z}% + {ed\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + byeditorcoaf = {{edit\"{o}r, yorumlayan ve sons\"{o}z}% + {ed\adddot, yrm\adddot\ ve sons\adddot}}, + byeditoranin = {{edit\"{o}r, a\c{c}\i klayan ve giri\c{s}}% + {ed\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + byeditoranfo = {{edit\"{o}r, a\c{c}\i klayan ve \"{o}ns\"{o}z}% + {ed\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + byeditoranaf = {{edit\"{o}r, a\c{c}\i klayan ve sons\"{o}z}% + {ed\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + byeditortrcoin = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, yorumlayan ve giri\c{s}}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}}, + byeditortrcofo = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + byeditortrcoaf = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, yorumlayan ve sons\"{o}z}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}}, + byeditortranin = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve giri\c{s}}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + byeditortranfo = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + byeditortranaf = {{edit\"{o}r, \lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}% + {ed\adddot, \lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + bytranslatorco = {{\lbx@lfromlang \c{c}eviren ve yorumlayan}% + {\lbx@sfromlang \c{c}ev\adddot\ ve yrm\adddot}}, + bytranslatoran = {{\lbx@lfromlang \c{c}eviren ve a\c{c}\i klayan}% + {\lbx@sfromlang \c{c}ev\adddot\ ve a\c{c}\i k\adddot}}, + bytranslatorin = {{\lbx@lfromlang \c{c}eviren ve giri\c{s}}% + {\lbx@sfromlang \c{c}ev\adddot\ ve gir\adddot}}, + bytranslatorfo = {{\lbx@lfromlang \c{c}eviren ve \"{o}ns\"{o}z}% + {\lbx@sfromlang \c{c}ev\adddot\ ve \"{o}ns\adddot}}, + bytranslatoraf = {{\lbx@lfromlang \c{c}eviren ve sons\"{o}z}% + {\lbx@sfromlang \c{c}ev\adddot\ ve sons\adddot}}, + bytranslatorcoin = {{\lbx@lfromlang \c{c}eviren, yorumlayan ve giri\c{s}}% + {\lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve gir\adddot}}, + bytranslatorcofo = {{\lbx@lfromlang \c{c}eviren, yorumlayan ve \"{o}ns\"{o}z}% + {\lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve \"{o}ns\adddot}}, + bytranslatorcoaf = {{\lbx@lfromlang \c{c}eviren, yorumlayan ve sons\"{o}z}% + {\lbx@sfromlang \c{c}ev\adddot, yrm\adddot\ ve sons\adddot}}, + bytranslatoranin = {{\lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve giri\c{s}}% + {\lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve gir\adddot}}, + bytranslatoranfo = {{\lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve \"{o}ns\"{o}z}% + {\lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve \"{o}ns\adddot}}, + bytranslatoranaf = {{\lbx@lfromlang \c{c}eviren, a\c{c}\i klayan ve sons\"{o}z}% + {\lbx@sfromlang \c{c}ev\adddot, a\c{c}\i k\adddot\ ve sons\adddot}}, + and = {{ve}{ve}}, + andothers = {{ve di\u{g}erleri}{ve di\u{g}\adddot}}, + andmore = {{ve di\u{g}erleri}{ve di\u{g}\adddot}}, + volume = {{cilt}{c\adddot}}, + volumes = {{cilt}{c\adddot}}, + involumes = {{i\c{c}inde}{i\c{c}inde}}, + jourvol = {{cilt}{c\adddot}}, + jourser = {{seri}{seri}}, + book = {{kitap}{kitap}}, + part = {{k\i s\i m}{k\i s\i m}}, + issue = {{say\i}{say\i}}, + newseries = {{yeni seri}{yeni seri}}, + oldseries = {{eski seri}{eski seri}}, + edition = {{bask\i}{bs\adddot}}, + reprint = {{yeni bask\i s\i}{yeni bask\i s\i}}, + reprintof = {{yeni bask\i s\i}{yeni bask\i s\i}}, + reprintas = {{yeni bask\i s\i}{yeni bask\i s\i}}, + reprintfrom = {{yeni bask\i s\i}{yeni bask\i s\i}}, + reviewof = {{derlenen eser}{der\adddot\ eser}}, + translationof = {{\c{c}evirilen eser}{\c{c}ev\adddot\ eser}}, + translationas = {{\c{c}evirilen eser}{\c{c}ev\adddot\ eser}}, + translationfrom = {{\c{c}evirilen eser}{\c{c}ev\adddot\ eser}}, + origpubas = {{as\i l eser}{as\i l eser}}, + origpubin = {{as\i l eser yay\i n tarihi}{as\i l eser yay\i n tarihi}}, + astitle = {{yeni ba\c{s}l\i k}{yeni ba\c{s}l\i k}}, + bypublisher = {{yay\i n evi}{yay\i n evi}}, + nodate = {{tarih yok}{t\adddot y\adddot}}, + page = {{sayfa}{s\adddot}}, + pages = {{sayfalar}{ss\adddot}}, + column = {{s\"{u}tun}{s\"{u}t\adddot}}, + columns = {{s\"{u}tunlar}{s\"{u}t\adddot}}, + line = {{sat\i r}{sat\adddot}}, + lines = {{sat\i rlar}{sat\adddot}}, + verse = {{m\i sra}{m\i s\adddot}}, + verses = {{m\i sralar}{m\i s\adddot}}, + section = {{b\"{o}l\"{u}m}{b\"{o}l\adddot}}, + sections = {{b\"{o}l\"{u}mler}{b\"{o}l\adddot}}, + paragraph = {{paragraf}{par\adddot}}, + paragraphs = {{paragraflar}{par\adddot}}, + pagetotal = {{toplam sayfa}{s\adddot}}, + pagetotals = {{toplam sayfalar}{ss\adddot}}, + columntotal = {{toplam s\"{u}tun}{s\"{u}t\adddot}}, + columntotals = {{toplam s\"{u}tunlar}{s\"{u}t\adddot}}, + linetotal = {{toplam sat\i r}{sat\adddot}}, + linetotals = {{toplam sat\i rlar}{sat\adddot}}, + versetotal = {{toplam m\i sra}{m\i s\adddot}}, + versetotals = {{toplam m\i sralar}{m\i s\adddot}}, + sectiontotal = {{toplam b\"{o}l\"{u}m}{b\"{o}l\adddot}}, + sectiontotals = {{toplam b\"{o}l\"{u}mler}{b\"{o}l\adddot}}, + paragraphtotal = {{toplam paragraf}{par\adddot}}, + paragraphtotals = {{toplam paragraflar}{par\adddot}}, + in = {{i\c{c}inde}{i\c{c}inde}}, + inseries = {{serilerde}{serilerde}}, + ofseries = {{serilerde}{serilerde}}, + number = {{numara}{no\adddot}}, + chapter = {{b\"{o}l\"{u}m}{b\"{o}l\adddot}}, + bathesis = {{lisans tezi}{lis\adddot\ tezi}}, + mathesis = {{y\"{u}ksek lisans tezi}{y\"{u}k\adddot\ lis\adddot\ tezi}}, + phdthesis = {{doktora tezi}{dok\adddot\ tezi}}, + candthesis = {{aday tezi}{aday tezi}}, + resreport = {{ara\c{s}t\i rma raporu}{ara\c{s}\adddot\ rap\adddot}}, + techreport = {{teknik rapor}{tek\adddot\ rap\adddot}}, + software = {{bilgisayar yaz\i l\i m\i}{bilg\adddot\ yaz\adddot}}, + datacd = {{CD}{CD}}, + audiocd = {{ses CD'si}{ses CD'si}}, + version = {{versiyon}{ver\adddot}}, + url = {{eri\c{s}im adresi}{eri\c{s}im adresi}}, + urlfrom = {{eri\c{s}im adresi}{eri\c{s}im adresi}}, + urlseen = {{eri\c{s}im tarihi}{eri\c{s}im tarihi}}, + inpreparation = {{haz\i rl\i k a\c{s}amas\i nda}{haz\i rl\i k a\c{s}amas\i nda}}, + submitted = {{g\"{o}nderilmi\c{s}tir}{g\"{o}nderilmi\c{s}tir}}, + forthcoming = {{yak\i nda}{yak\i nda}}, + inpress = {{bas\i m a\c{s}amas\i nda}{bas\i m a\c{s}amas\i nda}}, + prepublished = {{taslak bas\i m\i}{taslak bas\i m\i}}, + citedas = {{at\i f olarak}{at\i f olarak}}, + thiscite = {{\"{o}zellikle}{\"{o}z\adddot\ bkz\adddot}}, + seenote = {{nota bak\i n\i z}{nota bkz\adddot}}, + quotedin = {{al\i nt\i}{al\i nt\i}}, + idem = {{ayn\i}{ayn\i}}, + idemsm = {{ayn\i}{ayn\i}}, + idemsf = {{ayn\i}{ayn\i}}, + idemsn = {{ayn\i}{ayn\i}}, + idempm = {{ayn\i lar\i}{ayn\i lar\i}}, + idempf = {{ayn\i lar\i}{ayn\i lar\i}}, + idempn = {{ayn\i lar\i}{ayn\i lar\i}}, + idempp = {{ayn\i lar\i}{ayn\i lar\i}}, + ibidem = {{ayn{\i} yer}{ayn{\i} yer}}, + opcit = {{at\i f yap\i lan \c{c}al\i\c{s}ma}{at\i f yap\adddot\ \c{c}al\adddot}}, + loccit = {{at\i f yap\i lan yer}{at\i f yap\adddot\ yer}}, + confer = {{kar\c{s}\i la\c{s}t\i r}{kar\c{s}\adddot}}, + sequens = {{takip eden}{takip eden}}, + sequentes = {{takip eden}{takip eden}}, + passim = {{rastgele}{rastgele}}, + see = {{bak\i n\i z}{bkz\adddot}}, + seealso = {{ayr\i ca bak\i n\i z}{ayr\i ca bkz\adddot}}, + backrefpage = {{sayfada g\"{o}sterilmi\c{s}tir}{say\adddot\ g\"{o}s\adddot}}, + backrefpages = {{sayfalarda g\"{o}sterilmi\c{s}tir}{say\adddot\ g\"{o}s\adddot}}, + january = {{Ocak}{Ocak}}, + february = {{\c{S}ubat}{\c{S}ub\adddot}}, + march = {{Mart}{Mar\adddot}}, + april = {{Nisan}{Nis\adddot}}, + may = {{May\i s}{May\adddot}}, + june = {{Haziran}{Haz\adddot}}, + july = {{Temmuz}{Tem\adddot}}, + august = {{A\u{g}ustos}{A\u{g}us\adddot}}, + september = {{Eyl\"{u}l}{Eyl\adddot}}, + october = {{Ekim}{Ekim}}, + november = {{Kas\i m}{Kas\adddot}}, + december = {{Aral\i k}{Ara\adddot}}, + langamerican = {{Amerikanca}{Amerikanca}}, + langbrazilian = {{Brezilyanca}{Brezilyanca}}, + langbulgarian = {{Bulgarca}{Bulgarca}}, + langcatalan = {{Katalanca}{Katalanca}}, + langcroatian = {{H\i rvat\c{c}a}{H\i rvat\c{c}a}}, + langczech = {{\c{C}ek\c{c}e}{\c{C}ek\c{c}e}}, + langdanish = {{Danimarkanca}{Danimarkanca}}, + langdutch = {{Flemenk\c{c}e}{Flemenk\c{c}e}}, + langenglish = {{\.{I}ngilizce}{\.{I}ngilizce}}, + langestonian = {{Estonca}{Estonca}}, + langfinnish = {{Fince}{Fince}}, + langfrench = {{Frans\i zca}{Frans\i zca}}, + langgalician = {{Galce}{Galce}}, + langgerman = {{Almanca}{Almanca}}, + langgreek = {{Yunanca}{Yunanca}}, + langhungarian = {{Macarca}{Macarca}}, + langitalian = {{\.{I}talyanca}{\.{I}talyanca}}, + langjapanese = {{Japonca}{Japonca}}, + langlatin = {{Latince}{Latince}}, + langlatvian = {{Letonca}{Letonca}}, + langlithuanian = {{Litvanca}{Litvanca}}, + langnorwegian = {{Norve\c{c}\c{c}e}{Norve\c{c}\c{c}e}}, + langpolish = {{Polonyaca}{Polonyaca}}, + langportuguese = {{Portekizce}{Portekizce}}, + langrussian = {{Rus\c{c}a}{Rus\c{c}a}}, + langserbian = {{S\i rp\c{c}a}{S\i rp\c{c}a}}, + langslovak = {{Slovak\c{c}a}{Slovak\c{c}a}}, + langslovene = {{Slovence}{Slovence}}, + langspanish = {{\.{I}spanyolca}{\.{I}spanyolca}}, + langswedish = {{\.{I}sve\c{c}\c{c}e}{\.{I}sve\c{c}\c{c}e}}, + langukrainian = {{Ukraynaca}{Ukraynaca}}, + fromamerican = {{Amerikanca'dan}{Amerikanca'dan}}, + frombrazilian = {{Brezilyanca'dan}{Brezilyanca'dan}}, + frombulgarian = {{Bulgarca'dan}{Bulgarca'dan}}, + fromcatalan = {{Katalanca'dan}{Katalanca'dan}}, + fromcroatian = {{H\i rvat\c{c}a'dan}{H\i rvat\c{c}a'dan}}, + fromczech = {{\c{C}ek\c{c}e'den}{\c{C}ek\c{c}e'den}}, + fromdanish = {{Danimarkanca'dan}{Danimarkanca'dan}}, + fromdutch = {{Flemenk\c{c}e'den}{Flemenk\c{c}e'den}}, + fromenglish = {{\.{I}ngilizce'den}{\.{I}ngilizce'den}}, + fromestonian = {{Estonyaca'dan}{Estonyaca'dan}}, + fromfinnish = {{Fince'den}{Fince'den}}, + fromfrench = {{Frans\i zca'dan}{Frans\i zca'dan}}, + fromgalician = {{Galyaca'dan}{Galyaca'dan}}, + fromgerman = {{Almanca'dan}{Almanca'dan}}, + fromgreek = {{Yunanca'dan}{Yunanca'dan}}, + fromhungarian = {{Macarca'dan}{Macarca'dan}}, + fromitalian = {{\.{I}talyanca'dan}{\.{I}talyanca'dan}}, + fromjapanese = {{Japonca'dan}{Japonca'dan}}, + fromlatin = {{Latince'den}{Latince'den}}, + fromlatvian = {{Latvianca'dan}{Latvianca'dan}}, + fromlithuanian = {{Litvanca'dan}{Litvanca'dan}}, + fromnorwegian = {{Norve\c{c}\c{c}e'den}{Norve\c{c}\c{c}e'den}}, + frompolish = {{Polonyaca'dan}{Polonyaca'dan}}, + fromportuguese = {{Portekizce'den}{Portekizce'den}}, + fromrussian = {{Rus\c{c}a'dan}{Rus\c{c}a'dan}}, + fromserbian = {{S\i rp\c{c}a'dan}{S\i rp\c{c}a'dan}}, + fromslovak = {{Slovak\c{c}a'dan}{Slovak\c{c}a'dan}}, + fromslovene = {{Slovence'den}{Slovence'den}}, + fromspanish = {{\.{I}spanyolca'dan}{\.{I}spanyolca'dan}}, + fromswedish = {{\.{I}sve\c{c}\c{c}e'den}{\.{I}sve\c{c}\c{c}e'den}}, + fromukrainian = {{Ukraynaca'dan}{Ukraynaca'dan}}, + countryde = {{Almanya}{DE}}, + countryeu = {{Avrupa Birli\u{g}i}{AB}}, + countryep = {{Avrupa Birli\u{g}i}{AB}}, + countryfr = {{Fransa}{FR}}, + countryuk = {{Birle\c{s}ik Krall\i k}{BK}}, + countryus = {{Amerika Birle\c{s}ik Devletleri}{ABD}}, + patent = {{patent}{pat\adddot}}, + patentde = {{Alman patenti}{Alman pat\adddot}}, + patenteu = {{Avrupa patenti}{Avrupa pat\adddot}}, + patentfr = {{Frans\i z patenti}{Frans\i z pat\adddot}}, + patentuk = {{\.{I}ngiliz patenti}{\.{I}ngiliz pat\adddot}}, + patentus = {{Amerika patenti}{Amerika pat\adddot}}, + patreq = {{patent beklemede}{pat\adddot\ bek\adddot}}, + patreqde = {{Alman patenti beklemede}{Alman pat\adddot\ bek\adddot}}, + patreqeu = {{Avrupa patenti beklemede}{Avrupa pat\adddot\ bek\adddot}}, + patreqfr = {{Frans\i z patenti beklemede}{Frans\i z pat\adddot\ bek\adddot}}, + patrequk = {{\.{I}ngiliz patenti beklemede}{\.{I}ngiliz pat\adddot\ bek\adddot}}, + patrequs = {{Amerika patenti beklemede}{Amerika pat\adddot\ bek\adddot}}, + file = {{dosya}{dosya}}, + library = {{k\"{u}t\"{u}phane}{k\"{u}t\"{u}phane}}, + abstract = {{\"{o}zet}{\"{o}zet}}, + annotation = {{a\c{c}\i klama}{a\c{c}\i klama}}, + commonera = {{milattan sonra}{MS}}, + beforecommonera = {{milattan \"{o}nce}{M\"{O}}}, + annodomini = {{milattan sonra}{MS}}, + beforechrist = {{milattan \"{o}nce}{M\"{O}}}, + circa = {{yakla\c{s}\i k olarak}{yak\adddot}}, + spring = {{\.{I}lkbahar}{\.{I}lkbahar}}, + summer = {{Yaz}{Yaz}}, + autumn = {{Sonbahar}{Sonbahar}}, + winter = {{K\i \c{s}}{K\i \c{s}}}, + am = {{\"{o}\u{g}leden \"{o}nce}{\"{O}\"{O}}}, + pm = {{\"{o}\u{g}leden sonra}{\"{O}S}}, +} + +\endinput diff --git a/macros/latex/contrib/biblatex/latex/lbx/ukrainian.lbx b/macros/latex/contrib/biblatex/latex/lbx/ukrainian.lbx index b5be8984c5..19b2a2e189 100644 --- a/macros/latex/contrib/biblatex/latex/lbx/ukrainian.lbx +++ b/macros/latex/contrib/biblatex/latex/lbx/ukrainian.lbx @@ -70,13 +70,17 @@ \def\mkbibordedition{\mkbibneutord}% \def\mkbibordseries{\mkbibfemord}% \expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{% - \iffieldundef{#1}{} - {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}% - \iffieldundef{#2}{} - {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}% - \iffieldundef{#3}{} - {\printtext{\mktimezeros{\thefield{#3}}}}% - \setunit{}% + \iffieldundef{#1} + {} + {\mktimezeros{\thefield{#1}}% + \iffieldundef{#2}{}{\bibtimesep}}% + \iffieldundef{#2} + {} + {\mktimezeros{\thefield{#2}}% + \iffieldundef{#3}{}{\bibtimesep}}% + \iffieldundef{#3} + {} + {\mktimezeros{\thefield{#3}}}% \iffieldundef{#4}{} {\bibtimezonesep \mkbibtimezone{\thefield{#4}}}}% diff --git a/macros/latex/contrib/ebproof/README.md b/macros/latex/contrib/ebproof/README.md index 0f8b35038c..e794db1fee 100644 --- a/macros/latex/contrib/ebproof/README.md +++ b/macros/latex/contrib/ebproof/README.md @@ -14,9 +14,9 @@ styles of inference rules, placement of labels, etc. The distribution includes the following files: -- `ebproof.sty` : the package -- `ebproof.pdf` : the documentation -- `ebproof.tex` : the LaTeX source for the documentation +- `ebproof.dtx` : the doctrip source for the package and documentation +- `ebproof.pdf` : the compiled documentation +- `ebproof.sty` : the generated package The package requires `expl3` (the LaTeX3 programming environment) which provides many useful programming tools. @@ -25,7 +25,7 @@ provides many useful programming tools. License ------- -Copyright 2015 Emmanuel Beffara <manu@beffara.org> +Copyright 2015-2020 Emmanuel Beffara <manu@beffara.org> This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 @@ -39,4 +39,4 @@ This work has the LPPL maintenance status “maintained”. The Current Maintainer of this work is Emmanuel Beffara. -This work consists of the files `ebproof.sty` and `ebproof.tex`. +This work consists of the file `ebproof.dtx`. diff --git a/macros/latex/contrib/ebproof/ebproof.dtx b/macros/latex/contrib/ebproof/ebproof.dtx new file mode 100644 index 0000000000..71735ffc00 --- /dev/null +++ b/macros/latex/contrib/ebproof/ebproof.dtx @@ -0,0 +1,1629 @@ +% \iffalse meta-comment +% +% Copyright (C) 2015-2020 by Emmanuel Beffara +% +% This file may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3 of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +%<*driver> +\documentclass[full]{l3doc} +\usepackage{ebproof} +\usepackage{multicol} +\usepackage{tikz} +\usetikzlibrary{decorations.pathmorphing} +\EnableCrossrefs +\newenvironment{example}{% + \VerbatimEnvironment + \begin{VerbatimOut}{example.tex}}{% + \end{VerbatimOut} + \begin{center} + \begin{minipage}{.4\textwidth} + \input{example.tex} + \end{minipage}% + \begin{minipage}{.6\textwidth} + \small\VerbatimInput[gobble=0]{example.tex} + \end{minipage}% + \end{center} +} +\begin{document} + \DocInput{\jobname.dtx} +\end{document} +%</driver> +% \fi +% +% \title{^^A +% The \pkg{ebproof} package \\ +% Formal proofs in the style of sequent calculus^^A +% } +% +% \author{^^A +% Emmanuel Beffara\thanks +% {^^A +% E-mail: \href{mailto:manu@beffara.org}{manu@beffara.org}^^A +% }^^A +% } +% +% \date{Version 2.1 -- Released 2020-08-19} +% +% \maketitle +% +% \setcounter{tocdepth}{2} +% \begin{multicols}{2} +% \tableofcontents +% \end{multicols} +% +% \begin{documentation} +% +% \section{Introduction} +% +% The \pkg{ebproof} package provides commands to typeset proof trees, in the +% style of sequent calculus and related systems: +% +% \begin{example} +% \begin{prooftree} +% \hypo{ \Gamma, A &\vdash B } +% \infer1[abs]{ \Gamma &\vdash A\to B } +% \hypo{ \Gamma \vdash A } +% \infer2[app]{ \Gamma \vdash B } +% \end{prooftree} +% \end{example} +% +% The structure is very much inspired by the +% \href{http://math.ucsd.edu/~sbuss/ResearchWeb/bussproofs/}{\pkg{bussproofs}} +% package, in particular for the postfix notation. +% I actually wrote \pkg{ebproof} because there were some limitations in +% \pkg{bussproofs} that I did not know how to lift, and also because I did +% not like some choices in that package (and also because it was fun to write). +% +% Any feedback is welcome, in the form of bug reports, feature requests or +% suggestions, through the web page of the project at \url{https://framagit.org/manu/ebproof}. +% +% \section{Environments} +% +% \begin{function}{prooftree,prooftree*} +% \begin{syntax} +% \verb|\begin{prooftree}|\oarg{options} +% ~ \meta{statements} +% \verb|\end{prooftree}| +% \end{syntax} +% The package provides the \env{prooftree} environment, in standard and +% starred variants. +% This typesets the proof tree described by the \meta{statements}, as +% described in section~\ref{sec:statements}. +% The \meta{options} provide default formatting options for the proof tree, +% available options are described in section~\ref{sec:options}. +% +% Following the conventions of \pkg{amsmath} for alignment environments, the +% non-starred version produces a proof tree at the current position in the +% text flow (it can be used in math mode or text mode) while the starred +% version typesets the proof on a line of its own, like a displayed formula. +% \end{function} +% +% \begin{example} +% \[ +% \begin{prooftree} +% \infer0{ \vdash A } +% \hypo{ \vdash B } \infer1{ \vdash B, C } +% \infer2{ \vdash A\wedge B, C } +% \end{prooftree} +% \quad \rightsquigarrow \quad +% \begin{prooftree} +% \infer0{ \vdash A } \hypo{ \vdash B } +% \infer2{ \vdash A\wedge B } +% \infer1{ \vdash A\wedge B, C } +% \end{prooftree} +% \] +% \end{example} +% +% \section{Statements} +% \label{sec:statements} +% +% Statements describe proofs in postfix notation: when typesetting a proof tree +% whose last rule has, say, two premisses, you will first write statements for +% the subtree of the first premiss, then statements for the subtree of the +% second premiss, then a statement like \cs{infer2}\{\meta{conclusion}\} to +% build an inference with these two subtrees as premisses and the given text as +% conclusion. +% +% Hence statements operate on a stack of proof trees. +% At the beginning of a \env{prooftree} environment, the stack is empty. +% At the end, it must contain exactly one tree, which is the one that will be +% printed. +% +% Note that the commands defined in this section only exist right inside +% \env{prooftree} environments. +% If you have a macro with the same name as one of the statements, for instance +% \cs{hypo}, then this macro will keep its meaning outside \env{prooftree} +% environments as well as inside the arguments of a statement. +% If you really need to access the statements in another context, you can can +% always call them by prefixing their names with \texttt{ebproof}, for instance as +% \cs{ebproofhypo}. +% +% \subsection{Basic statements} +% +% The basic statements for building proofs are the following, where +% \meta{options} stands for arbitrary options as described in +% section~\ref{sec:options}. +% +% \begin{function}{\hypo} +% \begin{syntax} +% \cs{hypo}\oarg{options}\marg{text} +% \end{syntax} +% The statement \cs{hypo} pushes a new proof tree consisting only in one +% conclusion line, with no premiss and no line above, in other words a tree +% with only a leaf (\cs{hypo} stands for \emph{hypothesis}). +% \end{function} +% +% \begin{function}{\infer} +% \begin{syntax} +% \cs{infer}\oarg{options}\meta{arity}\oarg{label}\marg{text} +% \end{syntax} +% The statement \cs{infer} builds an inference step by taking some proof +% trees from the top of the stack, assembling them with a rule joining their +% conclusions and putting a new conclusion below. +% The \meta{arity} is the number of sub-proofs, it may be any number +% including 0 (in this case there will be a line above the conclusion but no +% sub-proof). +% If \meta{label} is present, it is used as the label on the right of the +% inference line; it is equivalent to using the \cmd{right label} option. +% \end{function} +% +% \medskip +% +% The \meta{text} in these statements is the contents of the conclusion at the +% root of the tree that the statements create. +% It is typeset in math mode by default but any kind of formatting can be used +% instead, using the \cmd{template} option. +% The \meta{label} text is formatted in horizontal text mode by default. +% +% Each proof tree has a vertical axis, used for alignment of successive steps. +% The position of the axis is deduced from the text of the conclusion at the +% root of the tree: if \meta{text} contains the alignment character \verb|&| +% then the axis is set at that position, otherwise the axis is set at the center +% of the conclusion text. +% The \cs{infer} statement makes sure that the axis of the premiss is at the +% same position as the axis of the conclusion. +% If there are several premisses, it places the axis at the center between the +% left of the leftmost conclusion and the right of the rightmost conclusion: +% +% \begin{example} +% \begin{prooftree} +% \hypo{ &\vdash A, B, C } +% \infer1{ A &\vdash B, C } +% \infer1{ A, B &\vdash C } +% \hypo{ D &\vdash E } +% \infer2{ A, B, D &\vdash C, E } +% \infer1{ A, B &\vdash C, D, E } +% \infer1{ A &\vdash B, C, D, E } +% \end{prooftree} +% \end{example} +% +% \begin{function}{\ellipsis} +% \begin{syntax} +% \cs{ellipsis}\marg{label}\marg{text} +% \end{syntax} +% The statement \cs{ellipsis} typesets vertical dots, with a label on the right, +% and a new conclusion. No inference lines are inserted. +% \end{function} +% +% \begin{example} +% \begin{prooftree} +% \hypo{ \Gamma &\vdash A } +% \ellipsis{foo}{ \Gamma &\vdash A, B } +% \end{prooftree} +% \end{example} +% +% +% \subsection{Modifying proof trees} +% +% The following additional statements may be used to affect the format of the +% last proof tree on the stack. +% +% \begin{function}{\rewrite} +% \begin{syntax} +% \cs{rewrite}\marg{code} +% \end{syntax} +% The statement \cs{rewrite} is used to modify the proof of the stack while +% preserving its size and alignment. +% The \meta{code} is typeset in horizontal mode, with the following control +% sequences defined: +% \begin{itemize} +% \item \cs{treebox} is a box register that contains the original material, +% \item \cs{treemark}\marg{name} expands as the position of a given mark with +% respect to the left of the box. +% \end{itemize} +% \end{function} +% +% A simple use of this statement is to change the color of a proof tree: +% \begin{example} +% \begin{prooftree} +% \hypo{ \Gamma, A &\vdash B } +% \infer1[abs]{ \Gamma &\vdash A\to B } +% \rewrite{\color{red}\box\treebox} +% \hypo{ \Gamma \vdash A } +% \infer2[app]{ \Gamma \vdash B } +% \end{prooftree} +% \end{example} +% Note the absence of spaces inside the call to \cs{rewrite}, because spaces +% would affect the position of the tree box. +% Note also that explicit use of \cs{treebox} is required to actually draw the +% subtree. +% Not using it will effectively not render the subtree, while still reserving +% its space in the enclosing tree: +% \begin{example} +% \begin{prooftree} +% \hypo{ \Gamma, A &\vdash B } +% \infer1[abs]{ \Gamma &\vdash A\to B } +% \rewrite{} +% \hypo{ \Gamma \vdash A } +% \infer2[app]{ \Gamma \vdash B } +% \end{prooftree} +% \end{example} +% This kind of manipulation is useful for instance in conjunction with the +% \pkg{beamer} package to allow revealing subtrees of a proof tree +% progressively in successive slides of a given frame. +% +% \begin{function}{\delims} +% \begin{syntax} +% \cs{delims}\marg{left}\marg{right} +% \end{syntax} +% The statement \cs{delims} puts left and right delimiters around the whole +% sub-proof, without changing the alignment (the spacing is affected by the +% delimiters, however). +% The \meta{left} text must contain an opening occurrence of \cs{left} and +% the \meta{right} text must contain a matching occurrence of \cs{right}. +% For instance, \verb|\delims{\left(}{\right)}| will put the sub-proof +% between parentheses. +% \end{function} +% +% \begin{example} +% \begin{prooftree} +% \hypo{ A_1 \vee \cdots \vee A_n } +% \hypo{ [A_i] } +% \ellipsis{}{ B } +% \delims{ \left( }{ \right)_{1\leq i\leq n} } +% \infer2{ B } +% \end{prooftree} +% \end{example} +% +% \begin{function}{\overlay} +% \begin{syntax} +% \cs{overlay} +% \end{syntax} +% The statement \cs{overlay} combines the last two proofs on the stack into +% a single one, so that their conclusions are placed at the same point. +% \end{function} +% +% \begin{example} +% \begin{prooftree} +% \hypo{Z} +% \hypo{A} \hypo{B} \infer2{C} \hypo{D} \infer2{D} +% \rewrite{\color{blue}\box\treebox} +% \hypo{E} \hypo{F} \hypo{G} \infer2{H} \infer2{I} +% \rewrite{\color{red}\box\treebox} +% \overlay \hypo{J} \infer3{K} +% \end{prooftree} +% \end{example} +% +% The primary use of this feature is for building animated presentations where +% a subtree in a proof has to be modified without affecting the general +% alignment of the surrounding proof. For instance, the example above could be +% used in Beamer to build successive slides in a given frame with two +% different subtrees: +% +% \begin{verbatim} +% \begin{prooftree} +% \hypo{Z} +% \hypo{A} \hypo{B} \infer2{C} \hypo{D} \infer2{D} +% \only<2>{\rewrite{}} % erases this version on slide 2 +% \hypo{E} \hypo{F} \hypo{G} \infer2{H} \infer2{I} +% \only<1>{\rewrite{}} % erases this version on slide 1 +% \overlay \hypo{J} \infer3{K} +% \end{prooftree} +% \end{verbatim} +% +% \section{Options} +% \label{sec:options} +% +% The formatting of trees, conclusion texts and inference rules is affected by +% options, specified using the \LaTeX3 key-value system. +% All options are in the \texttt{ebproof} module in the key tree. +% They can be set locally for a proof tree or for a single statement using +% optional arguments in the associated commands. +% +% \begin{function}{\ebproofset,\set} +% \begin{syntax} +% \cs{ebproofset}\marg{options} +% \end{syntax} +% The statement \cs{ebproofset} is used to set some options. When used +% inside a \env{prooftree} environment, it can written \cs{set}. +% The options will apply in the current scope; using this in preamble will +% effectively set options globally. +% Specific options may also be specified for each proof tree and for each +% statement in a proof tree, using optional arguments. +% \end{function} +% +% \subsection{General shape} +% +% The options in this section only make sense at the global level and at the +% proof level. +% Changing the proof style inside a \env{proof} environment has undefined +% behaviour. +% +% \begin{variable}{proof style} +% The option \cmd{proof style} sets the general shape for representing proofs. +% The following styles are provided: +% \begin{description} +% \item[upwards] +% This is the default style. +% Proof trees grow upwards, with conclusions below and premisses above. +% \item[downwards] +% Proof trees grow downwards, with conclusions above and premisses below. +% \fvset{gobble=6} +% \begin{example} +% \begin{prooftree}[proof style=downwards] +% \hypo{ \Gamma, A &\vdash B } +% \infer1[abs]{ \Gamma &\vdash A\to B } +% \hypo{ \Gamma \vdash A } +% \infer2[app]{ \Gamma \vdash B } +% \end{prooftree} +% \end{example} +% \end{description} +% \end{variable} +% +% In the optional argument of \env{prooftree} environments, proof styles can +% be specified directly, without prefixing the name by ``\texttt{proof style=}''. +% For instance, the first line of the example above could be written +% \verb|\begin{prooftree}| equivalently. +% +% \begin{variable}{center} +% The option \cmd{center} toggles vertical centering of typeset proofs. +% If set to \texttt{true}, the tree produced by the \env{prooftree} +% environment will be vertically centered around the text line. +% If set to \texttt{false}, the base line of the tree will be the base line +% of the conclusion. +% The default value is \texttt{true}. +% \end{variable} +% +% \begin{example} +% \begin{prooftree}[center=false] +% \infer0{ A \vdash A } +% \end{prooftree} +% \qquad +% \begin{prooftree}[center=false] +% \hypo{ \Gamma, A \vdash B } +% \infer1{ \Gamma \vdash A \to B } +% \end{prooftree} +% \end{example} +% +% \subsection{Spacing} +% +% \begin{variable}{separation} +% Horizontal separation between sub-proofs in an inference is defined by the +% option \cmd{separation}. +% The default value is \texttt{1.5em}. +% \end{variable} +% +% \begin{example} +% \begin{prooftree}[separation=0.5em] +% \hypo{ A } \hypo{ B } \infer2{ C } +% \hypo{ D } \hypo{ E } \hypo{ F } \infer3{ G } +% \hypo{ H } \infer[separation=3em]3{ K } +% \end{prooftree} +% \end{example} +% +% \begin{variable}{rule margin} +% The spacing above and below inference lines is defined by the option +% \cmd{rule margin}. +% The default value is \texttt{0.7ex}. +% \end{variable} +% +% \begin{example} +% \begin{prooftree}[rule margin=2ex] +% \hypo{ \Gamma, A &\vdash B } +% \infer1[abs]{ \Gamma &\vdash A\to B } +% \hypo{ \Gamma \vdash A } +% \infer2[app]{ \Gamma \vdash B } +% \end{prooftree} +% \end{example} +% +% \subsection{Shape of inference lines} +% +% \begin{variable}{rule style} +% The shape of inference lines is set by the option \cmd{rule style}. +% The following values are provided: +% \begin{center} +% \begin{tabular}{@{}l@{\qquad}l@{}} +% \toprule +% \cmd{simple} & a simple line (this is the default style) \\ +% \cmd{no rule} & no rule, only a single space of length \texttt{rule margin} \\ +% \cmd{double} & a double line \\ +% \cmd{dashed} & a single dashed line \\ +% \bottomrule +% \end{tabular} +% \end{center} +% \end{variable} +% +% The precise rendering is influenced by parameters specified below. +% Arbitrary new shapes can defined using the \cs{ebproofnewrulestyle} command +% described in section~\ref{sec:styles}, using \texttt{rule code} option +% described below. +% +% In the optional argument of the \cs{infer} statement, rule styles can be +% specified directly, without prefixing the style name by ``\texttt{rule style=}''. +% For instance, \verb|\infer[dashed]| is equivalent to +% \verb|\infer[rule style=dashed]|. +% +% \begin{example} +% \begin{prooftree} +% \hypo{ \Gamma &\vdash A \to B } +% \infer[no rule]1{ \Gamma &\vdash {!A} \multimap B } +% \hypo{ \Delta &\vdash A } +% \infer[rule thickness=2pt]1{ \Delta &\vdash {!A} } +% \infer0{ B \vdash B } +% \infer[dashed]2{ \Delta, {!A}\multimap B \vdash B } +% \infer2{ \Gamma, \Delta &\vdash B } +% \infer[double]1{ \Gamma \cup \Delta &\vdash B } +% \end{prooftree} +% \end{example} +% +% \begin{variable}{rule thickness,rule separation} +% The thickness of inference lines is defined by option \cmd{rule +% thickness}, it is \texttt{0.4pt} by default. +% The distance between the two lines in the \texttt{double} rule style is +% defined by the \cmd{rule separation} option. +% It is \texttt{2pt} by default. +% \end{variable} +% \begin{variable}{rule dash length,rule dash space} +% For dashed rules, the length of dashes is defined by the option +% \cmd{rule dash length} and the space between dashes is defined by the +% option \cmd{rule dash space}. +% The default values are \texttt{0.2em} and \texttt{0.3em} respectively. +% \end{variable} +% +% \begin{variable}{rule code} +% Arbitrary rule shapes can be optained using the \cmd{rule code} option. +% The argument is code is used to render the rule, it is executed in +% vertical mode in a \cs{vbox} whose \cs{hsize} is set to the width of the +% rule. +% Margins above and below are inserted automatically (they can be removed by +% setting \texttt{rule margin} to \texttt{0pt}). +% \end{variable} +% +% \begin{example} +% \begin{prooftree}[rule code={\hbox{\tikz +% \draw[decorate,decoration={snake,amplitude=.3ex}] +% (0,0) -- (\hsize,0);}}] +% \hypo{ \Gamma &\vdash A } +% \infer1{ \Gamma &\vdash A, \ldots, A } +% \hypo{ \Delta, A, \ldots, A \vdash \Theta } +% \infer2{ \Gamma, \Delta \vdash \Theta } +% \end{prooftree} +% \end{example} +% Note that this example requires the \pkg{tikz} package, with the +% \pkg{decorations.pathmorphing} library for the \texttt{snake} decoration. +% +% \subsection{Format of conclusions and labels} +% +% \begin{variable}{template,left template,right template} +% The format of text in inferences is defined by templates. +% The option \cmd{template} is used for text with no alignment mark, the +% options \cmd{left template} and \cmd{right template} are used for the left +% and right side of the alignment mark when it is present. +% The value of these options is arbitrary \TeX\ code, composed in horizontal mode. +% The macro \cs{inserttext} is used to insert the actual text passed to the +% \cs{hypo} and \cs{infer} statements. +% The default value for \cmd{template} is simply \verb|$\inserttext$|, so +% that conclusions are set in math mode. +% The default values for \cmd{left template} and \cmd{right template} are +% similar, with spacing assuming that a relation symbol is put near the +% alignment mark, so that \verb|\infer1{A &\vdash B}| is spaced correctly. +% \end{variable} +% +% \begin{example} +% \begin{prooftree}[template=(\textbf\inserttext)] +% \hypo{ foo } +% \hypo{ bar } +% \infer1{ baz } +% \infer2{ quux } +% \end{prooftree} +% \end{example} +% +% \begin{variable}{left label,right label} +% The text to use as the labels of the rules, on the left and on the right +% of the inference line, is defined by the options \cmd{left label} and +% \cmd{right label}. +% Using the second optional argument in \cs{infer} is equivalent to setting +% the \env{right label} option with the value of that argument. +% \end{variable} +% +% \begin{example} +% \begin{prooftree} +% \hypo{ \Gamma, A &\vdash B } +% \infer[left label=$\lambda$]1[abs] +% { \Gamma &\vdash A\to B } +% \hypo{ \Gamma \vdash A } +% \infer[left label=@]2[app]{ \Gamma \vdash B } +% \end{prooftree} +% \end{example} +% +% \begin{variable}{left label template,right label template} +% Similarly to conclusions, labels are formatted according to templates. +% The code is arbitrary \TeX\ code, composed in horizontal mode, where the +% macro \cs{inserttext} can be used to insert the actual label text. +% The default values are simply \cs{inserttext} so that labels are set in +% plain text mode. +% \end{variable} +% \begin{variable}{label separation} +% The spacing between an inference line and its labels is defined by the +% option \cmd{label separation}, the default value is \texttt{0.5em}. +% The height of the horizontal axis used for aligning the labels with the +% rules is defined by the option \cmd{label axis}, the default value is +% \texttt{0.5ex}. +% \end{variable} +% +% +% \subsection{Style macros} +% \label{sec:styles} +% +% The following commands allow for the definition of custom styles using the +% basic style options, in a way similar to PGF's ``styles'' and \LaTeX3's +% ``meta-keys''. +% This allows setting a bunch of options with the same values in many proofs +% using a single definition. +% +% \begin{function}{\ebproofnewstyle} +% \begin{syntax} +% \cs{ebproofnewstyle}\marg{name}\marg{options} +% \end{syntax} +% The statement \cs{ebproofnewstyle} defines a new style option with some +% \meta{name} that sets a given set of \meta{options}. +% \end{function} +% For instance, the following code defines a new option \cmd{small} that sets +% various parameters so that proofs are rendered smaller. +% \begin{example} +% \ebproofnewstyle{small}{ +% separation = 1em, rule margin = .5ex, +% template = \footnotesize$\inserttext$ } +% \begin{prooftree}[small] +% \hypo{ \Gamma, A \vdash B } +% \infer1{ \Gamma \vdash A\to B } +% \hypo{ \Gamma \vdash A } \infer2{ \Gamma \vdash B } +% \end{prooftree} +% \end{example} +% +% \begin{function}{\ebproofnewrulestyle} +% \begin{syntax} +% \cs{ebproofnewrulestyle}\marg{name}\marg{options} +% \end{syntax} +% The statement \cs{ebproofnewrulestyle} does the same for rule styles. +% The \meta{options} part includes options used to set how to draw rules in +% the new style. +% \end{function} +% +% The option \cmd{rule code} is useful in this command as it allows to +% define arbitrary rule styles. +% For instance, the squiggly rule example above could be turned into a new +% rule style \texttt{zigzag} with the following code: +% \begin{example} +% \ebproofnewrulestyle{zigzag}{ +% rule code = {\hbox{\tikz +% \draw[decorate,decoration={snake,amplitude=.3ex}] +% (0,0) -- (\hsize,0);}}} +% \begin{prooftree} +% \hypo{ \Gamma &\vdash A } +% \infer1{ \Gamma &\vdash A, \ldots, A } +% \hypo{ \Delta, A, \ldots, A \vdash \Theta } +% \infer[zigzag]2{ \Gamma, \Delta \vdash \Theta } +% \end{prooftree} +% \end{example} +% +% +% \section{License} +% +% This work may be distributed and/or modified under the +% conditions of the \LaTeX\ Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% \begin{center} +% \url{http://www.latex-project.org/lppl.txt} +% \end{center} +% and version 1.3 or later is part of all distributions of \LaTeX\ +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Emmanuel Beffara. +% +% This work consists of the files \texttt{ebproof.sty} and \texttt{ebproof.tex}. +% +% \section{History} +% +% This section lists the principal evolutions of the package, in reverse +% chronological order. +% \begin{description} +% \item[Version 2.1 (2020-08-19)] +% Mostly a bugfix release. +% \begin{itemize} +% \item Makes the \env{prooftree} environment robust to use in tabular +% contexts. +% \item Adds the \cs{overlay} statement. +% \item Fixes a compatibility issue with \LaTeX\ release 2020-10-01. +% \end{itemize} +% \item[Version 2.0 (2017-05-17)] +% A complete rewrite of the code using the \LaTeX3 programming environment. +% The incompatible changes from the user's point of view are the following: +% \begin{itemize} +% \item Proof statements are now writtten in lowercase ({i.e.} \cs{Infer} is +% now written \cs{infer} etc.) but the syntax is otherwise unchanged. +% The old uppercase commands still work but produce a deprecation warning, +% they will be removed in a future version. +% \item New styles are now defined using \cs{ebproofnewstyle} and +% \cs{ebproofnewrulestyle}. The previous method using PGF styles does not +% work anymore (because PGF is not used anymore). +% \end{itemize} +% The new commands and options are the following: +% \begin{itemize} +% \item The statement \cs{rewrite} generalizes \cs{Alter}, +% \item The option \cmd{label axis} controls vertical alignment of labels. +% \end{itemize} +% \item[Version 1.1 (2015-03-13)] +% A bugfix release. +% In \cmd{template} options, one now uses \cs{inserttext} instead of \verb|#1| +% for the text arguments, which improves robustness. +% \item[Version 1.0 (2015-02-04)] +% The first public release. +% \end{description} +% +% \end{documentation} +% +% \clearpage \appendix +% +% \begin{implementation} +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{expl3} +\RequirePackage{xparse} +\ProvidesExplPackage{ebproof}{2020/08/19}{2.1}{EB's proof trees} +%<@@=ebproof> +% \end{macrocode} +% +% \subsection{Parameters} +% +% We first declare all options. For the meaning of options, see +% section~\ref{sec:options}. +% +% \begin{macrocode} +\keys_define:nn { ebproof } { +center .bool_set:N = \l_@@_center_bool, +proof~style .choice: , +proof~style / upwards .code:n = \bool_set_false:N \l_@@_updown_bool, +proof~style / downwards .code:n = \bool_set_true:N \l_@@_updown_bool, +separation .dim_set:N = \l_@@_separation_dim, +rule~margin .dim_set:N = \l_@@_rule_margin_dim, +rule~thickness .dim_set:N = \l_@@_rule_thickness_dim, +rule~separation .dim_set:N = \l_@@_rule_separation_dim, +rule~dash~length .dim_set:N = \l_@@_rule_dash_length_dim, +rule~dash~space .dim_set:N = \l_@@_rule_dash_space_dim, +rule~code .tl_set:N = \l_@@_rule_code_tl, +rule~style .choice:, +template .tl_set:N = \l_@@_template_tl, +left~template .tl_set:N = \l_@@_left_template_tl, +right~template .tl_set:N = \l_@@_right_template_tl, +left~label .tl_set:N = \l_@@_left_label_tl, +right~label .tl_set:N = \l_@@_right_label_tl, +left~label~template .tl_set:N = \l_@@_left_label_template_tl, +right~label~template .tl_set:N = \l_@@_right_label_template_tl, +label~separation .dim_set:N = \l_@@_label_separation_dim, +label~axis .dim_set:N = \l_@@_label_axis_dim, +} +% \end{macrocode} +% +% \begin{macro}{\ebproofnewrulestyle} +% We then define the document-level macro \cs{ebproofnewrulestyle} and use +% it to define the default styles. This simply consists in defining a +% meta-key. +% \begin{macrocode} +\NewDocumentCommand \ebproofnewrulestyle { mm } { + \keys_define:nn { ebproof } { + rule~style / #1 .meta:nn = { ebproof } { #2 } + } +} +% \end{macrocode} +% \end{macro} +% +% The styles |simple|, |no rule| and |double| are defined in a straightforward +% way. +% +% \begin{macrocode} +\ebproofnewrulestyle { simple } { + rule~code = { \tex_hrule:D height \l_@@_rule_thickness_dim } +} +\ebproofnewrulestyle { no~rule } { + rule~code = +} +\ebproofnewrulestyle { double } { + rule~code = { + \tex_hrule:D height \l_@@_rule_thickness_dim + \skip_vertical:N \l_@@_rule_separation_dim + \tex_hrule:D height \l_@@_rule_thickness_dim + } +} +% \end{macrocode} +% +% The |dashed| style uses leaders and filling for repeating a single dash. We +% use \TeX\ primitives that have no \LaTeX3 counterpart for this. +% +% \begin{macrocode} +\ebproofnewrulestyle { dashed } { + rule~code = { + \hbox_to_wd:nn { \tex_hsize:D } { + \dim_set:Nn \l_tmpa_dim { \l_@@_rule_dash_space_dim / 2 } + \skip_horizontal:n { -\l_tmpa_dim } + \tex_cleaders:D \hbox:n { + \skip_horizontal:N \l_tmpa_dim + \tex_vrule:D + height \l_@@_rule_thickness_dim + width \l_@@_rule_dash_length_dim + \skip_horizontal:N \l_tmpa_dim + } \tex_hfill:D + \skip_horizontal:n { -\l_tmpa_dim } + } + } +} +% \end{macrocode} +% +% Now we can define the default values, including the default rule style. +% +% \begin{macrocode} +\keys_set:nn { ebproof } { + center = true, + proof~style = upwards, + separation = 1.5em, + rule~margin = .7ex, + rule~thickness = .4pt, + rule~separation = 2pt, + rule~dash~length = .2em, + rule~dash~space = .3em, + rule~style = simple, + template = $\inserttext$, + left~template = $\inserttext\mathrel{}$, + right~template = $\mathrel{}\inserttext$, + left~label = , + right~label = , + left~label~template = \inserttext, + right~label~template = \inserttext, + label~separation = 0.5em, + label~axis = 0.5ex +} +% \end{macrocode} +% +% \begin{macro}{\ebproofnewstyle} +% Defining a style simply means defining a meta-key. +% \begin{macrocode} +\NewDocumentCommand \ebproofnewstyle { mm } { + \keys_define:nn { ebproof } { #1 .meta:n = { #2 } } +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Proof boxes} +% +% \TeX\ does not actually provide data structures, so we have to encode things. +% We provide an allocator for ``registers'' holding boxes with attributes. Such +% a register consists in a box register and a property list for marks, which +% maps mark names to values as explicit dimensions with units. +% +% \begin{macro}{\@@_new:N} +% Using only public interfaces forces a convoluted approach to allocation: +% we use a global counter \cs{g_ebproof_register_int} to number registers, +% then each allocation creates registers named \cs{g_ebproof_K_N} where K is +% the kind of component (box or marks) and N is the identifier of the +% register. The proof box register itself only contains the identifier used +% for indirection. +% \begin{macrocode} +\int_new:N \g_@@_register_int +\cs_new:Nn \@@_box:N { g__ebproof_box_ \tl_use:N #1 } +\cs_new:Nn \@@_marks:N { g__ebproof_marks_ \tl_use:N #1 } +\cs_new:Nn \@@_new:N { + \tl_new:N #1 + \int_gincr:N \g_@@_register_int + \tl_gset:Nx #1 { \int_to_arabic:n { \g_@@_register_int } } + \box_new:c { \@@_box:N #1 } + \prop_new:c { \@@_marks:N #1 } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_clear:N} +% The box is cleared by setting it to an empty hbox. +% Using \cs{box_clear:N} instead would not work because trying to push this +% box on the stack would not actually append any box. +% \begin{macrocode} +\cs_new:Nn \@@_clear:N { + \hbox_set:cn { \@@_box:N #1 } {} + \prop_clear:c { \@@_marks:N #1 } + \@@_set_mark:Nnn #1 { left } { 0pt } + \@@_set_mark:Nnn #1 { right } { 0pt } + \@@_set_mark:Nnn #1 { axis } { 0pt } +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Mark operations} +% +% \begin{macro}{\@@_set_mark:Nnn} +% Setting the value of a mark uses a temporary register to evaluate the +% dimension expression because values are stored textually in a property +% list. +% \begin{macrocode} +\dim_new:N \l_@@_transit_dim +\cs_new:Nn \@@_set_mark:Nnn { + \dim_set:Nn \l_@@_transit_dim { #3 } + \prop_put:cnV { \@@_marks:N #1 } { #2 } + \l_@@_transit_dim +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_mark:Nn} +% Getting the value of a mark simply consists in getting an item in a +% property list. +% \begin{macrocode} +\cs_new:Nn \@@_mark:Nn { + \prop_item:cn { \@@_marks:N #1 } { #2 } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_shift_x:Nn} +% This function shifts the marks by a specified amount, without modifying +% the box. +% \begin{macrocode} +\cs_new:Nn \@@_shift_x:Nn { + \prop_map_inline:cn { \@@_marks:N #1 } { + \@@_set_mark:Nnn #1 { ##1 } { ##2 + #2 } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_enlarge_conclusion:NN} +% This function moves the left and right marks of the first tree so that +% they are at least as far from the axis as they are in the second tree. +% For instance we get the following: +% \begin{center} +% \begin{tikzpicture}[y=-3ex] +% \node (L1) at (1,0) {L}; \node (A1) at (2,0) {A}; \node (R1) at (4,0) {R}; +% \node (L2) at (0,1) {L}; \node (A2) at (2,1) {A}; \node (R2) at (3,1) {R}; +% \node (L3) at (0,2) {L}; \node (A3) at (2,2) {A}; \node (R3) at (4,2) {R}; +% \draw (L1) -- (A1) -- (R1); +% \draw (L2) -- (A2) -- (R2); +% \draw (L3) -- (A3) -- (R3); +% \node[anchor=west] at (5,0) {box 1 before}; +% \node[anchor=west] at (5,1) {box 2 before}; +% \node[anchor=west] at (5,2) {box 1 after}; +% \end{tikzpicture} +% \end{center} +% The contents of the trees are unchanged. +% \begin{macrocode} +\cs_new:Nn \@@_enlarge_conclusion:NN { + \dim_set:Nn \l_tmpa_dim { \@@_mark:Nn #1 {axis} + + \@@_mark:Nn #2 {left} - \@@_mark:Nn #2 {axis} } + \dim_compare:nNnT { \l_tmpa_dim } < { \@@_mark:Nn #1 {left} } { + \@@_set_mark:Nnn #1 {left} { \l_tmpa_dim } } + \dim_set:Nn \l_tmpa_dim { \@@_mark:Nn #1 {axis} + + \@@_mark:Nn #2 {right} - \@@_mark:Nn #2 {axis} } + \dim_compare:nNnT { \l_tmpa_dim } > { \@@_mark:Nn #1 {right} } { + \@@_set_mark:Nnn #1 {right} { \l_tmpa_dim } } +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Building blocks} +% +% \begin{macro}{\@@_make_simple:Nn} +% Make a tree with explicit material in horizontal mode. Set the left and +% right marks to extremal positions and set the axis in the middle. +% \begin{macrocode} +\cs_new:Nn \@@_make_simple:Nn { + \hbox_set:cn { \@@_box:N #1 } { #2 } + \@@_set_mark:Nnn #1 { left } { 0pt } + \@@_set_mark:Nnn #1 { axis } { \box_wd:c { \@@_box:N #1 } / 2 } + \@@_set_mark:Nnn #1 { right } { \box_wd:c { \@@_box:N #1 } } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_make_split:Nnn} +% Make a tree with explicit material in horizontal mode, split in two parts. +% Set the left and right marks to extremal positions and set the axis +% between the two parts. +% \begin{macrocode} +\cs_new:Nn \@@_make_split:Nnn { + \@@_set_mark:Nnn #1 { left } { 0pt } + \hbox_set:cn { \@@_box:N #1 } { #2 } + \@@_set_mark:Nnn #1 { axis } { \box_wd:c { \@@_box:N #1 } } + \hbox_set:cn { \@@_box:N #1 } { \hbox_unpack:c { \@@_box:N #1 } #3 } + \@@_set_mark:Nnn #1 { right } { \box_wd:c { \@@_box:N #1 } } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_make_vertical:Nnnn} +% Make a tree with explicit material in vertical mode, using an explicit +% width and axis. +% \begin{macrocode} +\cs_new:Nn \@@_make_vertical:Nnnn { + \@@_set_mark:Nnn #1 { left } { 0pt } + \@@_set_mark:Nnn #1 { axis } { #2 } + \@@_set_mark:Nnn #1 { right } { #3 } + \vbox_set:cn { \@@_box:N #1 } { + \dim_set:Nn \tex_hsize:D { \@@_mark:Nn #1 {right} } + #4 + } + \box_set_wd:cn { \@@_box:N #1 } { \@@_mark:Nn #1 {right} } +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Assembling boxes} +% +% \begin{macro}{\@@_extend:Nnnnn} +% Extend a tree box. The marks are shifted so that alignment is preserved. +% The arguments are dimensions for the left, top, right and bottom sides +% respectively. +% \begin{macrocode} +\cs_new:Nn \@@_extend:Nnnnn { + \dim_compare:nNnF { #2 } = { 0pt } { + \hbox_set:cn { \@@_box:N #1 } { + \skip_horizontal:n { #2 } + \box_use:c { \@@_box:N #1 } + } + \@@_shift_x:Nn #1 { #2 } + } + \box_set_ht:Nn #1 { \box_ht:c { \@@_box:N #1 } + #3 } + \box_set_wd:Nn #1 { \box_wd:c { \@@_box:N #1 } + #4 } + \box_set_dp:Nn #1 { \box_dp:c { \@@_box:N #1 } + #5 } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_append_right:NnN} +% Append the contents of the second tree to the first one on the right, with +% matching baselines. The marks of both trees are preserved. The middle +% argument specifies the space to insert between boxes. +% \begin{macrocode} +\cs_new:Nn \@@_append_right:NnN { + \hbox_set:cn { \@@_box:N #1 } { + \box_use:c { \@@_box:N #1 } + \dim_compare:nNnF { #2 } = { 0pt } { \skip_horizontal:n { #2 } } + \box_use:c { \@@_box:N #3 } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_append_left:NnN} +% Append the contents of the second tree to the first one on the left, with +% matching baselines. The marks of the first tree are shifted accordingly. +% The middle argument specifies the space to insert between boxes. +% \begin{macrocode} +\cs_new:Nn \@@_append_left:NnN { + \@@_shift_x:Nn #1 { \box_wd:c { \@@_box:N #3 } + #2 } + \hbox_set:cn { \@@_box:N #1 } { + \box_use:c { \@@_box:N #3 } + \dim_compare:nNnF { #2 } = { 0pt } { \skip_horizontal:n { #2 } } + \box_use:c { \@@_box:N #1 } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_align:NN} +% Shift one of two trees to the right so that their axes match. The marks of +% the one that is shifted are updated accordingly. +% \begin{macrocode} +\cs_new:Nn \@@_align:NN { + \dim_set:Nn \l_tmpa_dim + { \@@_mark:Nn #2 {axis} - \@@_mark:Nn #1 {axis} } + \dim_compare:nNnTF \l_tmpa_dim < { 0pt } { + \@@_extend:Nnnnn #2 { -\l_tmpa_dim } { 0pt } { 0pt } { 0pt } + } { + \@@_extend:Nnnnn #1 { \l_tmpa_dim } { 0pt } { 0pt } { 0pt } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_append_above:NN} +% Append the contents of the second tree above the first one, with matching +% axes. The marks of the first tree are preserved. +% \begin{macrocode} +\cs_new:Nn \@@_append_above:NN { + \@@_align:NN #1 #2 + \vbox_set:cn { \@@_box:N #1 } { + \box_use:c { \@@_box:N #2 } + \tex_prevdepth:D -1000pt + \box_use:c { \@@_box:N #1 } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_append_below:NN} +% Append the contents of the second tree below the first one, with matching +% axes. The marks of the first tree are preserved. +% \begin{macrocode} +\cs_new:Nn \@@_append_below:NN { + \@@_align:NN #1 #2 + \vbox_set_top:Nn #1 { + \box_use:c { \@@_box:N #1 } + \tex_prevdepth:D -1000pt + \box_use:c { \@@_box:N #2 } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_overlay:NN} +% Append the second tree as an overlay over the first one, so that the +% baselines and axes match. The bounding box of the result adjusts to +% contain both trees. +% \begin{macrocode} +\cs_new:Nn \@@_overlay:NN { + \@@_align:NN #1 #2 + \hbox_set:cn { \@@_box:N #1 } { + \hbox_overlap_right:n { \box_use:c { \@@_box:N #1 } } + \box_use:c { \@@_box:N #2 } + \dim_compare:nNnT + { \box_wd:c { \@@_box:N #2 } } < { \box_wd:c { \@@_box:N #1 } } + { \skip_horizontal:n + { \box_wd:c { \@@_box:N #1 } - \box_wd:c { \@@_box:N #2 } } } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_vcenter:N} +% Shift the material in a tree vertically so that the height and depth are +% equal (like \TeX's \cs{vcenter} but around the baseline). +% \begin{macrocode} +\cs_new:Nn \@@_vcenter:N { + \dim_set:Nn \l_tmpa_dim + { ( \box_ht:c { \@@_box:N #1 } - \box_dp:c { \@@_box:N #1 } ) / 2 } + \box_set_eq:Nc \l_tmpa_box { \@@_box:N #1 } + \hbox_set:cn { \@@_box:N #1 } + { \box_move_down:nn { \l_tmpa_dim } { \box_use:N \l_tmpa_box } } +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Making inferences} +% +% The following commands use the parameters defined at the beginning of the +% package for actually building proof trees using the commands defined above. +% +% \begin{macro}{\@@_append_vertical:NN} +% Append the contents of the second tree above or below the first one, +% depending on current settings. Axes are aligned and the marks of the first +% tree are preserved. +% \begin{macrocode} +\cs_new:Nn \@@_append_vertical:NN { + \bool_if:NTF \l_@@_updown_bool + { \@@_append_below:NN #1 #2 } + { \@@_append_above:NN #1 #2 } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_make_rule_for:NNN} +% Make a box containing an inference rule with labels, using the current +% settings. The width and axis position are taken as those of the conclusion +% of another tree box. The third argument is used as a temporary register +% for building labels. +% \begin{macrocode} +\cs_new:Nn \@@_make_rule_for:NNN { +% \end{macrocode} +% Build the rule. +% \begin{macrocode} + \@@_make_vertical:Nnnn #1 + { \@@_mark:Nn #2 {axis} - \@@_mark:Nn #2 {left} } + { \@@_mark:Nn #2 {right} - \@@_mark:Nn #2 {left} } + { + \skip_vertical:N \l_@@_rule_margin_dim + \tl_if_empty:NF { \l_@@_rule_code_tl } { + \tl_use:N \l_@@_rule_code_tl + \skip_vertical:N \l_@@_rule_margin_dim + } + } + \@@_vcenter:N #1 +% \end{macrocode} +% Append the left label. +% \begin{macrocode} + \tl_if_blank:VF \l_@@_left_label_tl { + \@@_make_simple:Nn #3 { + \box_move_down:nn { \l_@@_label_axis_dim } { \hbox:n { + \cs_set_eq:NN \inserttext \l_@@_left_label_tl + \tl_use:N \l_@@_left_label_template_tl + } } + } + \box_set_ht:cn { \@@_box:N #3 } { 0pt } + \box_set_dp:cn { \@@_box:N #3 } { 0pt } + \@@_append_left:NnN + \l_@@_c_box \l_@@_label_separation_dim \l_@@_d_box + } +% \end{macrocode} +% Append the right label. +% \begin{macrocode} + \tl_if_blank:VF \l_@@_right_label_tl { + \@@_make_simple:Nn #3 { + \box_move_down:nn { \l_@@_label_axis_dim } { \hbox:n { + \cs_set_eq:NN \inserttext \l_@@_right_label_tl + \tl_use:N \l_@@_right_label_template_tl + } } + } + \box_set_ht:cn { \@@_box:N #3 } { 0pt } + \box_set_dp:cn { \@@_box:N #3 } { 0pt } + \@@_append_right:NnN + \l_@@_c_box \l_@@_label_separation_dim \l_@@_d_box + } +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Stack-based interface} +% +% \subsubsection{The stack} +% +% Logically, box structures are stored on a stack. However, \TeX\ does not +% provide data structures for that and the grouping mechanism is not flexible +% enough, so we encode them using what we actually have. A stack for boxes is +% implemented using a global hbox \cs{g_@@_stack_box} that contains all the +% boxes successively. A sequence \cs{g_@@_stack_seq} is used to store the +% dimensions property lists textually. We maintain a counter +% \cs{g_@@_level_int} with the number of elements on the stack, for +% consistency checks. +% \begin{macrocode} +\int_new:N \g_@@_level_int +\box_new:N \g_@@_stack_box +\seq_new:N \g_@@_stack_seq +% \end{macrocode} +% +% \begin{macro}{\@@_clear_stack:} +% Clear the stack. +% \begin{macrocode} +\cs_new:Nn \@@_clear_stack: { + \int_gset:Nn \g_@@_level_int { 0 } + \hbox_gset:Nn \g_@@_stack_box { } + \seq_gclear:N \g_@@_stack_seq +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_push:N} +% Push the contents of a register on the stack. +% \begin{macrocode} +\cs_new:Nn \@@_push:N { + \int_gincr:N \g_@@_level_int + \hbox_gset:Nn \g_@@_stack_box + { \hbox_unpack:N \g_@@_stack_box \box_use:c { \@@_box:N #1 } } + \seq_gput_left:Nv \g_@@_stack_seq + { \@@_marks:N #1 } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_pop:N} +% Pop the value from the top of the stack into a register. +% \begin{macrocode} +\cs_new:Nn \@@_pop:N { + \int_compare:nNnTF { \g_@@_level_int } > { 0 } { + \int_gdecr:N \g_@@_level_int + \hbox_gset:Nn \g_@@_stack_box { + \hbox_unpack:N \g_@@_stack_box + \box_gset_to_last:N \g_tmpa_box + } + \box_set_eq_clear:cN { \@@_box:N #1 } \g_tmpa_box + \seq_gpop_left:NN \g_@@_stack_seq \l_tmpa_tl + \tl_set_eq:cN { \@@_marks:N #1 } \l_tmpa_tl + } { + \PackageError{ebproof}{Missing~premiss~in~a~proof~tree}{} + \@@_clear:N #1 + } +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Assembling trees} +% +% \begin{macrocode} +\@@_new:N \l_@@_a_box +\@@_new:N \l_@@_b_box +\@@_new:N \l_@@_c_box +\@@_new:N \l_@@_d_box +% \end{macrocode} +% +% \begin{macro}{\@@_join_horizontal:n} +% Join horizontally a number of elements at the top of the stack. If several +% trees are joined, use the left mark of the left tree, the right mark of +% the right tree and set the axis in the middle of these marks. +% \begin{macrocode} +\cs_new:Nn \@@_join_horizontal:n { + \int_case:nnF { #1 } { + { 0 } { + \group_begin: + \@@_clear:N \l_@@_a_box + \@@_push:N \l_@@_a_box + \group_end: + } + { 1 } { } + } { + \group_begin: + \@@_pop:N \l_@@_a_box + \prg_replicate:nn { #1 - 1 } { + \@@_pop:N \l_@@_b_box + \@@_append_left:NnN + \l_@@_a_box \l_@@_separation_dim \l_@@_b_box + } + \@@_set_mark:Nnn \l_@@_a_box { left } + { \@@_mark:Nn \l_@@_b_box { left } } + \@@_set_mark:Nnn \l_@@_a_box { axis } + { ( \@@_mark:Nn \l_@@_a_box { left } + + \@@_mark:Nn \l_@@_a_box { right } ) / 2 } + \@@_push:N \l_@@_a_box + \group_end: + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_join_vertical:} +% Join vertically the two elements at the top of the stack, with a +% horizontal rule of the appropriate size. +% \begin{macrocode} +\cs_new:Nn \@@_join_vertical: { + \group_begin: + \@@_pop:N \l_@@_a_box + \@@_pop:N \l_@@_b_box + \@@_enlarge_conclusion:NN \l_@@_b_box \l_@@_a_box + \@@_make_rule_for:NNN \l_@@_c_box \l_@@_b_box + \l_@@_d_box + \@@_append_vertical:NN \l_@@_a_box \l_@@_c_box + \@@_append_vertical:NN \l_@@_a_box \l_@@_b_box + \@@_push:N \l_@@_a_box + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{High-level commands} +% +% \begin{macro}{\@@_statement_parse:w} +% An auxiliary function for parsing the argument in +% \cs{@@_push_statement:n}. +% \begin{macrocode} +\cs_new:Npn \@@_statement_parse:w #1 & #2 & #3 \q_stop { + \tl_if_empty:nTF { #3 } { + \@@_make_simple:Nn \l_@@_a_box + { \cs_set:Npn \inserttext { #1 } \tl_use:N \l_@@_template_tl } + } { + \@@_make_split:Nnn \l_@@_a_box + { \cs_set:Npn \inserttext { #1 } \tl_use:N \l_@@_left_template_tl } + { \cs_set:Npn \inserttext { #2 } \tl_use:N \l_@@_right_template_tl } + } + \@@_push:N \l_@@_a_box +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_push_statement:n} +% Push a box with default formatting, using explicit alignment if the code +% contains a |&| character +% \begin{macrocode} +\cs_new:Nn \@@_push_statement:n { + \@@_statement_parse:w #1 & & \q_stop +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Document interface} +% +% \subsubsection{Functions to define statements} +% +% The \cs{g_@@_statements_seq} variable contains the list of all defined +% statements. For each statement |X|, there is a document command \cs{ebproofX} +% and the alias \cs{X} is defined when entering a |prooftree| environment. +% \begin{macrocode} +\seq_new:N \g_@@_statements_seq +% \end{macrocode} +% +% \begin{macro}{\@@_setup_statements:} +% Install the aliases for statements, saving the original value of the control +% sequences. +% \begin{macrocode} +\cs_new:Nn \@@_setup_statements: { + \seq_map_inline:Nn \g_@@_statements_seq { + \cs_set_eq:cc { ebproof_saved_ ##1 } { ##1 } + \cs_set_eq:cc { ##1 } { ebproof ##1 } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_restore_statements:} +% Restore the saved meanings of the control sequences. This is useful when +% interpreting user-provided code in statement arguments. The meanings are +% automatically restored when leaving a |prooftree| environment because of +% grouping. +% \begin{macrocode} +\cs_new:Nn \@@_restore_statements: { + \seq_map_inline:Nn \g_@@_statements_seq { + \cs_set_eq:cc { ##1 } { ebproof_saved_ ##1 } + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_new_statement:nnn} +% Define a new statement. The first argument is the name, the second one is +% an argument specifier as used by |xparse| and the third one is the body of +% the command. +% \begin{macrocode} +\cs_new:Nn \@@_new_statement:nnn { + \exp_args:Nc \NewDocumentCommand { ebproof#1 }{ #2 } { #3 } + \seq_put_right:Nn \g_@@_statements_seq { #1 } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_new_deprecated_statement:nnnn} +% Define a deprecated statement. The syntax is the same as above except that +% an extra argument in third position indicates what should be used instead. +% The effect is the same except that a warning message is issued the first +% time the statement is used. +% \begin{macrocode} +\cs_new:Nn \@@_new_deprecated_statement:nnnn { + \cs_new:cpn { ebproof_#1_warning: } { + \PackageWarning { ebproof } { \token_to_str:c{#1}~is~deprecated,~#3 } + \cs_gset:cn { ebproof_#1_warning: } { } + } + \@@_new_statement:nnn { #1 } { #2 } + { \use:c { ebproof_#1_warning: } #4 } +} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Basic commands} +% +% \begin{macro}{\ebproofset,\set} +% This is a simple wrapper around \cs{keys_set:nn}. +% \begin{macrocode} +\@@_new_statement:nnn { set } { m } { + \keys_set:nn { ebproof } { #1 } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hypo} +% This is mostly a wrapper around \cs{ebproof_push_statement:n}, with +% material to handle options and the statements macros. +% \begin{macrocode} +\@@_new_statement:nnn { hypo } { O{} m } { + \group_begin: + \@@_restore_statements: + \keys_set:nn { ebproof } { #1 } + \@@_push_statement:n { #2 } + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\infer} +% This is a bit more involved than \cs{hypo} because we have to handle rule +% style options and joining. +% \begin{macrocode} +\@@_new_statement:nnn { infer } { O{} m O{} m } { + \group_begin: + \@@_restore_statements: + \keys_set_known:nnN { ebproof / rule~style } { #1 } \l_tmpa_tl + \keys_set:nV { ebproof } \l_tmpa_tl + \tl_set:Nn \l_@@_right_label_tl { #3 } + \@@_join_horizontal:n { #2 } + \@@_push_statement:n { #4 } + \@@_join_vertical: + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ellipsis} +% An ellipsis is made by hand using vertical leaders to render the dots +% after rendering the label. +% \begin{macrocode} +\@@_new_statement:nnn { ellipsis } { m m } { + \group_begin: + \@@_restore_statements: + \tl_clear:N \l_@@_rule_code_tl + \@@_make_split:Nnn \l_@@_a_box { } { + \vbox_set:Nn \l_tmpa_box { + \skip_vertical:n { 1.2ex } + \hbox:n { \tex_ignorespaces:D #1 } + \skip_vertical:n { 1.2ex } + } + \vbox_to_ht:nn { \box_ht:N \l_tmpa_box } { + \tex_xleaders:D \vbox_to_ht:nn { .8ex } + { \tex_vss:D \hbox:n { . } \tex_vss:D } + \tex_vfill:D + } + \hbox_overlap_right:n { ~ \box_use:N \l_tmpa_box } + } + \@@_push:N \l_@@_a_box + \@@_join_vertical: + \@@_push_statement:n {#2} + \@@_join_vertical: + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Modifying trees} +% +% \begin{macro}{\rewrite} +% Rewrite the box at the top of the stack while preserving its dimensions an +% marks. The code is typeset in horizontal mode, with control sequences to +% access the original box and its marks. +% \begin{macrocode} +\@@_new_statement:nnn { rewrite } { m } { + \group_begin: + \@@_restore_statements: + \@@_pop:N \l_@@_a_box + \box_set_eq:Nc \l_tmpa_box { \@@_box:N \l_@@_a_box } + \hbox_set:Nn \l_tmpb_box { + \cs_set_eq:NN \treebox \l_tmpa_box + \cs_set:Npn \treemark { \@@_mark:Nn \l_@@_a_box } + { #1 } + } + \box_set_wd:Nn \l_tmpb_box { \box_wd:c { \@@_box:N \l_@@_a_box } } + \box_set_ht:Nn \l_tmpb_box { \box_ht:c { \@@_box:N \l_@@_a_box } } + \box_set_dp:Nn \l_tmpb_box { \box_dp:c { \@@_box:N \l_@@_a_box } } + \box_set_eq:cN { \@@_box:N \l_@@_a_box } \l_tmpb_box + \@@_push:N \l_@@_a_box + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\delims} +% Insert \cs{left} and \cs{right} delimiters without changing the alignment. +% \begin{macrocode} +\@@_new_statement:nnn { delims } { m m } { + \group_begin: + \@@_restore_statements: + \@@_pop:N \l_@@_a_box + \hbox_set:Nn \l_tmpa_box + { $ \tex_vcenter:D { \box_use:c { \@@_box:N \l_@@_a_box } } $ } + \dim_set:Nn \l_tmpa_dim + { \box_ht:N \l_tmpa_box - \box_ht:c { \@@_box:N \l_@@_a_box } } + \hbox_set:cn { \@@_box:N \l_@@_a_box } { + $ #1 \tex_vrule:D + height \box_ht:N \l_tmpa_box depth \box_dp:N \l_tmpa_box width 0pt + \tex_right:D . $ + } + \@@_shift_x:Nn \l_@@_a_box + { \box_wd:c { \@@_box:N \l_@@_a_box } } + \hbox_set:cn { \@@_box:N \l_@@_a_box } { + \hbox_unpack:c { \@@_box:N \l_@@_a_box } + $ \tex_left:D . \box_use:N \l_tmpa_box #2 $ + } + \hbox_set:cn { \@@_box:N \l_@@_a_box } + { \box_move_down:nn { \l_tmpa_dim } + { \box_use:c { \@@_box:N \l_@@_a_box } } } + \@@_push:N \l_@@_a_box + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\overlay} +% Pop two trees and append the second tree as an overlay over the first one, +% so that the baselines and axes match. The bounding box of the result +% adjusts to contain both trees. +% \begin{macrocode} +\@@_new_statement:nnn { overlay } { } { + \group_begin: + \@@_pop:N \l_@@_a_box + \@@_pop:N \l_@@_b_box + \@@_overlay:NN \l_@@_a_box \l_@@_b_box + \@@_push:N \l_@@_a_box + \group_end: +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Deprecated statements} +% +% These statements were defined in versions 1.x of the package, they are +% preserved for temporary upwards compatibility and will be removed in a +% future version. +% \begin{macrocode} +\@@_new_deprecated_statement:nnnn { Alter } { m } + { use~\token_to_str:c{rewrite}~instead } { \ebproofrewrite{ #1 \box\treebox } } +\@@_new_deprecated_statement:nnnn { Delims } { } + { use~\token_to_str:c{delims}~instead } { \ebproofdelims } +\@@_new_deprecated_statement:nnnn { Ellipsis } { } + { use~\token_to_str:c{ellipsis}~instead } { \ebproofellipsis } +\@@_new_deprecated_statement:nnnn { Hypo } { } + { use~\token_to_str:c{hypo}~instead } { \ebproofhypo } +\@@_new_deprecated_statement:nnnn { Infer } { } + { use~\token_to_str:c{infer}~instead } { \ebproofinfer } +% \end{macrocode} +% +% +% \subsubsection{Environment interface} +% +% The stack is initialised globally. The \env{prooftree} environment does not +% clear the stack, instead it saves the initial level in order to check that +% statements are properly balanced. This allows for nested uses of the +% environment, if it ever happens to be useful. +% +% \begin{macrocode} +\@@_clear_stack: +\tl_new:N \l_@@_start_level_tl +% \end{macrocode} +% +% \begin{macro}{prooftree,prooftree*} +% The \env{prooftree} environment. +% \begin{macrocode} +\NewDocumentEnvironment { prooftree } { s O{} } { + \group_align_safe_begin: + \keys_set_known:nnN { ebproof / proof~style } { #2 } \l_tmpa_tl + \keys_set:nV { ebproof } \l_tmpa_tl + \tl_set:Nx \l_@@_start_level_tl { \int_use:N \g_@@_level_int } + \vbox_set:Nw \l_tmpa_box + \@@_setup_statements: +} { + \vbox_set_end: + \@@_pop:N \l_@@_a_box + \int_compare:nNnF { \g_@@_level_int } = { \tl_use:N \l_@@_start_level_tl } { + \PackageError{ebproof}{Malformed~proof~tree}{ + Some~hypotheses~were~declared~but~not~used~in~this~tree.} + } + \IfBooleanTF { #1 } { + \[ \box_use:c { \@@_box:N \l_@@_a_box } \] + \ignorespacesafterend + } { + \hbox_unpack:N \c_empty_box + \bool_if:NTF \l_@@_center_bool { + \hbox:n { $ \tex_vcenter:D { \box_use:c { \@@_box:N \l_@@_a_box } } $ } + } { + \box_use:c { \@@_box:N \l_@@_a_box } + } + } + \group_align_safe_end: +} +% \end{macrocode} +% A trick for the starred version: +% \begin{macrocode} +\cs_new:cpn { prooftree* } { \prooftree* } +\cs_new:cpn { endprooftree* } { \endprooftree } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \end{implementation} diff --git a/macros/latex/contrib/ebproof/ebproof.ins b/macros/latex/contrib/ebproof/ebproof.ins new file mode 100644 index 0000000000..25bcc73496 --- /dev/null +++ b/macros/latex/contrib/ebproof/ebproof.ins @@ -0,0 +1,15 @@ +%% Copyright (C) 2015-2018 by Emmanuel Beffara +%% +%% This file may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License, either version 1.3 of this license or (at +%% your option) any later version. The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX version +%% 2005/12/01 or later. + +\input l3docstrip.tex +\keepsilent \askforoverwritefalse +\generate{\file{ebproof.sty}{\from{ebproof.dtx}{package}}} +\endbatchfile diff --git a/macros/latex/contrib/ebproof/ebproof.pdf b/macros/latex/contrib/ebproof/ebproof.pdf Binary files differindex e4c8d03b25..60d433b9fd 100644 --- a/macros/latex/contrib/ebproof/ebproof.pdf +++ b/macros/latex/contrib/ebproof/ebproof.pdf diff --git a/macros/latex/contrib/ebproof/ebproof.sty b/macros/latex/contrib/ebproof/ebproof.sty deleted file mode 100644 index 7601f8e9e8..0000000000 --- a/macros/latex/contrib/ebproof/ebproof.sty +++ /dev/null @@ -1,767 +0,0 @@ -% The ebproof package - Formal proofs in the style of sequent calculus - -%% ebproof.sty -%% Copyright 2017 Emmanuel Beffara <manu@beffara.org> - -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. - -% This work has the LPPL maintenance status `maintained'. - -% The Current Maintainer of this work is Emmanuel Beffara. - -% This work consists of the files ebproof.sty and ebproof.tex. - -\NeedsTeXFormat{LaTeX2e} -\RequirePackage{expl3} -\RequirePackage{xparse} -\ProvidesExplPackage{ebproof}{2017/05/17}{2.0}{EB's proof trees} - - -%% Parameters - -%%% Declaration of the parameters - -\keys_define:nn { ebproof } { - -% general shape - -center .bool_set:N = \l_ebproof_center_bool, - -proof~style .choice: , -proof~style / upwards .code:n = \bool_set_false:N \l_ebproof_updown_bool, -proof~style / downwards .code:n = \bool_set_true:N \l_ebproof_updown_bool, - -% spacing - -separation .dim_set:N = \l_ebproof_separation_dim, -rule~margin .dim_set:N = \l_ebproof_rule_margin_dim, - -% shape of inference lines - -rule~thickness .dim_set:N = \l_ebproof_rule_thickness_dim, -rule~separation .dim_set:N = \l_ebproof_rule_separation_dim, -rule~dash~length .dim_set:N = \l_ebproof_rule_dash_length_dim, -rule~dash~space .dim_set:N = \l_ebproof_rule_dash_space_dim, -rule~code .tl_set:N = \l_ebproof_rule_code_tl, - -rule~style .choice:, - -% templates - -template .tl_set:N = \l_ebproof_template_tl, -left~template .tl_set:N = \l_ebproof_left_template_tl, -right~template .tl_set:N = \l_ebproof_right_template_tl, - -% labels - -left~label .tl_set:N = \l_ebproof_left_label_tl, -right~label .tl_set:N = \l_ebproof_right_label_tl, -left~label~template .tl_set:N = \l_ebproof_left_label_template_tl, -right~label~template .tl_set:N = \l_ebproof_right_label_template_tl, -label~separation .dim_set:N = \l_ebproof_label_separation_dim, -label~axis .dim_set:N = \l_ebproof_label_axis_dim, - -} - -%%% Rule styles - -\NewDocumentCommand \ebproofnewrulestyle { mm } { - \keys_define:nn { ebproof } { - rule~style / #1 .meta:nn = { ebproof } { #2 } - } -} - -\ebproofnewrulestyle { simple } { - rule~code = { \tex_hrule:D height \l_ebproof_rule_thickness_dim } -} - -\ebproofnewrulestyle { no~rule } { - rule~code = -} - -\ebproofnewrulestyle { double } { - rule~code = { - \tex_hrule:D height \l_ebproof_rule_thickness_dim - \skip_vertical:N \l_ebproof_rule_separation_dim - \tex_hrule:D height \l_ebproof_rule_thickness_dim - } -} - -\ebproofnewrulestyle { dashed } { - rule~code = { - \hbox_to_wd:nn { \tex_hsize:D } { - \dim_set:Nn \l_tmpa_dim { \l_ebproof_rule_dash_space_dim / 2 } - \skip_horizontal:n { -\l_tmpa_dim } - \tex_cleaders:D \hbox:n { - \skip_horizontal:N \l_tmpa_dim - \tex_vrule:D - height \l_ebproof_rule_thickness_dim - width \l_ebproof_rule_dash_length_dim - \skip_horizontal:N \l_tmpa_dim - }\tex_hfill:D - \skip_horizontal:n { -\l_tmpa_dim } - } - } -} - -%%% Default values - -\keys_set:nn { ebproof } { - center = true, - proof~style = upwards, - separation = 1.5em, - rule~margin = .7ex, - rule~thickness = .4pt, - rule~separation = 2pt, - rule~dash~length = .2em, - rule~dash~space = .3em, - rule~style = simple, - template = $\inserttext$, - left~template = $\inserttext\mathrel{}$, - right~template = $\mathrel{}\inserttext$, - left~label = , - right~label = , - left~label~template = \inserttext, - right~label~template = \inserttext, - label~separation = 0.5em, - label~axis = 0.5ex -} - -%%% Defining style macros - -\NewDocumentCommand \ebproofnewstyle { mm } { - \keys_define:nn { ebproof } { #1 .meta:n = { #2 } } -} - - -%% Proof trees - -% Proof trees are represented as a data structure that consists of a box and a -% set of marks, which are vertical positions in the box (as distances from the -% left edge). Arbitrary marks can be defined, the folowing are used for -% alignment: -% - left : the left of the conclusion -% - right : the right of the conclusion -% - axis : the vertical axis of the conclusion - - -%%% Registers - -% TeX does not actually provide data structures, so we have to encode things. -% We provide an allocator for "registers" holding boxes with attributes. Such -% a register consists in a box register and a property list for marks, which -% maps mark names to values as explicit dimensions with units. - -% Create a new register. - -\cs_new:Nn \ebproof_new:N { - \box_new:N #1 - \prop_new:c { l_ebproof_marks_ \__int_value:w #1 _prop } -} - -% Clear a register. - -\cs_new:Nn \ebproof_clear:N { - \hbox_set:Nn #1 {} - % Using \box_clear:N instead would not work because trying to push this box - % on the stack would not actually append any box. - \prop_clear:c { l_ebproof_marks_ \__int_value:w #1 _prop } - \ebproof_set_mark:Nnn #1 { left } { 0pt } - \ebproof_set_mark:Nnn #1 { right } { 0pt } - \ebproof_set_mark:Nnn #1 { axis } { 0pt } -} - - -%%% Mark operations - -% Set the value of a mark. The third argument is a dimension expression. - -\dim_new:N \l_ebproof_transit_dim - -\cs_new:Nn \ebproof_set_mark:Nnn { - \dim_set:Nn \l_ebproof_transit_dim { #3 } - \prop_put:cnV { l_ebproof_marks_ \__int_value:w #1 _prop } { #2 } - \l_ebproof_transit_dim -} - -% Get the value of a mark. This is expandable and can be used in expressions. - -\cs_new:Nn \ebproof_mark:Nn { - \prop_item:cn { l_ebproof_marks_ \__int_value:w #1 _prop } { #2 } -} - -% Shift the marks by a specified amount, without modifying the box. - -\cs_new:Nn \ebproof_shift_x:Nn { - \prop_map_inline:cn { l_ebproof_marks_ \__int_value:w #1 _prop } { - \ebproof_set_mark:Nnn #1 { ##1 } { ##2 + #2 } - } -} - -% Move the left and right marks of the first tree so that they are at least as -% far from the axis as they are in the second tree. For instance if the marks -% are set as -% 1: L---A-------R -% 2: L-------A---R -% then the marks of the first tree are then set as -% 1: L-------A-------R -% The contents of the tree are unchanged. - -\cs_new:Nn \ebproof_enlarge_conclusion:NN { - \dim_set:Nn \l_tmpa_dim { \ebproof_mark:Nn #1 {axis} - + \ebproof_mark:Nn #2 {left} - \ebproof_mark:Nn #2 {axis} } - \dim_compare:nNnT { \l_tmpa_dim } < { \ebproof_mark:Nn #1 {left} } { - \ebproof_set_mark:Nnn #1 {left} { \l_tmpa_dim } } - \dim_set:Nn \l_tmpa_dim { \ebproof_mark:Nn #1 {axis} - + \ebproof_mark:Nn #2 {right} - \ebproof_mark:Nn #2 {axis} } - \dim_compare:nNnT { \l_tmpa_dim } > { \ebproof_mark:Nn #1 {right} } { - \ebproof_set_mark:Nnn #1 {right} { \l_tmpa_dim } } -} - - -%%% Building blocks - -% Make a tree with explicit material in horizontal mode. Set the left and -% right marks to extremal positions and set the axis in the middle. - -\cs_new:Nn \ebproof_make_simple:Nn { - \hbox_set:Nn #1 { #2 } - \ebproof_set_mark:Nnn #1 { left } { 0pt } - \ebproof_set_mark:Nnn #1 { axis } { \box_wd:N #1 / 2 } - \ebproof_set_mark:Nnn #1 { right } { \box_wd:N #1 } -} - -% Make a tree with explicit material in horizontal mode, split in two parts. -% Set the left and right marks to extremal positions and set the axis between -% the two parts. - -\cs_new:Nn \ebproof_make_split:Nnn { - \ebproof_set_mark:Nnn #1 { left } { 0pt } - \hbox_set:Nn #1 { #2 } - \ebproof_set_mark:Nnn #1 { axis } { \box_wd:N #1 } - \hbox_set:Nn #1 { \hbox_unpack:N #1 #3 } - \ebproof_set_mark:Nnn #1 { right } { \box_wd:N #1 } -} - -% Make a tree with explicit material in vertical mode, using an explicit width -% and axis. - -\cs_new:Nn \ebproof_make_vertical:Nnnn { - \ebproof_set_mark:Nnn #1 { left } { 0pt } - \ebproof_set_mark:Nnn #1 { axis } { #2 } - \ebproof_set_mark:Nnn #1 { right } { #3 } - \vbox_set:Nn #1 { - \dim_set:Nn \tex_hsize:D { \ebproof_mark:Nn #1 {right} } - #4 - } - \box_set_wd:Nn #1 { \ebproof_mark:Nn #1 {right} } -} - -%%% Assembling boxes - -% Extend a tree box. The marks are shifted so that alignment is preserved. The -% arguments are dimensions for the left, top, right and bottom sides -% respectively. - -\cs_new:Nn \ebproof_extend:Nnnnn { - \dim_compare:nNnF { #2 } = { 0pt } { - \hbox_set:Nn #1 { - \skip_horizontal:n { #2 } - \box_use:N #1 - } - \ebproof_shift_x:Nn #1 { #2 } - } - \box_set_ht:Nn #1 { \box_ht:N #1 + #3 } - \box_set_wd:Nn #1 { \box_wd:N #1 + #4 } - \box_set_dp:Nn #1 { \box_dp:N #1 + #5 } -} - -% Append the contents of the second tree to the first one on the right, with -% matching baselines. The marks of both trees are preserved. The middle -% argument specifies the space to insert between boxes. - -\cs_new:Nn \ebproof_append_right:NnN { - \hbox_set:Nn #1 { - \box_use:N #1 - \dim_compare:nNnF { #2 } = { 0pt } { \skip_horizontal:n { #2 } } - \box_use:N #3 - } -} - -% Append the contents of the second tree to the first one on the left, with -% matching baselines. The marks of the first tree are shifted accordingly. The -% middle argument specifies the space to insert between boxes. - -\cs_new:Nn \ebproof_append_left:NnN { - \ebproof_shift_x:Nn #1 { \box_wd:N #3 + #2 } - \hbox_set:Nn #1 { - \box_use:N #3 - \dim_compare:nNnF { #2 } = { 0pt } { \skip_horizontal:n { #2 } } - \box_use:N #1 - } -} - -% Shift of two trees to the right so that the axes match. The marks of the one -% that is shifted are updated accordingly. - -\cs_new:Nn \ebproof_align:NN { - \dim_set:Nn \l_tmpa_dim - { \ebproof_mark:Nn #2 {axis} - \ebproof_mark:Nn #1 {axis} } - \dim_compare:nNnTF \l_tmpa_dim < { 0pt } { - \ebproof_extend:Nnnnn #2 { -\l_tmpa_dim } { 0pt } { 0pt } { 0pt } - } { - \ebproof_extend:Nnnnn #1 { \l_tmpa_dim } { 0pt } { 0pt } { 0pt } - } -} - -% Append the contents of the second tree above the first one, with matching -% axes. The marks of the first tree are preserved. - -\cs_new:Nn \ebproof_append_above:NN { - \ebproof_align:NN #1 #2 - \vbox_set:Nn #1 { - \box_use:N #2 - \tex_prevdepth:D -1000pt - \box_use:N #1 - } -} - -% Append the contents of the second tree below the first one, with matching -% axes. The marks of the first tree are preserved. - -\cs_new:Nn \ebproof_append_below:NN { - \ebproof_align:NN #1 #2 - \vbox_set_top:Nn #1 { - \box_use:N #1 - \tex_prevdepth:D -1000pt - \box_use:N #2 - } -} - -% Shift the material in a tree vertically so that the height and depth are -% equal (like TeX's \vcenter but around the baseline). - -\cs_new:Nn \ebproof_vcenter:N { - \dim_set:Nn \l_tmpa_dim { ( \box_ht:N #1 - \box_dp:N #1 ) / 2 } - \box_set_eq:NN \l_tmpa_box #1 - \hbox_set:Nn #1 - { \box_move_down:nn { \l_tmpa_dim } { \box_use:N \l_tmpa_box } } -} - - -%% Making inferences -% -% The following commands use the parameters defined at the beginning of the -% package for actually building proof trees using the commands defined above. - -% Append the contents of the second tree above or below the first one, -% depending on current settings. Axes are aligned and the marks of the first -% tree are preserved. - -\cs_new:Nn \ebproof_append_vertical:NN { - \bool_if:NTF \l_ebproof_updown_bool - { \ebproof_append_below:NN #1 #2 } - { \ebproof_append_above:NN #1 #2 } -} - -% Make a box containing an inference rule with labels, using the current -% settings. The width and axis position are taken as those of the conclusion -% of another tree box. The third argument is used as a temporary register for -% building labels. - -\cs_new:Nn \ebproof_make_rule_for:NNN { - - % Build the rule. - - \ebproof_make_vertical:Nnnn #1 - { \ebproof_mark:Nn #2 {axis} - \ebproof_mark:Nn #2 {left} } - { \ebproof_mark:Nn #2 {right} - \ebproof_mark:Nn #2 {left} } - { - \skip_vertical:N \l_ebproof_rule_margin_dim - \tl_if_empty:NF { \l_ebproof_rule_code_tl } { - \tl_use:N \l_ebproof_rule_code_tl - \skip_vertical:N \l_ebproof_rule_margin_dim - } - } - \ebproof_vcenter:N #1 - - % Append the left label - - \tl_if_blank:VF \l_ebproof_left_label_tl { - \ebproof_make_simple:Nn #3 { - \box_move_down:nn { \l_ebproof_label_axis_dim } { \hbox:n { - \cs_set_eq:NN \inserttext \l_ebproof_left_label_tl - \tl_use:N \l_ebproof_left_label_template_tl - } } - } - \box_set_ht:Nn #3 { 0pt } - \box_set_dp:Nn #3 { 0pt } - \ebproof_append_left:NnN - \l_ebproof_c_box \l_ebproof_label_separation_dim \l_ebproof_d_box - } - - % Append the right label - - \tl_if_blank:VF \l_ebproof_right_label_tl { - \ebproof_make_simple:Nn #3 { - \box_move_down:nn { \l_ebproof_label_axis_dim } { \hbox:n { - \cs_set_eq:NN \inserttext \l_ebproof_right_label_tl - \tl_use:N \l_ebproof_right_label_template_tl - } } - } - \box_set_ht:Nn #3 { 0pt } - \box_set_dp:Nn #3 { 0pt } - \ebproof_append_right:NnN - \l_ebproof_c_box \l_ebproof_label_separation_dim \l_ebproof_d_box - } - -} - - -%% Stack-based interface - -%%% The stack - -% Logically, box structures are stored on a stack. However, TeX does not -% provide data structures for that and the grouping mechanism is not flexible -% enough, so we encode them using what we actually have. A stack for boxes is -% implemented using a global hbox |\g_ebproof_stack_box| that contains all the -% boxes successively. A sequence |\g_ebproof_stack_seq| is used to store the -% dimensions property lists textually. We maintain a counter -% |\g_ebproof_level_int| with the number of elements on the stack, for -% consistency checks. - -\int_new:N \g_ebproof_level_int -\box_new:N \g_ebproof_stack_box -\seq_new:N \g_ebproof_stack_seq - -% Clear the stack. - -\cs_new:Nn \ebproof_clear_stack: { - \int_gset:Nn \g_ebproof_level_int { 0 } - \hbox_gset:Nn \g_ebproof_stack_box { } - \seq_gclear:N \g_ebproof_stack_seq -} - -% Push the contents of a register on the stack. - -\cs_new:Nn \ebproof_push:N { - \int_gincr:N \g_ebproof_level_int - \hbox_gset:Nn \g_ebproof_stack_box - { \hbox_unpack:N \g_ebproof_stack_box \box_use:N #1 } - \seq_gput_left:Nv \g_ebproof_stack_seq - { l_ebproof_marks_ \__int_value:w #1 _prop } -} - -% Pop the value from the top of the stack into a register. - -\cs_new:Nn \ebproof_pop:N { - \int_compare:nNnTF { \g_ebproof_level_int } > { 0 } { - \int_gdecr:N \g_ebproof_level_int - \hbox_gset:Nn \g_ebproof_stack_box { - \hbox_unpack:N \g_ebproof_stack_box - \box_gset_to_last:N \g_tmpa_box - } - \box_set_eq_clear:NN #1 \g_tmpa_box - \seq_gpop_left:NN \g_ebproof_stack_seq \l_tmpa_tl - \tl_set_eq:cN { l_ebproof_marks_ \__int_value:w #1 _prop } \l_tmpa_tl - } { - \PackageError{ebproof}{Missing~premiss~in~a~proof~tree}{} - \ebproof_clear:N #1 - } -} - -%%% Assembling trees - -\ebproof_new:N \l_ebproof_a_box -\ebproof_new:N \l_ebproof_b_box -\ebproof_new:N \l_ebproof_c_box -\ebproof_new:N \l_ebproof_d_box - -% Join horizontally a number of elements at the top of the stack. If several -% trees are joined, use the left mark of the left tree, the right mark of the -% right tree and set the axis in the middle of these marks. - -\cs_new:Nn \ebproof_join_horizontal:n { - \int_case:nnF { #1 } { - { 0 } { - \group_begin: - \ebproof_clear:N \l_ebproof_a_box - \ebproof_push:N \l_ebproof_a_box - \group_end: - } - { 1 } { } - } { - \group_begin: - \ebproof_pop:N \l_ebproof_a_box - \prg_replicate:nn { #1 - 1 } { - \ebproof_pop:N \l_ebproof_b_box - \ebproof_append_left:NnN - \l_ebproof_a_box \l_ebproof_separation_dim \l_ebproof_b_box - } - \ebproof_set_mark:Nnn \l_ebproof_a_box { left } - { \ebproof_mark:Nn \l_ebproof_b_box { left } } - \ebproof_set_mark:Nnn \l_ebproof_a_box { axis } - { ( \ebproof_mark:Nn \l_ebproof_a_box { left } - + \ebproof_mark:Nn \l_ebproof_a_box { right } ) / 2 } - \ebproof_push:N \l_ebproof_a_box - \group_end: - } -} - -% Join vertically the two elements at the top of the stack, with a horizontal -% rule of the appropriate size. - -\cs_new:Nn \ebproof_join_vertical: { - \group_begin: - \ebproof_pop:N \l_ebproof_a_box - \ebproof_pop:N \l_ebproof_b_box - \ebproof_enlarge_conclusion:NN \l_ebproof_b_box \l_ebproof_a_box - \ebproof_make_rule_for:NNN \l_ebproof_c_box \l_ebproof_b_box - \l_ebproof_d_box - \ebproof_append_vertical:NN \l_ebproof_a_box \l_ebproof_c_box - \ebproof_append_vertical:NN \l_ebproof_a_box \l_ebproof_b_box - \ebproof_push:N \l_ebproof_a_box - \group_end: -} - -%%% High-level commands - -% Push a box with default formatting, using explicit alignment if the code -% contains a |&| character - -\cs_new:Npn \ebproof_statement_parse:w #1\ebproof_statement_stop: { - \tl_if_empty:nTF { #3 } { - \ebproof_make_simple:Nn \l_ebproof_a_box - { \cs_set:Npn \inserttext { #1 } \tl_use:N \l_ebproof_template_tl } - } { - \ebproof_make_split:Nnn \l_ebproof_a_box - { \cs_set:Npn \inserttext { #1 } \tl_use:N \l_ebproof_left_template_tl } - { \cs_set:Npn \inserttext { #2 } \tl_use:N \l_ebproof_right_template_tl } - } - \ebproof_push:N \l_ebproof_a_box -} - -\cs_new:Nn \ebproof_push_statement:n { - \ebproof_statement_parse:w #1&& \ebproof_statement_stop: -} - - -%% Document interface - -%%% Functions to define statements - -% The |\g_ebproof_stack_seq| variable contains the list of all defined -% statements. For each statement |X|, there is a document command |\ebproofX| -% and the alias |\X| is defined when entering a |prooftree| environment. - -\seq_new:N \g_ebproof_statements_seq - -% Install the aliases for statements, saving the original value of the control -% sequences. - -\cs_new:Nn \ebproof_setup_statements: { - \seq_map_inline:Nn \g_ebproof_statements_seq { - \cs_set_eq:cc { ebproof_saved_ ##1 } { ##1 } - \cs_set_eq:cc { ##1 } { ebproof ##1 } - } -} - -% Restore the saved meanings of the control sequences. This is useful when -% interpreting user-provided code in statement arguments. The meanings are -% automatically restored when leaving a |prooftree| environment because of -% grouping. - -\cs_new:Nn \ebproof_restore_statements: { - \seq_map_inline:Nn \g_ebproof_statements_seq { - \cs_set_eq:cc { ##1 } { ebproof_saved_ ##1 } - } -} - -% Define a new statement. The first argument is the name, the second one is an -% argument specifier as used by |xparse| and the third one is the body of the -% command. - -\cs_new:Nn \ebproof_new_statement:nnn { - \exp_args:Nc \NewDocumentCommand { ebproof#1 }{ #2 } { #3 } - \seq_put_right:Nn \g_ebproof_statements_seq { #1 } -} - -% Define a deprecated statement. The syntax is the same as above except that -% an extra argument in third position indicates what should be used instead. -% The effect is the same except that a warning message is issued the first -% time the statement is used. - -\cs_new:Nn \ebproof_new_deprecated_statement:nnnn { - \cs_new:cpn { ebproof_#1_warning: } { - \PackageWarning { ebproof } { \token_to_str:c{#1}~is~deprecated,~#3 } - \cs_gset:cn { ebproof_#1_warning: } { } - } - \ebproof_new_statement:nnn { #1 } { #2 } - { \use:c { ebproof_#1_warning: } #4 } -} - - -%%% Basic commands - -\ebproof_new_statement:nnn { set } { m } { - \keys_set:nn { ebproof } { #1 } -} - -\ebproof_new_statement:nnn { hypo } { O{} m } { - \group_begin: - \ebproof_restore_statements: - \keys_set:nn { ebproof } { #1 } - \ebproof_push_statement:n { #2 } - \group_end: -} - -\ebproof_new_statement:nnn { infer } { O{} m O{} m } { - \group_begin: - \ebproof_restore_statements: - \keys_set_known:nnN { ebproof / rule~style } { #1 } \l_tmpa_tl - \keys_set:nV { ebproof } \l_tmpa_tl - \tl_set:Nn \l_ebproof_right_label_tl { #3 } - \ebproof_join_horizontal:n { #2 } - \ebproof_push_statement:n { #4 } - \ebproof_join_vertical: - \group_end: -} - -\ebproof_new_statement:nnn { ellipsis } { m m } { - \group_begin: - \ebproof_restore_statements: - \tl_clear:N \l_ebproof_rule_code_tl - \ebproof_make_split:Nnn \l_ebproof_a_box { } { - \vbox_set:Nn \l_tmpa_box { - \skip_vertical:n { 1.2ex } - \hbox:n { \tex_ignorespaces:D #1 } - \skip_vertical:n { 1.2ex } - } - \vbox_to_ht:nn { \box_ht:N \l_tmpa_box } { - \tex_xleaders:D \vbox_to_ht:nn { .8ex } - { \tex_vss:D \hbox:n { . } \tex_vss:D } - \tex_vfill:D - } - \hbox_overlap_right:n { ~ \box_use:N \l_tmpa_box } - } - \ebproof_push:N \l_ebproof_a_box - \ebproof_join_vertical: - \ebproof_push_statement:n {#2} - \ebproof_join_vertical: - \group_end: -} - - -%%% Modifying trees - -% Rewrite the box at the top of the stack while preserving its dimensions an -% marks. The code is typeset in horizontal mode, with control sequences to -% access the original box and its marks: -% - \treebox is a box register with the original material -% - \treemark{NAME} provides the value of a given mark - -\ebproof_new_statement:nnn { rewrite } { m } { - \group_begin: - \ebproof_restore_statements: - \ebproof_pop:N \l_ebproof_a_box - \box_set_eq:NN \l_tmpa_box \l_ebproof_a_box - \hbox_set:Nn \l_tmpb_box { - \cs_set_eq:NN \treebox \l_tmpa_box - \cs_set:Npn \treemark { \ebproof_mark:Nn \l_ebproof_a_box } - { #1 } - } - \box_set_wd:Nn \l_tmpb_box { \box_wd:N \l_ebproof_a_box } - \box_set_ht:Nn \l_tmpb_box { \box_ht:N \l_ebproof_a_box } - \box_set_dp:Nn \l_tmpb_box { \box_dp:N \l_ebproof_a_box } - \box_set_eq:NN \l_ebproof_a_box \l_tmpb_box - \ebproof_push:N \l_ebproof_a_box - \group_end: -} - -% Insert |\left| and |\right| delimiters without changing the alignment - -\ebproof_new_statement:nnn { delims } { m m } { - \group_begin: - \ebproof_restore_statements: - \ebproof_pop:N \l_ebproof_a_box - \hbox_set:Nn \l_tmpa_box - { $ \tex_vcenter:D { \box_use:N \l_ebproof_a_box } $ } - \dim_set:Nn \l_tmpa_dim - { \box_ht:N \l_tmpa_box - \box_ht:N \l_ebproof_a_box } - \hbox_set:Nn \l_ebproof_a_box { - $ #1 \tex_vrule:D - height \box_ht:N \l_tmpa_box depth \box_dp:N \l_tmpa_box width 0pt - \tex_right:D . $ - } - \ebproof_shift_x:Nn \l_ebproof_a_box { \box_wd:N \l_ebproof_a_box } - \hbox_set:Nn \l_ebproof_a_box { - \hbox_unpack:N \l_ebproof_a_box - $ \tex_left:D . \box_use:N \l_tmpa_box #2 $ - } - \hbox_set:Nn \l_ebproof_a_box - { \box_move_down:nn { \l_tmpa_dim } { \box_use:N \l_ebproof_a_box } } - \ebproof_push:N \l_ebproof_a_box - \group_end: -} - - -%%% Deprecated statements - -% These statements were defined in versions 1.x of the package, they are -% preserved for temporary upwards compatibility and will be removed in a -% future version. - -\ebproof_new_deprecated_statement:nnnn { Alter } { m } - { use~\token_to_str:c{rewrite}~instead } { \ebproofrewrite{ #1 \box\treebox } } -\ebproof_new_deprecated_statement:nnnn { Delims } { } - { use~\token_to_str:c{delims}~instead } { \ebproofdelims } -\ebproof_new_deprecated_statement:nnnn { Ellipsis } { } - { use~\token_to_str:c{ellipsis}~instead } { \ebproofellipsis } -\ebproof_new_deprecated_statement:nnnn { Hypo } { } - { use~\token_to_str:c{hypo}~instead } { \ebproofhypo } -\ebproof_new_deprecated_statement:nnnn { Infer } { } - { use~\token_to_str:c{infer}~instead } { \ebproofinfer } - - -%%% Environment interface - -\ebproof_clear_stack: - -\tl_new:N \l_ebproof_start_level_tl - -\NewDocumentEnvironment { prooftree } { s O{} } { - \keys_set_known:nnN { ebproof / proof~style } { #2 } \l_tmpa_tl - \keys_set:nV { ebproof } \l_tmpa_tl - \tl_set:Nx \l_ebproof_start_level_tl { \int_use:N \g_ebproof_level_int } - \vbox_set:Nw \l_tmpa_box - \ebproof_setup_statements: -} { - \vbox_set_end: - \ebproof_pop:N \l_ebproof_a_box - \int_compare:nNnF { \g_ebproof_level_int } = { \tl_use:N \l_ebproof_start_level_tl } { - \PackageError{ebproof}{Malformed~proof~tree}{ - Some~hypotheses~were~declared~but~not~used~in~this~tree.} - } - \IfBooleanTF { #1 } { - \[ \box_use:N \l_ebproof_a_box \] - \ignorespacesafterend - } { - \hbox_unpack:N \c_empty_box - \bool_if:NTF \l_ebproof_center_bool { - \hbox:n { $ \tex_vcenter:D { \box_use:N \l_ebproof_a_box } $ } - } { - \box_use:N \l_ebproof_a_box - } - } -} - -% A trick for the starred version: -\cs_new:cpn { prooftree* } { \prooftree* } -\cs_new:cpn { endprooftree* } { \endprooftree } diff --git a/macros/latex/contrib/ebproof/ebproof.tex b/macros/latex/contrib/ebproof/ebproof.tex deleted file mode 100644 index eeb93e5cdf..0000000000 --- a/macros/latex/contrib/ebproof/ebproof.tex +++ /dev/null @@ -1,638 +0,0 @@ -%% ebproof.sty -%% Copyright 2017 Emmanuel Beffara <manu@beffara.org> -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Emmanuel Beffara. -% -% This work consists of the files ebproof.sty and ebproof.tex. - -\documentclass{article} - -\DeclareRobustCommand\package[1]{\texttt{#1}} - -\title{The \package{ebproof} package} -\author{Emmanuel Beffara \\ \url{manu@beffara.org}} -\date{Version 2.0 \\ March 17, 2017} - -\usepackage{amssymb} -\usepackage{color} -\usepackage{fancyvrb} -\usepackage[a4paper]{geometry} -\usepackage[colorlinks=true,urlcolor=blue]{hyperref} -\usepackage{multicol} - -\usepackage{tikz} -\usetikzlibrary{decorations.pathmorphing} - -\usepackage{ebproof} - -\newcommand\lit[1]{\texttt{#1}} -\newcommand\cs[1]{\lit{\char`\\#1}} -\newcommand\env[1]{\lit{#1}} -\newcommand\opt[1]{\lit{#1}} -\newcommand\meta[1]{$\langle$\textit{#1}$\rangle$} -\newcommand\oarg[1]{\lit[\meta{#1}\lit]} -\newcommand\marg[1]{\lit{\{}\meta{#1}\lit{\}}} - -\newenvironment{csdoc}[1]{% - \smallbreak\noindent{#1}% - \begin{list}{}{% - \topsep=1ex% - }% - \item -}{% - \end{list}% -} - -\newenvironment{example}[1]{% - \def\exampleoptions{#1}% - \VerbatimOut{example.tex}}{% - \endVerbatimOut - \begin{center} - \begin{minipage}{.4\textwidth} - \input{example.tex} - \end{minipage}% - \begin{minipage}{.6\textwidth} - \small - \expandafter\VerbatimInput\expandafter[\exampleoptions]{example.tex} - \end{minipage}% - \end{center} -} - -\setcounter{tocdepth}{2} - -\begin{document} -\maketitle - -\begin{multicols}{2} - \tableofcontents -\end{multicols} - -\section{Introduction} - -The \env{ebproof} package provides commands to typeset proof trees, in the -style of sequent calculus and related systems: - -\begin{example}{gobble=2} - \begin{prooftree} - \hypo{ \Gamma, A &\vdash B } - \infer1[abs]{ \Gamma &\vdash A\to B } - \hypo{ \Gamma \vdash A } - \infer2[app]{ \Gamma \vdash B } - \end{prooftree} -\end{example} - -The structure is very much inspired by the -\href{http://math.ucsd.edu/~sbuss/ResearchWeb/bussproofs/}{\package{bussproofs}} -package, in particular for the postfix notation. -I actually wrote \package{ebproof} because there were some limitations in -\package{bussproofs} that I did not know how to lift, and also because I did -not like some choices in that package (and also because it was fun to write). - -\section{Environments} - -The package provides the \env{prooftree} environment, in a standard and -starred variants. - -\begin{csdoc}{ - \cs{begin}\lit{\{prooftree\}}\oarg{options} - \meta{statements} - \cs{end}\lit{\{prooftree\}}} - Typeset the proof tree described by the \meta{statements}, as described in - section~\ref{sec:statements}. - The \meta{options} provide default formatting options for the proof tree. - This environment can be used either in math mode or in text mode. - It produces a proof tree at the current position in the text flow. -\end{csdoc} - -\begin{csdoc}{ - \cs{begin}\lit{\{prooftree*\}}\oarg{options} - \meta{statements} - \cs{end}\lit{\{prooftree*\}}} - Typeset the proof on a line of its own; it is essentially equivalent to - wrapping the \env{prooftree} environment inside a displayed math - environment. -\end{csdoc} - -\noindent -The starred version is used in situations when a single proof will be -displayed. -The non-starred version is useful in order to integrate the proof into some -larger structure, like two parts of a formula: - -\begin{example}{gobble=2} - \[ - \begin{prooftree} - \infer0{ \vdash A } - \hypo{ \vdash B } \infer1{ \vdash B, C } - \infer2{ \vdash A\wedge B, C } - \end{prooftree} - \quad \rightsquigarrow \quad - \begin{prooftree} - \infer0{ \vdash A } \hypo{ \vdash B } - \infer2{ \vdash A\wedge B } - \infer1{ \vdash A\wedge B, C } - \end{prooftree} - \] -\end{example} - -\section{Statements} -\label{sec:statements} - -Statements describe proofs in postfix notation: when typesetting a proof tree -whose last rule has, say, two premisses, you will first write statements for -the subtree of the first premiss, then statements for the subtree of the -second premiss, then a statement like \cs{infer2}\{\meta{conclusion}\} to -build an inference with these two subtrees as premisses and the given text as -conclusion. - -Hence statements operate on a stack of proof trees. -At the beginning of a \lit{prooftree} environment, the stack is empty. -At the end, it must contain exactly one tree, which is the one that will be -printed. - -Note that the commands defined in this section only exist right inside -\env{prooftree} environments. -If you have a macro with the same name as one of the statements, for instance -\cs{hypo}, then this macro will keep its meaning outside \env{prooftree} -environments as well as inside the arguments of a statement. -If you really need to access the statements in another context, you can can -always call them by prefixing their names with \lit{ebproof}, for instance as -\cs{ebproofhypo}. - -\subsection{Basic statements} - -The basic statements for building proofs are the following, where -\meta{options} stands for arbitrary options as described in -section~\ref{sec:options}. -\begin{csdoc}{\cs{hypo}\oarg{options}\marg{text}} - Push a new proof tree consisting only in one conclusion line, with no - premiss and no line above, in other words a tree with only a leaf - (\cs{hypo} stands for \emph{hypothesis}). -\end{csdoc} -\begin{csdoc}{\cs{infer}\oarg{options}\marg{arity}\oarg{label}\marg{text}} - Build an inference step by taking some proof trees from the top of the - stack, assembling them with a rule joining their conclusions and putting a - new conclusion below. - The \meta{arity} is the number of sub-proofs, it may be any number - including 0 (in this case there will be a line above the conclusion but no - sub-proof). - If \meta{label} is present, it is used as the label on the right of the - inference line; it is equivalent to using the \opt{right label} option. -\end{csdoc} - -The \meta{text} in these statements is the contents of the conclusion at the -root of the tree that the statements create. -It is typeset in math mode by default but any kind of formatting can be used -instead, using the \opt{template} option. -The \meta{label} text is formatted in horizontal text mode by default. - -Each proof tree has a vertical axis, used for alignment of successive steps. -The position of the axis is deduced from the text of the conclusion at the -root of the tree: if \meta{text} contains the alignment character \verb|&| -then the axis is set at that position, otherwise the axis is set at the center -of the conclusion text. -The \cs{infer} statement makes sure that the axis of the premiss is at the -same position as the axis of the conclusion. -If there are several premisses, it places the axis at the center between the -left of the leftmost conclusion and the right of the rightmost conclusion: - -\begin{example}{gobble=2} - \begin{prooftree} - \hypo{ &\vdash A, B, C } - \infer1{ A &\vdash B, C } - \infer1{ A, B &\vdash C } - \hypo{ D &\vdash E } - \infer2{ A, B, D &\vdash C, E } - \infer1{ A, B &\vdash C, D, E } - \infer1{ A &\vdash B, C, D, E } - \end{prooftree} -\end{example} - -\begin{csdoc}{\cs{ellipsis}\marg{label}\marg{text}} - Typeset vertical dots, with a label on the right, and a new conclusion. - No inference lines are inserted. - \begin{example}{gobble=4} - \begin{prooftree} - \hypo{ \Gamma &\vdash A } - \ellipsis{foo}{ \Gamma &\vdash A, B } - \end{prooftree} - \end{example} -\end{csdoc} - - -\subsection{Modifying proof trees} - -The following additional statements may be used to affect the format of the -last proof tree on the stack: - -\begin{csdoc}{\cs{rewrite}\marg{code}} - Rewrite the proof while preserving its size and alignment. The \meta{code} - is typeset in horizontal mode, with the following control sequences defined: - \begin{itemize} - \item \cs{treebox} is a box register that contains the original material, - \item \cs{treemark}\marg{name} expands as the position of a given mark with - respect to the left of the box. - \end{itemize} - A simple use of this statement is to change the color of a proof tree: - \begin{example}{gobble=4} - \begin{prooftree} - \hypo{ \Gamma, A &\vdash B } - \infer1[abs]{ \Gamma &\vdash A\to B } - \rewrite{\color{red}\box\treebox} - \hypo{ \Gamma \vdash A } - \infer2[app]{ \Gamma \vdash B } - \end{prooftree} - \end{example} - Note the absence of spaces inside the call to \cs{rewrite}, because spaces - would affect the position of the tree box. - Note also that explicit use of \cs{treebox} is required to actually draw the - subtree. - Not using it will effectively not render the subtree, while still reserving - its space in the enclosing tree: - \begin{example}{gobble=4} - \begin{prooftree} - \hypo{ \Gamma, A &\vdash B } - \infer1[abs]{ \Gamma &\vdash A\to B } - \rewrite{} - \hypo{ \Gamma \vdash A } - \infer2[app]{ \Gamma \vdash B } - \end{prooftree} - \end{example} - This kind of manipulation is useful for instance in conjunction with the - \package{beamer} package to allow revealing subtrees of a proof tree - progressively in successive slides of a given frame. -\end{csdoc} - -\begin{csdoc}{\cs{delims}\marg{left}\marg{right}} - Put left and right delimiters around the whole sub-proof, without changing - the alignment (the spacing is affected by the delimiters, however). - The \meta{left} text must contain an opening occurrence of \cs{left} and the - \meta{right} text must contain a matching occurrence of \cs{right}. - For instance, \verb|\delims{\left(}{\right)}| will put the - sub-proof between parentheses. - \begin{example}{gobble=4} - \begin{prooftree} - \hypo{ A_1 \vee \cdots \vee A_n } - \hypo{ [A_i] } - \ellipsis{}{ B } - \delims{ \left( }{ \right)_{1\leq i\leq n} } - \infer2{ B } - \end{prooftree} - \end{example} -\end{csdoc} - -\section{Options} -\label{sec:options} - -The formatting of trees, conclusion texts and inference rules is affected by -options, specified using the \LaTeX3 key-value system. -All options are in the \lit{ebproof} module in the key tree. -They can be set locally for a proof tree or for a single statement using -optional arguments in the associated commands. - -\begin{csdoc}{\cs{ebproofset}\marg{options}} - Set some options. - The options will apply in the current scope; using this in preamble will - effectively set options globally. - Specific options may also be specified for each proof tree and for each - statement in a proof tree, using optional arguments. -\end{csdoc} - -\subsection{General shape} - -The options in this section only make sense at the global level and at the -proof level. -Changing the proof style inside a \lit{proof} environment has undefined -behaviour. - -\begin{csdoc}{\opt{proof style=}\meta{name}} - Set the general shape for representing proofs. - The following styles are provided: - \begin{csdoc}{\lit{upwards}} - This is the default style. - Proof trees grow upwards, with conclusions below and premisses above. - \end{csdoc} - \begin{csdoc}{\lit{downwards}} - Proof trees grow downwards, with conclusions above and premisses below. - \begin{example}{gobble=4} - \begin{prooftree}[proof style=downwards] - \hypo{ \Gamma, A &\vdash B } - \infer1[abs]{ \Gamma &\vdash A\to B } - \hypo{ \Gamma \vdash A } - \infer2[app]{ \Gamma \vdash B } - \end{prooftree} - \end{example} - \end{csdoc} -\end{csdoc} - -In the optional argument of \lit{prooftree} environments, proof styles can -be specified directly, without prefixing the name by ``\lit{proof style=}''. -For instance, the first line of the example above could be written -\cs{begin}\lit{\{prooftree\}[downwards]} equivalently. - -\begin{csdoc}{\opt{center=}\meta{boolean}} - If set to \lit{true}, the tree produced by the \env{prooftree} environment - will be vertically centered around the text line. - If set to \lit{false}, the base line of the tree will be the base line of - the conclusion. - The default value is \lit{true}. - \begin{example}{gobble=4} - \begin{prooftree}[center=false] - \infer0{ A \vdash A } - \end{prooftree} - \qquad - \begin{prooftree}[center=false] - \hypo{ \Gamma, A \vdash B } - \infer1{ \Gamma \vdash A \to B } - \end{prooftree} - \end{example} -\end{csdoc} - -\subsection{Spacing} - -\begin{csdoc}{\opt{separation=}\meta{dimension}} - The horizontal separation between sub-proofs in an inference. - The default value is \lit{1.5em}. - \begin{example}{gobble=4} - \begin{prooftree}[separation=0.5em] - \hypo{ A } \hypo{ B } \infer2{ C } - \hypo{ D } \hypo{ E } \hypo{ F } \infer3{ G } - \hypo{ H } \infer[separation=3em]3{ K } - \end{prooftree} - \end{example} -\end{csdoc} - -\begin{csdoc}{\opt{rule margin=}\meta{dimension}} - The spacing above and below inference lines. - The default value is \lit{0.7ex}. - \begin{example}{gobble=4} - \begin{prooftree}[rule margin=2ex] - \hypo{ \Gamma, A &\vdash B } - \infer1[abs]{ \Gamma &\vdash A\to B } - \hypo{ \Gamma \vdash A } - \infer2[app]{ \Gamma \vdash B } - \end{prooftree} - \end{example} -\end{csdoc} - -\subsection{Shape of inference lines} - -\begin{csdoc}{\opt{rule style=}\meta{name}} - Set the shape of inference lines. - The following values are provided: - \begin{csdoc}{\opt{simple}} - A simple horizontal rule is drawn. - This is the default style. - \end{csdoc} - \begin{csdoc}{\opt{no rule}} - No inference line is drawn. - A single space of the length of \lit{rule margin} is inserted. - \end{csdoc} - \begin{csdoc}{\opt{double}} - A double line is drawn. - \end{csdoc} - \begin{csdoc}{\opt{dashed}} - A single dashed line is drawn. - \end{csdoc} - The precise rendering is influenced by parameters specified below. - Arbitrary new shapes can defined using the \lit{rule code} option described - below and the \cs{ebproofnewrulestyle} command described in - section~\ref{sec:styles}. -\end{csdoc} - -In the optional argument of the \cs{infer} statement, rule styles can be -specified directly, without prefixing the style name by ``\lit{rule style=}''. -For instance, \cs{infer}\lit{[dashed]} is equivalent to -\cs{infer}\lit{[rule style=dashed]}. - -\begin{example}{gobble=2} - \begin{prooftree} - \hypo{ \Gamma &\vdash A \to B } - \infer[no rule]1{ \Gamma &\vdash {!A} \multimap B } - \hypo{ \Delta &\vdash A } - \infer[rule thickness=2pt]1{ \Delta &\vdash {!A} } - \infer0{ B \vdash B } - \infer[dashed]2{ \Delta, {!A}\multimap B \vdash B } - \infer2{ \Gamma, \Delta &\vdash B } - \infer[double]1{ \Gamma \cup \Delta &\vdash B } - \end{prooftree} -\end{example} - -\begin{csdoc}{\opt{rule thickness=}\meta{dimension}} - The thickness of inference lines. - It is \lit{0.4pt} by default. -\end{csdoc} -\begin{csdoc}{\opt{rule separation=}\meta{dimension}} - The distance between the two lines in the \lit{double} rule style. - It is \lit{2pt} by default. -\end{csdoc} -\begin{csdoc}{\opt{rule dash length=}\meta{dimension}} - The length of dashes in the \lit{dashed} rule style. - It is \lit{0.2em} by default. -\end{csdoc} -\begin{csdoc}{\opt{rule dash space=}\meta{dimension}} - The space between dashes in the \lit{dashed} rule style. - It is \lit{0.3em} by default. -\end{csdoc} - -\begin{csdoc}{\opt{rule code=}\meta{code}} - This option is used to define an arbitrary shape for rules. - The \meta{code} is used to render the rule, it is executed in vertical mode - in a \cs{vbox} whose \cs{hsize} is set to the width of the rule. - Margins above and below are inserted automatically (they can be removed by - setting \lit{rule margin} to \lit{0pt}). - - \begin{example}{gobble=4} - \begin{prooftree}[rule code={\hbox{\tikz - \draw[decorate,decoration={snake,amplitude=.3ex}] - (0,0) -- (\hsize,0);}}] - \hypo{ \Gamma &\vdash A } - \infer1{ \Gamma &\vdash A, \ldots, A } - \hypo{ \Delta, A, \ldots, A \vdash \Theta } - \infer2{ \Gamma, \Delta \vdash \Theta } - \end{prooftree} - \end{example} - Note that this example requires the \package{tikz} package, with the - \package{decorations.pathmorphing} library for the \lit{snake} decoration. -\end{csdoc} - -\subsection{Format of conclusions} - -\begin{csdoc}{% - \opt{template=}\meta{code} \\ - \opt{left template=}\meta{code} \\ - \opt{right template=}\meta{code}} - Defines how conclusions are formatted. - The code is arbitrary \TeX\ code, composed in horizontal mode. - The macro \cs{inserttext} is used to insert the actual text passed to the - \cs{hypo} and \cs{infer} statements. - The \opt{template} value is used for conclusions with no alignment mark. - The \opt{left template} and \opt{right template} values are used on the left - and right side of the alignment mark when it is present. - The default value for \opt{template} is simply \verb|$\inserttext$|, so that - conclusions are set in math mode. - The default values for \opt{left template} and \opt{right template} are - similar, with spacing assuming that a relation symbol is put near the - alignment mark, so that \verb|\infer1{A &\vdash B}| is spaced correctly. - - \begin{example}{gobble=4} - \begin{prooftree}[template=(\textbf\inserttext)] - \hypo{ foo } - \hypo{ bar } - \infer1{ baz } - \infer2{ quux } - \end{prooftree} - \end{example} -\end{csdoc} - -\subsection{Format of labels} - -\begin{csdoc}{% - \opt{left label=}\meta{text} \\ - \opt{right label=}\meta{text}} - The text to use as the labels of the rules, on the left and on the right - of the inference line. - Using the second optional argument in \cs{infer} is equivalent to setting - the \env{right label} option with the value of that argument. - - \begin{example}{gobble=4} - \begin{prooftree} - \hypo{ \Gamma, A &\vdash B } - \infer[left label=$\lambda$]1[abs] - { \Gamma &\vdash A\to B } - \hypo{ \Gamma \vdash A } - \infer[left label=@]2[app]{ \Gamma \vdash B } - \end{prooftree} - \end{example} -\end{csdoc} -\begin{csdoc}{% - \opt{left label template=}\meta{code} \\ - \opt{right label template=}\meta{code}} - Defines how rule labels are formatted. - The code is arbitrary \TeX\ code, composed in horizontal mode. - The macro \cs{inserttext} can be used to insert the actual label text, as - defined by the options above. - The default values are simply \cs{inserttext} so that labels are set in - plain text mode. -\end{csdoc} - -\begin{csdoc}{\opt{label separation=}\meta{dimension}} - The spacing between an inference lines and its labels. - The default value is \lit{0.5em}. -\end{csdoc} -\begin{csdoc}{\opt{label axis=}\meta{dimension}} - The height of the horizontal axis used for aligning the labels with the - rules. The default value is \lit{0.5ex}. -\end{csdoc} - - -\subsection{Style macros} -\label{sec:styles} - -The following commands allow for the definition of custom styles using the -basic style options, in a way similar to PGF's ``styles'' and \LaTeX3's -``meta-keys''. -This allows setting a bunch of options with the same values in many proofs -using a single definition. - -\begin{csdoc}{\cs{ebproofnewstyle}\marg{name}\marg{options}} - Define a new style option \meta{name} that sets the given \meta{options}. - - For instance, the following code defines a new option \opt{small} that sets - various parameters so that proofs are rendered smaller. - \begin{example}{gobble=4} - \ebproofnewstyle{small}{ - separation = 1em, rule margin = .5ex, - template = \footnotesize$\inserttext$ } - \begin{prooftree}[small] - \hypo{ \Gamma, A \vdash B } - \infer1{ \Gamma \vdash A\to B } - \hypo{ \Gamma \vdash A } \infer2{ \Gamma \vdash B } - \end{prooftree} - \end{example} -\end{csdoc} - -\begin{csdoc}{\cs{ebproofnewrulestyle}\marg{name}\marg{options}} - Define a new rule style. - The \meta{options} part includes options used to set how to draw rules in - the new style. - - The option \opt{rule code} is useful in this command as it allows to - define arbitrary rule styles. - For instance, the squiggly rule example above could be turned into a new - rule style \lit{zigzag} with the following code: - \begin{example}{gobble=4} - \ebproofnewrulestyle{zigzag}{ - rule code = {\hbox{\tikz - \draw[decorate,decoration={snake,amplitude=.3ex}] - (0,0) -- (\hsize,0);}}} - \begin{prooftree} - \hypo{ \Gamma &\vdash A } - \infer1{ \Gamma &\vdash A, \ldots, A } - \hypo{ \Delta, A, \ldots, A \vdash \Theta } - \infer[zigzag]2{ \Gamma, \Delta \vdash \Theta } - \end{prooftree} - \end{example} -\end{csdoc} - - -\section{License} - -This work may be distributed and/or modified under the -conditions of the \LaTeX\ Project Public License, either version 1.3 -of this license or (at your option) any later version. -The latest version of this license is in -\begin{center} - \url{http://www.latex-project.org/lppl.txt} -\end{center} -and version 1.3 or later is part of all distributions of \LaTeX\ -version 2005/12/01 or later. - -This work has the LPPL maintenance status `maintained'. - -The Current Maintainer of this work is Emmanuel Beffara. - -This work consists of the files \texttt{ebproof.sty} and \texttt{ebproof.tex}. - - -\section{History} - -This section lists the principal evolutions of the package, in reverse -chronological order. -\begin{description} -\item[Version 2.0] - A complete rewrite of the code using the \LaTeX3 programming environment. - The incompatible changes from the user's point of view are the following: - \begin{itemize} - \item Proof statements are now writtten in lowercase ({i.e.} \cs{Infer} is - now written \cs{infer} etc.) but the syntax is otherwise unchanged. - The old uppercase commands still work but produce a deprecation warning, - they will be removed in a future version. - \item New styles are now defined using \cs{ebproofnewstyle} and - \cs{ebproofnewrulestyle}. The previous method using PGF styles does not - work anymore (because PGF is not used anymore). - \end{itemize} - The new commands and options are the following: - \begin{itemize} - \item The statement \cs{rewrite} generalizes \cs{Alter}, - \item The option \opt{label axis} controls vertical alignment of labels. - \end{itemize} -\item[Version 1.1] - A bugfix release. - In \opt{template} options, one now uses \cs{inserttext} instead of \lit{\#1} - for the text arguments, which improves robustness. -\item[Version 1.0] - The first public release. -\end{description} - -\end{document} diff --git a/macros/latex/contrib/elpres/README.md b/macros/latex/contrib/elpres/README.md index a2730e2d3b..d2eef2239a 100644 --- a/macros/latex/contrib/elpres/README.md +++ b/macros/latex/contrib/elpres/README.md @@ -1,31 +1,34 @@ -Elpres v0.5 2020-07-12 +Elpres v0.6 2020-08-19 Short description ================= The elpres class is intended to be used for presentations on a screen or -with a beamer/projector. It is derived from LaTeX’s article class and can -be used with with LaTeX, pdfLaTeX (and LuaLaTeX). The default "virtual -paper size" of presentations generated by this class corresponds to a 4:3 +with a beamer/projector. It is derived from LaTeX’s article class and can +be used with with LaTeX, pdfLaTeX and LuaLaTeX. The default "virtual paper +size" of presentations generated by this class corresponds to a 4:3 (width:height) aspect ratio. Other aspect ratios for widescreen monitors -(16:9, 16x:0) may be selected. +(16:9, 16x:0) may be selected. The elpres class requires: ifthen, fancyhdr, hyperref, graphicx, xcolor and geometry. -For enhanced features the packages ragged2e, overlays, wallpaper, eso-pic -and footmisc are useful. +For enhanced features the packages ragged2e, overlays, wallpaper, eso-pic, +tcolorbox and footmisc are useful. A homepage for the elpres project: http://vkiefel.de/elpres.html with additional material. -Changes in v0.5 +Changes in v0.6 =============== -New class options: *nofonts* (no font selection) and *navisymb* (inserts a -panel of symbols for navigation). New commands: *auvimm* (generates a link -to external audio, video files), *fromlinktext* and *totargettext* (create -links within a presentation). +* New: presentation schemes added as style (.sty) files: they define colors + and design of list environments +* New command \slidetitlecolor{} +* Large parts of the manual rewritten +* New "recipes" for use of presentations included in the manual: printing of + handout documents, colored text boxes, printing of presentations with + overlays License ======= diff --git a/macros/latex/contrib/elpres/bitmaps/ctan-lion.png b/macros/latex/contrib/elpres/bitmaps/ctan-lion.png Binary files differnew file mode 100644 index 0000000000..c24d9a98f2 --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ctan-lion.png diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-01.eps b/macros/latex/contrib/elpres/bitmaps/ep-ball-01.eps new file mode 100644 index 0000000000..470e60d831 --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-01.eps @@ -0,0 +1,424 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: ep-ball-01.eps +%%CreationDate: Sun Jul 19 18:53:04 2020 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 100 98 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 82.98308476146363 translate +84.982677165354332 -82.98308476146363 scale +% Image geometry +85 83 8 +% Transformation matrix +[ 85 0 0 83 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 85 string def +/gstr 85 string def +/bstr 85 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 19422 ASCII Bytes +colorimage +h#@WWp?CZ&n+?J0s*t~> +h#@WWp?Uo-nb)b3s*t~> +h#@WWp[.54o(Mt6s*t~> +iVsVjmb>[dVk&p,M2@%DLnV9&hX1.<iW"E~> +iVsVjn))C*\[/?8Vl$;dUpS%jipZ^BiW"E~> +iVsVjn`/3GbK@oH`l?!7_9(-]kOJEJiW"E~> +jSp.pkJscmNIZ>$H$FOVF`_YCDf'9(FGQ?uh"9\-J,~> +jSp.pl-I)LY,eS%W2HMgUS4<NS!]M*QD(=ti:Z12J,~> +jSp.ple'S1e(NR4gY(3/eBuRcai;65]",K!j7VL5J,~> +kl2h*nC5:YQ@XR:It)orI!^0bG^":OEH#f3C1q3lEg*rir9+*1~> +kl2h*n_)+$['?pBZ*:F7XK/A"VPU#[Ssu.7P`_#cOeohQr9+*1~> +kl2h*o&&$GeE5rVjlGI]i838Cf[eKtc-")F_7mLhZF@p:r9+*1~> +lMi1/l,oZRJqSi4KnY25K7\W'IXQQgG]n1LE,KK,BP(da?X/30qs"-2~> +lMi1/ldE;K[C3QS\@8oS['R$@XfJJ#VPBfUS=,_.OcGBVKn,N?qs"-2~> +lMi1/mFp"IlKms,mHj0(l0%0giSNACf$i!jb/_H9]t1YXXf/DWr9=63~> +li.4W]:"M1LP^ofMuJSPM2-e;Jq/;tH?aUTEc>o3BkM$g@:*8BEm+@Gs*t~> +li/C%a1&Og]"G_j^:h4m]=PM\['?g:X/MnjTq7a@QBRDiMhm%;I>cMMli2J~> +li/C'eCWmQnac>Fo^hYDnF,c0kN1^\h:^E/d*9\P_nWjo[BQa2UScZ?li2J~> +mJdLjaH)(4MN*XXOo:ICOW9IBMi!4CJq/;sH$4:MDf'9(B4YO\?<^Q5A&/!/s*t~> +mJdIjd^Ha"^VI_)rPefT*Q,_.]XbMYZEL@/VPBfTR[BA'O,]$OK7J>oJB.TTs*t~> +mJea9h;@bop%S7Wqtg-`q"OLSo'br0k2bLWg=Fa"bfIc?^:Le[YH+RqSY"4+mJh\~> +mf*XaS;<&^OHPlqR@=,Es-t1#R$NqtNJiUHJq&/oGB@hCD/*`r@q&eN>?P!)Dq"[Rs*t~> +mf*Ub]",Pk`5g!Cc25g/c-")F^qRFi['6[4VPBfSR[98$Nf/^IJq&,kF+r6En,In~> +mf+s4g[=b0q>:*grVlcnqtp6cp\".Imd'-"iniD?da$"U_n`pp[BZj5V4jEFS_O,3s*t~> +nGa!tc%q7;Od2?)TVJ?[VPa?j+Jkg)S!]G&NJ`LEJ:2`fF)Z#5BkM!e?s[&?=&`$qHKFYrJ,~> +nG`mqf=AW4`lcQReCWCNg*#"sd*0SM_7dCfZEC4)U7RjAQ'.2eMM?b6I<g!UE/`uLs*t~> +nG`dnip?@5qYU3hrVlfps84#:q=s[Uo'l)5kMk@Pe^;X``PT@#[^3-;Vk]iOP`MF#nGe"~> +nc(KBSqr>fQC=D?W3!2,Z*CU@Za-g9Vk]oTR$3SiLkUD.H?O=JD/3fsA78hM>$+d':J=Qbqssc;~> +nc''p^qIS(bKnYigu.5RjSe0bjPenHeBlC[_nN^jZEC1'Tq.X=P`Ul_LkL>.H['XNCMU6Qo)F4~> +nc&mkjn&6Br;?Nlrr)otr;Q`p+oD-3p\+:Ona#Ath:^<(bK%N9]=>5PXJhqfS!T7qL:R3Ps*t~> +o)CZ;Oc#3aR\-CUYI1sS]Y2%o^qmdt[^*$7Un=-BP)bBQJUD]aEGoZ-B4YO[?!CH4<)HC`7um96 +s*t~> +o)B*f\A,u)cdUP&iofY(lm1lZiniD?da$"S^q@.^Xf/"eS!]J(Nf8gKJq&/nF`D83A!lr\s*t~> +o)Ambj7W6FrVlfjs!7UBrVZQhq=s^Un*9#mgXacsaMbp.\[JcFWhlD[R?W_fJY`#2s*t~> +o`%#Pd>!UBQ_'tPZ+.Neai_cLbg"GZbf@T6\?`68U7Ra9O,8O?HZjFKD/*`q@piVI=]\R#:eXGL +MWk'4s*t~> +o`#@!ft5)@c-t>$iTBFnrUKmX-h6ZlkiC[Wg""Koa2,EsZ)jjsS=,\,O,SpMK7A;qG&qS;Amq"i +rq6;A~> +o`#-pipum@r;Q<f!<2ur,5h?8qYKpVm-!Baf[J-g`PT@#[^*'9VP9ZNQB7#YJ"c-+p&BO~> +p&@/Q_M=,8R\?[`\A-)0eCW@+g=tE=h:^<'aMPTuYc=LkR?W_gK78)fEGoZ-An5=V>Zt3/;c$1\ +7RL;5p&BO~> +p&>L"c+Lp8cdpn1jQZ(&p&4U`pF#\,na5T'j58YEe'5qL]="iAURmpAP`Ul^L4b#)H?XFKChI6a +CYe[`J,~> +p&>6pg%5"8r;H3drVlfps83o5o^D)+hqHW-bK%N8]!o#KX/;V_R[0+rLOjc$ht@#"~> +pA[>T[YTs/S><6n]uJ@KhrEh\kNM3smH`olg!\*`^::GKV4X0>NJE(3G&hP=C1h*e?X-c:<Duaj +91VK;K'r@4J,~> +pAY[%`Os+2db<[Al0\$6q>:'fr;Z^Dr;$'Xn*K<$inrJ=c,[W2Z`L!rS=,Y)Nf/[FJ:;fgFE)24 +A7/W$n+Qd3~> +pAYBreaiP4r;HW^s8Dp<qt9LFk2G+HdETbN^q7+_YH+RrT:;11O,8L;G+%gms*t~> +pA[@pMiO*qVm!SGb1#/,lgF62nF?&>oC;/.hq6B#`P/jfX/2DSOc"g?G]RkBCM7<h?X-c:<`Dsm +9M%]@7"Xn%s*t~> +pAYTH]>MhAguR_dnFZJPrqZRCrVQB_oC226kiLaUd`]SB[]cX(SXGe,O,JgIJUVrjFE)25An#%N +N:?TAJ,~> +pAY?MmeQbXrVl$\+8kj'm-!Baf[J-f`PK3s['-O.US"$BPE:]VIsH.&nFus5~> +p]!P(OcGa!Vm*_Kb1#/,mIBc=o^qhMp@n1Hki1CKd)s;@\$2m,S<](hJ9c6WDes-"@piSG=B/<u +:JFGO6pO.jp%\Q;~> +p\t`R]#2_@h<+%knauVQrVlWm.fK8?p\".Jn*TH&hUg)p_7?kOURmp@PE1ZYKRnT!G][qCCM.-` +=^$^Uq#>j~> +p\tHRjS8WMrVl![+T1s(m-*Hbf[J0h`PK6u['-O.US"$BPE1WVJ9l?XQ1k"QJ,~> +q#;&_QAq-"Vm*_KbL>5,m.9rEp\4IXrqS);nE]2ng=4Hj`4`U^VkBH?MM$7uEc>i/An,4S>?Fm) +;GU"Z7moX+6DOPUs*t~> +q#:i^\\Q>9gue"ooC_nTr;QKk/,fDCq=s[Vo^_P=jP88/`4WL[V4X6DPE:`ZKRnT!GB@hBCM.-a +>?4h)rqZSE~> +q#:Q[hY-jErVksZ+oM')mHETeg!n?k`koF"['6X0US"$BPE1WWJU;QZD6Ns7s*t~> +q>UutTT##&VQdVJbL>5,lgsoNqYg:Cr;66ZmHETeg!n?j_n3:WUn!^0Kme/dE,B?&A7/\I=B/<u +:JFGP76s*u=3^R@J,~> +q>Urs]=l84gZ@kqp@nCZr;HBi/,oMFqtp6cq"OLQl/:4@aM>9gVkBQIP`Ul]Kn4]!GB@hBCM.0b +>?=^8ch[Tk~> +q>U]mf(/_9rVlfYruq=7o'PZ$hV-N,bK%N7\[AZCVk]lRQ]mJgLOsntEGBdIq>Ys~> +qYq**Xc/=/Uoq8GbL>5+lgsuNrVc^IrV6$RlK7']f[S6h^ppVITU:dqIsH-UDJEfp@:!/?<Duaj +9hIrF69dOnEUWc(J,~> +qYq**^UqG0g#VVqq>1!cr;HWgs8W)urVl^?qtg$RjP85-_n*+PTq%O8Oc>3OJUMigFE)26B4PCT +=&VtDn,!'7~> +qYpg"e*Qr/rVc`Ws!%C8o'P]&hqHW.bf@W8]!\cDVk]lRQ]dDfLP(#"EboEGnG<08~> +qYq)OO,TBtX1#jedb3UCnFunVs"=9Go^M52j58VCd`fYAZ`9agObnX7F`D;7BOkOX>?Fm(;,9kX +84>j04?,WfrVQVF~> +qYq&U\A?A>iU$77r;?Nlrr2TjrVlco,lIE)k2"S3`4N=TU7@U8Oc>3OJUMigFE)25B4YIU=Ar!p +QMp^\J,~> +qYpfUj7rQNrVlfXs!.I9o'P]&hqHW-bK%K6\[AZCVk]iPQBI8cL4ar"Ec#H'T)JQdJ,~> +qu75rQ]$urVm="Vcdpq5lgsuPq#;uEq=O1Dl/gm[g""Eg]sXr;S!/_]H?F4FCM76e?<^N3;c-:` +8k2<:5<Lq`:Vlr.J,~> +qu7&n\%Tf.gZJ)&r;HTnrq-6frr2j@q![D&e]l%EZ`9aiR$<_lM1pM/H?O@KD/*]o?sHf5:J+s3 +qu;0~> +qu6okg%,";rVc`Vs!.I9o'P]%hV-N,bJqE4\[8TAVkTcOQ'./aL4Xl!F)>PuDo_bTJ,~> +r;RB.Z&+F*TrbcAbgY;(kO/$@rqZRJrquTbna5W(j58YEd`K;6Y,7bSMh?=uEGfQ*A78eK=&`'o +:.n/K77'4$3Arg2p\b&A~> +r;R-'_77;'e_offr;HQmo)JUd-2mZ/kMFe7`OrOXU7@U8OGo!KJUMfeF)Pl/An5:S=B&'h8p9t, +s*t~> +r;R'%dd-]*r;HTnjSpM'p[[_8j5/M>d*'GF]stDPX/;V^R?`noM1pM/G]R_8@UF]]r;V9~> +r;R>rMhmIaVm=%Xd+@+7lga`Jq#<&Ir;$$Vmd')uiSN>=bJLfoW1TB8KR7i]DJNor@:!/><)QOe +91_WB69dRm2D[e%r;V9~> +r;R&k[(F9&g?%l$qu6!_rr+2=nEAc\cGdH'X.u2PP`Ui[KReGpF`MD:BkCj_>Zas$91N!cr;V9~> +r;R&liUZgAr;HTnjSpM'p@@V7j5/J=ccX5C]XY;OWhuJ\R$<\kM1gD-G]R_8@U3TPr;V9~> +rVmK.Z\==&TWGZAc.(M,kO/!<rqQLJrquTbo'br0k2YCUf$2.FZDjL`NeMk'EGfN(A78eJ=&`$m +9hS&I6pa+#3ArZM>PJ*rJ,~> +rVm3&_RI;%eDKQar;?Q[s8W'Eq=3\+f?V@K[&g$mQ]mMiLkL;+G]e%FCM@?h?X-]4:J42IB_VK* +J,~> +rVm0%e*Zl)qu$Elj8UG'p@@V7j5/J=ccX5B]XP5MWMQ;YR$<\kLkL;+G]R_8@U32\p\k,B~> +rVmJrMMI7]V6R_TdF[48l1"BCrqQLJrqlK`o'br0jl54Sf$2.FZDjL`NeMk&E,B?%@piSG=&`$m +9M7oG6pX%"3ArZI4/r2YJ,~> +rVm2kZb"'!f];MsroO/,rqZ'Ihq-/m]X4`7S!K8!Mhcq7I!BaQDJEir@:!/?<)6.W6VOW\s*t~> +rVm/lhspI;qu$Elj8UG'p@7M4in`89cH4#>]!eoHW2-)UQ]mJgLP()'GB.P6@U)u@Z2O]Q~> +rr3T/\q>j&SZ0!3b0nr!jQc7.r:g4HrqcB]na>`+jPetLe'#V=Yc+.ZNJ)Y#E,96"@p`JD<`;gi +9M.fD6U<mu3ArZI1/%QEs*t~> +rr3<'`jWP"dG3pUqY^?\s82dBq=*S(f$2.GZ`9agQ'%&_L4Xl$GB7_?BkLsa?!CB/:J42F6X'Ee +s*t~> +rr39&e*HW"q>:*gir:A'p@7M4iS<&5bf@T6\[AZCVk]iPQBI8bL4Xl#G&hG4@U3):C&Iu1J,~> +rr3T)PD"gYTW>N<bL5&#jm2I2rV-=Irqc?\nEfE%inrPDdE026YGRkUN.ZIuDJNos@UEAB<`;gh +9M%`B69m^s3ArZJ0/;5\s*t~> +rr3<"Za[Zie)'?\qYpHmrpg$br[7[>n)rQXbf%-!WM,`EOGo$MJUVogEc5c.An,4S>$"Wu91M?8 +6JVS?J,~> +rr39!ea<#'q"jpeir:A'p@7J2iS<#3bJq?1\?iB=VP9WLP`Ui[Kn4YtF`D51@U3)9<SdZSJ,~> +rr3SjJ;&rKTrbcAbgP/$k3V[7rqHFJrV?0Yn*B2uiSN;>cc<c.XehPPMh67qD/*]o@:!/?<DlUe +91_T@69m^r3ArZJ0/&"Xs*t~> +rr3PkZ+.QkeDKTbqYU3grVc`poDe[ds8=;>n)iHVbeq#tWM#T@O,JgIJ:2]cEc,Z+AR]"O=]SEr +91MB96&YaBJ,~> +rr38fk3hm8q"jpeir:A'p@7J2i7lf/b/D'+[]us6V4a?GPE1WWKR\>nFDu#.@U<2;<L!L_J,~> +s8N`2\q,TrRA@!r`6?Z_i9'FuqYp6h2>m:Do'Yf+j58YEeBPtG[&g$lPDXs;EGT?$@piSG=&i-o +9M.iE6U<q"3]K#R0eY.3r;ZeI~> +s8N]1`j3.kbh(h?p%eI]r;?Nmrq-6grr)dFr:f[Ah:0Wb\Zr**Q][;cL4au'G][qBC1h'c?<^N3 +;GKkU6pX('r;ZeI~> +s8NE)e*$2lpA"L^ro3r,r:]XFjkneAcH*o:\?rKAVk]lRQ]dAdL4Xl$GB.S9An#(L<Duios8RT~> +s8N`+P(JINS#*@$`6?]`i9'J"qu6?i2>m7AnEfB#iSE2;dE9A=ZDsXeObnU5E,0,u@UNGD<`Dpk +9M.fD69mat3]JuQ0eY.3j8].0~> +s8N]+Z*V$ZcIq7GpA+R]qu$Elrq6<krr2irr;?F@p$Lhpe&oM:YG[tXOGo!LJpr&jF)Yr0An,4S +>$"[#:.n,G69mfss8RT~> +s8NE#dcg/kpA"L^ro3r,qt9IDjPJS=c,[Z4\$N6;VP9ZMQ'%&_Kn4YtF`D84ARSkI<`;rYs8RT~> +s8N\mI=d9<S#3F$_TL9YhraA!r:^.JqtK^NlK7*_g""Ko`kJmaVOj*7LOXMdBkCj`?<^N4;c$1] +8Oc*75<_.h2`3BG0.nlLs8RT~> +s8N\oY-bgZcIq7Fo_/%Sq>:*grq?@Lrr)cmqtg-`q"OLTnEAc]cGmT,Xe_JONf&RDJ:)WbEc5`, +AR]"O=]SHt9hIoD69mf4s8RT~> +s8NAiip#q&p%S=]iVtA(p$_/*h:L&t`P8skYcOe!TU_@4O,JdHJ9uN_E,92u@9m#:;cBass*t~> +s8N\OI=d9;S#!3s^rXjRhWF8!r:^.JqtBRHki:ORe^2LZ_76bMU7.:(KR@lYBOtX\?!:<0;GTtY +84>m35<V%e2Dd0D0.nkQrr7K~> +s8N\WY-bdYc.Cn=nFH5Fp\F^arq?@LrquZhq"OLSoCDG?lf-XHb/(ZpWhPrFN/3.=IX63[E,B?& +A78bJ=B/6o9M%`B69meArr7K~> +s8NAViooh#o_84\iVtA(p$_/)gt'io_nNUcY,\@nSskt-Nf&OBIX60XDJNlp?sQo9;c@H1s*t~> +'E@s4I=d9;R\Qsl]uJ=Ih<+.urV-=Hrqc<WlfR0\f$V^]_7R(UV4O$8M1KtnCM%'a?<^N4<)HC` +8Ol085X%:k3&WTK0e`MY!W)hH~> +'EA!DXg>UVbgkS5m-jK:pA"L^rq?@GrVQEcp@RtHn*]Q-jPAA2`kJmbVk9<;MM?b6I!KmVDes*! +@p`JE=&Vpj91VN?6N04NqYu'~> +$NL%LiTKRsoCi%ZiVt2#p$V&&gXONi_S!:\X/MhdS=#P&N/3.;I!BdRD/!Qj?X-`8r_ijps*t~> +'E@d!I"@-:RA-^f]>VqCgu[ttrV-=HrqZ3Sl/UXQd`fbJ]X=o?Tph1(Kmn5cBk1XZ>Zt3.;GU"Z +84Gs45<V(g2`3BH0e`MY!T*j,~> +'E@d7Xg5OTbLG>.l0Rj.o_81ZrqHFIrr)]gp@RnDmHWotjPJM8aMGEmX.u2MNJE1<IX63[EGfN( +ARSnL=]J?q9hIrG6pgl<!T3p-~> +$NKkFi9'@ooCi%ZiVtA(o^1i"g=+<e^q-kSWMZA[R[0+sMM?b5HZsOLCM.-b?!CH5<)Z`Ss*t~> +'E@-@I"@*8Q_::]\\ZG;gu[ttrqHFIrqQ*PkMb.FccEu9[]la+S<f4mJp_]ZBOY@U>?Fp);,0eV +7n#a05!1kc2Dd3F0e`MY!NZ6N~> +'E@3nXKoCQajSo%k3;7$o(DhVrqHFIrquTdo^VD:l/q'chV$<"_nEL]VkBHAMhQb4I!KmVDes-" +@piSG=&`$l91VQA6pgl<!O)NR~> +$NKAAi8s7lo(MqZiVtA'o^1i"g!\'_^::DIVk]lRR$<\kLkL>-H$41EC1^p^>Zt61<)Z`&s*t~> +'*$O-I"7$6QCaqT[D0f1g>_GjpA?ZBp@%8+gt'ip`4`XaWhc5ROc+pCH#me6@:!2B=&`'o9hS#H +6pX%$4?5>X1GU[=0E*R)M>i#~> +'*$[`XKf:NaNrJoio]LmnFZMQp&6ZBq"=4GlfdHihV6]3bf.?,ZE'dlQ]R)WJ:2`fFE)26B4YOZ +>?Fp):eaPP7R][2r]gLGrdX~> +$NK#:hrO%ho(MqYrVl?equ6Kk.JWK"jPJM8ahtd!YGe:kSXGb*Nf&RCIsZB]E,92u?sQu?=B8C" +;j[K6~> +'*#gmH[gd0PaeAGZ+@ireD00Qrq-$Z1%aquinW)1ahtd"Yc=LkR$3MbJU;QZC1L[W>$+d';,0eV +7n#d15!:te2Dd0D0JG0Z/cfnhJ,~> +'*$.PWirkF`66T^h;RM\mdg)Ip&-T@p@@\<kMtLUf[\Bn`kT'jXeqbZPDt?KIX?<^Ec5c.An,4S +>$+a$:/"5K779L/r]gL0rI=~> +$NJT,h;[V`nFcSRrVc`po`$fJrVcZlqtg0bq"OOSm,d-Xd`]VE\?`04U7Rg?PE1ZYKRnPsG&hJ8 +B4>1P>$+j+<)Z_KrI=~> +'*#XgH%(F(OdDW8XgGd\bgkP2rp0IJs6VQ-kMY(DcH*l8[]c^+SsY_%LkC,"Ec#K!?!CE3<)QLd +91VN?69dUq3B&fO0eb:70E*R)5Q$$~> +'E?(JWNNV?_8spOf\PQMlgOK@qtBqAq"4(AkMtISf@%se`P9!jXf.taQB6uWIscNbF)Yu2B4YLX +>?P!*:eaSQ779L062j+M:]5e~> +'*$A0gYh2XmIKuIqtp<hrVc`ppAZlHrVZQhq=jUUo^hVCmH3?\eBQ%M]<n`>US"$CP`Ul^L4Xo% +GB@e?Bk:^Y>$+j,<W5nt?i>K~> +'`YjhG^P+!Ng#m(Vm!PC`Qcrgio9strT+"?/`bgAe',kK]!\`@URda7Nei=:H$!t>ARJbG=&`'o +:/"5L770=(4ZbV]1bpca0DmF&r."~> +'*#tHVl[26^;S.>eCi^=kj@s8rVH?e0_b/*kiCXUf$Va``4idhY,S1eR$*GaJphrhFE)26BOt[] +?!:<0;,0eV7RTU15sbH7!;q?~> +'*$A/g"t`OlgXQ@q"ad`r;HTnpAZlHrVQEbp@RqGn*TK,k2=tCccF#;\$<!1TU_C7P)bHUK7JAq +F`MA7B4G:Q=BAO'<;f_qr."~> +'`YmhGC+jpMia3nU8bB+^W"IHf\-8XrnID,/_ACn`P8siXf%k_QB@,^K78,hE,9/r?<UE1;G^+^ +8k;E>5sILp3]AoP0eb9W/cbg"~> +'*$"GV5gc-]"c2+cdgb-k3MO0qt^0d0DY;1lfR-[f$V^^_S*IbXf8(eR?W_gKR\;lF`D>9BkCma +?<^Q5;c$1\84>m362NnIr."~> +'*$A-fA#6Fl0e-8pA"I[qu$ElpAZiGr;-0\oC;;9lKIBji7c],ahtj&Z`^7$SXGe-O,SmKJUVoh +F)Yr/ARSkJ=&i7"r)3UnJ,~> +)#pp_G'\UiLQ%@]S>3*h\%]i)d*U1fdaJ-DrmWLFahtg$ZE0prR[&tmL4Xl#F`D83A7&PB<Duaj +9hS&J77'7'4?GP]1bpa<q(;[FJ,~> +'`Yq?Uo:E$[_'>obL+nriooh%p\4U\rV8&?oBkc%h:L*!a2,BrZ)jjuSsbh)MhQ_1G]e%FD/*]o +@UEAD=&`$l9M%]@62<bGr."~> +'*$5'e_8m?kNhX/o_/%SqYU6jpAZcEqt]sXna>`,jl>:Tg!n<h`4rjiYH"FlR[02"NJWCBIscK` +Ec,W)@p`JC<E/fn!;q?~> +(B:[[FEi1`KSYVNQ_("QYdV6_a2c9BrlP2_rlZh3^q7"YWhl>VP`LZTJUMfdEG]E$@9m#9;c-=b +91_WB6U<q"4?>GZ1GLQX/cbg"~> +'*#_<U8FrnZa[Q^`lul`hW3tjrq$$Zs7Iu9n*/lhf[A!a_7R.ZX/;V^R?WelLOsu$F`VM>CM79h +?s[&?<`;gh8k;B<62<bGr."~> +'*$5$db!:4jQQ"#nalGIq"agbpAHT@q=aFLmHWioi8*,=e'?(R^UghWX/;S\Q^!VlMMHk8I<p'X +E,93!@:!,=<;BGmr."~> +)#qBjF*;kYJVAr?P*hi9WNNV=]tM.o^VBc`rkU+t\$E-7URmj:NerF>I!BdRD/*Zl?<^K1;GU"\ +8k;E>69m^s4#o5W1GLQX/cbg"~> +'E?1DTVJEdYHt^N_8a^HfA,BKlMTuGln.PciS2r1bJh9.[BQ[-Tq%O9OGo!JIsZB\E,KK+An,7U +>Zk--;,9kX7n#a1q*4rXJ,~> +'*$G'd+$_'i8j+gmI0Q8o_%tSqtg6d/bo#0md')uiSN>Ae^;X``4rmkZ)jjuSsbh+Nf/^HJUVrj +FE)/4An,4S>#nVu;ZQ`G~> +'`Z3kEHHDOIY*91Ng#j#Tr4ur[']h?s0hj7/$lCXV4a<EP)Y9NIsZE^EG]H&@p`JC<DlXg9M.iF +6pa1(4?GS`2Dd0D0DI."r."~> +'`ZLISY;mYXKSt>]>2D.cd^V'i8F@g/)8b)c,df:\?iB=UnF6FP`Ui[KReJrF`D;8BkLsc?X-c9 +<DlXg91_WA6MNeGr."~> +'*$S)c-b(ogu.8Vl0I^(nFH5ErV$-]s7@l4mHWiohqZo8da-+W_nN^jZ)st#T:;.0O,SmKJq&/m +F`MD9BOtX[>Zk*,q,7:kJ,~> +'`Z<lDfTuFI"$X#M2d[aR\-@QWiH'!s/c.#/#fA=S=#P&Mhcq6H?O@KChdQl?sQr:;c$4`91_WB +6U<q"4$#>[2)@!A0DI."r."~> +'`ZRIS"HFOW2m),[^s5ka32fXf%0TI/(2_b`4rpmZ)st#T:;13OGo!KJUMifF)Pl0B4YO[?!:?2 +;c$4_8k;E>623\Fr."~> +'`Zh)b0JDaf\GBCjQ>[km-aB6o(2kOrpg!W/ar&jjl,(Mf@/*kai2-1\[A]DW2-)VR$3VjM2$Y4 +I!KmVE,96#A78eK=B8Ds;ZQ`G~> +'`ZBmD/aQ>H$b!kKSYSJPEq]0TqVFZrM(s?US+-EP`Ui[KReJqF`D>9BkCj_?!:</;,0eX8Ol3: +5sRUr3]T,W1c$m@0DR4$6N)E~> +'E?OHR%0eCV5L>qZ*_$R^Ve+7bkK@5bfI`<]=5)LX/;V^R?`qrMhm%;IX63ZE,B?'ARf+S>?P!+ +;,9nZ8Ol3:62<bH;>l"~> +'`Zn(`llZTeCWF0hr3VWkNV@$n*g8Ds6]jQs6D9%kiC[Xg""KqbK%N9]XY>QXJhqfS=#P'NJ`IC +J:2`eF)Yu2B4PIY>Zt60<;KMo@Jt]~> +'E?NqCi=<7G'J=]ItNK4N/s-eQi!0JR4FSeO,SmKJUVohF)Po1B4YOZ?!CE2;GU"[8Ol3:69m^s +3]T/X2)@!B0JE5S!HS-h~> +'*$UIQC=>9U84ZcXKSq:\@]Jjoti5n]!erKX/D_bS!]D$NJ`LEJ:2`fFE)25BP(a^?<gW7<DlUe +9M.iF6pj995QQ61J,~> +)ZS[/_oU$Hd*gIsg>(TEj5oIhlg*j$l07EqroYipj58VCeBlF]`PK:"[^3-;VkfuUR?`npMMHk9 +IX63[EGfQ*ARf+S>?P$-q,7<JrI=~> +'E@**C2Im/EclSOH[^KtL5:_HO7nYbNJ`LEJUVoiF`D;7BP(d`?<gZ8<Du^g9M.iF6pa.'4ZbY` +2Dm<I0eb9U/cgk/J,~> +'E@0UPF%`-StMgRVl?c#Z*UmK\c02=\c'#g['?d7Vk]oTR?`qrMhm+>IslWeFE)26BP(d`?<gZ8 +<Du^g9M.lH779I.q*4tCrdX~> +9)n+f^r=@9bg+Vbe^rO1hVdGUk3(mgjlGL_j5T%VhV-Q/cH=2F^V%(`Z)t%'US+-FQ'%)bLP:;. +H['[RDJNrt@pr_L>$+g)q,7<^rdX~> +'`[Q:B52:$E,p&DG^4[cJV/Z3M2M%a.Y`S,IX?<^Ec5f0B4YR\?<gW7<Du^h91h`E6pa1(4ZbY` +2Dm<I1,1I9pauTErdX~> +'*%B]OHc*!R[g"DUSXlfX0&S1rNlL/rNRlWXfA:pTq.X=P`Uo_LP:>0I!U!YEGoZ-An5=W?!:?1 +;c$4_91_WC6pj<95QRnaJ,~> +)?907]tqY,aND`Qd*pOsg"P6=i8EMMhVI#eh#H+Zf@/*jaMl!0]!erKXJr%jT:D:6P)bHVKS"]# +G]e%FCh[Kk@:*;E=]e^(q,7<trdX~> +('",sAS>gpDJsK7FEVnTI"$TsK7npRK.;J'IXHEaFE)27BkCmb?sQu>=&i-p:/"8N7RTR.5<_1j +3&WWN1GU[=0D@("cMrC~> +(]X?1NffQlQ^O>6T:r!TVPpMqXKAV+XT#:"W[k'HUnOBLR$EhqN/<:BJUVrkGB@hCCh[Kl@UEAD +=B8?t:/"8O7n,p76:(B3!RLdr~> +9)nb"\\5hs`5]m@bg"J]e(*%$g"G$1f@SU(e^W*td*9\P_nWjp[BZm8Vkp)YS!]J'O,JgJJq&/n +G&qS<C1^s`?X6l==BAL%q,7=As*t~> +'`\04A7fLiCMds-EH6/DGBnO_IXh9Er-^#@G]n1KDes0%AR](S>Zt61<DlXg9M7rH6pj7)5!1kc +2Dm<I1,1I:0DI.$0_56o~> +)?9]DMiNp`Q'Rc)S"-(BTq\?ZVPg>hVPU-gV#R2=Tq7a@QBRDjMhm(=J:2ciG&qYACh[Nn@UEDF +=B8?t:J=AO7n,p86UCK4!^cJXJ,~> +8cSe-[CNuc_8=.1a2uKIc-F\`e'lamd*U+ac-=JUai;34]t(SXYcXn%US+0IQ^!VmMhm(>J:)Wc +F)Yu1B4PCV?!CK7=&r;r;Z]qis*t~> +s8N__@Us(`BkhF"DJjE5F*)PKG^943rHB]6F`MG>ChdWq@pr_M>?P$-<)QOf9M.lH770@*5!1kd +2`3EI1,1I:0D@(#;>'s>~> +s8NYaLl7:TOcu#pQ^F20S"6.Crh0:`rgs.\s-tO,Q^*brNJiXJK7SK!H$=CPE,KK+B4PIZ?!:?2 +<)HFc8k;E?6psC/623\H?M=DL~> +s8PRGYdV*S]t_A!_o0O6a2lBGbfe2PaiMQDa2Z*:_S<dp[^36AX/MhgT:D=9PE:c^LkUG2I<g!X +E,B?&A78eL>?P'0<`Son!c7T1J,~> +s8Nc(?XdPWAnPgmCM[j*DJsK6EcZ=$ErL(XE%#U@CM@Em@prbO>Zt61<)ZXi9h\/N7n#d25<_1k +3B&fO1,1L;0J>*R/cpq-s*t~> +s8NZ%KSYPGNf]BdPE_>uQ^=)-rgNkTs-PC)QBmf$PECocMMR">JU`)oG]e+KDf'9(An5@Y?!CE4 +<)QLd8k;E?6pj:-62*VGOo560~> +s8PR\XKf4D\\#Mg^VIY$_SX4/`Pf^4_SX.)^V7Cp]"#2TYcb%*V5']SR[9;&O,]'RKn=i'H?OCM +D/*]p@U<8A=BJX*<E/`l!grocJ,~> +s8Ni5K3r%sA7]@cBPD0qCM[g(D/O6.D>nAMCF!V,An5@Y?X6o?=B8C";G^+_91_ZD770@*5!:tf +2`<KJ0eb<\0D7""c2[fo~> +s8NW/R=pBRMi<[WOHGZgP*;./PqeMeP*1rhOH5H^Mi!4CK7SN#H[0dVEcGu5C1q3i@UNJG=B8C! +:JFJQ7RTU26:*t(pHSf*s8RT~> +s8NW/YcP+:[C3TU]">Vf]tM/Z^G<O:]Xtbc\@8rU['?g:Wi2bhTq7aAQB[MlN/ECDJU`)oGB@hB +CM79g?X$Z8=&r=$<;0;md/X,r~> +rr3MN?!h#L@Uiq[AnPaiBPD2ZCB&#IB`;WgARo7X?X6l>=]\U&;Gg4b9M7rI7R][15<_4l3B/oR +1GUZ_0D-q!p](8D~> +rr3>OJ;&c7M2I7ONfO+"s,d8Cs,[AENfB$Wrei%YLP:A3IslZhGBItHE,KH*B4YU^?X6l=<`N$o +:/"5L770C.r^$6C!r2fqJ,~> +rr3AWW3!80ZF%$J\%&sI\c0/q\[],W[C!9HZE^U8Wi2bhTq7dCQ^*brNf/aKK7SK!H$=@MDJNos +@piSG=B8I&<E)rl;Zcaos*t~> +rr3K">$YKC?t!MSA7T7_AnLsRs(;:Bra[3_@UNPK>Zt94<`E!q:eseZ8k;HA6pj7)5!1ne3&`]N +1,8_\p+?J%K)YfMJ,~> +rr3AuI=['*L51SAMMmDlN;eh:MueioreVqWLPCM8JU`,rH?aUTEc>r6CM@El@pr_M>?Fs,;c$4_ +8k;E>6N'4E5QjB1rr<"K~> +rr38sUSk2rYHY:<rNuL10!qsjZ*CO:Y-"e*W2?>aT:MI=QBRJnNJ`OGK7JDuH$4:MDes-"A78eK +=B8F%r`&Yk"B:Q`s8RT~> +rr3B*I9Kl]?=.)J@:E^FA,Ts<A,g$<@K0^[?X@#C>$4s.<Dudm:JOVW8k;E?6pa1(5!1ne3&`]O +1,1I9o.C%uci3rp~> +rr3<(P'qk5KS>,7L]*&-M>rA\LPCP;KS4u0JU`)qH?aUUF)c,9ChdWqA7AqQ>Zt61<)ZXh9M.iF +6ppr>ofrOEdJj/r~> +rr39'WM?AkX0&P.q62HUYck43XK/A#W2HMgTq@mFR?s/$OH,9VLP180I=$3^F)c,7BkCma?X-`8 +<W,nk;ZTnIrr7K~> +rVm/C='Ag5?!UcDr*]M4s'Yh5-=0t`>[1K:=]\X(;c6Ih:/+DS8Ol6<6UF%&4Zked3&`]O1GLR: +o.C)!:&FqiJ,~> +rVm/IH$k-nJqJ`0q1\g$."d,&J:E&tI=$9bG'.kGE,KN.BkM!e@UNMI>$+g);c-=b8k;H@6UC</ +!^^,grr7K~> +rVm,NSYE!ZWN*#nX=L?OWMcViUnaZYT:MI>Q^*bsO,SsPL4b&,I!U$[F)Z#5BkCma?X-c9<E/Th +!``t3rr7K~> +rVm,tAQDr;>$G81?2S%/?2n10>Q7kN=]ea,<E)mp;,C"^9M7uK7n#g55sRUs4?GP_2`<KK0eb9O +/ce&:rVqB~> +rVm/uJ9ZHiIXcm!rIXrus*uJHIXQTjH[9s^G'%eFE,KK-BkV*h@UWVL>?P$.<)QOf9M7rI770E4 +5QOQarVqB~> +rVm,tS=Q@KUo('bW%4dCV50l\TqJ$LSXZ%6P`q5jNJiXKKS+f(H[0gWEc>o3BkCj`?X6i;<`JZh +!F3)3s*t~> +r;R#%<*!+'=^##)>Q7n+=X@0O=&r=$<)Z[l:JOVX91hcG7R][25sIOq4$#A]2E!BJ1,1I9o.C)" +?24BuJ,~> +r;R#.FEi+YI!pJBJ,OirIK+[AH[9s^GB\1OF)c/:Chmd!B4YR]?s[)A=B8F#;,C"]91_WC6pa32 +5QX;eq#15C~> +r;R#7Q^j\@U8+O`V>R,=US=HTT:VUCS!o_2Q'.5iNJiXKKnFr+I<p-]F)c,8C1h-g@:*;E=]\Vp +;Z^!Bq#15C~> +r;R#n@T6?.='&N$=oDJ&=8u;G<E)pr;Gp=e:/+DT8kDQD779L/5X.Co4$#A\2Dm<I1,1I9nh'r2 +YPeEN~> +r;R)qHusOVH$O^_I/81<H?jd\GBS+NF)l;?DJa0(BP1me@UNPK>?Y-0<)QOg9h\/N7n,m66LmAB +;mZE%J,~> +r;R#oQ^4)1SXuMRU&:Q5T:VUDS!ob4Q^3l"OcPK[M26n>Jq/;tH$=COE,KH*B4PIZ?X6o>=&r;l +;ZUC;r;V9~> +qu6nu=&Msr<E3)t=8c/I<E)pr;c6Ii:esh\9M7uL84Q-<6UF((5!;"i3B/rT1c.!D0eb76o.C)# +D"[`+J,~> +qu6o(FE2MHG'A3/H2`%:GBS+OFE;JBE,]`4CMINqAn5C[?X@#B=]\U&;G^+^91_ZE7R][261[>C +7<S;$s*t~> +qu6u3PEhN'R[]h<Sc#!,S!ob5R$X)&PEM&hNJraNL4k/0IslZgG'%_BD/*`rA78hO?!CK7<`S`i +!`spFr;V9~> +qu6ojG#M79;H$Ni<<#ns;ZBT;:esk^9h\2P8Ou?@779L/5X.Fp4$#A\2Dm<I1GU[=0/)lK!DgB* +s*t~> +qu7#nLi@?SF*)PIG'<e+-ZjEMEcH&:Df0E.C1q6lA7K%U?<pf>=B8C";,9nZ8kDNB779L061R8A +>eg19J,~> +qu6umS</r"QC!u+RJiNPQRA)aP`q8lO,f3XMMR"?Jq/?!H[0gXF)Z#5BkM!e?s[,D>$4s.<E/Qg +!G]LKs*t~> +qYpfFCf!o(:f1*e;Z9Pn:a/\1:/+DU91hcH7n,p86UF('5!;"i3B/rU1c$mB0ek@80Cg^s5*5R: +s*t~> +qYpcHJ8T7CE,k\o-?4!CDf0E/Chmd"B4YU`@:3GJ>[(?4<Dudl:/";P84H$96pj:,nj!7NQh^IX +J,~> +qYpcKQ&UlfP*>a,s-"dmOcYWaNJi[OLk^S8JU`)pH$FLSEc5f1BP(da?X6o?=]ea+<E/Qg!a_Gm +qu;0~> +qYpd!ZX-:!:/:OZ*)94&9M8#N8P)HC7R]^46:!k$4Zkhf3B/oS1c#%bs"OI+nh'u"G3A`%J,~> +qYpg"\TMV%Ci+(dD^K@=Ci!m%Bk_6nAn5C[?sd2E>?P'/<)ZXi:/"8O7n#g66UO1+61[>C7=XLs +s*t~> +qYpg"^lF80NK0(tOSt4cNJrdQM26qAKnFr+IXHHdG'%eFDJX'$ARf.T>Zt94='&F&<:a#i=,?): +s*t~> +q>U]oO&/D@92&%V:&[g-91hfJ84Z6@7R]^46:!k$5!:th3]K&V2)@!B0eb<\0C^Xq=j[!EJ,~> +q>UZnRVHGJBkmHZs(WKeBP1pgA7T.X?sd2E>$4s.<Dudl:JFJR84Q,J6iTLQ61R8AA^U>RJ,~> +q>U]oVM0_ZM2I5iN;e_]MM[.FLP:D6Jq8E"I!U$\FE2A>D/*`rAR]%R>Zt62=&r@%<)iHf!HQZb +s*t~> +q#:Z[HqQt#8P2TJ9DhE^8K12j7n,s:779L05sRXu4Zb\c3B/rT1c$mA0JNGYnLal7]`.a,J,~> +q#:TZMIg:/AS,TQB`;W`An>L_@UWYO?X6o?=]e^);c6Ff:/";P84H$8r^-TMnj!7X^Ads.J,~> +q#:Q[R"9g@KSK>Ys+VJHKS"c*IsuclH?aUTEc>r6CM@Em@pr_M>?Y/.<rZ2"<:a#iB#=QCs*t~> +p\tHNDad)a7n<DHs$mnq77BU46UO1+5X.Fp4$#A^3&``Q1c$m@r@dUl!^=!jq#>j~> +p\tHOIpZSl@Uo4E)Im5b?sd5H?!LQ9=&r=";G^.`9hS)L7n,m6r'Bj<!`$9)q#>j~> +p\tNSO*c;)J:`E+qgo`;IsufnH[9s^G'%bDDf'9(B4YR^?s[)B=]bT&r`&Ge!a`M<q#>j~> +pAY?@?9pnF6q-uB)b!._6UO1,5sRXu4Zkee3B9&X2Dm<I1,1I90C:@n32-<Fs*t~> +pAY?DE*?OR?srk?)dm#[?<pf?>?Y02<`E!q:eseZ91hcG7R]^361$o=8>c@[s*t~> +pAY?FK6DNeI!tsBrI#T2H?jaZG'.nIE,KN.BkM!e@UNPK>?Y-1<E/Bb!a;](p]#a~> +p&>386p<k%6Mj.M6N07c5X.Is4Zkee3B/uW2Dm<I1,1L;0/)]F!\ff9pA]X~> +p&>3;>$"j2>l%_E>[(B8=]ea+<E)jn:ej_Y91h`F7R]^46:!p*5QX9?rV$8A~> +p&><AEH-)DG^4U]rHT<+GBJ"LF)l8=D/3m#B4YR]?s[,C>$4p-<E/Bb!`YfjpA]X~> +p&>6q[66W85!Sp0s$-NIs#gKI4$#A]r\k-A2)I*E0ek@90C1:m0P11Ts*t~> +p&>6q\l)O/='5B'r`Bt<<`N*t;c6Ff:/+DT8Ou?@779L06:!p*5QX8lr:U)?~> +p&>6q^1qP)EHD&"s)T#tEH#i6D/<s$BP(db@:*>G>?Y03=&r=#mSa0dIf/m=J,~> +o`#-pcr)nd4?WL(s#^iS3]]8\3&``R2)I*F1,1I:r\*Ri!LWlYs*t~> +o`#*odUZ3Q;uBYp<"i2.;,L.c:/+DT8kDQD779L16:1Z;m6C]Drq-5@~> +o`#-pe9,J@D/T>krb`HfChmd"BP1pg@q&hQ?<gZ:=BAO(<W5tc;ZW`oo`'F~> +o)AmTCGn+23W2#<3WD&I2`<QO2)I*F1,1I:0BXqg`W#K/J,~> +o)AsWG=t\,:f1*g:_$8r:/+DT91hcH7n,p86iKC95QSq)oDa=~> +o)ApWKOSM*BkmW]s(DsVAn>L_@q&hQ?!LT;=BAL&rD`,^!QtE5s*t~> +nc&jdL,(SC2)[Dl2ZGZ62#fB31'96b0/)NA!]+'6nc++~> +nc&dbN^ZK29DhK`9E.Tk8OuBB7R]^46UF*'5QXAeg[Y;o~> +nc&dbQ<RX&@f0^G@UW\Q?X@#C>?Y03=&i5a;Z^$Ah!tDp~> +nG`^ggflTi1,A__s"aR.r\4@*kUlp)S+H.LJ,~> +nG`[fh.K5G7f#XS7L)@M6pj=.5saa#!`Pc`nGe"~> +nG`[ghK2q(>P_V)>Q.e1=]ea+<E)r_;Z^I+oC2d1~> +n,ERjoW:_=0D[C#0BOkh3Ig#bn,In~> +n,EXlos%Rb6:4-76N9@85QaW7iVW*DJ,~> +n,EXlosJF4<``As<rZ/"<9[<`>EIkAn,In~> +mJd:bgP\JS/coLsp[/!2~> +mJd:bglbUj5QYf>p[/!2~> +mJd:bhO.mH<9I0]H,]OFs*t~> +m/I4fo[f@#h_#"J\a07]s*t~> +m/I4fo\#^9h`q9f]^,R`s*t~> +m/I4fo\-$QhbsW/^[1sds*t~> +l2LkYf9\_^/d$=0lM^#JJ,~> +l2LkYfUYgu5QcMMlM^#JJ,~> +l2LkYg7hs7;Zhlmli$,KJ,~> +kPk_Ye%D5d0^LCr1/!8)bO#5ls*t~> +kPk_YeA%c$6L6rA6X#DUc0YGns*t~> +kPk_Yf#"A9<U<Wg<b[c.cgC_qs*t~> +jo5Sbp>X#_Ea(Zt/d=jaLU#=qqrRj.~> +jo5Sbp>a2hHY6%D5R(86O1!O*qrRj.~> +jo5Sbp>a8oKl^Pk;[-icQFPN5r8ms/~> +iVs)VjOV2QTD+ENW4:"0n,;8GJ,~> +iVs)VjOhDYU\C)YXh2g;n,;8GJ,~> +iVs)Vjk7\aWV;qeZ+eNDn,;8GJ,~> +h#@BQrVHQirV-Blh>`!~> +h#@BQrVHQirV-Blh>`!~> +h#@BQrVHNhrqHKmh>`!~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-01.png b/macros/latex/contrib/elpres/bitmaps/ep-ball-01.png Binary files differnew file mode 100644 index 0000000000..a5d924cc66 --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-01.png diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-02.eps b/macros/latex/contrib/elpres/bitmaps/ep-ball-02.eps new file mode 100644 index 0000000000..4e303e38fa --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-02.eps @@ -0,0 +1,416 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: ep-ball-02.eps +%%CreationDate: Sun Jul 19 18:52:32 2020 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 99 97 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 81.989751281089852 translate +83.989501312335946 -81.989751281089852 scale +% Image geometry +84 82 8 +% Transformation matrix +[ 84 0 0 82 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 84 string def +/gstr 84 string def +/bstr 84 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 17166 ASCII Bytes +colorimage +h>[l\p#k)ahVmSZo(`4?s*t~> +h>[l[o&.mAe(<C5n+Zh;s*t~> +h>[l[o&.mAe(<C5n+Zh;s*t~> +ir9bil.X=p\$)a+USFNUSu&Kt^s1j+r8Ra,~> +ir98[j34]gHtQ+L4pP8/O.j/=lhocBJ,~> +ir98[j34]gHtQ+L4pP8/O.j/=lhocBJ,~> +k5QG#p>aH2Y,\=oUS=HTSt2@=Q^*_qNKKd0][Z9Ejo9i~> +k5P\co\-U+;`GHb!W<!&+&-O@a6<E^s*t~> +k5P\co\-U+;`GHb!W<!&+&-O@a6<E^s*t~> +l2Lqdn^kpsZ2UdAWi;qqVPU&^TV%aCR$EktNf8gMNM=&/iq_g<J,~> +l2M"fm_u/[9*>=m"8`0!!W<!&"smoQ]A32Fs*t~> +l2M"fm_u/[9*>=m"8`0!!W<!&"smoQ]A32Fs*t~> +li.1fma8GEY-7i0*3cWLXfSP%Vkp2_TUhO=QBRGkN/<=BJ:*Hdg%jq5J,~> +li.7hl*b":!s8Z0rWW?-r<E9*rri?(rrW3$q#CLcQI#?ks*t~> +li.7hl*b":!s8Z0rWW?-r<E9*rri?(rrW3$q#CLcQI#?ks*t~> +mJe[7kJad4ZEpsI\@8oT[C*?HYH=k)Vkp,\SXZ"3P)t]^Lk^P3I!L@GgAC7:J,~> +mJe1(hO@4T"9f#:#mq"I$OdCN$4-tD#6k>8"9S],rW2iq""8uQqX"64~> +mJe1(hO@4T"9f#:#mq"I$OdCN$4-tD#6k>8"9S],rW2iq""8uQqX"64~> +n,G!=n].o@[CEcZ]tV7q^:h4m]=>;UYcb%+VPBfTR[98%OH#-QKRnT"G]\+ukjAD#~> +n,Emsm[Yp3"U>>A%1`s\&J>!T%1j$[%1EUN#R:P;"9S`)!Vl]s&o6Rqs*t~> +n,Emsm[Yp3"U>>A%1`s\&J>!T%1j$[%1EUN#R:P;"9S`)!Vl]s&o6Rqs*t~> +nG`jkh6XJt]"Pnr`5_\q+3)46]t1\[Z)t%(UnF9IQB[MlMhm+?J:2`fF)QK?p[A-4~> +nGaX+cUA9I#R_+R',DB$)&X>3)]BS1'b_/j%LidQ#R1G7rW<*#q#CIKW:o][J,~> +nGaX+cUA9I#R_+R',DB$)&X>3)]BS1'b_/j%LidQ#R1G7rW<*#q#CIKW:o][J,~> +o)B-tl,'g:]>)8'b0A;]qpQ_9c,mrA^:LbYYH4[uTUhL9PE:c]LP15-H['[QD/Fp]rpg#=~> +o)C-;j,ONO#n.=X(E+>;+sS?Z-7:,c+Wh[B(DRSq%h/mQ#R1D6!s/K(q#CL(7FqJ.s*t~> +o)C-;j,ONO#n.=X(E+>;+sS?Z-7:,c+Wh[B(DRSq%h/mQ#R1D6!s/K(q#CL(7FqJ.s*t~> +oD]="jKZ/)^Vn4;dFHq*h;/%d,Mh))dETeP_7d@cYcOduT:;13OcG?UL4Xo&H$47ICM.:aqssc;~> +oD^<>gF340$P*mf*?lj\/1iJ.0etL</Lr1o+W_R?().>k$jm7E"U"o/!<Mrq!XtIno)F4~> +oD^<>gF340$P*mf*?lj\/1iJ.0etL</Lr1o+W_R?().>k$jm7E"U"o/!<Mrq!XtIno)F4~> +o`#?ui3Kl+_oU'Mf%f6FqW9'biSE2:d*0PK^UgkYXJ_eaR?`ttN/<=CJ:2`fFE)/3A71buoDa=~> +o`$K@eL1P,%2'Ht,:P9&2`NfZ4[)+q4?,2Q/Li+m*ul.6'+bT[#R1G8!s/K(pAb58p@J<7~> +o`$K@eL1P,%2'Ht,:P9&2`NfZ4[)+q4?,2Q/Li+m*ul.6'+bT[#R1G8!s/K(pAb58p@J<7~> +p&>KsagAXp`lui]gYh2Ym/?>NmNq2^j58VCe'H1V_7R.[X/;S[Q^!VlMMHk9IX?<^Ec,Z*@U>;a +o`'F~> +p&?Z>UB1W-&/H61.PWnI6UaL98P;cQ9M%W;4?#&L.OQG_)]08$%13@F"U"o/!<Mop!H.)ms*t~> +p&?Z>UB1W-&/H61.PWnI6UaL98P;cQ9M%W;4?#&L.OQG_)]08$%13@F"U"o/!<Mop!H.)ms*t~> +pAYTt`jNFqaNrDkhrO%io)A7YoHs+rlK7*_g=F]sa2,BqYGn=hR?`qrMhm(<IX?<^Ec5`,@p`DR +jRrP'~> +pAZiARKEd(',_o?0K;<f:/Oqi='8^3?!:6)91D303&<0:,p=9H'bCc\#R:P:!s/K(pAb4Bi:[,#~> +pAZiARKEd(',_o?0K;<f:/Oqi='8^3?!:6)91D303&<0:,p=9H'bCc\#R:P:!s/K(pAb4Bi:[,#~> +p\t]t_R7%obL>2&jQZ('q#:-hqu?RBqtTgQm-*Qih:^<&a2,?oXf%h]QBRDhM2$V2H[0dUDes-! +?sQlmp%JE9~> +p\urAO9Z"#'HA>K2*ON,=C#<C@qB:eCMRNj>?4Qn76imk0J"Rr*>fJ$$OR.E"p>#0rW2co!G1os +s*t~> +p\urAO9Z"#'HA>K2*ON,=C#<C@qB:eCMRNj>?4Qn76imk0J"Rr*>fJ$$OR.E"p>#0rW2co!G1os +s*t~> +q#:j'b-\h"c.1Y0kNq^2qYg6i.K0,:oC2,2k2P:Pd`f\E\$2j+S<oJ&NJWCBIscNbF)Yu2An#(L +=H*%Ls*t~> +q#<)JUCRV@(*4eV3C?MB@;'IpE,p&EH$agYDJ*B]<),qL4?##H-QsHG&e,3U#R:M9"8r8r!!3F> +p\4]<~> +q#<)JUCRV@(*4eV3C?MB@;'IpE,p&EH$agYDJ*B]<),qL4?##H-QsHG&e,3U#R:M9"8r8r!!3F> +p\4]<~> +q>V!)cEt7&c.1\4l0\$6q#(-es!n!Eq"=4HmHWoshq6>u_Rm.UV4O'=Oc>6RK7J>pG&qV>C1h$` +>#n^dr:p;B~> +q>W8MY:U"j(EY%\4@`:SB6&6DIXm$'LP^qFJU2BRA6i5484#Ht0e4Rn)\ikl$OI(C"Tni*!VcWr +$ul+=s*t~> +q>W8MY:U"j(EY%\4@`:SB6&6DIXm$'LP^qFJU2BRA6i5484#Ht0e4Rn)\ikl$OI(C"Tni*!VcWr +$ul+=s*t~> +q>UrU[(=,te_fNTmd]uFqu6Ek/,oMEq=jRRnaGl1jkeS6`kT!dVkBHCP)bHUK7J>pG&qV>C1h$a +>?=^&[eTlQ~> +q>W7e4ph`7+"/m-8QB29H%Lj1NKB<fQ^XD0Ne`+.DeEEY:Imf72D?U+*Z,M!$k!@H"p>&,!VcWq% +]/t#J,~> +q>W7e4ph`7+"/m-8QB29H%Lj1NKB<fQ^XD0Ne`+.DeEEY:Imf72D?U+*Z,M!$k!@H"p>&,!VcWq% +]/t#J,~> +qYq)s\$s/qeDBEWnFQ>JqYgEhs"+0Jr;-6`p@\%JnE],gd`TG<ZDsXgQBRAfLkL;,H$47JD/*]o +?sHc3:1`8Ws*t~> +qYrGA?O[AW*[id-8loPCIYs>UR[g"EV5L>nURRI)JU)3J?WKom69@%W-QsEC%h/pS#R:M9!rW/p +!!+e*q>Ys~> +qYrGA?O[AW*[id-8loPCIYs>UR[g"EV5L>nURRI)JU)3J?WKom69@%W-QsEC%h/pS#R:M9!rW/p +!!+e*q>Ys~> +qYq&=[(XN.h<=A"p%S7Xr;QKk/cP_Ir;6?dq"OLTnEA`[cGdK)XJ;;PPE1ZYKReJrG&qV>C1h'c +>Zas%:4)[1s*t~> +qYrI&(C:]o-S[bV=CuZ,O.;uBWN32+ZaRESYbmtUMh-+kAR&2/7mK'i.jZ2P&J#<Y#m^_<!s8H& +p](@"<qQ7gJ,~> +qYrI&(C:]o-S[bV=CuZ,O.;uBWN32+ZaRESYbmtUMh-+kAR&2/7mK'i.jZ2P&J#<Y#m^_<!s8H& +p](@"<qQ7gJ,~> +qu72`ZF\!#g?%erpA"I[qu-Nhs8W'LrVZQiqYL$_p[[S-f[.[Q[]Q?qQ]mJhLkL;,H$+.GCh[Kl +@9m#9:eX`Urql_G~> +qu8V"-O1/",VM2K<Fg-#O.E8QZ*^sM]=u,"_76YDRurJTFD>2c;+a2<2(g6u(_R>h$jm7F"U"o* +!VcWr&qg2\s*t~> +qu8V"-O1/",VM2K<Fg-#O.E8QZ*^sM]=u,"_76YDRurJTFD>2c;+a2<2(g6u(_R>h$jm7F"U"o* +!VcWr&qg2\s*t~> +r;R<)ZaRWke_ofdp\=R]r;?Qgs8W)urVufqqu?L<q=O"4g<n!V[]ZHsQ]mJhLkL;+G]e%FCh[Kk +?sQo8;+sMdb5;3h~> +r;SbQ71BY?+=f?::g\*fMjgWO\%98g_SsU=c,m`-Wh>Z:K6V9E>?"<d4uY/E+W;")%L`^O#6k;4 +r;lWm!@Ye]s*t~> +r;SbQ71BY?+=f?::g\*fMjgWO\%98g_SsU=c,m`-Wh>Z:K6V9E>?"<d4uY/E+W;")%L`^O#6k;4 +r;lWm!@Ye]s*t~> +r;R;RZFRm!g?.r"q>1!drVc`hs8N#trVufpq]tk%jP/,)^pgJDSX5P$Mhcq8I!BdRDJNos@piSF +<DcF\7s+S)s*t~> +r;SdQ&dJse-8@VS=D2o6Q_q.&^r+16bg+Vcf$MFKZ)4%SLOF2V?WU&q5rpbO,9.F0%h/mQ#R1D6 +!r`5p!!3@#q#(/B~> +r;SdQ&dJse-8@VS=D2o6Q_q.&^r+16bg+Vcf$MFKZ)4%SLOF2V?WU&q5rpbO,9.F0%h/mQ#R1D6 +!r`5p!!3@#q#(/B~> +rVmE*YI)!beDT]dq>1!drVc`fs8Drpr?V.*jkS>-_76\GSsPV$Mhcq8I!BaQDJNos@UEAC<DcF\ +6rL>gs*t~> +rVnqT+U8Ai+Y5Q?;IXZtP+o4r`lZHNdact(h;?i/_RHV@Q]-K=CL^RI9LM!#/L;GS&.]3Y$4$k? +!s8H&p&G+4V#:7C~> +rVnqT+U8Ai+Y5Q?;IXZtP+o4r`lZHNdact(h;?i/_RHV@Q]-K=CL^RI9LM!#/L;GS&.]3Y$4$k? +!s8H&p&G+4V#:7C~> +rVm8QYdhQqg?.r$qu$Bkr;cigs7uX?q![A$eB>_>Yc"(YP)bHUK7J>oFDu)4B4YOZ>Zb!'9LqQ> +B)DQ,J,~> +rVnpZ"pY\Y-SdkY>AJVFS?9KHcI(.ng"bKEjlYCIa1S[SRu`5JDIm-T:.@E+0..kZ&J#?[$4-q@ +"9SQ'p&G-u4T#*WJ,~> +rVnpZ"pY\Y-SdkY>AJVFS?9KHcI(.ng"bKEjlYCIa1S[SRu`5JDIm-T:.@E+0..kZ&J#?[$4-q@ +"9SQ'p&G-u4T#*WJ,~> +rr3N+Xg>[\dbjB`qu$BjrVlfds82dBrV5jDh:0Wb\Zi!'QB@2bL4au&GB7_?C1_!b?<^N2:eXDJ +5t\`es*t~> +rr5(V+9i2g+Y5Q>;IX^"PGGV*cI17qg>1]Ijlkpbe&]5-VON[$H>dD%<_l4M2_ZX'(_R>h$jm:G +"p>#+!VQKo'!D35J,~> +rr5(V+9i2g+Y5Q>;IX^"PGGV*cI17qg>1]Ijlkpbe&]5-VON[$H>dD%<_l4M2_ZX'(_R>h$jm:G +"p>#+!VQKo'!D35J,~> +rr3MZYI2-ff&?#jqYU3grVc`fs8DrqrVudBp[.(te&oJ9YGRkUOGo$MJUVohF)Pl/ARf+R>$"[" +9LqQ:6!4*bs*t~> +rr5'h!sT5Q,qqDN<b?Q2Q`%@6cI14og>1]Hjlbd]dDic$Um[6qG\q"t<DH"I2_ZX&(_R>g$jm:G +"p>#+!VQKp"=X6Js*t~> +rr5'h!sT5Q,qqDN<b?Q2Q`%@6cI14og>1]Hjlbd]dDic$Um[6qG\q"t<DH"I2_ZX&(_R>g$jm:G +"p>#+!VQKp"=X6Js*t~> +s8NZ/YHYLPbh1tEpA+R^qu$Elp&G$js8Drps8+2?p$C_mdE025Y,.YQO,JdHJ:2`eEc,Z+AR]"O +=]\Nu9LqQ;5!e')s*t~> +s8P7\5Qh?)*%*L)8m,kSMOCHTaj/;`f%Jj9iT0.^g<[^JY+qADJp2$@>Z=Ed4uY,C+;b_%%1ERM +#6k;5!r`5n!!*5Vrr7K~> +s8P7\5Qh?)*%*L)8m,kSMOCHTaj/;`f%Jj9iT0.^g<[^JY+qADJp2$@>Z=Ed4uY,C+;b_%%1ERM +#6k;5!r`5n!!*5Vrr7K~> +s8NYsX0K1PcIq=Kp%S7Wqtp?kp&G'k"TA8rqtpBh-i*B"in;]!^UC8?S!/hhL4au'G]e"DC1h'c +?<^Q5;bp(Y76s+%L]7=(~> +s8P=F!X/oG+"B-59jMU`N1?u^aj/8^e_&X5i8`qYf?M1AXJ(r<JTbg<>#S*`4Z4r@+;ke&%1<LL +#6k;5!W`>o!!*.;rr7K~> +s8P=F!X/oG+"B-59jMU`N1?u^aj/8^e_&X5i8`qYf?M1AXJ(r<JTbg<>#S*`4Z4r@+;ke&%1<LL +#6k;5!W`>o!!*.;rr7K~> +'*%sMXKoFVd+d^Pp%J.TqYU3ipAb0l1]@7Lqtg0bq=s^Tl/:4?`kJg]URI=(M1pP1H?XIMD/!Tm +?sQr<<DlUd8OYs15!AcBs*t~> +63$qS!sT2N+tPW=:ge3kO.NMgaj&2\eCWF0hr<_Se]PY7Wh5N5IroF6=].m\4Z4o?+;ke%%1<LL +#6k>6!W`>m!!<#ss*t~> +63$qS!sT2N+tPW=:ge3kO.NMgaj&2\eCWF0hr<_Se]PY7Wh5N5IroF6=].m\4Z4o?+;ke%%1<LL +#6k>6!W`>m!!<#ss*t~> +'*%a/XL#R[dbX*ToC_hOq>:*hpA[#LrVZTjqYBp\p\+:KkMOk8`4WFVU7%.%LP(,*H$47IChRBi +?sHi9<)HC`84>j04[%6ns*t~> +63$XI":#GT,VD&E;IXZtOIr_kaNMiTdact'gu%)FdDii(Vjrm)HuWe*=A_XW4>e`=+;ke%%1<LL +#6k>6!W`>m!!:CEs*t~> +63$XI":#GT,VD&E;IXZtOIr_kaNMiTdact'gu%)FdDii(Vjrm)HuWe*=A_XW4>e`=+;ke%%1<LL +#6k>6!W`>m!!:CEs*t~> +'*%?sXgGd_dbO!PnalDHq"jpfpA[#Lr;6?dp\+:Oo'u57inDi&^ppVIT9kUqKn=f$G]e"DCM.0d +?<^N4;c$.[84>j14["f's*t~> +5l]sJ":,SY,VD&E;IONoNL[)]_8O@8bK\D^eCN:#aM,$\T9Y=cGAUho<)#hI3AN-3*uGS!$jm:H +#6b54!Whfk!d+D@J,~> +5l]sJ":,SY,VD&E;IONoNL[)]_8O@8bK\D^eCN:#aM,$\T9Y=cGAUho<)#hI3AN-3*uGS!$jm:H +#6b54!Whfk!d+D@J,~> +'*$abXgGd^d+[RGmI0W<p\FadpA[#Kqt^$]p%._BmHj-"gssZg]X=l<SX#1iK7JArG&qV=BkCj_ +?!:?1;,0bU7mo[/4[!!Ds*t~> +5l\q-"UPe\,V:rA:gRsbM3k'F\\#Sk_SjI8bK\>R^U:,9R#ZiGEG&TY:J+#<2_Z^+*>]7q$OR1G +"pG,3!Whfk!\F*GJ,~> +5l\q-"UPe\,V:rA:gRsbM3k'F\\#Sk_SjI8bK\>R^U:,9R#ZiGEG&TY:J+#<2_Z^+*>]7q$OR1G +"pG,3!Whfk!\F*GJ,~> +'*$(OXL,XZcI_%;lKn!1pA"OapA[#KqY9dVo'l&4l0%0cf[%XS\?W'.RZ`S_JUVrjF`D;7BOkRZ +>Zk-,:eaSR7RKL-5!;("s*t~> +5l[DW"UYk],:k`=:0VFUKTVk,Yd1XE\\#Pi_8F7+[B--lOGA:-CgpLE9L_9.1bL1#)\rtn$4-tC +"pG,3!Whcj!V-2?~> +5l[DW"UYk],:k`=:0VFUKTVk,Yd1XE\\#Pi_8F7+[B--lOGA:-CgpLE9L_9.1bL1#)\rtn$4-tC +"pG,3!Whcj!V-2?~> +'*#P?X0]IWc.:b3k3D@(o_87^p]!/Nr;$*ZnaGi/k2bLYg!\']]X4f<SsPOqK7A;pG&qV>C1^sa +?<UE1;GTtY7n#d35X%=oc2W:~> +5lZ*2"Ubt_,:bT893>bGIuB\hVl?`!Yd(OB\@T;[XJ;5HLk'\eAmJA184#Hu1+Xap)ANek$4-qA +"U"r1!Whcj!QY4j~> +5lZ*2"Ubt_,:bT893>bGIuB\hVl?`!Yd(OB\@T;[XJ;5HLk'\eAmJA184#Hu1+Xap)ANek$4-qA +"U"r1!Whcj!QY4j~> +'*"]'X0]CSbL>5(j6,asoCr.]p]!/NqtTjTn*K9"inrPEe',eF\$2j+S!8qgJUMliFE)57BOtX[ +>Zk*,;,0bU7RTU05<_4nVuM8~> +5lVAs"Ubt^+t>?28QB29H%hBMT:r!TVPpMsYHY=4U77=&JTu-I?s$2r6U!Ld/h&%e)&!Mf#m^b? +"U"r1!Whcj!LNh:~> +5lVAs"Ubt^+t>?28QB29H%hBMT:r!TVPpMsYHY=4U77=&JTu-I?s$2r6U!Ld/h&%e)&!Mf#m^b? +"U"r1!Whcj!LNh:~> +&c88uWj91OaO&Poi8s4jnb2hQr\j`Op[dn@kiLd[g=F`ta2#9mXJVVWP)G$DI!KmUDf'6%@pr\J +=B/9r9hIoD6UF('5!;&is*t~> +5l(K_"Ul%_+Xf$*7T!E'F+/t/Pa@f-SY)RLUo(&_R?38VH#[S.>#Is\5<:YU.jcDZ(D72a#R:P; +"U"r1!Whcj!I+Qo~> +5l(K_"Ul%_+Xf$*7T!E'F+/t/Pa@f-SY)RLUo(&_R?38VH#[S.>#Is\5<:YU.jcDZ(D72a#R:P; +"U"r1!Whcj!I+Qo~> +'(hflWN`kG`QZc_gu7D\n+6>Op\ZrHq"4(BkiC[Wf[S9la2#9nY,J%`Q&g`QI<p*ZEGfQ*AR]"O +=]SL!:.n/J6UF((5<_4nGQ30~> +5jn^T"UbnZ*[NBr5tk<eCNY,_MN!RWP*;/sR$sJ/NJ;q-E+rcb;bKPC3]8]D-mKcO'bLl]#6kA9 +"U"o0!Whcj!E];O~> +5jn^T"UbnZ*[NBr5tk<eCNY,_MN!RWP*;/sR$sJ/NJ;q-E+rcb;bKPC3]8]D-mKcO'bLl]#6kA9 +"U"o0!Whcj!E];O~> +'(2?cVld>;_8jgLf\PQMm.'fFqtg<h2u<@Dna5Q$hqQc2cH=,A]!\]>URda6MhZb.G]e%ECh[Kk +@:!/?<Du^g8k;B;5sRXu5!;&&rdX~> +5i_qI"UYeV*$Qgf4@W+L@Vg49It<6*L5:\ENK0'VJpVWXBOP%B9LV-*2)-[3,p40E'+YHV#6k>8 +"9S`-!Whcj!>k`c~> +5i_qI"UYeV*$Qgf4@W+L@Vg49It<6*L5:\ENK0'VJpVWXBOP%B9LV-*2)-[3,p40E'+YHV#6k>8 +"9S`-!Whcj!>k`c~> +''PjZVQ7#3]u.t;e(NU=l0e0;q=t!c1ACD/lK-sYf$_ga_nWahY,S4gR$3McK7.ueEc5f0B4PFX +>Zk*,;,0bU7RKI,5<h=qr]L8\J,~> +5hc;@"UYbS)BU:Y2aBo2>%;AhFEVkRH[L9lJV&K%GB%A.?<C*!7R&mi0J"Y!+WVF8&e56R"pG/5 +"9S`-!<MWh!<%E~> +5hc;@"UYbS)BU:Y2aBo2>%;AhFEVkRH[L9lJV&K%GB%A.?<C*!7R&mi0J"Y!+WVF8&e56R"pG/5 +"9S`-!<MWh!<%E~> +&`T:PUoCN(\\?#(cdge.k3VX9p&+M:p\"(CkMb4IdET_K]stDNW2#rPP`L]UIsZ?[E,BB(AR]%Q +>?Fm':eaPP77'7(r]^9D!<%E~> +5gfW6":5MM(E=VK1-.`o;HdOCBkqO&DfB`<F`qqKCh@'Z<DQ4T5<1MQ.juYd*Z>h.&.JpM"U,#3 +!s8T+!<MWh!<%E~> +5gfW6":5MM(E=VK1-.`o;HdOCBkqO&DfB`<F`qqKCh@'Z<DQ4T5<1MQ.juYd*Z>h.&.JpM"U,#3 +!s8T+!<MWh!<%E~> +'%ND@U8P&r[CX,lb0ehrj6?"&rU]sZ0D4u*l/UUPd`ohL]XG)HVkTcNP`L`WJUD]`EGfQ+An,7U +>Zk*,;,0eV7RTO,55IDBrI=~> +2S&kh":,DI'cA&=/MoOU8PrSq?=72NA7]@cBkhBp@9ci19LhE43&<0:-6s`U)]0;%%LWOGrWN6' +rW<*#mf3@dJ,~> +2S&kh":,DI'cA&=/MoOU8PrSq?=72NA7]@cBkhBp@9ci19LhE43&<0:-6s`U)]0;%%LWOGrWN6' +rW<*#mf3@dJ,~> +'$Q`5TVSNgZ*h0Y`lul`hW*kfr9jOP0(A>oj5/G:c,[Z4[]ld/Tq.R8OGemGIX-'UDes0$A78hN +>$"^%:eaPQ7RKF)q)n`VJ,~> +25pQV!s]/D&f)E0-n[><6:ajM<E<1'=^#$8?=.&D<`2X`6pNgl1+aq$+s7mE(_mYo$jm7="TJT' +!r`5h!!)tJ~> +25pQV!s]/D&f)E0-n[><6:ajM<E<1'=^#$8?=.&D<`2X`6pNgl1+aq$+s7mE(_mYo$jm7="TJT' +!r`5h!!)tJ~> +'$HQ/SY;p[Xg,:G^rFRFf%]0ErT3t>0'DBTgXa`p`k]0nYc=OmS=#P&N/3+9HZsOLChdWp@UEDF +=B/9s:/"5L77'7'q)n`VJ,~> +2m*,]!sT&@&/,m$,:P9'4$c>.9MJ8X:f1+h<E<-u:.duA4ZPAS/LVkf*uu7:'b_,f$OI"?"TAN& +!ri;h!!)qI~> +2m*,]!sT&@&/,m$,:P9'4$c>.9MJ8X:f1+h<E<-u:.duA4ZPAS/LVkf*uu7:'b_,f$OI"?"TAN& +!ri;h!!)qI~> +'$?E)S"HFOWN<>3]"c2*cI1=uq:kr)/_en)c,df:\?i?<V4X6DP`LcZKReGpFDu)3BP(a^?<^Q5 +<)QLd91VN?69d[04TPD1~> +2Qm)]!X/i;%M9Eo+!`<h1c[ce6UaI784cEG9MJ5R7RB:"2`*3>-mToU)]9G,'+bW^$3p_;rWE-$ +rW2Ee!;q?~> +2Qm)]!X/i;%M9Eo+!`<h1c[ce6UaI784cEG9MJ5R7RB:"2`*3>-mToU)]9G,'+bW^$3p_;rWE-$ +rW2Ee!;q?~> +'%2r.R@KnDV5UK"[(3ld`Q?BOpsC_BdEK\L^UghXXJhndR[0+tMhct9I<g!UDJNot@pr\K=]\R# +:ej\V7n#d25<em+!;q?~> +27ihh!<`W6$k<mc)]p=S/M]7G4?Pbj5<qM$6UX=/5!(\[0eOq',9RsE(`!f!&.T*V#mLP3"9&B# +!U]pfr."~> +27ihh!<`W6$k<mc)]p=S/M]7G4?Pbj5<qM$6UX=/5!(\[0eOq',9RsE(`!f!&.T*V#mLP3"9&B# +!U]pfr."~> +&_rG2Q^OA9TqnTeY-PLH]tqY_a8a44a2Z$2]!eoHWhuJ\R$EbmMMHh7I<g!WDes*!A78hM>$+d' +;,0eW84H!65sP0.!D`QC~> +2Tl($!<WN3$4IFY(E4G@-S$i*1GgsI2`NfX3]fD`2D[$=.OZSd*ul.7'b_2k%L`[N#6b54r;uou +mJm8,r."~> +2Tl($!<WN3$4IFY(E4G@-S$i*1GgsI2`NfX3]fD`2D[$=.OZSd*ul.7'b_2k%L`[N#6b54r;uou +mJm8,r."~> +&a>::Pa7`-StMjUWN<;/[CEjB]e$h+[BZm7VP9ZNQBRAgLkUG1I!KmVE,B?%A7AnO>?Fp);,9kX +8Ol3:69ma14TTm-J,~> +2;\B6!<NB.#RUtN',DH++=&<a.kE8(/h\n51,C^@/h8@t,U+<N)Aa,%&J,H^$jm:G"p>&,!rW/e +!!-:%J,~> +2;\B6!<NB.#RUtN',DH++=&<a.kE8(/h\n51,C^@/h8@t,U+<N)Aa,%&J,H^$jm:G"p>&,!rW/e +!!-:%J,~> +&b_-CP*D9"R[ftCUSaujXg#//[/@6]ZEL@.V4sQNQ^!VlMMHh8IX??`F)Yu2B4PIZ?!CH4<)HFc +8kDQC6pj7*55@>BOSs\~> +!;-6j1BIX^"pbPE%h]To)]^%G,UF``-7:2j.P!"u-R9lY*ZQ(8'b_/j%h9!U$4$k@"U"o/!rE#c +!!.BDJ,~> +!;-6j1BIX^"pbPE%h]To)]^%G,UF``-7:2j.P!"u-R9lY*ZQ(8'b_/j%h9!U$4$k@"U"o/!rE#c +!!.BDJ,~> +'E3rKO-,WkQ^O>6T:r$WVl?c"Y5PL$XT,=OW265\S=#S)O,SpLJq/8rG]n.ID/3fr@UNMH=]\R# +:eaSS84H$86:!h"q)nbXrdX~> +)#b3L!!*0)"U>;?%1j-d(E+56+!2UK+sR"2)'gLQ+WqgG)Aj8*&eGQ`%1<LL#R:P;"9S`%!UKde +S,Rp~> +)#b3L!!*0)"U>;?%1j-d(E+56+!2UK+sR"2)'gLQ+WqgG)Aj8*&eGQ`%1<LL#R:P;"9S`%!UKde +S,Rp~> +&c].nN/s*aPEhK&S"-(CU84XaVuERmV>m>ATq@jCQBRDiMMQq:IslWeF`MG<CM79g?s[&?=&i-p +:.n/K7R][25sRUtq)nc)s*t~> +2?/1,!!*-'"9eu8$4RLX',DE')]Kb:*??1B+!;[J*?5t7()7Jq&.T-X$OR1G#6k>8"9S`&!UB^d +ao?k~> +2?/1,!!*-'"9eu8$4RLX',DE')]Kb:*??1B+!;[J*?5t7()7Jq&.T-X$OR1G#6k>8"9S`&!UB^d +ao?k~> +&c^".M2[FTOHPfmQ^F21SXuMQU&L_bTDkE3S=,\,OcG?VL4b#*H[0dVEc5f1BOt[^?<gW7<Du^h +9M%`D6pj:,5X.I.4T[k=s*t~> +!WT;$!"Ar1!sAc4#RV"N&/#ZmrYPSOru(hT(`OG5)&F&''+tie%LidQ#m^b?"pG/5!s8?#lMptf +o)F4~> +!WT;$!"Ar1!sAc4#RV"N&/#ZmrYPSOru(hT(`OG5)&F&''+tie%LidQ#m^b?"pG/5!s8?#lMptf +o)F4~> +&c^pEL5ChINfT9aP*D5tQ^F6@S,\rVRK&ZSQRS2_OH,6ULP15-I<p*[F)c,7C1q0g@:*8C=&i0r +:/"8M7RTU15sRXupcS[`pA]X~> +!WUmQ!"]/4!WrQ/"pbPD$k<g\&ebrX'`JjH((V)m&ePZc%L`^P#m^b@"pOu/!WrK*quQ'_!\j?J +J,~> +!WUmQ!"]/4!WrQ/"pbPD$k<g\&ebrX'`JjH((V)m&ePZc%L`^P#m^b@"pOu/!WrK*quQ'_!\j?J +J,~> +&c_NRK8,2=MN!OTO-#KdP*;.0Q2d*KP:i#\OcYZbNJ`OHKRnW$H?aUTEH#f2BkM!d@:*8C=&i0r +:/"8N779I.5sRY!5578BOSo-/~> +!WV`h!<3'.!WrQ/"pYD?$4I@R%fR"=&H!+N&.]6\%1EUO#m^b?"U,#3rWE0%rW20^!dX_DJ,~> +!WV`h!<3'.!WrQ/"pYD?$4I@R%fR"=&H!+N&.]6\%1EUO#m^b?"U,#3rWE0%rW20^!dX_DJ,~> +8,rOOItNH0LPUeFMi<USNfT6_OH5H_NK&mTMi*CKLP180IXQNeG'%bDDJa-%An5@Y?<gZ9<Duaj +9M.iF6pa1)5X.Is5578BdJs5s~> +!rr3irW)s!rrNE-"9er5"pYG5$N:G4%/gVD$k!FM#mgkB"pP56"T8H%!ri;_!!:@Ds*t~> +!rr3irW)s!rrNE-"9er5"pYG5$N:G4%/gVD$k!FM#mgkB"pP56"T8H%!ri;_!!:@Ds*t~> +s8ND>I"6g$KS>/9M#N5=MMmCON/NUOM2@%Dre;YNJq/;tH?j^WF)c,8ChdWp@prbO>Zt3/;c6Cc +91_T@69mg85Q<qA4TbK[s*t~> +s8N(pr;cft#m(23"9er5#7(V5$2P#/$3(87#6kA9"9eZ*r;us!jT#AYs8RT~> +s8N(pr;cft#m(23"9er5#7(V5$2P#/$3(87#6kA9"9eZ*r;us!jT#AYs8RT~> +s8NJkG^P!kJV&N-Knb?]L]3,0LB3-`re)PLJqAN%I!^-_G'%bDDJX*&B4YR]?X6l==&i0s:eaSS +7n#d2r]g?Fq)naBMuNa,~> +s8N)[r;ccs!!<-%!sAc2#5e`)#lb51#lb/0#6+l,"TAN$!rW/_!!*.Arr7K~> +s8N)[r;ccs!!<-%!sAc2#5e`)#lb51#lb/0#6+l,"TAN$!rW/_!!*.Arr7K~> +s8NE&Nd,r#It3'#K)UE#K`?ZSJq8K'J:E#rI!^-`G'%bDDf'9)BP(da?sd2D=]\U%;,C"]8Ol3; +69md55578A5iM_BJ,~> +s8N,s6i@#`!WN6$"9&E'"oJT'#6kG=#6kA9"o\Z)"8i5t!Tj@_"Q'.XJ,~> +s8N,s6i@#`!WN6$"9&E'"oJT'#6kG=#6kA9"o\Z)"8i5t!Tj@_"Q'.XJ,~> +rr38JFa/7\I=?Zqq1/Ho."6SlI!^0bG^"=QEc>r6CMIQrARf.U?<gZ9<`E!p:JOSU84H!65sP?4 +p,rIB=oSF#J,~> +rr2u.qZ-QqrW<*%r<3!$rs&K,rri9&r;ucqjo>Gc/,oPJJ,~> +rr2u.qZ-QqrW<*%r<3!$rs&K,rri9&r;ucqjo>Gc/,oPJJ,~> +rr36$Irom[H@(&9IJnOBH[9s^G^"=RFEDPBDf'9)BP1pf@UNMJ>?Y-0<)QOf9hS)L7RTU05<e[% +!D1B2s*t~> +rr3#s-Md`?!WE/r"9&H&"8i5q!TO.\'#4DFJ,~> +rr3#s-Md`?!WE/r"9&H&"8i5q!TO.\'#4DFJ,~> +rVm,PE-$/FGBeE1HMr+;G^"=RF`_\FEH#i5ChdWrAn5C[?X?u@=]\U%;G^+_91_ZD6pj7*54^o= +6"g/ps*t~> +rVlo9!r;oo!Up0a!TO.]#!`(bs*t~> +rVlo9!r;oo!Up0a!TO.]#!`(bs*t~> +rVm-%KlD'RFEMd)GPlV4F`_\FEH,r9DJa3)BkM$g@q&hQ?!LQ8<`E!p:JFMT8Ol6=6UF%&54^o< +:r</1J,~> +rVlru3!/pVpAt!ip&X+P!?J]Js*t~> +rVlru3!/pVpAt!ip&X+P!?J]Js*t~> +r;R#[EGf`8EcZ<tF=;3NEH#i7DJa3+C2%<mA7K(V?X6o@=]\U&;G^.`91_ZE7RTU15sRX*4T[rm +qu$JE~> +r;QfJ&GZ>#!Vlfj!T="[#ZCQts*t~> +r;QfJ&GZ>#!Vlfj!T="[#ZCQts*t~> +qu6knCi"!-DfGMl-ua*BD/=$(CMIQrAn>I]?sd5F>?Y-0<)ZXj:/"8O7n,p86UF((5<e[%!EmJ? +s*t~> +qu6\9#l"Db!Sm_V/AM)^J,~> +qu6\9#l"Db!Sm_V/AM)^J,~> +qu6ooIVNV5Ci+%dDZ=PTChmebBd%/&An>I]@:*>G>?Y02<`Dsn:JFJR84H$86UF()5X.FroK<7K +Q2LOZJ,~> +qu6`h3X53Vnc@JF!Z$=aqu;0~> +qu6`h3X53Vnc@JF!Z$=aqu;0~> +qYpfMEb/lsBkhD]C]8&qBkV0mAnGUb@q&hQ?<g]<=BAO';c-@d9M7rI7RTR05s[b$5<_:'4T[ru +nG<08~> +qYpT;-,9K^#[d&ss*t~> +qYpT;-,9K^#[d&ss*t~> +qYpd!T4VPCAS1aNs(3KeA7K(X@:3GK>[(B6=&r=";G^.`9M.iG7RTR/5sR\"5<_:&4TT*Nq>Ys~> +qYpWrHk=*o!BT!2s*t~> +qYpWrHk=*o!BT!2s*t~> +q>U]pO^VU*@UipFAH--Z@UWYO?=$oB>?Y-1<E)mp:eseZ91_ZD779I.5lO"I54^o<<R(==J,~> +q>UNiAdZEU!@>_[s*t~> +q>UNiAdZEU!@>_[s*t~> +q#:NnO'Gpr?he"3?X@#C>Q.e?=BAL%;c-@e9h\/O84Q*:6UF%&5Q!_:4TS3lp]#a~> +q#:Ej@0FOL!>`0=s*t~> +q#:Ej@0FOL!>`0=s*t~> +p\tHoMH<tc>[@;7r`pFI>?Y04=BAR(<)QRi:/+DS8Ou?@770C-5X563n3$hAXT%toJ,~> +p\t9i>/gOD%\3Oms*t~> +p\t9i>/gOD%\3Oms*t~> +pAY<oLK%;U=oDP'=TDS'<u+h:<)Z[l:JOVW8kDQD7R]^35sRY!541Q85FVTFs*t~> +pAY0k;9/_=!egOGs*t~> +pAY0k;9/_=!egOGs*t~> +p&>3pPu1FY<W6%s<>AJ3;Gg7d:JFMU8kDQC779L06:!k$r]]d6!^CN!p&BO~> +p&>'lB?C2U!^lnYs*t~> +p&>'lB?C2U!^lnYs*t~> +oD]$!:/=\`;H!Ei'MqS#9he;S8kDQD7R]^46:!k%5<o-2mQCT9rUg,?~> +oD\fTb5_QmrUg,?~> +oD\fTb5_QmrUg,?~> +o)Ag79M8(U9b0oj91hcH84Q-<6pj:,5X501lobBarq$/?~> +o)Aa&"O6uJ[f5muJ,~> +o)Aa&"O6uJ[f5muJ,~> +nc&aI8ju6@qah5f7n6$<779L16:!k$53Y336=npAs*t~> +nc&X=$ISnU#X$`/s*t~> +nc&X=$ISnU#X$`/s*t~> +nG`XcE^W5]q*b6Ms$H`O"@,195!J6p!`5`gnGe"~> +nG`Ra8d<fG!ZdO#nGe"~> +nG`Ra8d<fG!ZdO#nGe"~> +n,ELh]N.8i5lX(J53b957u-F0n,In~> +n,EIgYU.p%!t];5rpTl;~> +n,EIgYU.p%!t];5rpTl;~> +mJd7WSl,2Fjuic]c2I&0J,~> +mJd7UMB1FO!_(--mJh\~> +mJd7UMB1FO!_(--mJh\~> +li.%WY?'OD!d29Nli2J~> +li.%VT-iFq!`ZW#li2J~> +li.%VT-iFq!`ZW#li2J~> +l2LhY\P;*I!e.lQl2Q8~> +l2LhXX;Bms!b&J)l2Q8~> +l2LhXX;Bms!b&J)l2Q8~> +kPk\Yet[:NlobP==,F</mf)GMJ,~> +kPk\Xd#q3,li74o-uc-*mJc>LJ,~> +kPk\Xd#q3,li74o-uc-*mJc>LJ,~> +jo5PanCkF5Ce=4]##oc*[Ft*Kjo9i~> +jo5Pama\C\7MPFo"s[,kWR^M:jo9i~> +jo5Pama\C\7MPFo"s[,kWR^M:jo9i~> +hu=;eo]b/ZaM"s[T9uCXbMDO[rSdd,~> +hu=;doB"NE]s+?"N.[4b_Un&HrSdd,~> +hu=;doB"NE]s+?"N.[4b_Un&HrSdd,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-02.png b/macros/latex/contrib/elpres/bitmaps/ep-ball-02.png Binary files differnew file mode 100644 index 0000000000..12eb6d5d29 --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-02.png diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-03.eps b/macros/latex/contrib/elpres/bitmaps/ep-ball-03.eps new file mode 100644 index 0000000000..1ef7966faf --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-03.eps @@ -0,0 +1,452 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: ep-ball-03.eps +%%CreationDate: Sun Jul 19 18:50:14 2020 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 100 98 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 82.98308476146363 translate +84.982677165354332 -82.98308476146363 scale +% Image geometry +85 83 8 +% Transformation matrix +[ 85 0 0 83 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 85 string def +/gstr 85 string def +/bstr 85 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 20324 ASCII Bytes +colorimage +h>[o_q!d:rg>:iNkk+`Nh>`!~> +h>[o_q!d:rg>:iNkk+`Nh>`!~> +h>[o_q!d:rg>:iNkk+`Nh>`!~> +iVsYfj4D;[Xe_AKP*1rhO-u`I]?9+'ro3s.~> +iVsYfj4D;[Xe_AKP*1rhO-u`I]?9+'ro3s.~> +iVsYfj4D;[Xe_AKP*1rhO-u`I]?9+'ro3s.~> +jo6>"pYs<%T9kOoM26q@KnFu-IXHHdG(5UE\(:0Mjo9i~> +jo6>"pYs<%T9kOoM26q@KnFu-IXHHdG(5UE\(:0Mjo9i~> +jo6>"pYs<%T9kOoM26q@KnFu-IXHHdG(5UE\(:0Mjo9i~> +kl1hcmaT4_T`'ofNfB$VMM[+CKnFr+I=$6`F`VSNR'tT<kPp&~> +kl1hcmaT4_T`'ofNfB$VMM[+CKnFr+I=$6`F`VSNR'tT<kPp&~> +kl1hcmaT4_T`'ofNfB$VMM[+CKnFr+I=$6`F`VSNR'tT<kPp&~> +lMi40m*)AlP*;,qQ'@MsP*(fcN/NRLL4k,.I=$6`F`VP?CM/:,kPXWFJ,~> +lMi40m*)AlP*;,qQ'@MsP*(fcN/NRLL4k,.I=$6`F`VP?CM/:,kPXWFJ,~> +lMi40m*)AlP*;,qQ'@MsP*(fcN/NRLL4k,.I=$6`F`VP?CM/:,kPXWFJ,~> +m/JR7lb9-\QC!u-S"#k8R@0G.P`h/iNJiUJKS"]%H[0dVEc>l1B4Z1^h"g=:J,~> +m/JR7lb9-\QC!u-S"#k8R@0G.P`h/iNJiUJKS"]%H[0dVEc>l1B4Z1^h"g=:J,~> +m/JR7lb9-\QC!u-S"#k8R@0G.P`h/iNJiUJKS"]%H[0dVEc>l1B4Z1^h"g=:J,~> +mJdLe_OHjZS"6.DU&LedTcTl!SXZ"4PECobM2-b9IslWfG&qYACh[Nm@:k_]rpKf:~> +mJdLe_OHjZS"6.DU&LedTcTl!SXZ"4PECobM2-b9IslWfG&qYACh[Nm@:k_]rpKf:~> +mJdLe_OHjZS"6.DU&LedTcTl!SXZ"4PECobM2-b9IslWfG&qYACh[Nm@:k_]rpKf:~> +n,EanhP$=*SY2aSVlK]rs/[<BVkp,[S=5e.Oc>6SKRnT"H?XLPE,KH)An5:SE45K/s*t~> +n,EanhP$=*SY2aSVlK]rs/[<BVkp,[S=5e.Oc>6SKRnT"H?XLPE,KH)An5:SE45K/s*t~> +n,EanhP$=*SY2aSVlK]rs/[<BVkp,[S=5e.Oc>6SKRnT"H?XLPE,KH)An5:SE45K/s*t~> +nG`m_\X8hWU8FolYd:b:[f3`Y[BZm7Vk]oTR$EhpMhct:I=$6_F)c,7BkM!d?X$c\iUHkt~> +nG`m_\X8hWU8FolYd:b:[f3`Y[BZm7Vk]oTR$EhpMhct:I=$6_F)c,7BkM!d?X$c\iUHkt~> +nG`m_\X8hWU8FolYd:b:[f3`Y[BZm7Vk]oTR$EhpMhct:I=$6_F)c,7BkM!d?X$c\iUHkt~> +o)CWIj-l@+Tr+lo[(*fb^qmk(_Sa7*]=5)LX/D\`R[95!Mhcq7I<p-\Ec>l2BP(a^?!130\c21" +J,~> +o)CWIj-l@+Tr+lo[(*fb^qmk(_Sa7*]=5)LX/D\`R[95!Mhcq7I<p-\Ec>l2BP(a^?!130\c21" +J,~> +o)CWIj-l@+Tr+lo[(*fb^qmk(_Sa7*]=5)LX/D\`R[95!Mhcq7I<p-\Ec>l2BP(a^?!130\c21" +J,~> +oD^fJhOC",V5g`,]>2G/bg"DXcd0t`b/M30\?i?<V4a?GPE1TTJUVulG&qY@Ch[Kl@:!/?<)AqZ +oDa=~> +oD^fJhOC",V5g`,]>2G/bg"DXcd0t`b/M30\?i?<V4a?GPE1TTJUVulG&qY@Ch[Kl@:!/?<)AqZ +oDa=~> +oD^fJhOC",V5g`,]>2G/bg"DXcd0t`b/M30\?i?<V4a?GPE1TTJUVulG&qY@Ch[Kl@:!/?<)AqZ +oDa=~> +o`$uJ_j6jfW33M>_8ssQg"P07gYCW@g=FZp`kf<sZ)jjtSX5M!LkC2*H?XINDes-#AR]"O>#nNr +Nq2iBJ,~> +o`$uJ_j6jfW33M>_8ssQg"P07gYCW@g=FZp`kf<sZ)jjtSX5M!LkC2*H?XINDes-#AR]"O>#nNr +Nq2iBJ,~> +o`$uJ_j6jfW33M>_8ssQg"P07gYCW@g=FZp`kf<sZ)jjtSX5M!LkC2*H?XINDes-#AR]"O>#nNr +Nq2iBJ,~> +p&@/N^R(LeX0T:OaNrJqjQG^il0@R"lf[9^e^2IX^:CSQW1ofKOc5$GI=$3]Ec>l1B4YOZ?!:<. +:J>*Up&BO~> +p&@/N^R(LeX0T:OaNrJqjQG^il0@R"lf[9^e^2IX^:CSQW1ofKOc5$GI=$3]Ec>l1B4YOZ?!:<. +:J>*Up&BO~> +p&@/N^R(LeX0T:OaNrJqjQG^il0@R"lf[9^e^2IX^:CSQW1ofKOc5$GI=$3]Ec>l1B4YOZ?!:<. +:J>*Up&BO~> +pA[>Q\s]1fXgPj]cIUk8n+62Ep@n@Wq=sRJk24k@bf@N1Z`U.!S!B%jK7A;pG&qV>C1h*f?sQu= +<)?=]L%+g9J,~> +pA[>Q\s]1fXgPj]cIUk8n+62Ep@n@Wq=sRJk24k@bf@N1Z`U.!S!B%jK7A;pG&qV>C1h*f?sQu= +<)?=]L%+g9J,~> +pA[>Q\s]1fXgPj]cIUk8n+62Ep@n@Wq=sRJk24k@bf@N1Z`U.!S!B%jK7A;pG&qV>C1h*f?sQu= +<)?=]L%+g9J,~> +p\ta&_jI$nYID<gdG!UGo_SObrr+DIr:]XFjPJP;bf7H/Z`L!qR$!8[J:2`fFE)26BP(a^?<gW5 +;GTqYL%G'=J,~> +p\ta&_jI$nYID<gdG!UGo_SObrr+DIr:]XFjPJP;bf7H/Z`L!qR$!8[J:2`fFE)26BP(a^?<gW5 +;GTqYL%G'=J,~> +p\ta&_jI$nYID<gdG!UGo_SObrr+DIr:]XFjPJP;bf7H/Z`L!qR$!8[J:2`fFE)26BP(a^?<gW5 +;GTqYL%G'=J,~> +p\t`FSt;g_\A?>8g#;2cq#1-is8OVKqtBRGk2G+HdEKSE\?Ms,S!8neJUVrjF`MA8BP(a^?<gW6 +;GTtW8qm*9s*t~> +p\t`FSt;g_\A?>8g#;2cq#1-is8OVKqtBRGk2G+HdEKSE\?Ms,S!8neJUVrjF`MA8BP(a^?<gW6 +;GTtW8qm*9s*t~> +p\t`FSt;g_\A?>8g#;2cq#1-is8OVKqtBRGk2G+HdEKSE\?Ms,S!8neJUVrjF`MA8BP(a^?<gW6 +;GTtW8qm*9s*t~> +q#:iQTq/!^\&$57g#2&]pAFmgrVnDIqtBUJl/^dWf$V^\]sY#?SsPOpJq&/mF`MD9BP(a^?<gW6 +;c$.Y77aTVs*t~> +q#:iQTq/!^\&$57g#2&]pAFmgrVnDIqtBUJl/^dWf$V^\]sY#?SsPOpJq&/mF`MD9BP(a^?<gW6 +;c$.Y77aTVs*t~> +q#:iQTq/!^\&$57g#2&]pAFmgrVnDIqtBUJl/^dWf$V^\]sY#?SsPOpJq&/mF`MD9BP(a^?<gW6 +;c$.Y77aTVs*t~> +q>UunW10N_[_^,7g#2#[oD/@\s"+0Hp[dk>ki:RUf[@pZ]!A?1RZ`P]IslTcEc5c.An,4T>Zk*+ +:eaMM6=&CBs*t~> +q>UunW10N_[_^,7g#2#[oD/@\s"+0Hp[dk>ki:RUf[@pZ]!A?1RZ`P]IslTcEc5c.An,4T>Zk*+ +:eaMM6=&CBs*t~> +q>UunW10N_[_^,7g#2#[oD/@\s"+0Hp[dk>ki:RUf[@pZ]!A?1RZ`P]IslTcEc5c.An,4T>Zk*+ +:eaMM6=&CBs*t~> +qYq-+Z^[Vf[(jc4g>M)Ynb;t\q>W&GqtTgQmHWlpi8*#1`kJm`V4Ej0Kn+VuG&qV=BkCj_?!CH4 +;c-7\7RKLcp\Oo?~> +qYq-+Z^[Vf[(jc4g>M)Ynb;t\q>W&GqtTgQmHWlpi8*#1`kJm`V4Ej0Kn+VuG&qV=BkCj_?!CH4 +;c-7\7RKLcp\Oo?~> +qYq-+Z^[Vf[(jc4g>M)Ynb;t\q>W&GqtTgQmHWlpi8*#1`kJm`V4Ej0Kn+VuG&qV=BkCj_?!CH4 +;c-7\7RKLcp\Oo?~> +qYq)US=HI]]Z8IShrO(ko_JI\s"46Iq"=4HlfmQmi7cW$_76\HSsG@jJUMigF)Yr0AR]%Q>?Fp) +;,0_R6U+)4qYu'~> +qYq)US=HI]]Z8IShrO(ko_JI\s"46Iq"=4HlfmQmi7cW$_76\HSsG@jJUMigF)Yr0AR]%Q>?Fp) +;,0_R6U+)4qYu'~> +qYq)US=HI]]Z8IShrO(ko_JI\s"46Iq"=4HlfmQmi7cW$_76\HSsG@jJUMigF)Yr0AR]%Q>?Fp) +;,0_R6U+)4qYu'~> +qu76&TpqaW\&6MCh;d\bnb2kZq#;uFqtTjUnEoN)k2Y:IbJUlqW1]K;L4Oc!GB7\=Bk:a\?!CE2 +;c$4]7mfO(;qLpHJ,~> +qu76&TpqaW\&6MCh;d\bnb2kZq#;uFqtTjUnEoN)k2Y:IbJUlqW1]K;L4Oc!GB7\=Bk:a\?!CE2 +;c$4]7mfO(;qLpHJ,~> +qu76&TpqaW\&6MCh;d\bnb2kZq#;uFqtTjUnEoN)k2Y:IbJUlqW1]K;L4Oc!GB7\=Bk:a\?!CE2 +;c$4]7mfO(;qLpHJ,~> +qu72?R%1%Y]u\[XiTBFooD&:Ys"F?Jq"F@Mn*K?'jknY7`OiIVTpUpsJUMigF)Pl/AR]"O>$"^% +:ejVQ6U3dsDuBP5J,~> +qu72?R%1%Y]u\[XiTBFooD&:Ys"F?Jq"F@Mn*K?'jknY7`OiIVTpUpsJUMigF)Pl/AR]"O>$"^% +:ejVQ6U3dsDuBP5J,~> +qu72?R%1%Y]u\[XiTBFooD&:Ys"F?Jq"F@Mn*K?'jknY7`OiIVTpUpsJUMigF)Pl/AR]"O>$"^% +:ejVQ6U3dsDuBP5J,~> +r;R?'R$aPI\&6MDhrO"gnb)bWq#<&IrVQEao^_M>m-<fog!IaQ[B--lObeR:H?O@JCh[Hi?X-c9 +<DlXf8k2664ZQ-Cr;V9~> +r;R?'R$aPI\&6MDhrO"gnb)bWq#<&IrVQEao^_M>m-<fog!IaQ[B--lObeR:H?O@JCh[Hi?X-c9 +<DlXf8k2664ZQ-Cr;V9~> +r;R?'R$aPI\&6MDhrO"gnb)bWq#<&IrVQEao^_M>m-<fog!IaQ[B--lObeR:H?O@JCh[Hi?X-c9 +<DlXf8k2664ZQ-Cr;V9~> +r;R>FPaeMR]ZAUYiofXroCr.]q#<)JrVQEbp%.bDmd06!g<n!V[]Q?oObeR:H$44HCM79f?<^Q5 +<)QLd8k2664ZPQ1q>L>D~> +r;R>FPaeMR]ZAUYiofXroCr.]q#<)JrVQEbp%.bDmd06!g<n!V[]Q?oObeR:H$44HCM79f?<^Q5 +<)QLd8k2664ZPQ1q>L>D~> +r;R>FPaeMR]ZAUYiofXroCr.]q#<)JrVQEbp%.bDmd06!g<n!V[]Q?oObeR:H$44HCM79f?<^Q5 +<)QLd8k2664ZPQ1q>L>D~> +rVmH)Q^=>E[DC,?i8j+gnFZMRp\uuIr;-6`p%._Cmd06!g<n!V[]H6mObeO8H$++ECM76e?<^N4 +<)HCa8k2664?5;bX8W'K~> +rVmH)Q^=>E[DC,?i8j+gnFZMRp\uuIr;-6`p%._Cmd06!g<n!V[]H6mObeO8H$++ECM76e?<^N4 +<)HCa8k2664?5;bX8W'K~> +rVmH)Q^=>E[DC,?i8j+gnFZMRp\uuIr;-6`p%._Cmd06!g<n!V[]H6mObeO8H$++ECM76e?<^N4 +<)HCa8k2664?5;bX8W'K~> +rVmGOPF8/J\\ukKi8s4jnb)_Vp]!#Jr;-3^o^_M>m-<fnf[.[Q[&]phOGJC5G][qCC1h'b?!:?1 +;c$4^8Oc'34?5;Y;>C.jJ,~> +rVmGOPF8/J\\ukKi8s4jnb)_Vp]!#Jr;-3^o^_M>m-<fnf[.[Q[&]phOGJC5G][qCC1h'b?!:?1 +;c$4^8Oc'34?5;Y;>C.jJ,~> +rVmGOPF8/J\\ukKi8s4jnb)_Vp]!#Jr;-3^o^_M>m-<fnf[.[Q[&]phOGJC5G][qCC1h'b?!:?1 +;c$4^8Oc'34?5;Y;>C.jJ,~> +rr3T.S<TJ=Ye.p'gYh/VmIBlGrV-=LrquTdp%._Am-<fshq$)l]X+W3R#d#PH?XFLD/!Tl?sQo: +<DlXf8k;E=5Wq+c1cNVWs8RT~> +rr3T.S<TJ=Ye.p'gYh/VmIBlGrV-=LrquTdp%._Am-<fshq$)l]X+W3R#d#PH?XFLD/!Tl?sQo: +<DlXf8k;E=5Wq+c1cNVWs8RT~> +rr3T.S<TJ=Ye.p'gYh/VmIBlGrV-=LrquTdp%._Am-<fshq$)l]X+W3R#d#PH?XFLD/!Tl?sQo: +<DlXf8k;E=5Wq+c1cNVWs8RT~> +rr3SpO-Q65Z+\6-gYh/VmIKuIrqHFMrqlNbo^VD;lfdKkh:0Zd]!A<.Q]?fKH$44HCh[Kj?X-`7 +<)HFb8k;B;5Wq.e1c9d\s8RT~> +rr3SpO-Q65Z+\6-gYh/VmIKuIrqHFMrqlNbo^VD;lfdKkh:0Zd]!A<.Q]?fKH$44HCh[Kj?X-`7 +<)HFb8k;B;5Wq.e1c9d\s8RT~> +rr3SpO-Q65Z+\6-gYh/VmIKuIrqHFMrqlNbo^VD;lfdKkh:0Zd]!A<.Q]?fKH$44HCh[Kj?X-`7 +<)HFb8k;B;5Wq.e1c9d\s8RT~> +s8N`2^6"YPWO0C]eD&mAkj@s7qu6?i2?!FIp@IeAlfmQmiS2f'_7?eKT9bLkI<]jRDJNos@:!/? +<Duai9M%`B69m[p2`3EJo`+rA~> +s8N`2^6"YPWO0C]eD&mAkj@s7qu6?i2?!FIp@IeAlfmQmiS2f'_7?eKT9bLkI<]jRDJNos@:!/? +<Duai9M%`B69m[p2`3EJo`+rA~> +s8N`2^6"YPWO0C]eD&mAkj@s7qu6?i2?!FIp@IeAlfmQmiS2f'_7?eKT9bLkI<]jRDJNos@:!/? +<Duai9M%`B69m[p2`3EJo`+rA~> +s8N]*SWT83X0oadeCrg?kjA!9r:^.JrVH9]o'br0k2bLYf[.^S[]ZKuQ&LBDGB7_?C1h'b?<^K2 +;c$1]8Oc*65<Ltc2)@&2rr7K~> +s8N]*SWT83X0oadeCrg?kjA!9r:^.JrVH9]o'br0k2bLYf[.^S[]ZKuQ&LBDGB7_?C1h'b?<^K2 +;c$1]8Oc*65<Ltc2)@&2rr7K~> +s8N]*SWT83X0oadeCrg?kjA!9r:^.JrVH9]o'br0k2bLYf[.^S[]ZKuQ&LBDGB7_?C1h'b?<^K2 +;c$1]8Oc*65<Ltc2)@&2rr7K~> +s8N\sN09R%X0oacdb*C8kO%j7rV$7Kr;$'XnEfE%j5A_Ge'#Y@ZDsXgPDXs<F`D;7Bk:a]>Zk*, +;GTtY84>m25!1ha2)@%Fr;V9~> +s8N\sN09R%X0oacdb*C8kO%j7rV$7Kr;$'XnEfE%j5A_Ge'#Y@ZDsXgPDXs<F`D;7Bk:a]>Zk*, +;GTtY84>m25!1ha2)@%Fr;V9~> +s8N\sN09R%X0oacdb*C8kO%j7rV$7Kr;$'XnEfE%j5A_Ge'#Y@ZDsXgPDXs<F`D;7Bk:a]>Zk*, +;GTtY84>m25!1ha2)@%Fr;V9~> +s8N\`N00L$WjKI[cdgb-k3V[5rV$7Kr:osTmHWinhV6Z2cGdN+Y,7hXOGJF4F)Yr1B4PFX>?Fm( +:ejYT7mo[.4ZbY_2)@$dp]#a~> +s8N\`N00L$WjKI[cdgb-k3V[5rV$7Kr:osTmHWinhV6Z2cGdN+Y,7hXOGJF4F)Yr1B4PFX>?Fm( +:ejYT7mo[.4ZbY_2)@$dp]#a~> +s8N\`N00L$WjKI[cdgb-k3V[5rV$7Kr:osTmHWinhV6Z2cGdN+Y,7hXOGJF4F)Yr1B4PFX>?Fm( +:ejYT7mo[.4ZbY_2)@$dp]#a~> +s8N\JN00L$Wj97UbgY8%jm2L3rqHFIrqlH]mcrrohV-Q.cH*i4ZE'aiP`:EHGB%M9BkCj^?!:</ +;GU"Z84Gs45<Ltd2`:Rj!V68@~> +s8N\JN00L$Wj97UbgY8%jm2L3rqHFIrqlH]mcrrohV-Q.cH*i4ZE'aiP`:EHGB%M9BkCj^?!:</ +;GU"Z84Gs45<Ltd2`:Rj!V68@~> +s8N\JN00L$Wj97UbgY8%jm2L3rqHFIrqlH]mcrrohV-Q.cH*i4ZE'aiP`:EHGB%M9BkCj^?!:</ +;GU"Z84Gs45<Ltd2`:Rj!V68@~> +s8N\9Mia=!W3NqNajAYqjQc:0rqHFIrqc?Ym-*Keg=FZqaMPQrXeq_XOc"d=F`2)2B4PFW>Zk*+ +;,0eV7n#a05!(eb2`:Rj!R1Ro~> +s8N\9Mia=!W3NqNajAYqjQc:0rqHFIrqc?Ym-*Keg=FZqaMPQrXeq_XOc"d=F`2)2B4PFW>Zk*+ +;,0eV7n#a05!(eb2`:Rj!R1Ro~> +s8N\9Mia=!W3NqNajAYqjQc:0rqHFIrqc?Ym-*Keg=FZqaMPQrXeq_XOc"d=F`2)2B4PFW>Zk*+ +;,0eV7n#a05!(eb2`:Rj!R1Ro~> +s8N[jMia<uVm*YF`m*&hj6H10rqHFNrqc<VlfR0\f$_d`_nEL^W1ocHNe`.2F)>Z*AR]"P>?Fm' +:eaSR7RTO,4ZYS_2Dm<I1Sk##~> +s8N[jMia<uVm*YF`m*&hj6H10rqHFNrqc<VlfR0\f$_d`_nEL^W1ocHNe`.2F)>Z*AR]"P>?Fm' +:eaSR7RTO,4ZYS_2Dm<I1Sk##~> +s8N[jMia<uVm*YF`m*&hj6H10rqHFNrqc<VlfR0\f$_d`_nEL^W1ocHNe`.2F)>Z*AR]"P>?Fm' +:eaSR7RTO,4ZYS_2Dm<I1Sk##~> +'*%obMN=*qVQI5<_opK]iTTb(rVZNj2Z3@@mH<Kbf[A$b_S*F`Whc2POc+mAGB%D3An5=V>Zk*+ +;,9kW7n#d15!1hb2`<NM1GasfJ,~> +'*%obMN=*qVQI5<_opK]iTTb(rVZNj2Z3@@mH<Kbf[A$b_S*F`Whc2POc+mAGB%D3An5=V>Zk*+ +;,9kW7n#d15!1hb2`<NM1GasfJ,~> +'*%obMN=*qVQI5<_opK]iTTb(rVZNj2Z3@@mH<Kbf[A$b_S*F`Whc2POc+mAGB%D3An5=V>Zk*+ +;,9kW7n#d15!1hb2`<NM1GasfJ,~> +'E@c[M2mjkUT1T/^W+OKgZ.Shp@e5<o'PW"h:L*!a2,EsZ)a[mR$*GaJU;NXBkLsc?X6i:<DlXf +91VN?69dUo3B/rT2)I*FF8UO~> +'E@c[M2mjkUT1T/^W+OKgZ.Shp@e5<o'PW"h:L*!a2,EsZ)a[mR$*GaJU;NXBkLsc?X6i:<DlXf +91VN?69dUo3B/rT2)I*FF8UO~> +'E@c[M2mjkUT1T/^W+OKgZ.Shp@e5<o'PW"h:L*!a2,EsZ)a[mR$*GaJU;NXBkLsc?X6i:<DlXf +91VN?69dUo3B/rT2)I*FF8UO~> +'`[ZVLlIUdTVefs]"uJ6f%oEQnF6>Fs763[2=0MbgXa`p`PB'mYH"CjR?NYeK7.ucD.dEh?sQu= +<`;jk9M.fD6U3gt3B/oT2)I-G1IM"h~> +'`[ZVLlIUdTVefs]"uJ6f%oEQnF6>Fs763[2=0MbgXa`p`PB'mYH"CjR?NYeK7.ucD.dEh?sQu= +<`;jk9M.fD6U3gt3B/oT2)I-G1IM"h~> +'`[ZVLlIUdTVefs]"uJ6f%oEQnF6>Fs763[2=0MbgXa`p`PB'mYH"CjR?NYeK7.ucD.dEh?sQu= +<`;jk9M.fD6U3gt3B/oT2)I-G1IM"h~> +'`[KOLPq:]SYE'c[CjE!d+@.8l0834rTjLM1$du\gXa`o`4rjiY,S1fR?WbhKR\;jE,&up?s[)@ +=&i-p9hS#H6pa+$4#f,U2)I/g1B@6$~> +'`[KOLPq:]SYE'c[CjE!d+@.8l0834rTjLM1$du\gXa`o`4rjiY,S1fR?WbhKR\;jE,&up?s[)@ +=&i-p9hS#H6pa+$4#f,U2)I/g1B@6$~> +'`[KOLPq:]SYE'c[CjE!d+@.8l0834rTjLM1$du\gXa`o`4rjiY,S1fR?WbhKR\;jE,&up?s[)@ +=&i-p9hS#H6pa+$4#f,U2)I/g1B@6$~> +'`[9HKo1qUR\-CUYd_<ab0ekuioC!uroO1B/`kpEe^)CV^:CSPW1oiMPE(NSJ9uK\D.mHg?<gZ8 +<Duai9M%`C6U<mu3]Atq2#T31pj`~> +'`[9HKo1qUR\-CUYd_<ab0ekuioC!uroO1B/`kpEe^)CV^:CSPW1oiMPE(NSJ9uK\D.mHg?<gZ8 +<Duai9M%`C6U<mu3]Atq2#T31pj`~> +'`[9HKo1qUR\-CUYd_<ab0ekuioC!uroO1B/`kpEe^)CV^:CSPW1oiMPE(NSJ9uK\D.mHg?<gZ8 +<Duai9M%`C6U<mu3]Atq2#T31pj`~> +'E?^9KSYVMQCFPDX0T7L`66T]h#?./hZ)Idi8<GGeBc7S^::JMVP0NHP)Y<PJ:)T_DJE`l?X-c: +<`Dpl9hS#H6pa+$4#f,Uq(i$FJ,~> +'E?^9KSYVMQCFPDX0T7L`66T]h#?./hZ)Idi8<GGeBc7S^::JMVP0NHP)Y<PJ:)T_DJE`l?X-c: +<`Dpl9hS#H6pa+$4#f,Uq(i$FJ,~> +'E?^9KSYVMQCFPDX0T7L`66T]h#?./hZ)Idi8<GGeBc7S^::JMVP0NHP)Y<PJ:)T_DJE`l?X-c: +<`Dpl9hS#H6pa+$4#f,Uq(i$FJ,~> +(&uU0K85>EPF%c3VQ@)5^;\7AeCE+Kf)F;$fIb_'c,[]6[]up2TUV4/N/3.;I!BaPCM73b?!CE4 +<)QOf91_WB6U<mu3]JuRq(i$EJ,~> +(&uU0K85>EPF%c3VQ@)5^;\7AeCE+Kf)F;$fIb_'c,[]6[]up2TUV4/N/3.;I!BaPCM73b?!CE4 +<)QOf91_WB6U<mu3]JuRq(i$EJ,~> +(&uU0K85>EPF%c3VQ@)5^;\7AeCE+Kf)F;$fIb_'c,[]6[]up2TUV4/N/3.;I!BaPCM73b?!CE4 +<)QOf91_WB6U<mu3]JuRq(i$EJ,~> +(B;^/JV8i<O->p#Tr4ut\%TZ!bKJ,RrQYAf0$hhb`4rmkYH"FlR[&tnLP12*G][qBBOtUX>?P$- +;G^+^8k;E=69m[q3B&fPq(i$EJ,~> +(B;^/JV8i<O->p#Tr4ut\%TZ!bKJ,RrQYAf0$hhb`4rmkYH"FlR[&tnLP12*G][qBBOtUX>?P$- +;G^+^8k;E=69m[q3B&fPq(i$EJ,~> +(B;^/JV8i<O->p#Tr4ut\%TZ!bKJ,RrQYAf0$hhb`4rmkYH"FlR[&tnLP12*G][qBBOtUX>?P$- +;G^+^8k;E=69m[q3B&fPq(i$EJ,~> +')ojsItEB2N0'6iS=ug\YI1pTrkeWOr5:/%]=,#IW2#rPP`UfXK7J>oF`D85An#+P=]\U%;,9kX +84H!65sIIn3B&fPq(i$EJ,~> +')ojsItEB2N0'6iS=ug\YI1pTrkeWOr5:/%]=,#IW2#rPP`UfXK7J>oF`D85An#+P=]\U%;,9kX +84H!65sIIn3B&fPq(i$EJ,~> +')ojsItEB2N0'6iS=ug\YI1pTrkeWOr5:/%]=,#IW2#rPP`UfXK7J>oF`D85An#+P=]\U%;,9kX +84H!65sIIn3B&fPq(i$EJ,~> +')oRjI=Qs)MN!X\Q^aYDW3!52rj_p;r44DeZE:+%TU_@4Nf&OAIX?9]EGfN(A7/\H=&r9t:JFJR +7n#d25<_1j3&WYh1B@)u~> +')oRjI=Qs)MN!X\Q^aYDW3!52rj_p;r44DeZE:+%TU_@4Nf&OAIX?9]EGfN(A7/\H=&r9t:JFJR +7n#d25<_1j3&WYh1B@)u~> +')oRjI=Qs)MN!X\Q^aYDW3!52rj_p;r44DeZE:+%TU_@4Nf&OAIX?9]EGfN(A7/\H=&r9t:JFJR +7n#d25<_1j3&WYh1B@)u~> +'*#gnH[^O!L5CkLP*VQ-TqnWgr3,t$/$,\FTU_C6OGo!KJ:)ZdF)c)5B4PFW>?Fp*;G^+]8Ol3: +5sRUr4#o8Y2#/p.7eV?~> +'*#gnH[^O!L5CkLP*VQ-TqnWgr3,t$/$,\FTU_C6OGo!KJ:)ZdF)c)5B4PFW>?Fp*;G^+]8Ol3: +5sRUr4#o8Y2#/p.7eV?~> +'*#gnH[^O!L5CkLP*VQ-TqnWgr3,t$/$,\FTU_C6OGo!KJ:)ZdF)c)5B4PFW>?Fp*;G^+]8Ol3: +5sRUr4#o8Y2#/p.7eV?~> +'*$I)H$k'lK8#)<NKKHkR@U"GqPF+e/#&Z*R$<_mM2$V3H['[RDf'6%A78hM=]SL":ej\V84H!6 +5X%=m3]K&V2#/p.FSUF~> +'*$I)H$k'lK8#)<NKKHkR@U"GqPF+e/#&Z*R$<_mM2$V3H['[RDf'6%A78hM=]SL":ej\V84H!6 +5X%=m3]K&V2#/p.FSUF~> +'*$I)H$k'lK8#)<NKKHkR@U"GqPF+e/#&Z*R$<_mM2$V3H['[RDf'6%A78hM=]SL":ej\V84H!6 +5X%=m3]K&V2#/p.FSUF~> +'E@B?GC"XcJ:`H/M2RCUPEhN)SG8ZTS1C%oPE:c\L4b#)H$47JDJNs!A78hN>$"^&:ej\V84H!6 +5X%=n3]T/Y2)P+b!K?l*~> +'E@B?GC"XcJ:`H/M2RCUPEhN)SG8ZTS1C%oPE:c\L4b#)H$47JDJNs!A78hN>$"^&:ej\V84H!6 +5X%=n3]T/Y2)P+b!K?l*~> +'E@B?GC"XcJ:`H/M2RCUPEhN)SG8ZTS1C%oPE:c\L4b#)H$47JDJNs!A78hN>$"^&:ej\V84H!6 +5X%=n3]T/Y2)P+b!K?l*~> +'*%]NFE`%XI=Hg#KnkMCNf]Egp6I7pPE1]\LP(/,H['[RDf'9'An5=V>Zt3.;c-=a8k;H@6U<n! +4?GP_2`<NMq(i&Lr."~> +'*%]NFE`%XI=Hg#KnkMCNf]Egp6I7pPE1]\LP(/,H['[RDf'9'An5=V>Zt3.;c-=a8k;H@6U<n! +4?GP_2`<NMq(i&Lr."~> +'*%]NFE`%XI=Hg#KnkMCNf]Egp6I7pPE1]\LP(/,H['[RDf'9'An5=V>Zt3.;c-=a8k;H@6U<n! +4?GP_2`<NMq(i&Lr."~> +'*%s&EclSOH[L9lJV8`4M2R@RqN1Z:/<5[HLP18/I!KpXEGfT-BOt[^?<gZ8<Duaj9hIrH770@* +4Zked3&``Q1c5"a!RC[p~> +'*%s&EclSOH[L9lJV8`4M2R@RqN1Z:/<5[HLP18/I!KpXEGfT-BOt[^?<gZ8<Duaj9hIrH770@* +4Zked3&``Q1c5"a!RC[p~> +'*%s&EclSOH[L9lJV8`4M2R@RqN1Z:/<5[HLP18/I!KpXEGfT-BOt[^?<gZ8<Duaj9hIrH770@* +4Zked3&``Q1c5"a!RC[p~> +s8NY?E,p)FG^4X`IXcp#KSG8=rJUW3rJ<"ZKRnW$H?XLPE,BB)B4PIZ?<gZ8<Duaj9hS&J770@* +4Zb\b3&``Q1c5"a!]BQKJ,~> +s8NY?E,p)FG^4X`IXcp#KSG8=rJUW3rJ<"ZKRnW$H?XLPE,BB)B4PIZ?<gZ8<Duaj9hS&J770@* +4Zb\b3&``Q1c5"a!]BQKJ,~> +s8NY?E,p)FG^4X`IXcp#KSG8=rJUW3rJ<"ZKRnW$H?XLPE,BB)B4PIZ?<gZ8<Duaj9hS&J770@* +4Zb\b3&``Q1c5"a!]BQKJ,~> +s8NYbD/aN;Fa&(UH[C0iIt3-'re:<(re(6&.=ckpH?XLQE,KK,BOt[^?X?r>=&i0r:JFJR7n,m5 +5Wq1i3B/rU2Dm>d1BLSLs*t~> +s8NYbD/aN;Fa&(UH[C0iIt3-'re:<(re(6&.=ckpH?XLQE,KK,BOt[^?X?r>=&i0r:JFJR7n,m5 +5Wq1i3B/rU2Dm>d1BLSLs*t~> +s8NYbD/aN;Fa&(UH[C0iIt3-'re:<(re(6&.=ckpH?XLQE,KK,BOt[^?X?r>=&i0r:JFJR7n,m5 +5Wq1i3B/rU2Dm>d1BLSLs*t~> +s8NZ#CMn*3F*)PJGBeCZH@($frdXors*alo.XQJdG'%bDDJX'$An5@Y?<pc<=&`'p:JFJR7n,m5 +5X%:k3B&lT2)R3IpbMu1q>Ys~> +s8NZ#CMn*3F*)PJGBeCZH@($frdXors*alo.XQJdG'%bDDJX'$An5@Y?<pc<=&`'p:JFJR7n,m5 +5X%:k3B&lT2)R3IpbMu1q>Ys~> +s8NZ#CMn*3F*)PJGBeCZH@($frdXors*alo.XQJdG'%bDDJX'$An5@Y?<pc<=&`'p:JFJR7n,m5 +5X%:k3B&lT2)R3IpbMu1q>Ys~> +s8NZ.LhgjGE,fo>FEMbNGBe@Xrd+Tis*4QfrcTW1F)c,8CMINpA7AqQ?!CK7<`Dsn:JFJR7n#g4 +5X%:k3B&iS2)Y@ipbMurrVqB~> +s8NZ.LhgjGE,fo>FEMbNGBe@Xrd+Tis*4QfrcTW1F)c,8CMINpA7AqQ?!CK7<`Dsn:JFJR7n#g4 +5X%:k3B&iS2)Y@ipbMurrVqB~> +s8NZ.LhgjGE,fo>FEMbNGBe@Xrd+Tis*4QfrcTW1F)c,8CMINpA7AqQ?!CK7<`Dsn:JFJR7n#g4 +5X%:k3B&iS2)Y@ipbMurrVqB~> +rr3>;BPVF$DfB]:Ec_5%s)n9`"Eeg.F*%>$,&hI;CM@EnARf.U?!LQ9=&i0s:eseY8Ol3;69mau +4#o8Yr\a[3pG2mEs8RT~> +rr3>;BPVF$DfB]:Ec_5%s)n9`"Eeg.F*%>$,&hI;CM@EnARf.U?!LQ9=&i0s:eseY8Ol3;69mau +4#o8Yr\a[3pG2mEs8RT~> +rr3>;BPVF$DfB]:Ec_5%s)n9`"Eeg.F*%>$,&hI;CM@EnARf.U?!LQ9=&i0s:eseY8Ol3;69mau +4#o8Yr\a[3pG2mEs8RT~> +rr3JmA8#^nCi+'.E,]f:EcV,"/95`ME,]`6DJj<,BkV*h@q&hP?!CK7=&i0r:JOVW8Ol3;6:!h! +4$#>[2)Y:gq(i.1K`(lMJ,~> +rr3JmA8#^nCi+'.E,]f:EcV,"/95`ME,]`6DJj<,BkV*h@q&hP?!CK7=&i0r:JOVW8Ol3;6:!h! +4$#>[2)Y:gq(i.1K`(lMJ,~> +rr3JmA8#^nCi+'.E,]f:EcV,"/95`ME,]`6DJj<,BkV*h@q&hP?!CK7=&i0r:JOVW8Ol3;6:!h! +4$#>[2)Y:gq(i.1K`(lMJ,~> +rr3B%JRrM/C27U$D/O7hD_,jGDJj<.Ci!m&C2%?nARf1W?X6o?=]e^(;Gg4a9M.lH770F.5<V+i +3&`bm2#&j02U;=%s*t~> +rr3B%JRrM/C27U$D/O7hD_,jGDJj<.Ci!m&C2%?nARf1W?X6o?=]e^(;Gg4a9M.lH770F.5<V+i +3&`bm2#&j02U;=%s*t~> +rr3B%JRrM/C27U$D/O7hD_,jGDJj<.Ci!m&C2%?nARf1W?X6o?=]e^(;Gg4a9M.lH770F.5<V+i +3&`bm2#&j02U;=%s*t~> +rr3B*[:*TXB4u!oC27V^D#\;MC*dS-BP1pgA7K%U?X6o@=]e^);c6Fe9h\/M7n#d35sIOq3]T,W +r\X:(!]EpOrr7K~> +rr3B*[:*TXB4u!oC27V^D#\;MC*dS-BP1pgA7K%U?X6o@=]e^);c6Fe9h\/M7n#d35sIOq3]T,W +r\X:(!]EpOrr7K~> +rr3B*[:*TXB4u!oC27V^D#\;MC*dS-BP1pgA7K%U?X6o@=]e^);c6Fe9h\/M7n#d35sIOq3]T,W +r\X:(!]EpOrr7K~> +rVm/pD.$mcAnPaiq.]kBs(<ZjAS#C^@q&kR?<pf>=]ea*<)QRh:/";P84H$86:!h"4?GP^2Dt%] +!C*dds*t~> +rVm/pD.$mcAnPaiq.]kBs(<ZjAS#C^@q&kR?<pf>=]ea*<)QRh:/";P84H$86:!h"4?GP^2Dt%] +!C*dds*t~> +rVm/pD.$mcAnPaiq.]kBs(<ZjAS#C^@q&kR?<pf>=]ea*<)QRh:/";P84H$86:!h"4?GP^2Dt%] +!C*dds*t~> +r;Qu-?=75PA7bOJs(24@-=^Lo@:3JM?<pf>=]e^)<)Z[k:JFMT8Ol6<6U<t%4Zked3&`]Oo.pG, +@/'X"J,~> +r;Qu-?=75PA7bOJs(24@-=^Lo@:3JM?<pf>=]e^)<)Z[k:JFMT8Ol6<6U<t%4Zked3&`]Oo.pG, +@/'X"J,~> +r;Qu-?=75PA7bOJs(24@-=^Lo@:3JM?<pf>=]e^)<)Z[k:JFMT8Ol6<6U<t%4Zked3&`]Oo.pG, +@/'X"J,~> +r;QuuCL1@U@:Jq?-t6Um?sd5H?!LW<=]ea*<)Z[l:JOVW8Ou??6pa1)5!;"i3B/rU2)On\!CsBl +s*t~> +r;QuuCL1@U@:Jq?-t6Um?sd5H?!LW<=]ea*<)Z[l:JOVW8Ou??6pa1)5!;"i3B/rU2)On\!CsBl +s*t~> +r;QuuCL1@U@:Jq?-t6Um?sd5H?!LW<=]ea*<)Z[l:JOVW8Ou??6pa1)5!;"i3B/rU2)On\!CsBl +s*t~> +qu6lD?sI#E?XWY;-t$Ch?<piA>?b96=B8F$;c6Ih:/+DS8Ol6=6UF%&4Zkee3B/rU2)On\!]Y,k +r;V9~> +qu6lD?sI#E?XWY;-t$Ch?<piA>?b96=B8F$;c6Ih:/+DS8Ol6=6UF%&4Zkee3B/rU2)On\!]Y,k +r;V9~> +qu6lD?sI#E?XWY;-t$Ch?<piA>?b96=B8F$;c6Ih:/+DS8Ol6=6UF%&4Zkee3B/rU2)On\!]Y,k +r;V9~> +qu6p#OBl'q>[:\6?i=:Y?!LW=>$>'2=BAL%;c6Ih:JFMU8k;E?6pj7*5!:tg3B9&X2Dm<Jo.pDF +^&.h[~> +qu6p#OBl'q>[:\6?i=:Y?!LW=>$>'2=BAL%;c6Ih:JFMU8k;E?6pj7*5!:tg3B9&X2Dm<Jo.pDF +^&.h[~> +qu6p#OBl'q>[:\6?i=:Y?!LW=>$>'2=BAL%;c6Ih:JFMU8k;E?6pj7*5!:tg3B9&X2Dm<Jo.pDF +^&.h[~> +qYpcmFBMaM>$Lf--X0bX=]nj.=&r=#;c6Ih:JFMU8kDNB770C,5<V+j3B/uW2`<NN2"NL)6^%9B +s*t~> +qYpcmFBMaM>$Lf--X0bX=]nj.=&r=#;c6Ih:JFMU8kDNB770C,5<V+j3B/uW2`<NN2"NL)6^%9B +s*t~> +qYpcmFBMaM>$Lf--X0bX=]nj.=&r=#;c6Ih:JFMU8kDNB770C,5<V+j3B/uW2`<NN2"NL)6^%9B +s*t~> +q>UZSAQ2]3=BPB%*EZBE<`W4";c?Rk:ej_Y91hcH7n#g55sRUs4$#D$2ubc;2)I/]1BKO\kPG4/~> +q>UZSAQ2]3=BPB%*EZBE<`W4";c?Rk:ej_Y91hcH7n#g55sRUs4$#D$2ubc;2)I/]1BKO\kPG4/~> +q>UZSAQ2]3=BPB%*EZBE<`W4";c?Rk:ej_Y91hcH7n#g55sRUs4$#D$2ubc;2)I/]1BKO\kPG4/~> +q#:N"=&Msr<VTT<<E)pr;Gg:f:JOVX91hcH7n#g56:!h"4?GS`2`EWQ2)Y@io.pDPcM@Kj~> +q#:N"=&Msr<VTT<<E)pr;Gg:f:JOVX91hcH7n#g56:!h"4?GS`2`EWQ2)Y@io.pDPcM@Kj~> +q#:N"=&Msr<VTT<<E)pr;Gg:f:JOVX91hcH7n#g56:!h"4?GS`2`EWQ2)Y@io.pDPcM@Kj~> +q#:QqM,I/I;H*Qor)<Vn)Gs=-:JOYZ9M7uL7n,p86UF((5<V+j3]K&VrAFR2o.pGB\,Q4'J,~> +q#:QqM,I/I;H*Qor)<Vn)Gs=-:JOYZ9M7uL7n,p86UF((5<V+j3]K&VrAFR2o.pGB\,Q4'J,~> +q#:QqM,I/I;H*Qor)<Vn)Gs=-:JOYZ9M7uL7n,p86UF((5<V+j3]K&VrAFR2o.pGB\,Q4'J,~> +p\tHdFA5M+:f.*frD<Mi),<n#9M8#N8Ol6=6pj:+5X%@p4$#A]2`3Ji2"NL)6a$C_s*t~> +p\tHdFA5M+:f.*frD<Mi),<n#9M8#N8Ol6=6pj:+5X%@p4$#A]2`3Ji2"NL)6a$C_s*t~> +p\tHdFA5M+:f.*frD<Mi),<n#9M8#N8Ol6=6pj:+5X%@p4$#A]2`3Ji2"NL)6a$C_s*t~> +pAYEQA4]Ef9hnJ[r([8e9`@[#8kDQD7R]^45sRXu4Zkee3B/rU2)R5Y1BK\)q=jo>~> +pAYEQA4]Ef9hnJ[r([8e9`@[#8kDQD7R]^45sRXu4Zkee3B/rU2)R5Y1BK\)q=jo>~> +pAYEQA4]Ef9hnJ[r([8e9`@[#8kDQD7R]^45sRXu4Zkee3B/rU2)R5Y1BK\)q=jo>~> +p&>3:8k)?C9);0\9)_Bt84Q-=770C-5X.Fq4?GSa3&`cS2)I/X1BKFgp\+W;~> +p&>3:8k)?C9);0\9)_Bt84Q-=770C-5X.Fq4?GSa3&`cS2)I/X1BKFgp\+W;~> +p&>3:8k)?C9);0\9)_Bt84Q-=770C-5X.Fq4?GSa3&`cS2)I/X1BKFgp\+W;~> +p&>6q]0\nS7S!AIr^Rbo77BU36UF((5!;%k4$#A]3&``Q2)I/X1BKF5oC`-6~> +p&>6q]0\nS7S!AIr^Rbo77BU36UF((5!;%k4$#A]3&``Q2)I/X1BKF5oC`-6~> +p&>6q]0\nS7S!AIr^Rbo77BU36UF((5!;%k4$#A]3&``Q2)I/X1BKF5oC`-6~> +oD]'P=@#8@6q'QB6k_pS6:!k$5<_4n4?GSa3&``R2)Y=hmP=m"q"4T:~> +oD]'P=@#8@6q'QB6k_pS6:!k$5<_4n4?GSa3&``R2)Y=hmP=m"q"4T:~> +oD]'P=@#8@6q'QB6k_pS6:!k$5<_4n4?GSa3&``R2)Y=hmP=m"q"4T:~> +o)AmbE]lTN5lO(J5Qa575!Am-#<Ot,3&``Q2>oAt1BG,coDa=~> +o)AmbE]lTN5lO(J5Qa575!Am-#<Ot,3&``Q2>oAt1BG,coDa=~> +o)AmbE]lTN5lO(J5Qa575!Am-#<Ot,3&``Q2>oAt1BG,coDa=~> +nc&djPrLfd4Sq8C4?GY(3X7Z)3&``Q2)OPR"#sW=rpp)>~> +nc&djPrLfd4Sq8C4?GY(3X7Z)3&``Q2)OPR"#sW=rpp)>~> +nc&djPrLfd4Sq8C4?GY(3X7Z)3&``Q2)OPR"#sW=rpp)>~> +nG`^lj^'u,3&paps#C$;s#0m7r\Wmr!_8mWnGe"~> +nG`^lj^'u,3&paps#C$;s#0m7r\Wmr!_8mWnGe"~> +nG`^lj^'u,3&paps#C$;s#0m7r\Wmr!_8mWnGe"~> +mf*XjY>$i22)[<L2DtIls#'^2l8&N+Ja!+%s*t~> +mf*XjY>$i22)[<L2DtIls#'^2l8&N+Ja!+%s*t~> +mf*XjY>$i22)[<L2DtIls#'^2l8&N+Ja!+%s*t~> +mJd:eiJgD+1]T?12!$LpAB+N6s*t~> +mJd:eiJgD+1]T?12!$LpAB+N6s*t~> +mJd:eiJgD+1]T?12!$LpAB+N6s*t~> +li.(biKm?t1BMO,nE^+)~> +li.(biKm?t1BMO,nE^+)~> +li.(biKm?t1BMO,nE^+)~> +l2Lkaj-`9p1BVpAoD\%TJ,~> +l2Lkaj-`9p1BVpAoD\%TJ,~> +l2Lkaj-`9p1BVpAoD\%TJ,~> +kPk_ak.dO*2=*+&2c,4?iqhj<J,~> +kPk_ak.dO*2=*+&2c,4?iqhj<J,~> +kPk_ak.dO*2=*+&2c,4?iqhj<J,~> +jSoG\jMdd7?:"0="\`on\E!GHs*t~> +jSoG\jMdd7?:"0="\`on\E!GHs*t~> +jSoG\jMdd7?:"0="\`on\E!GHs*t~> +iVs2^p$L\b^8n#sqiV,JZc:\dqr.R*~> +iVs2^p$L\b^8n#sqiV,JZc:\dqr.R*~> +iVs2^p$L\b^8n#sqiV,JZc:\dqr.R*~> +fDbjMrquirg])d~> +fDbjMrquirg])d~> +fDbjMrquirg])d~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-03.png b/macros/latex/contrib/elpres/bitmaps/ep-ball-03.png Binary files differnew file mode 100644 index 0000000000..eaa48a44d2 --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-03.png diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-04.eps b/macros/latex/contrib/elpres/bitmaps/ep-ball-04.eps new file mode 100644 index 0000000000..1ce6d1746e --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-04.eps @@ -0,0 +1,435 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: ep-ball-04.eps +%%CreationDate: Wed Jul 22 22:44:15 2020 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 99 99 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 83.98950131233596 translate +83.98950131233596 -83.98950131233596 scale +% Image geometry +84 84 8 +% Transformation matrix +[ 84 0 0 84 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 84 string def +/gstr 84 string def +/bstr 84 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 18758 ASCII Bytes +colorimage +XoEn~> +XoEn~> +XoEn~> +hZ!]WqX<29c3!%qrS@L(~> +hZ!]WqXNJAec4,#k4/E+s*t~> +hZ!]WqXNJAec4,#k4/E+s*t~> +ir98Zi6&6bHtQ+L4pP8/O.j/=lhocBJ,~> +ir9bijO:lESWJAHGB\4QFbPsUZGk\er8Ra,~> +ir9bijO:lESWJAHGB\4QFbPsUZGk\er8Ra,~> +k5P\bo\-U+;`GHb!W<!&+&-O@a6<H_s*t~> +k5QG"p#!W`LNmH<?!U]>>?Y-1<`E!q:gn[0YKlG2jo9i~> +k5QG"p#!W`LNmH<?!U]>>?Y-1<`E!q:gn[0YKlG2jo9i~> +l2M"dkJaET9*>=m"8`0!!W<!&"smoQ]B0%Us*t~> +l2M"dlHd,>Kk+]m@fKjO?sd5G>[(?5<`N*s;,9q`@#;&)kPj]FJ,~> +l2M"dlHd,>Kk+]m@fKjO?sd5G>[(?5<`N*s;,9q`@#;&)kPj]FJ,~> +li.7cj0iA4!s8Z0rWW?-r<E9*rri?(rrW3$q#CLcQJhc-s*t~> +li.1ak/EI!A7b[O)J3Pl@q&kS?X6o?=BAO&;Gg7c9M.lGDl;XplMlA~> +li.1ak/EI!A7b[O)J3Pl@q&kS?X6o?=BAO&;Gg7c9M.lGDl;XplMlA~> +mJe1$fpb\O"9f#:#mq"I$OdCN$4-tD#6k>8"9S],rW2iq""92jrp9Z8~> +mJdIehQquTB4u$qqeR3eC1q6k@q&hP?!CH6<`Dso:JFMT84H!PU$)FAs*t~> +mJdIehQquTB4u$qqeR3eC1q6k@q&hP?!CH6<`Dso:JFMT84H!PU$)FAs*t~> +n,Emsm%#^1"U>>A%1`s\&J>!T%1j$[%1EUN#R:P;"9S`)!Vl]s&pNa1s*t~> +n,Eaom^77OBkqR(EH:qt*--"9ChdWqA7AqQ>Zt61<)QOg9hS)L7RTR9ORMT:J,~> +n,Eaom^77OBkqR(EH:qt*--"9ChdWqA7AqQ>Zt61<)QOg9hS)L7RTR9ORMT:J,~> +nGaX+cUA9I#R_+R',DB$)&X>3)]BS1'b_/j%LidQ#R1G7rW<*#q#CIKYP7McJ,~> +nGb3;f7[pTD/aQ>G^=^aI!pElI<p-\F)Z#5BkCma?X-c9<Dudl:/";P7n#d25$PVnn,In~> +nGb3;f7[pTD/aQ>G^=^aI!pElI<p-\F)Z#5BkCma?X-c9<Dudl:/";P7n#d25$PVnn,In~> +o)C-;j,ONO#n.=X(E+>;+sS?Z-7:,c+Wh[B(DRSq%h/mQ#R1D6!s/K(q#CL(7FhD-s*t~> +o)CQGk,`?6DK9lFI=R!)L51P?M2@"@JUVriFE)26BOtX[>Zk-.;c-=b9M.iF6pa.&6>5'Onc++~> +o)CQGk,`?6DK9lFI=R!)L51P?M2@"@JUVriFE)26BOtX[>Zk-.;c-=b9M.iF6pa.&6>5'Onc++~> +oD^<=gF340$P*mf*?lj\/1iJ.0etL</Lr1o+W_R?().>k$jm7E"U"o/!<Mrq!Xt@jo)F4~> +oD]C#i-&dNEHZYWK8>MKOcklkrfeUhNf&RCIsZB\E,B<$@UEAC<`Dsn:/"8O7n#d25<V%mU\aQ] +J,~> +oD]C#i-&dNEHZYWK8>MKOcklkrfeUhNf&RCIsZB\E,B<$@UEAC<`Dsn:/"8O7n#d25<V%mU\aQ] +J,~> +o`$K?eL1P,%2'Ht,:P9&2`NfZ4[)+q4?,2Q/Li+m*ul.6'+bT[#R1G8!s/K(pAb58p[eE8~> +o`$oKgNRFOFEr=gMN=$kS=Q7DTV8*RSX>Y'Mhcq7H?O=HC1^p]>$+g);,9nZ8Ol3;69m^s3Au]f +oDa=~> +o`$oKgNRFOFEr=gMN=$kS=Q7DTV8*RSX>Y'Mhcq7H?O=HC1^p]>$+g);,9nZ8Ol3;69m^s3Au]f +oDa=~> +p&?Z<UB1W-&/H61.PWnI6UaL98P;cQ9M%W;4?#&L.OQG_)]08$%13@F"U"o/!<Mop!H.Aus*t~> +p&@)I\S#_uGC>+$OdMc;WN3)$Xfen5Y,S4iR[&tmL4XhuFDko+@9m#;<DlXf9M.iF6pa.'4ZYMZ +K^eX6J,~> +p&@)I\S#_uGC>+$OdMc;WN3)$Xfen5Y,S4iR[&tmL4XhuFDko+@9m#;<DlXf9M.iF6pa.'4ZYMZ +K^eX6J,~> +pAZi?RKEd(',_o?0K;<f:/Oqi='8^3?!:6)91D303&<0:,p=9H'bCc\#R:P:!s/K(pAb4Blh1:.~> +pA[8LZY42tH@^m5R%L:Z[(!QV]=bhk^UpqYWhl;TPE(HOIX-$RBk1RT=B8?t:/"8N7RTR.5<V(f +2De.pp&BO~> +pA[8LZY42tH@^m5R%L:Z[(!QV]=bhk^UpqYWhl;TPE(HOIX-$RBk1RT=B8?t:/"8N7RTR.5<V(f +2De.pp&BO~> +p\ur@O9Z"#'HA>K2*ON,=C#<C@qB:eCMRNj>?4Qn76imk0J"Rr*>fJ$$OR.E"p>#0rW2co!G2$! +s*t~> +p]!GNXD)QpI"[HCSYiR!^Vn+2aN;WLcHXGH]<n`?U7@L0M1g>&Ec#Gu?!16/;GU"[84H$85sRUr +3B&fMHh[76J,~> +p]!GNXD)QpI"[HCSYiR!^Vn+2aN;WLcHXGH]<n`?U7@L0M1g>&Ec#Gu?!16/;GU"[84H$85sRUr +3B&fMHh[76J,~> +q#<)JUCRV@(*4eV3C?MB@;'IpE,p&EH$agYDJ*B]<),qL4?##H-QsHG&e,3U#R:M9"8r8r!!3F> +p\4]<~> +q#<VY\Sc>/IYNlLTrYQ6a3N&[e'uq"f\+m(b/:p%Yc4@eQB-lTI<TXFA7&PD<`;gi9M%`C6U<t$ +4?>DY1GsRTp]#a~> +q#<VY\Sc>/IYNlLTrYQ6a3N&[e'uq"f\+m(b/:p%Yc4@eQB-lTI<TXFA7&PD<`;gi9M%`C6U<t$ +4?>DY1GsRTp]#a~> +q>W8MY:U"j(EY%\4@`:SB6&6DIXm$'LP^qFJU2BRA6i5484#Ht0e4Rn)\ikl$OI(C"Tni*!VcWr +$uPe7s*t~> +q>We\_0U!BIYX#QUTM#AbLG8$h;7&IiSrnTg!\'^]sk2EURRO/LOjbnD.[0[>$"[#:J=AN770@+ +5!1kc2D['GJGK!?J,~> +q>We\_0U!BIYX#QUTM#AbLG8$h;7&IiSrnTg!\'^]sk2EURRO/LOjbnD.[0[>$"[#:J=AN770@+ +5!1kc2D['GJGK!?J,~> +q>W7e4ph`7+"/m-8QB29H%Lj1NKB<fQ^XD0Ne`+.DeEEY:Imf72D?U+*Z,M!$k!@H"p>&,!VcWr% +[m=ls*t~> +q>Wh,JSoRXL6.h!YIVTtg>_8XkNM0qlg*p#i7ZQ%`4`U`W1f]EN.l_)E+rff>$+d&:JFGO770@+ +5!1kc2Dd0B2Pg?Js*t~> +q>Wh,JSoRXL6.h!YIVTtg>_8XkNM0qlg*p#i7ZQ%`4`U`W1f]EN.l_)E+rff>$+d&:JFGO770@+ +5!1kc2Dd0B2Pg?Js*t~> +qYrG=?O[AW*[id-8loPCIYs>UR[g"EV5L>nURRI)JU)3J?WKom69@%W-QsEC%h/pS#R:M9!rW/p +!!+diq>Ys~> +qYrtNO_o,cL6.k"Ye.p'h<==to()DEo_%nLn)rW^d`]SB[]cU%R?<AYHZX(7?<^Q5;c$4^84>m3 +5X%:k3&WTK0.]l<q>Ys~> +qYrtNO_o,cL6.k"Ye.p'h<==to()DEo_%nLn)rW^d`]SB[]cU%R?<AYHZX(7?<^Q5;c$4^84>m3 +5X%:k3&WTK0.]l<q>Ys~> +qu8VSIMW;'*%*I(8m#\IJrcFsVQ$W!Yd:dK\?Mj$P`(*;De30Q9h.H/1+OXk(D./e$OI(C"9S`) +!VcWr#$'^[s*t~> +qu76,U2b*sKT;IrYe8'+hs9t3rqlZl0)b\>mH3<YdE9><[&p0qQB$]KG&M#$>Zt3.;,0bT7RKI, +5!1kc2Dm6D/M:i#qYu'~> +qu76,U2b*sKT;IrYe8'+hs9t3rqlZl0)b\>mH3<YdE9><[&p0qQB$]KG&M#$>Zt3.;,0bT7RKI, +5!1kc2Dm6D/M:i#qYu'~> +qu8Uh-O1/",VM2K<Fg-#O.E8QZ*^sM]=u,"_76YDRurJTFD>2c;+a2<2(g6u(_R>h$jm7F"U"o* +!VcWr&pjBNs*t~> +qu75MGAVMRMjC'=\\ukLkO\WNq>W)Fp$V#%g=+9c^UUPJTU:gsJ9Z$H@9m&<<)HC`84Gs45X%:k +3&WWL0J4k6M>@&KJ,~> +qu75MGAVMRMjC'=\\ukLkO\WNq>W)Fp$V#%g=+9c^UUPJTU:gsJ9Z$H@9m&<<)HC`84Gs45X%:k +3&WWL0J4k6M>@&KJ,~> +r;SbC71BY?+=f?::g\*fMjgWO\%98g_SsU=c,m`-Wh>Z:K6V9E>?"<d4uY/E+W;")%L`^O#6k;4 +r;lWm!@Y2Ls*t~> +r;R>rKPb^VLQ\4,[(jc6i9^4:q#;uDp$V#%gXONi_7R(UURRF(JpD?M@U3/=<)QLb84Gs45<V+i +3&WWM0J4k)7^i3oJ,~> +r;R>rKPb^VLQ\4,[(jc6i9^4:q#;uDp$V#%gXONi_7R(UURRF(JpD?M@U3/=<)QLb84Gs45<V+i +3&WWM0J4k)7^i3oJ,~> +rVnqXLCsh')^[:%8Q]YMLR4mF]YMG)air&XeCN!d]<S6'P)"I+BO=h;8O5Bm.jH#K&.]3X#m^_< +!s8H&pAb7!:\+G`J,~> +rVmK/Vep9oJW,tlYIVTtg#_`"rqZRJrqc9Tki1CKd)s;@\#uU!Q&L?BF),5j>$"[$:J=>L6U3k! +4#o8Y2)?p=.k*#[o)/N<~> +rVmK/Vep9oJW,tlYIVTtg#_`"rqZRJrqc9Tki1CKd)s;@\#uU!Q&L?BF),5j>$"[$:J=>L6U3k! +4#o8Y2)?p=.k*#[o)/N<~> +rVnqE+U8Ai+Y5Q?;IXZtP+o4r`lZHNdact(h;?i/_RHV@Q]-K=CL^RI9LM!#/L;GS&.]3Y$4$k? +!s8H&p&G+4T`"h?~> +rVmGrEGBK?LQ\7.[(aZ3hWXS/q#<&IqXj7@j5&A9bf@Q2Yc+1\NeMn'Ch$aS=&`'n9M%]@5X.Cn +3B/oR1GCF3.4.*Sr;V9~> +rVmGrEGBK?LQ\7.[(aZ3hWXS/q#<&IqXj7@j5&A9bf@Q2Yc+1\NeMn'Ch$aS=&`'n9M%]@5X.Cn +3B/oR1GCF3.4.*Sr;V9~> +rr5(YN!9Lu)^dC)93Z1ZN1@#`aj/;`f@es:ioT=Yd`9#*VONX"H#@2"<_c+J2_QO$(_I8g$jm:G +"U"o+!VQKp#!DVXs*t~> +rr3T/Wb?0jJW,tlYI_Zsf])8krV6CIrqZ3Tl/^^Se'?%P]<\H1R#d#OF_tYp>$"[$:J=>L6U3gu +4#o5W1bpa;.k)ep<;-:jJ,~> +rr3T/Wb?0jJW,tlYI_Zsf])8krV6CIrqZ3Tl/^^Se'?%P]<\H1R#d#OF_tYp>$"[$:J=>L6U3gu +4#o5W1bpa;.k)ep<;-:jJ,~> +rr5(E+9i2g+Y5Q>;IX^"PGGV*cI17qg>1]Ijlkpbe&]5-VON[$H>dD%<_l4M2_ZX'(_R>h$jm:G +"p>#+!VQKo&t](%J,~> +rr3SsEG9?;L68%+[(aW/gZ@o"rqQLJrqZ0Rl/UXQe'5tO]<\H1R?32QG&:bq=]\R":.n,I6U3gt +3]T,V1bpa;.k)ek18b$MJ,~> +rr3SsEG9?;L68%+[(aW/gZ@o"rqQLJrqZ0Rl/UXQe'5tO]<\H1R?32QG&:bq=]\R":.n,I6U3gt +3]T,V1bpa;.k)ek18b$MJ,~> +s8P4[RKEa()'psu7oj5GLR4pKa3N,_f@o'=ioT@cgsO-QYG@SHK6V6E>uaWh4uY/D+;b_%%1ERM +#6k;4r;lTl!X'qHrr7K~> +s8N`1Z=RclIYsD`XL>peeD9<XqYp9i1B%">mHEQbf?qg^_7?hLTU1^oIW]L<?!13,:ejYS77'7' +4?>G\2)?s?/Lr7s,pu(Urr7K~> +s8N`1Z=RclIYsD`XL>peeD9<XqYp9i1B%">mHEQbf?qg^_7?hLTU1^oIW]L<?!13,:ejYS77'7' +4?>G\2)?s?/Lr7s,pu(Urr7K~> +s8P7T56M6(*%*L)8m,kSMOCHTaj/;`f%Jj9iT0.^g<[^JY+qADJp2$@>Z=Ed4uY,C+;b_%%1ERM +#6k;5!r`5n!!*5Brr7K~> +s8N])IqEJ>JW,qiXgc-ie_fW_r:g4HrV,mLk2>"Ed)s;A\$)^$QApTHFDPJm=B/6p9hIoE69dUp +3]K#S1GLO7.k)hl,UUY4s*t~> +s8N])IqEJ>JW,qiXgc-ie_fW_r:g4HrV,mLk2>"Ed)s;A\$)^$QApTHFDPJm=B/6p9hIoE69dUp +3]K#S1GLO7.k)hl,UUY4s*t~> +s8P=:!X/oG+"B-59jMU`N1?u^aj/8^e_&X5i8`qYf?M1AXJ(r<JTbg<>#S*`4Z4r@+;ke&%1<LL +#6k;5!W`>o!!E@:rVunJ~> +s8N\g@V9P&K8u@qY.2?mfAZ&grV-=Lr:][HjkneAcH*o:[B69rQ&LBDFDGAj=&`$m9M.fC69dRn +3B&fP1,(@5.k)hl,:.U5s8RT~> +s8N\g@V9P&K8u@qY.2?mfAZ&grV-=Lr:][HjkneAcH*o:[B69rQ&LBDFDGAj=&`$m9M.fC69dRn +3B&fP1,(@5.k)hl,:.U5s8RT~> +63$hP!sT2N+tPW=:ge3kO.NMgaj&2\eCWF0hr<_Se]PY7Wh5N5IroF6=].m\4Z4o?+;ke%%1<LL +#6k>6!W`>m!!;fms*t~> +'EA!:@q]h-Kohb"Ye%cuf]2AnrqHFGqt9IDjPJP;c,[Z4[&]slP`(0@F),8h<`;jj9M%]A5sIIm +3B&fO1,(=3.k)hmrZ_L:s8RT~> +'EA!:@q]h-Kohb"Ye%cuf]2AnrqHFGqt9IDjPJP;c,[Z4[&]slP`(0@F),8h<`;jj9M%]A5sIIm +3B&fO1,(=3.k)hmrZ_L:s8RT~> +63$CB":#GT,VD&E;IXZtOIr_kaNMiTdact'gu%)FdDii(Vjrm)HuWe*=A_XW4>e`=+;ke%%1<LL +#6k>6!W`>m!!:.=s*t~> +'E@TQA8-(3LQS+(Ye.m$g>q\trqHFMqt9FBj5&>7b/M**Z)OIdObnX8EbSrc<DlXf91VN>5s@Cl +3&WTL0eb42.OZYk,U4PTrr7K~> +'E@TQA8-(3LQS+(Ye.m$g>q\trqHFMqt9FBj5&>7b/M**Z)OIdObnX8EbSrc<DlXf91VN>5s@Cl +3&WTL0eb42.OZYk,U4PTrr7K~> +5l]@9":,SY,VD&E;IONoNL[)]_8O@8bK\D^eCN:#aM,$\T9Y=cGAUho<)#hI3AN-3*uGS!$jm:H +#6b54!Whfk!d+8<J,~> +'E?iqASQ:7LQS(&YI_^!g#VSrr;QZmrr<!UqXj1<i7cZ)`k]0mXJMJRNeW%-E+iW^<)HCa8k2<; +5Wq1h2`<KJ0J>"..OZYk,U4Ocq>Ys~> +'E?iqASQ:7LQS(&YI_^!g#VSrr;QZmrr<!UqXj1<i7cZ)`k]0mXJMJRNeW%-E+iW^<)HCa8k2<; +5Wq1h2`<KJ0J>"..OZYk,U4Ocq>Ys~> +5l@nh"UPe\,V:rA:gRsbM3k'F\\#Sk_SjI8bK\>R^U:,9R#ZiGEG&TY:J+#<2_Z^+*>]7q$OR1G +"pG,3!Whfk!\F!DJ,~> +'`>gUA8616L6%atXgl9nf]);mqYU6hs8Drr2>Qk0jkeV9b/:m"Y,@nZOc"d=FDYVr=&Mgg91_T@ +69dRo3B&fO0eb43.k)kn,pX][7eQe3~> +'`>gUA8616L6%atXgl9nf]);mqYU6hs8Drr2>Qk0jkeV9b/:m"Y,@nZOc"d=FDYVr=&Mgg91_T@ +69dRo3B&fO0eb43.k)kn,pX][7eQe3~> +5k]p6"UYk],:k`=:0VFUKTVk,Yd1XE\\#Pi_8F7+[B--lOGA:-CgpLE9L_9.1bL1#)\rtn$4-tC +"pG,3!Whcj!V-2?~> +(&+M3A8615KT2=lXL>shf&>uhq>0seq_e<MrVlfkn`o/ieBQ"I\$2g*S!8neIs?!LA6`,2:/"8N +770@)4?>G[1bpd>/hAJ$-mg5crZ_I7s*t~> +(&+M3A8615KT2=lXL>shf&>uhq>0seq_e<MrVlfkn`o/ieBQ"I\$2g*S!8neIs?!LA6`,2:/"8N +770@)4?>G[1bpd>/hAJ$-mg5crZ_I7s*t~> +5k8Xk"Ubt_,:bT893>bGIuB\hVl?`!Yd(OB\@T;[XJ;5HLk'\eAmJA184#Hu1+Xap)ANek$4-qA +"U"r1!Whcj!QY1i~> +:@jZWA8?75KT)1gWO0F_e_o`bp\=R[qYU0frVlfjnEJobd`TG=Z`BmlQB-lTI!0FA@9Z],9M.iF +6pa.%4#o5W1GUX;/Lr;"-RL,brZ_HdrdX~> +:@jZWA8?75KT)1gWO0F_e_o`bp\=R[qYU0frVlfjnEJobd`TG=Z`BmlQB-lTI!0FA@9Z],9M.iF +6pa.%4#o5W1GUX;/Lr;"-RL,brZ_HdrdX~> +5iN4S"Ubt^+t>?28QB29H%hBMT:r!TVPpMsYHY=4U77=&JTu-I?s$2r6U!Ld/h&%e)&!Mf#m^b? +"U"r1!Whcj!LN\6~> +:?H"n@r$+2Jr5_]Vm="We)'?\p%J.Tq>0sbr;HWhn)rT[cc<f0Y,7hYOc+pCG]IV4?Wg<&91_WB +6U<q!3]K#S1GLO8/1W.t-RL,brZ_H:qg\~> +:?H"n@r$+2Jr5_]Vm="We)'?\p%J.Tq>0sbr;HWhn)rT[cc<f0Y,7hYOc+pCG]IV4?Wg<&91_WB +6U<q!3]K#S1GLO8/1W.t-RL,brZ_H:qg\~> +5h5r;"Ul%_+Xf$*7T!E'F+/t/Pa@f-SY)RLUo(&_R?38VH#[S.>#Is\5<:YU.jcDZ(D72a#R:P; +"U"r1!Whcj!I+?i~> +:>B)]@qp"/J;92SV6ISOdG*gOnac;Co_%tRq>0pYlf6^Ib/1]oWM,`CN.uk0FDbf&>usls8Ou<= +69m[q3]K#S1,(@5/1N%q-7'r`rZ_Gsq1&~> +:>B)]@qp"/J;92SV6ISOdG*gOnac;Co_%tRq>0pYlf6^Ib/1]oWM,`CN.uk0FDbf&>usls8Ou<= +69m[q3]K#S1,(@5/1N%q-7'r`rZ_Gsq1&~> +5eI+!"UbnZ*[NBr5tk<eCNY,_MN!RWP*;/sR$sJ/NJ;q-E+rcb;bKPC3]8]D-mKcO'bLl]#6kA9 +"U"o0!Whcj!E\uF~> +:<?^H@VKb(I>!QETW5B5aO8o*k3(pllKdg(mdKT-i7QH!_7?kOU7.7(LOjhrE,0#m>?+Kl84H$7 +5X%:k3B&fO0eY.2.k)ko-7'o_rZ_GYp4*~> +:<?^H@VKb(I>!QETW5B5aO8o*k3(pllKdg(mdKT-i7QH!_7?kOU7.7(LOjhrE,0#m>?+Kl84H$7 +5X%:k3B&fO0eY.2.k)ko-7'o_rZ_GYp4*~> +5dUOn"UYeV*$Qgf4@W+L@Vg49It<6*L5:\ENK0'VJpVWXBOP%B9LV-*2)-[3,p40E'+YHV#6k>8 +"9S`-!Whcj!>k6U~> +)T5fb@:sG!H@Ug5R\Qsm^WFpWg=tE=hV[8Mro,NbeBQ"J\$2j+RZiYaJUDZ]ChI3_=Aqpc7n#d2 +5<V(g3&WTK0J4q..Oc_l-2o1h,69[lJ,~> +)T5fb@:sG!H@Ug5R\Qsm^WFpWg=tE=hV[8Mro,NbeBQ"J\$2j+RZiYaJUDZ]ChI3_=Aqpc7n#d2 +5<V(g3&WTK0J4q..Oc_l-2o1h,69[lJ,~> +5dLIm"UYbS)BU:Y2aBo2>%;AhFEVkRH[L9lJV&K%GB%A.?<C*!7R&mi0J"Y!+WVF8&e56R"pG/5 +"9S`-!<MWh!:54~> +9#Fe:?tO4pGC5%$PanSQ[_Ko.cd:%ddaQ^qe^i<uahk]uY,@q]PDk3GHZjFHBOb@P<DZ=Z779I- +5!1kd2`3BG0.nh,.4?MhrZqCd!:>:~> +9#Fe:?tO4pGC5%$PanSQ[_Ko.cd:%ddaQ^qe^i<uahk]uY,@q]PDk3GHZjFHBOb@P<DZ=Z779I- +5!1kd2`3BG0.nh,.4?MhrZqCd!:>:~> +5dC@k":5MM(E=VK1-.`o;HdOCBkqO&DfB`<F`qqKCh@'Z<DQ4T5<1MQ.juYd*Z>h.&.JpM"U,#3 +!s8T+!<MWh!:,.~> +9>Xe8?Y!khFEi7hNg635XgPjZ_o0L4`lH-@ai_cE]sk8IUn3s:MhQY,G&_>3A7&PA;GKeQ6pa.& +4?GP_2Dd0C/hJV(-mp;d,l/_cm!o~> +9>Xe8?Y!khFEi7hNg635XgPjZ_o0L4`lH-@ai_cE]sk8IUn3s:MhQY,G&_>3A7&PA;GKeQ6pa.& +4?GP_2Dd0C/hJV(-mp;d,l/_cm!o~> +2Oa[I":,DI'cA&=/MoOU8PrSq?=72NA7]@cBkhBp@9ci19LhE43&<0:-6s`U)]0;%%LWOGrWN6' +rW<*#mf3@QJ,~> +)R<FJ?=IP_E--DVLl[jmUoL`/\%&uZ]">Serk0kmZE0prS!B%lKRS2gE,0)r?X-]3:J42G69mau +4#o8Y2)?s?/hJS&-mg5cq',n*J,~> +)R<FJ?=IP_E--DVLl[jmUoL`/\%&uZ]">Serk0kmZE0prS!B%lKRS2gE,0)r?X-]3:J42G69mau +4#o8Y2)?s?/hJS&-mg5cq',n*J,~> +23\(A!s]/D&f)E0-n[><6:ajM<E<1'=^#$8?=.&D<`2X`6pNgl1+aq$+s7mE(_mYo$jm7="TJT' +!r`5h!!)86~> +8Zc#r>[V)UCiOWFJr#JQS"Zd^XKAY.YHY79Z*LX:W1oiLP)Y9LI<]dMCM.-a>Zb!'9h@f@5sILp +3]K&U1bpa;/M&A#-RL,6,67"Z~> +8Zc#r>[V)UCiOWFJr#JQS"Zd^XKAY.YHY79Z*LX:W1oiLP)Y9LI<]dMCM.-a>Zb!'9h@f@5sILp +3]K&U1bpa;/M&A#-RL,6,67"Z~> +2llu[!sT&@&/,m$,:P9'4$c>.9MJ8X:f1+h<E<-u:.duA4ZPAS/LVkf*uu7:'b_,f$OI"?"TAN& +!ri;h!!)24~> +8\J,+>@(cMBl.j6I=d97PF8#:USFW\V5C,fVl6MgSskq+MhZe1GB.P8An,1Q=B/6o91MB95<V+i +3B&iQ1,1F6/Lr;!-RC&5,66tY~> +8\J,+>@(cMBl.j6I=d97PF8#:USFW\V5C,fVl6MgSskq+MhZe1GB.P8An,1Q=B/6o91MB95<V+i +3B&iQ1,1F6/Lr;!-RC&5,66tY~> +2SB(k!X/i;%M9Eo+!`<h1c[ce6UaI784cEG9MJ5R7RB:"2`*3>-mToU)]9G,'+bW^$3p_;rWE-$ +rW2Ee!9Se~> +'$4*R=^5?EAnc+&G^P'tN00BnrgNkV!h>gPrgkX/Q'%&^K7A2jEG]E$@UEAB<DlUd84>j05!1kd +2`<KK0eb43/1N(r-7'r4,66nW~> +'$4*R=^5?EAnc+&G^P'tN00BnrgNkV!h>gPrgkX/Q'%&^K7A2jEG]E$@UEAB<DlUd84>j05!1kd +2`<KK0eb43/1N(r-7'r4,66nW~> +28oOr!<`W6$k<mc)]p=S/M]7G4?Pbj5<qM$6UX=/5!(\[0eOq',9RsE(`!f!&.T*V#mLP3"9&B# +!U]pfkC<~> +):28]=B]!=@qKFmEcueZKSYSJOHGZgP*;+.PUhiSLkL;+G][n@BOkLV>?Fm':JFGN6pX"!4#o8Y +2)@!A/hJV).OZYk,p`71!9o"~> +):28]=B]!=@qKFmEcueZKSYSJOHGZgP*;+.PUhiSLkL;+G][n@BOkLV>?Fm':JFGN6pX"!4#o8Y +2)@!A/hJV).OZYk,p`71!9o"~> +2Tu.%!<WN3$4IFY(E4G@-S$i*1GgsI2`NfX3]fD`2D[$=.OZSd*ul.7'b_2k%L`[N#6b54r;uou +mJm8,m!o~> +'@p#Z<`rX5@:Nn`D/jZBI"6j)L]3,0M>rJ4M^sR9J:)WbEc,W(@p`JD=&`'n9hIoE69dRo3]K#T +1bpd=/M&D%.4?Pj,UE11!BKOt~> +'@p#Z<`rX5@:Nn`D/jZBI"6j)L]3,0M>rJ4M^sR9J:)WbEc,W(@p`JD=&`'n9hIoE69dRo3]K#T +1bpd=/M&D%.4?Pj,UE11!BKOt~> +2;%s0!<NB.#RUtN',DH++=&<a.kE8(/h\n51,C^@/h8@t,U+<N)Aa,%&J,H^$jm:G"p>&,!rW/e +!!-9pJ,~> +'];ec<**4,?!h&PBPVL*Fa/7]IX_6Fs+(*".t2hiF`D;7BOkOX>$+d&:ej\V7n#a04Zb\a2`3EJ +0eY.2/1W.t-RL,b,l&YcD"N5~> +'];ec<**4,?!h&PBPVL*Fa/7]IX_6Fs+(*".t2hiF`D;7BOkOX>$+d&:ej\V7n#a04Zb\a2`3EJ +0eY.2/1W.t-RL,b,l&YcD"N5~> +!:0Ua1BIX^"pbPE%h]To)]^%G,UF``-7:2j.P!"u-R9lY*ZQ(8'b_/j%h9!U$4$k@"U"o/!rE#c +!!.B>J,~> +&aiFl;cQn$>$PBBA7fOlDK0dsG5c^`GUdlXE,B?&A7AnN=]SHu:JFJR7RTR.5!1kc2`3EJ0eb43 +/1W2!-mp>f,krSbLA69~> +&aiFl;cQn$>$PBBA7fOlDK0dsG5c^`GUdlXE,B?&A7AnN=]SHu:JFJR7RTR.5!1kc2`3EJ0eb43 +/1W2!-mp>f,krSbLA69~> +)"eLA!!*0)"U>;?%1j-d(E+56+!2UK+sR"2)'gLQ+WqgG)Aj8*&eGQ`%1<LL#R:P;"9S`%!UKde +S,7^~> +&b]:%;,^Iq=B\s9?t*YZBkqVcE;4E%Des0$A7AnO>$+d&;,0eW84H!65X%:k3B&iQ1GUX:/M&D% +.4?Pj,p`40!MfOB~> +&b]:%;,^Iq=B\s9?t*YZBkqVcE;4E%Des0$A7AnO>$+d&;,0eW84H!65X%:k3B&iQ1GUX:/M&D% +.4?Pj,p`40!MfOB~> +2>_.h!!*-'"9eu8$4RLX',DE')]Kb:*??1B+!;[J*?5t7()7Jq&.T-X$OR1G#6k>8"9S`&!UB^d +ao6e~> +')[_`:Jk%j<``F.?!^oJAS5[kp1l*kB4YO[?!CH5<)HFd9M%`C6pa.&4?>J]2Dd3E0J>"/.k)kp +-RL,c,kiMac2N4~> +')[_`:Jk%j<``F.?!^oJAS5[kp1l*kB4YO[?!CH5<)HFd9M%`C6pa.&4?>J]2Dd3E0J>"/.k)kp +-RL,c,kiMac2N4~> +!WIlR!"Ar1!sAc4#RV"N&/#ZmrYPSOru(hT(`OG5)&F&''+tie%LidQ#m^b?"pG/5!s8?#lMptf +o)F4~> +')nLs:/Fec<)lt#=^,-;?t*YXp1>aa@UEDF=]\U%:ej_W8Ol3:69m^s3]T/X1c$j?0.e_*.OZYl +-7'r`,krSc-1_(d~> +')nLs:/Fec<)lt#=^,-;?t*YXp1>aa@UEDF=]\U%:ej_W8Ol3:69m^s3]T/X1c$j?0.e_*.OZYl +-7'r`,krSc-1_(d~> +!WTP+!"]/4!WrQ/"pbPD$k<g\&ebrX'`JjH((V)m&ePZc%L`^P#m^b@"pOu/!WrK*quQ'_!\j9H +J,~> +&c]X=9MSA[;H$Op<``F->?tS.?mo>d>$4p,;c-=b91_WC6pa1(5!1ne3&WTL1,(@6/1W1u-RL/d +,pXc1,6CI0s*t~> +&c]X=9MSA[;H$Op<``F->?tS.?mo>d>$4p,;c-=b91_WC6pa1(5!1ne3&WTL1,(@6/1W1u-RL/d +,pXc1,6CI0s*t~> +!WUjO!<3'.!WrQ/"pYD?$4I@R%fR"=&H!+N&.]6\%1EUO#m^b?"U,#3rWE0%rW20^!dXVAJ,~> +'*$cZ8k_rS:Jand;cHat='/U/r`f2%,$7lG<)QOf9M7uK7RTU05X.Co3]T/X2)@!A0.ne+.Oc_l +r[%OhpEK`oq>Ys~> +'*$cZ8k_rS:Jand;cHat='/U/r`f2%,$7lG<)QOf9M7uK7RTU05X.Co3]T/X2)@!A0.ne+.Oc_l +r[%OhpEK`oq>Ys~> +!rqd]rW)s!rrNE-"9er5"pYG5$N:G4%/gVD$k!FM#mgkB"pP56"T8H%!ri;_!!:7?s*t~> +'`[`F8P2ZM9hnJ\;,L4i<)lq!<`f6#r)Ft@;G^.`9M.lI7RTU05X.Fq4$#>[2Dm9G0J>%1.k2tr +-7'u:,k`Gabl.Ql~> +'`[`F8P2ZM9hnJ\;,L4i<)lq!<`f6#r)Ft@;G^.`9M.lI7RTU05X.Fq4$#>[2Dm9G0J>%1.k2tr +-7'u:,k`Gabl.Ql~> +!rr1kr;cft#m(23"9er5#7(V5$2P#/$3(87#6kA9"9eZ*r;us!jT#ATs8RT~> +&c_d47S$-E92&&T:/=\_;,U<j;uKVm;'Jh49h\/N7n,p86:!h"4Zkee3&`]O1GUX;/hJS(.4?Pj +-2f+^,6IQ<s*t~> +&c_d47S$-E92&&T:/=\_;,U<j;uKVm;'Jh49h\/N7n,p86:!h"4Zkee3&`]O1GUX;/hJS(.4?Pj +-2f+^,6IQ<s*t~> +s8N)Tr;ccs!!<-%!sAc2#5e`)#lb51#lb/0#6+l,"TAN$!rW/_!!E@@r;ZeI~> +s8NVf6q9d>8kM`M9MJ5V:/=^c;>sDk:]=*49h\/N84H$96U<t%4Zkhf3B/rT1c$m@0.nh-.Olkp +-7/X:ocjScIJj-FJ,~> +s8NVf6q9d>8kM`M9MJ5V:/=^c;>sDk:]=*49h\/N84H$96U<t%4Zkhf3B/rT1c$m@0.nh-.Olkp +-7/X:ocjScIJj-FJ,~> +s8N,o6i@#`!WN6$"9&E'"oJT'#6kG=#6kA9"o\Z)"8i5t!Tj@b"NgZCs*t~> +s8NH#D+$i`84cBF92#7Xs%WJfr_<>bs%=P.8Ol6=6pj:+5<_4m4$#A\2Dm<I0eb75/M&D%.4?Pi +,UDt+"=DCms8RT~> +s8NH#D+$i`84cBF92#7Xs%WJfr_<>bs%=P.8Ol6=6pj:+5<_4m4$#A\2Dm<I0eb75/M&D%.4?Pi +,UDt+"=DCms8RT~> +s8N-!T)/Nd!WE0#"8rB""oef,"oe`("8r;s!Tj@`"=j3Gs*t~> +s8NH*Y!PNF7Ros>8P/kQrCd,^r^m)[+\,!j6UF((5<_4m4?>J^2`<NL1,1I9/hJV(.Ocbn-7'r/ +,6B2]q>UDE~> +s8NH*Y!PNF7Ros>8P/kQrCd,^r^m)[+\,!j6UF((5<_4m4?>J^2`<NL1,1I9/hJV(.Ocbn-7'r/ +,6B2]q>UDE~> +rr3#d+o23:!WE/r"9&H&"8i5q!TO.\&u>L+J,~> +rr3;m<C0)B77Ka:8,5^S8,l'Y7K5at6UF((5<_4m4$,J`2`<NM1GU[=/hS_+.Ocep-RL,bnfn/j +XSr0L~> +rr3;m<C0)B77Ka:8,5^S8,l'Y7K5at6UF((5<_4m4$,J`2`<NM1GU[=/hS_+.Ocep-RL,bnfn/j +XSr0L~> +rr3'!P61R\qZ60fp&X1R!X:m`rVqB~> +rr3-#Ud7=7r^?cTq*t?Ps$ZlSs$H`O*C)hQ4Zkef3]T/Y2Dm<H0eb75/M&D%.4HYm-7'r.,6B8o +p\k,B~> +rr3-#Ud7=7r^?cTq*t?Ps$ZlSs$H`O*C)hQ4Zkef3]T/Y2Dm<H0eb75/M&D%.4HYm-7'r.,6B8o +p\k,B~> +rVlre,6I]ApAt!ip&X+P!?J'8s*t~> +rVm&i;aE]96N0@J7/oXR6N9@O5lX%h5!;"i3]]8\2`<NM1GU[=0.nh-.k2ts-mp>f,UDq*!BR@\ +s*t~> +rVm&i;aE]96N0@J7/oXR6N9@O5lX%h5!;"i3]]8\2`<NM1GU[=0.nh-.k2ts-mp>f,UDq*!BR@\ +s*t~> +r;QeY&GZ>#!Vlfj!T="[#ZC<ms*t~> +r;Qnm7R'.'r^$?Hs$?WLs$-KH'g4Z@3]T2[2`<NM1c$m@0.nk/.k3"I-j:tF,paf^o-4;cB(Z$$ +J,~> +r;Qnm7R'.'r^$?Hs$?WLs$-KH'g4Z@3]T2[2`<NM1c$m@0.nk/.k3"I-j:tF,paf^o-4;cB(Z$$ +J,~> +r;Qig8-ntjl2f]@!A(YUs*t~> +r;QulCdC6K5<nm-s$-NIr]U9D'g"H:3&iiT2)R3H1,1I9/hJV).OceF-NkbB,pXc,,6:9Gqu;0~> +r;QulCdC6K5<nm-s$-NIr]U9D'g"H:3&iiT2)R3H1,1I9/hJV).OceF-NkbB,pXc,,6:9Gqu;0~> +qu6`:3!T!Tnc@JF!Z$=\qu;0~> +qu6iC?TpS84n_)>4o[YE49%>V3B/uW2E!EL1GU^?0.nh./1W2!-n#!@s!@[jnfn2mNVNDNJ,~> +qu6iC?TpS84n_)>4o[YE49%>V3B/uW2E!EL1GU^?0.nh./1W2!-n#!@s!@[jnfn2mNVNDNJ,~> +qu6`sUa<eV!XN/nqYu'~> +qu6j!YY[>A48(f:49%AA3WD)=2ubcJ2)I*E0ek@8/hJV).Ocbn-78^<rZq%Z!\&*LqYu'~> +qu6j!YY[>A48(f:49%AA3WD)=2ubcJ2)I*E0ek@8/hJV).Ocbn-78^<rZq%Z!\&*LqYu'~> +qYpWlEtH.f!BS9ss*t~> +qYp`oLd=!\3VGN63WD)=2uY]I2)I*E0ek@8/hJY+.k2tr-RSg=r?UnX!E.)9s*t~> +qYp`oLd=!\3VGN63WD)=2uY]I2)I*E0ek@8/hJY+.k2tr-RSg=r?UnX!E.)9s*t~> +q>UNO=UN%H![XuHq>Ys~> +q>UZVF#u9=2`UUns#C$;r\jd6'/VL#0ek@8/hJV*.k3"t-mp>f-2]%Y,6C-:r;$AC~> +q>UZVF#u9=2`UUns#C$;r\jd6'/VL#0ek@8/hJV*.k3"t-mp>f-2]%Y,6C-:r;$AC~> +q#:E?8-Hm3!Z%O+q#>j~> +q#:NGAi;J'2Yf<32ZGZ62#f?D1,1I:0.nh-/1W5#.4?Pk-7/U9miqljWqlGiJ,~> +q#:NGAi;J'2Yf<32ZGZ62#f?D1,1I:0.nh-/1W5#.4?Pk-7/U9miqljWqlGiJ,~> +q#:Ep^+mV-!Y0tTp]#a~> +q#:Qt`)ABH1c5"cs"s^2s"Y6B0JG.4/M&G'.k2tr-RU5e,pXc',6BK[o(W07~> +q#:Qt`)ABH1c5"cs"s^2s"Y6B0JG.4/M&G'.k2tr-RU5e,pXc',6BK[o(W07~> +p\t<o[LC4W!Wm?2pA]X~> +p\tHs]f%Mu1,A__rA+C-s"OI+!\Q&Ur[S4'.4?Pk-71&<,jcfX-%>CXs*t~> +p\tHs]f%Mu1,A__rA+C-s"OI+!\Q&Ur[S4'.4?Pk-71&<,jcfX-%>CXs*t~> +pAY3jT`iL<!Wk"Cp&BO~> +pAY?nW\5tX0JNG[r@n7)s"=='s"".#r[J4'-mpAh-7'r`,jZ`W,tROus*t~> +pAY?nW\5tX0JNG[r@n7)s"=='s"".#r[J4'-mpAh-7'r`,jZ`W,tROus*t~> +p&>*la!f+2!He,/s*t~> +p&>3ob=F09/bq%!/cRC%/,q+!.K:e!-RL/d-2f+T,6<Dlo`'F~> +p&>3ob=F09/bq%!/cRC%/,q+!.K:e!-RL/d-2f+T,6<Dlo`'F~> +o`#!li_@Yt!OVdrs*t~> +o`#-pj('Sg.kCKJs""+!s!dpqs!Ipr,paf^k9C#<rU^&>~> +o`#-pj('Sg.kCKJs""+!s!dpqs!Ipr,paf^k9C#<rU^&>~> +o)Aa^F3ssi#X$K5o)F4~> +o)AjbJgMinq'l=lr?qUls!@[jkT^0Y<7Cj;s*t~> +o)AjbJgMinq'l=lr?qUls!@[jkT^0Y<7Cj;s*t~> +nc&^effB>f!!41$o'l[0~> +nc&ghgf#[K-78X<s!IUhrZp\P!]l_?nGe"~> +nc&ghgf#[K-78X<s!IUhrZp\P!]l_?nGe"~> +nG`UioV3_b!!<dJiVi6FJ,~> +nG`XjoW(5%pE\cD"#,)]rU9c:~> +nG`XjoW(5%pE\cD"#,)]rU9c:~> +mf*Ccfm4[n!!5U"q!J*3~> +mf*CcgP7iE,6D)`q<e34~> +mf*CcgP7iE,6D)`q<e34~> +mJd=go[S^DhZ*aXZ0M>Ts*t~> +mJd=go[f6mh]i59\*O%[s*t~> +mJd=go[f6mh]i59\*O%[s*t~> +li.+eo[J[5irB0iZfh;Ps*t~> +li.+eo[]3aj!+YG\`j"Ws*t~> +li.+eo[]3aj!+YG\`j"Ws*t~> +l2LteoZsq,:]ft`"pQJpW5n0$kl6/~> +l2Lteo[:@?A0pRe"t2ifYKH//kl6/~> +l2Lteo[:@?A0pRe"t2ifYKH//kl6/~> +k5P\cpY`fL>!*Mj!!XZJG,WgXrT4'0~> +k5P\cpYs)[CfE1],6gAGK<NeorT4'0~> +k5P\cpYs)[CfE1],6gAGK<NeorT4'0~> +ir92\mbPXVP4sJ0S[d2:q;M@(~> +ir92\n))$cS+hjEVS1ULq;M@(~> +ir92\n))$cS+hjEVS1ULq;M@(~> +h>[KSr;-Bh!<(^QJ,~> +h>[KSr;-Bh!<(^QJ,~> +h>[KSr;-Bh!<(^QJ,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-04.png b/macros/latex/contrib/elpres/bitmaps/ep-ball-04.png Binary files differnew file mode 100644 index 0000000000..aa523a121e --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-04.png diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-05.eps b/macros/latex/contrib/elpres/bitmaps/ep-ball-05.eps new file mode 100644 index 0000000000..f2a90d8e30 --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-05.eps @@ -0,0 +1,419 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: GIMP PostScript file plugin V 1,17 by Peter Kirchgessner +%%Title: ep-ball-05.eps +%%CreationDate: Wed Jul 29 06:51:33 2020 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 100 98 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 82.98308476146363 translate +84.982677165354332 -82.98308476146363 scale +% Image geometry +85 83 8 +% Transformation matrix +[ 85 0 0 83 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 85 string def +/gstr 85 string def +/bstr 85 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 17429 ASCII Bytes +colorimage +h>[l^q![.meC<+-l1k85s*t~> +h>[l^q![.meC<+-l1k85s*t~> +h>[l^q=<_-hr!DUmeQk;s*t~> +iVs/Wgrcg^HtQ+L4pG2.R_%,@r8I[+~> +iVs/Wgrcg^HtQ+L4pG2.R_%,@r8I[+~> +iVsVejOq_j\$)a+USFNUSu&L&dGjfriW"E~> +jo5Sao\-U+;`GHb!W<!&+&-OEeFNS"s*t~> +jo5Sao\-U+;`GHb!W<!&+&-OEeFNS"s*t~> +jo6>!p#F?1Y,\=oUS=HTSt2@=Q^*_qNKKd0^Ye\^jo9i~> +kl1nckJaET9*>=m"8`0!!W<!&"smoQ]AibPs*t~> +kl1nckJaET9*>=m"8`0!!W<!&"smoQ]AibPs*t~> +kl1hbm+9CnZ2UdAWi;qqVPU&^TV%aCR$EktNf8gMNM=&/kPaWEJ,~> +lMh.bj0iA4!s8Z0rWW?-r<E9*rri?(rrW3$q#CLcQJ29%s*t~> +lMh.bj0iA4!s8Z0rWW?-r<E9*rri?(rrW3$q#CLcQJ29%s*t~> +lMh(al-Zo@Y-7i0*3cWLXfSP%Vkp2_TUhO=QBRGkN/<=BJ:*HdiV`!@J,~> +m/J(#fpb\O"9f#:#mq"I$OdCN$4-tD#6k>8"9S],rW2iq""8uYr9XH6~> +m/J(#fpb\O"9f#:#mq"I$OdCN$4-tD#6k>8"9S],rW2iq""8uYr9XH6~> +m/JR2j2J@0ZEpsI\@8oT[C*?HYH=k)Vkp,\SXZ"3P)t]^Lk^P3I!L@GiV`'BJ,~> +mf*drm%#^1"U>>A%1`s\&J>!T%1j$[%1EUN#R:P;"9S`)!Vl]t&o?S,mf.e~> +mf*drm%#^1"U>>A%1`s\&J>!T%1j$[%1EUN#R:P;"9S`)!Vl]t&o?S,mf.e~> +mf+p=n&M]>[CEcZ]tV7q^:h4m]=>;UYcb%+VPBfTR[98%OH#-QKRnT"G]\,!kPjoLJ,~> +n,FO*cUA9I#R_+R',DB$)&X>3)]BS1'b_/j%LidQ#R1G7rW<*#q#CIKU@@XOJ,~> +n,FO*cUA9I#R_+R',DB$)&X>3)]BS1'b_/j%LidQ#R1G7rW<*#q#CIKU@@XOJ,~> +n,Eajh6XJt]"Pnr`5_\q+3)46]t1\[Z)t%(UnF9IQB[MlMhm+?J:2`fF)QK;o'cU/~> +nc($:j,ONO#n.=X(E+>;+sS?Z-7:,c+Wh[B(DRSq%h/mQ#R1D6!s/K(q#CL(7EGDss*t~> +nc($:j,ONO#n.=X(E+>;+sS?Z-7:,c+Wh[B(DRSq%h/mQ#R1D6!s/K(q#CL(7EGDss*t~> +nc'$sl,'g:]>)8'b0A;]qpQ_9c,mrA^:LbYYH4[uTUhL9PE:c]LP15-H['[QD/FpRr:0f;~> +o)C3<gF340$P*mf*?lj\/1iJ.0etL</Lr1o+W_R?().>k$jm7E"U"o/!<Mrq!Xt=go)F4~> +o)C3<gF340$P*mf*?lj\/1iJ.0etL</Lr1o+W_R?().>k$jm7E"U"o/!<Mrq!Xt=go)F4~> +o)B3ujKZ/)^Vn4;dFHq*h;/%d,Mh))dETeP_7d@cYcOduT:;13OcG?UL4Xo&H$47ICM.:^q""H8~> +oD^B>eL1P,%2'Ht,:P9&2`NfZ4[)+q4?,2Q/Li+m*ul.6'+bT[#R1G8!s/K(pAb58p@J<7~> +oD^B>eL1P,%2'Ht,:P9&2`NfZ4[)+q4?,2Q/Li+m*ul.6'+bT[#R1G8!s/K(pAb58p@J<7~> +oD]6si3Kl+_oU'Mf%f6FqW9'biSE2:d*0PK^UgkYXJ_eaR?`ttN/<=CJ:2`fFE)/3A71buoDa=~> +o`$Q<UB1W-&/H61.PWnI6UaL98P;cQ9M%W;4?#&L.OQG_)]08$%13@F"U"o/!<Mop!H.8rs*t~> +o`$Q<UB1W-&/H61.PWnI6UaL98P;cQ9M%W;4?#&L.OQG_)]08$%13@F"U"o/!<Mop!H.8rs*t~> +o`#BqagAXp`lui]gYh2Ym/?>NmNq2^j58VCe'H1V_7R.[X/;S[Q^!VlMMHk9IX?<^Ec,Z*@U>;e +o`'F~> +p&?`?RKEd(',_o?0K;<f:/Oqi='8^3?!:6)91D303&<0:,p=9H'bCc\#R:P:!s/K(pAb4BjRrP'~> +p&?`?RKEd(',_o?0K;<f:/Oqi='8^3?!:6)91D303&<0:,p=9H'bCc\#R:P:!s/K(pAb4BjRrP'~> +p&>Kr`jNFqaNrDkhrO%io)A7YoHs+rlK7*_g=F]sa2,BqYGn=hR?`qrMhm(<IX?<^Ec5`,@p`DR +kOnk*~> +pAZi@O9Z"#'HA>K2*ON,=C#<C@qB:eCMRNj>?4Qn76imk0J"Rr*>fJ$$OR.E"p>#0rW2co!G1iq +s*t~> +pAZi@O9Z"#'HA>K2*ON,=C#<C@qB:eCMRNj>?4Qn76imk0J"Rr*>fJ$$OR.E"p>#0rW2co!G1iq +s*t~> +pAYTs_R7%obL>2&jQZ('q#:-hqu?RBqtTgQm-*Qih:^<&a2,?oXf%h]QBRDhM2$V2H[0dUDes-! +?sQlmo_/<8~> +p\uuIUCRV@(*4eV3C?MB@;'IpE,p&EH$agYDJ*B]<),qL4?##H-QsHG&e,3U#R:M9"8r8r!!3F= +o(W07~> +p\uuIUCRV@(*4eV3C?MB@;'IpE,p&EH$agYDJ*B]<),qL4?##H-QsHG&e,3U#R:M9"8r8r!!3F= +o(W07~> +p\ta&b-\h"c.1Y0kNq^2qYg6i.K0,:oC2,2k2P:Pd`f\E\$2j+S<oJ&NJWCBIscNbF)Yu2An#(L +=GueFs*t~> +q#</LY:U"j(EY%\4@`:SB6&6DIXm$'LP^qFJU2BRA6i5484#Ht0e4Rn)\ikl$OI(C"Tni*!VcWr +$to,*s*t~> +q#</LY:U"j(EY%\4@`:SB6&6DIXm$'LP^qFJU2BRA6i5484#Ht0e4Rn)\ikl$OI(C"Tni*!VcWr +$to,*s*t~> +q#:m(cEt7&c.1\4l0\$6q#(-es!n!Eq"=4HmHWoshq6>u_Rm.UV4O'=Oc>6RK7J>pG&qV>C1h$` +>#n^]oD&?9~> +q#<.d4ph`7+"/m-8QB29H%Lj1NKB<fQ^XD0Ne`+.DeEEY:Imf72D?U+*Z,M!$k!@H"p>&,!VcWr% +Z^J_s*t~> +q#<.d4ph`7+"/m-8QB29H%Lj1NKB<fQ^XD0Ne`+.DeEEY:Imf72D?U+*Z,M!$k!@H"p>&,!VcWr% +Z^J_s*t~> +q#:iT[(=,te_fNTmd]uFqu6Ek/H5VFq=jRRnaGl1jkeS6`kT!dVkBHCP)bHUK7J>pG&qV>C1h$a +>?=^&V#:&gJ,~> +q>W><?O[AW*[id-8loPCIYs>UR[g"EV5L>nURRI)JU)3J?WKom69@%W-QsEC%h/pS#R:M9!rW/p +!!+d^q>Ys~> +q>W><?O[AW*[id-8loPCIYs>UR[g"EV5L>nURRI)JU)3J?WKom69@%W-QsEC%h/pS#R:M9!rW/p +!!+d^q>Ys~> +q>Uuo\$s/qeDBEWnFQ>JqYgEhs"+0Jr;-6`p@\%JnE],gd`TG<ZDsXgQBRAfLkL;,H$47JD/*]o +?sHc3:1_9;s*t~> +qYrMRIMW;'*%*I(8m#\IJrcFsVQ$W!Yd:dK\?Mj$P`(*;De30Q9h.H/1+OXk(D./e$OI(C"9S`) +!VcWr#$'OVs*t~> +qYrMRIMW;'*%*I(8m#\IJrcFsVQ$W!Yd:dK\?Mj$P`(*;De30Q9h.H/1+OXk(D./e$OI(C"9S`) +!VcWr#$'OVs*t~> +qYq**]sPJndbX-VoC_kQqY^?fs"46KrVZQhq=s^Xp$h2%f$;7J[B--nQ]mJhLkL;,H$47JD/*]o +@9co6:elArqYu'~> +qYrLg-O1/",VM2K<Fg-#O.E8QZ*^sM]=u,"_76YDRurJTFD>2c;+a2<2(g6u(_R>h$jm7F"U"o* +!VcWr&pjHPs*t~> +qYrLg-O1/",VM2K<Fg-#O.E8QZ*^sM]=u,"_76YDRurJTFD>2c;+a2<2(g6u(_R>h$jm7F"U"o* +!VcWr&pjHPs*t~> +qYq)UZF\!#g?%erpA"I[qu-Nhs8W'LrVZQiqYL$_p[[S-f[.[Q[]Q?qQ]mJhLkL;,H$+.GCh[Kl +@9m#9:eX`MqtpDD~> +qu8YB71BY?+=f?::g\*fMjgWO\%98g_SsU=c,m`-Wh>Z:K6V9E>?"<d4uY/E+W;")%L`^O#6k;4 +r;lWm!@YJTs*t~> +qu8YB71BY?+=f?::g\*fMjgWO\%98g_SsU=c,m`-Wh>Z:K6V9E>?"<d4uY/E+W;")%L`^O#6k;4 +r;lWm!@YJTs*t~> +qu72rZaRWke_ofdp\=R]r;?Qgs8W)urVufqqu?L<q=O"4g<n!V[]ZHsQ]mJhLkL;+G]e%FCh[Kk +?sQo8;+sMd_Ya@`~> +qu8[3&dJse-8@VS=D2o6Q_q.&^r+16bg+Vcf$MFKZ)4%SLOF2V?WU&q5rpbO,9.F0%h/mQ#R1D6 +!r`5p!!3@#qY^AD~> +qu8[3&dJse-8@VS=D2o6Q_q.&^r+16bg+Vcf$MFKZ)4%SLOF2V?WU&q5rpbO,9.F0%h/mQ#R1D6 +!r`5p!!3@#qY^AD~> +qu72AZFRm!g?.r"q>1!drVc`hs8N#trVufpq]tk%jP/,)^pgJDSX5P$Mhcq8I!BdRDJNos@piSF +<DcF\7s+V*s*t~> +r;ShD+U8Ai+Y5Q?;IXZtP+o4r`lZHNdact(h;?i/_RHV@Q]-K=CL^RI9LM!#/L;GS&.]3Y$4$k? +!s8H&p&G+4X8N!J~> +r;ShD+U8Ai+Y5Q?;IXZtP+o4r`lZHNdact(h;?i/_RHV@Q]-K=CL^RI9LM!#/L;GS&.]3Y$4$k? +!s8H&p&G+4X8N!J~> +r;R;rYI)!beDT]dq>1!drVc`fs8Drpr?V.*jkS>-_76\GSsPV$Mhcq8I!BaQDJNos@UEAC<DcF\ +6rLMls*t~> +rVntYN!9Lu)^dC)93Z1ZN1@#`aj/;`f@es:ioT=Yd`9#*VONX"H#@2"<_c+J2_QO$(_I8g$jm:G +"U"o+!VQKp#!De]s*t~> +rVntYN!9Lu)^dC)93Z1ZN1@#`aj/;`f@es:ioT=Yd`9#*VONX"H#@2"<_c+J2_QO$(_I8g$jm:G +"U"o+!VQKp#!De]s*t~> +rVm<*^p(>ccJ%FNq>:*frquiroDeXc-2?rkh:0Wb\Zi!'QBI8dLP(,)G][nACM.3f?X-]5;+sMK +6tZ>ps*t~> +rVntG+9i2g+Y5Q>;IX^"PGGV*cI17qg>1]Ijlkpbe&]5-VON[$H>dD%<_l4M2_ZX'(_R>h$jm:G +"p>#+!VQKo&ukj0J,~> +rVntG+9i2g+Y5Q>;IX^"PGGV*cI17qg>1]Ijlkpbe&]5-VON[$H>dD%<_l4M2_ZX'(_R>h$jm:G +"p>#+!VQKo&ukj0J,~> +rVmDsXg>[\dbjB`qu$BjrVlfds82dBrV5jDh:0Wb\Zi!'QB@2bL4au&GB7_?C1_!b?<^N2:eXDJ +5t\Tas*t~> +rr5+[RKEa()'psu7oj5GLR4pKa3N,_f@o'=ioT@cgsO-QYG@SHK6V6E>uaWh4uY/D+;b_%%1ERM +#6k;4r;lTl!X'qLrr7K~> +rr5+[RKEa()'psu7oj5GLR4pKa3N,_f@o'=ioT@cgsO-QYG@SHK6V6E>uaWh4uY/D+;b_%%1ERM +#6k;4r;lTl!X'qLrr7K~> +rr3Q/`36S`b1>P=p\Odbr;HTno`+mhrVcco-MQohgsaE]\?Dd#Q&pr]Kn4]!GB7\=Bk:d^?!:</ +:eXDJ5XANMrr7K~> +rr5.V56M6(*%*L)8m,kSMOCHTaj/;`f%Jj9iT0.^g<[^JY+qADJp2$@>Z=Ed4uY,C+;b_%%1ERM +#6k;5!r`5n!!*5Hrr7K~> +rr5.V56M6(*%*L)8m,kSMOCHTaj/;`f%Jj9iT0.^g<[^JY+qADJp2$@>Z=Ed4uY,C+;b_%%1ERM +#6k;5!r`5n!!*5Hrr7K~> +rr3Q*Y->CObh1tEpA+R^qu$Elp&G$js8Drps8+2?p$C_mdE025Y,.YQO,JdHJ:2`eEc,Z+AR]"O +=]\Nu9LqQ;5!dWrs*t~> +rr54?!X/oG+"B-59jMU`N1?u^aj/8^e_&X5i8`qYf?M1AXJ(r<JTbg<>#S*`4Z4r@+;ke&%1<LL +#6k;5!W`>o!!E@:rr<"K~> +rr54?!X/oG+"B-59jMU`N1?u^aj/8^e_&X5i8`qYf?M1AXJ(r<JTbg<>#S*`4Z4r@+;ke&%1<LL +#6k;5!W`>o!!E@:rr<"K~> +rr3PmX0K1PcIq=Kp%S7Wqtp?kp&G'k"TA8rqtpBh.f&]%in;]!^UC8?S!/hhL4au'G]e"DC1h'c +?<^Q5;bp(Y76s+%K`;#OJ,~> +s8P@`S-&s)(EtCg6;V'.Iug2(^<+XHdaZn&gu%,Phpola[Aoj`MLT__@9HK$6p3F\-Qj9>%LidQ +#mUY<!s/K(nc/aas8RT~> +s8P@`S-&s)(EtCg6;V'.Iug2(^<+XHdaZn&gu%,Phpola[Aoj`MLT__@9HK$6p3F\-Qj9>%LidQ +#mUY<!s/K(nc/aas8RT~> +s8N]1`2p8U`R*B%nFcMLq"jmcrq?Blr\ONNr;6?eq>'g[o',)bcc3]+XJ;5HN/<7?IX63[E,B<$ +A7/\H=B/6p9M%Z>5<_7(s8RT~> +s8P@X70Ei+)'ggo6rIK7JWQM-^W=UCd*gIrg>(TEgX4$RZ)=+SLO=)S?<C&r6Td4Y-Qj9>%LidQ +#mUY<!s/K(nc/a1rr7K~> +s8P@X70Ei+)'ggo6rIK7JWQM-^W=UCd*gIrg>(TEgX4$RZ)=+SLO=)S?<C&r6Td4Y-Qj9>%LidQ +#mUY<!s/K(nc/a1rr7K~> +s8N]*XfSkAa3rf,n+65Gp\F^arq?@Lrr)cmqtg-`p\4CSn)rTZc,@9$WhPoDMhcq8I<g!WDes)u +@piPE=&`$l91VK<5<V0Qrr7K~> +s8P==!X&c@)^I$q6rIH4IuTu"]"u>)aihrUdaZk#d`B/0WLoH6JTks@>?"<d5WLSN,p*s9%1ERM +#R:M9!s/Mn!!79=s*t~> +s8P==!X&c@)^I$q6rIH4IuTu"]"u>)aihrUdaZk#d`B/0WLoH6JTks@>?"<d5WLSN,p*s9%1ERM +#R:M9!s/Mn!!79=s*t~> +s8N\mVld>>aO8l+mIBf?pA"L^rq?@LrquZiq=jUUoCDG@lJgOGahYEjW1TE;M1pP2H['[QDJNlq +@:!/?<`;gg8k;B;5Wq8iqYu'~> +63$qi!X/lC)^I!o6;V!)H\n)cZam]^^r"%0aNMiRaM5-`TpUjnH?!S(<_l=U4Z>&E,97R3$k!CK +#R1G8!s/Mn!!4_Ds*t~> +63$qi!X/lC)^I!o6;V!)H\n)cZam]^^r"%0aNMiRaM5-`TpUjnH?!S(<_l=U4Z>&E,97R3$k!CK +#R1G8!s/Mn!!4_Ds*t~> +'EA'WVld>>a3`Q$lL"'2o_81Zrq?@LrVQEcp\".Jn*TK,jkSD2`OrU\V4Em2LP(,*H?O@KCh[Kk +?sQr<<DcLa8Ol085Wq86p&BO~> +63$b8!X/oD)^?ml5u(WuG(c!LX0An:[^j#`^VRh,^9t&;RZN;RF_kMh;G9PF3]&H;+r_:/$jm:H +#6k>7!s/Mm!!2WiJ,~> +63$b8!X/oD)^?ml5u(WuG(c!LX0An:[^j#`^VRh,^9t&;RZN;RF_kMh;G9PF3]&H;+r_:/$jm:H +#6k>7!s/Mm!!2WiJ,~> +'E@p@Vl[8<`Qm)ok3D=%o(MkUrq?@LrVH<_o^_M=lfmTohq68r^ppYLU7.7'Kn4]"G]e"DCM76f +?X-`8;c$1]84Gs55X%=oo)F4~> +63$Ii!X/rF)^?ji5>,*iEds"7USk)lXg#(:[CEf[[B--lObeO3DJ!0R9h7T62_lp2+;tt+$OR1F +"pG,4!s/Mm!!1.>J,~> +63$Ii!X/rF)^?ji5>,*iEds"7USk)lXg#(:[CEf[[B--lObeO3DJ!0R9h7T62_lp2+;tt+$OR1F +"pG,4!s/Mm!!1.>J,~> +'E@[1VQ7&9`6Hlij6#XonauSQrqHFNrquTdo^VD:l/q'chq?H$_n<@YVOj-9M1^;+H$47JD/*Zm +@:!,=<DlUd8k2<;69m^t4jEtV~> +63#XJ!X/rF)BpXd4\8X^D0^htS"HCKUo()jXfnt7WhPuGM1KnjBOFq<8OG[%1G1+%*Z5V%$4-tC +"pG,4!s/Mm!!/GaJ,~> +63#XJ!X/rF)BpXd4\8X^D0^htS"HCKUo()jXfnt7WhPuGM1KnjBOFq<8OG[%1G1+%*Z5V%$4-tC +"pG,4!s/Mm!!/GaJ,~> +'E@*dVQ7&7_TUE_i8a"dn+6;NrqHFNrqlK`o'br/jl51Qg!e0a^:1>GU77C-LOjl#G][qDCM79g +?X-`7<)HC`8Oc*85sIOr4fA4.~> +63#+/!X/uG)BgL_3^utOB6/NYP*D<$S"61EU84ZaTUCmuJU)6M@TlZ%6pE^i0InIn*#B4t#m^b? +"U,#3!s/Mm!!.<>J,~> +63#+/!X/uG)BgL_3^utOB6/NYP*D<$S"61EU84ZaTUCmuJU)6M@TlZ%6pE^i0InIn*#B4t#m^b? +"U,#3!s/Mm!!.<>J,~> +'*$[ZV5gi3_8t!Tgu.;YmIBoHpAQuKqY0UNm-*QihV-Q0c,[W2Z`L$rR$*A]IscNbEc5f0B4G@V +>?Fm(:eaPP6pj:,5<_4nO84;~> +62Rbb!X/rD(`jtT2F1#;?u'n7Ll..OOHPfmQC+,0Q&UNJG]7A+>#S'_4utSV/1;_a)ANhn#mUY= +"U,#2!s/Mm!!-0pJ,~> +62Rbb!X/rD(`jtT2F1#;?u'n7Ll..OOHPfmQC+,0Q&UNJG]7A+>#S'_4utSV/1;_a)ANhn#mUY= +"U,#2!s/Mm!!-0pJ,~> +'DoqEUoCT-^;\=Ef\GHJlL4?>qtL"HqtTgQm-*Nggt:-'bf@N1['$@$S!B%jJphrhFE)26BOtX[ +>Zk*,;,0bU7RKL.5X.Fq4a6UM~> +62@;W!X/oB(*"MI1H\-&=^l2jI=Hg#KSG;>MiEaXM1U(sDJ3H];bTVD3AiNC.4$)V(_[Df#R:P; +"U"o0!WiDl!!*o)J,~> +62@;W!X/oB(*"MI1H\-&=^l2jI=Hg#KSG;>MiEaXM1U(sDJ3H];bTVD3AiNC.4$)V(_[Df#R:P; +"U"o0!WiDl!!*o)J,~> +'D]V=U8P-#]"uG3e(EL9kNqa4q>:$fq`"BIp@7P6jPS_Dda$"S^q-qVW2#oMOc+sEH?aRQDJX$! +@pr\J=B/9r9hIrF6:!k$5!D+m9^mQ~> +62@;W!X/oA'H/&?/iQ$d;-IIGEccJKH$apfIt<3'I<T[GA6rA99L_6,1b^I0,p=9H'bUu`#6k>8 +"9\f/!W`>j!!)D:~> +62@;W!X/oA'H/&?/iQ$d;-IIGEccJKH$apfIt<3'I<T[GA6rA99L_6,1b^I0,p=9H'bUu`#6k>8 +"9\f/!W`>j!!)D:~> +'Df\<Tr+lr\%T]$cI:J'jQZ+(p\FUaq(h^9n*9#mgXaftaMYd'['$C(SsY_$LkC,#F`MD;C1h'c +?X-`7<)HC`8Oc'55X.Is55m\FmXP~> +62IAW!X&f=&f2N3.Pa%O8lAi%BPD6uDJsK7F*2YLEbo>q>?+Hk6pE[f0.SFr+W_O<'+bTZ"pG/5 +"9S`-!W`>j!!)D:~> +62IAW!X&f=&f2N3.Pa%O8lAi%BPD6uDJsK7F*2YLEbo>q>?+Hk6pE[f0.SFr+W_O<'+bTZ"pG/5 +"9S`-!W`>j!!)D:~> +')TY;T;8Hh[(3ohaj8Mli9'Crr:U!]0DG/0m-!?_f$Va__S*IcXf/"dR?WbiKn"GmF)Yu3BOtX\ +?!CE2;G^([7n#a05Q3kF4TOo#~> +2tr41!<`Z:&/?'(,qUr86:k$V?!^oI@Us%^B5)*qAmnqF;+sJH4ZG5M.OHDa*ZGq2&Io0S"o\Z) +"9&B%!Ug!gmXP~> +2tr41!<`Z:&/?'(,qUr86:k$V?!^oI@Us%^B5)*qAmnqF;+sJH4ZG5M.OHDa*ZGq2&Io0S"o\Z) +"9&B%!Ug!gmXP~> +'DT/,SYE$_YdM'W`QHT[guIYeo)81XoIon0mcicff[A$b_S!=^XJ_eaR?WbjL4O_sF)c)5BkCj` +?<gW6<)HCa8Oc*65<ep,!:PF~> +2YVk)!<WQ6%h]Ws+Xes"4$lJ5;cQk"=BSg3?!^lF>?4Wr8OPg*2DQj5,pFHP)Aj2%%h&dMrWN6' +rW<'"mf3@UJ,~> +2YVk)!<WQ6%h]Ws+Xes"4$lJ5;cQk"=BSg3?!^lF>?4Wr8OPg*2DQj5,pFHP)Aj2%%h&dMrWN6' +rW<'"mf3@UJ,~> +'DT#'S=l[VXg,:F^rFUHf\YZQmJQDNmk4+ul/UXQd`ohK]=+rDVP0QJP`UfYJpqufEGoZ.B4PFX +?!:<0;G^([84Gs355@>Amsk~> +3;]*D!<WN4%1j0i*@!!d2*4)n8k_rS:Jand;cQk!;GKhR5s74c0eFe!+Wh^C(_m\q%1<IH"9e]+ +rW<*#mJm7UJ,~> +3;]*D!<WN4%1j0i*@!!d2*4)n8k_rS:Jand;cQk!;GKhR5s74c0eFe!+Wh^C(_m\q%1<IH"9e]+ +rW<*#mJm7UJ,~> +'DoP0R[p.LWNEG5]>2G0dFR(2jSe3<jt>iZi7li0bJq?/[BQ[-TU_C6OGo!JIsZB\Des0%AR]"P +>?Fm(;,0eV7n#a055@>An:1~> +2uKHO!<NE1$P!a`)BU4S0/P[R6:4127n?3D8k_rR8k)-23]AlL/1;bd*?,k4'b_,g$jm4C"TAN& +!r`5g!!)J<~> +2uKHO!<NE1$P!a`)BU4S0/P[R6:4127n?3D8k_rR8k)-23]AlL/1;bd*?,k4'b_,g$jm4C"TAN& +!r`5g!!)J<~> +'E,h4Q^aVAV5^Q#[CX,kaj/>dgA0M'gb%:4dETbM^::MPWhl>WQ^!PiLkL;+G][nAC1q3h?s[&? +<`Dsm9hS#H6pa+%q)n`IJ,~> +2Z9EO!<E<.#n.:V()n>@.4m;63]oMf5!M:u6:4./69[Ii1bgU4-R0`R)Aj5('+bW^$OI"?rWE-$ +r;l<d!:YL~> +2Z9EO!<E<.#n.:V()n>@.4m;63]oMf5!M:u6:4./69[Ii1bgU4-R0`R)Aj5('+bW^$OI"?rWE-$ +r;l<d!:YL~> +'E,h3Q'n/7U8=fiYdCsS_8XO@d.l!@da?:[_nWdjZ)jn!T:2(/O,JdHJ:2]dEGfQ*An,7U>Zk-- +;G^+^8k2<;5sIR/4TP#&~> +2u]TQ!<E9,#RUtN',MT0,:=up1,CaE2E*TU3BB5`3ArZI/Li.p+Wh[A(DRSr&.T*U#mUV:"8r<" +!U]pg)tJL~> +2u]TQ!<E9,#RUtN',MT0,:=up1,CaE2E*TU3BB5`3ArZI/Li.p+Wh[A(DRSr&.T*U#mUV:"8r<" +!U]pg)tJL~> +')ob/PF%]-T:r'YX0/b:\\5htq8`NV/]YlK^:LbYXfA7lSX>\(NJ`LDJ:2]dF)Pl.An5=W>Zt60 +;c-:`8k;E>6:!j34TS=LJ,~> +2ZKr\!!*-("pbPE%hf]r*?ZUT.P!&%/M8\10etO@0eOt*-6scW*?#_/'+kcd%1ERM#6k;5r;uou +m/R/jpOE~> +2ZKr\!!*-("pbPE%hf]r*?ZUT.P!&%/M8\10etO@0eOt*-6scW*?#_/'+kcd%1ERM#6k;5r;uou +m/R/jpOE~> +'*$"3OHc'!S=ZCKVQ$Z#ZF.3Sp:W#i\@&TEWhuM^R[0.uN/31>IscNbF)Yu2An5@X?!CE3;c-=a +8kDNA6UF%%q)nb)pOE~> +!WUOG!&FZY"U55>$kEsc(`OJ<,:"Q]-71)g.4Qhu.46Ab+<DL@(_m\r&.]6Z$OR.E"pG,3!Wr6" +m/R04q1&~> +!WUOG!&FZY"U55>$kEsc(`OJ<,:"Q]-71)g.4Qhu.46Ab+<DL@(_m\r&.]6Z$OR.E"pG,3!Wr6" +m/R04q1&~> +'*$^ENfoWmR$sP:TqeK`X0&V4qm?:-/@)I\W265[S!TA%NJ`LDJUVrkG&qV>C1h'd?sQu><`Dpl +9hIuJ7RTU05X,!,!Kd/.~> +)?8b1!!!$%"9f#9$4ROZ'GhZ,*ZlIH+X/-0,8haQ,9\0N*#]Y1'bV&g%LidQ#m^b?"U"o/q>op_ +!Lrt:~> +)?8b1!!!$%"9f#9$4ROZ'GhZ,*ZlIH+X/-0,8haQ,9\0N*#]Y1'bV&g%LidQ#m^b?"U"o/q>op_ +!Lrt:~> +'`[HVMiX!aQ'[o.SY)UNVPgDpXfhW)rN-%"/#];=T:D:6P)kQYKn=i'H['^TE,BB(AR]%R>?P$, +;G^(\8Ou<>6UF('55@>BWVh8~> +2ZNGc!!!$$!sAc3#RV"O&JGos)B0V8*$$%@*ZlLI*uu=>(`!i"&eGN^$k!CK#R:P;"U"o/qZ6!_ +!Qk=k~> +2ZNGc!!!$$!sAc3#RV"O&JGos)B0V8*$$%@*ZlLI*uu=>(`!i"&eGN^$k!CK#R:P;"U"o/qZ6!_ +!Qk=k~> +'*%[&M2[LXP*;/tR@B_<TVA6YrMTXlrh]Xj/"rT*R?j%uNJ`OFJU`)oGBIqFD/3fr@UNMH=]\U$ +:ejYT7n,p76:!k#55@>Bci/F~> +!rr+PrW!B.!WrQ/#7(YG%M06e(B,-M)#kKR)AjD5)As>,'b_2k%h9$V$4-tC"pP57"9S`&!UB^e +!qQAA~> +!rr+PrW!B.!WrQ/#7(YG%M06e(B,-M)#kKR)AjD5)As>,'b_2k%h9$V$4-tC"pP57"9S`&!UB^e +!qQAA~> +'*%j6L5CkKO-#NgQ'[l+S"6.DrLs4`s.B:^.\)omPECl`M2$Y5IX??`FE2;:CM79h@:!2A=&i0q +:/"5L7RTU15sRXuq)ndDo)F4~> +!rr8,rW!K1!WiH,"U55>$OdLV&J>`jrY5>HrY?"Y'+tlg%h9!U$4-tC#6kA2"9JZ,!rN)a!!4kH +s*t~> +!rr8,rW!K1!WiH,"U55>$OdLV&J>`jrY5>HrY?"Y'+tlg%h9!U$4-tC#6kA2"9JZ,!rN)a!!4kH +s*t~> +'*%sQK8,5@N/is\OckroQC!u-rgWqVrgEeRs-G1"P)t]^M2-b8IXQNdF`VP@ChdWp@pr_L>$"^& +;,0eW7n,m66:!k$5578B>kS,I~> +s8N)Nr;ciu$j$M6"U52;#mq(M%M&IKrt,)?%hK6]%LigS$4-tC"pG/5"TAN'!r`5`!!7HBs*t~> +s8N)Nr;ciu$j$M6"U52;#mq(M%M&IKrt,)?%hK6]%LigS$4-tC"pG/5"TAN'!r`5`!!7HBs*t~> +s8NYfItNK3M2I7ONfT9aOckomrg!MJs-#'uOcb`eNfApPL4k,-I<p-]FE)8;CM@Em@UWVK>$"^& +;,0eW84>p55s[b#5<ej*!g*<ZJ,~> +s8N,g8H&Vh!WN3+!sAc2"pP;<rX/W4rXA`7$k*LO$4."E#6kA9"9eZ*rW<*#jT#A'rr7K~> +s8N,g8H&Vh!WN3+!sAc2"pP;<rX/W4rXA`7$k*LO$4."E#6kA9"9eZ*rW<*#jT#A'rr7K~> +s8PRYPCJ4=L51SAMi3OQNK0'\OH>NaNfB$WMi3IMM2-b9J:;omG]n1LE,KN-BP(da?s[)A=B/9s +:J=AO7RTR/5X7Ou5!Ja)!m^fFJ,~> +s8N,sT`"li!=8f0"9\l3"pYD>r!E3,rsA]2"U>59"U"u,"8r<#!Ta:_pAb/C~> +s8N,sT`"li!=8f0"9\l3"pYD>r!E3,rsA]2"U>59"U"u,"8r<#!Ta:_pAb/C~> +s8NH']6o-\K7nr5LPYqd$]9k#N/W[QMM[1GL]3#QKS"`'I!U'^F`VP@D/<s#ARf.V?<gZ8<Dudk +9hS&I6pa.(r]gEHpH8TPs8RT~> +rr2uRr;ccs!!<-%!sAc2#5e`)#lb51#lb/0#6+l,"TAN$!rW/_!!E@@rVunJ~> +rr2uRr;ccs!!<-%!sAc2#5e`)#lb51#lb/0#6+l,"TAN$!rW/_!!E@@rVunJ~> +rr3AcG^P!kJV&N-Knb?]L]3,0LB3-`re)PLJqAN%I!^-_G'%bDDJX*&B4YR]?X6l==&i0s:eaSS +7n#d2r]g?Fq)njEM#IARJ,~> +rr3#l6i@#`!WN6$"9&E'"oJT'#6kG=#6kA9"o\Z)"8i5t!Tj@_"Np`DJ,~> +rr3#l6i@#`!WN6$"9&E'"oJT'#6kG=#6kA9"o\Z)"8i5t!Tj@_"Np`DJ,~> +rr3;uNd,r#It3'#K)UE#K`?ZSJq8K'J:E#rI!^-`G'%bDDf'9)BP(da?sd2D=]\U%;,C"]8Ol3; +69md55578A5g]N1J,~> +rr3#uT)/Nd!WE0#"8rB""oef,"oe`("8r;s!Tj@`"=j<Js*t~> +rr3#uT)/Nd!WE0#"8rB""oef,"oe`("8r;s!Tj@`"=j<Js*t~> +rr3<(\TN.DI!pHnJ,+WoIjfboI!g9eH$FOVFE2>=D/3m#B4YR]?X?u@=B8C";,9q\8k;E>6:!j8 +55%,@5["!`s*t~> +rVlog+o23:!WE/r"9&H&"8i5q!TO.\&u>L+J,~> +rVlog+o23:!WE/r"9&H&"8i5q!TO.\&u>L+J,~> +rVm,nHusRXH@(&9IJnOBH[9s^G^"=RFEDPBDf'9)BP1pf@UNMJ>?Y-0<)QOf9hS)L7RTU05<e[% +!D0Tqs*t~> +r;Qe_!r;oo!Up0a!TO.]#!_n]s*t~> +r;Qe_!r;oo!Up0a!TO.]#!_n]s*t~> +r;R#-E-$/FGBeE1HMr+;G^"=RF`_\FEH#i5ChdWrAn5C[?X?u@=]\U%;G^+_91_ZD6pj7*54^o= +6"fuks*t~> +r;Qik,6I]ApAt!ip&X+P!?J'8s*t~> +r;Qik,6I]ApAt!ip&X+P!?J'8s*t~> +r;R#qG]7\EFEMd)GPlV4F`_\FEH,r9DJa3)BkM$g@q&hQ?!LQ8<`E!p:JFMT8Ol6=6UF%&54^o< +:p^*"J,~> +qu6\a&GZ>#!Vlfj!T="[#ZCBos*t~> +qu6\a&GZ>#!Vlfj!T="[#ZCBos*t~> +qu6o-EGf`8EcZ<tF=;3NEH#i7DJa3+C2%<mA7K(V?X6o@=]\U&;G^.`91_ZE7RTU15sRX*4T[rm +pAFr@~> +qu6`m8-ntjl2f]@!A(eYs*t~> +qu6`m8-ntjl2f]@!A(eYs*t~> +qu6osL2:[DDf9UjE@>dEDJa3+CMR[!B4b^b@UNPL>[(B6<`E!p:ej\V8Ol6=6pj:,5X.I(4TS^& +qu;0~> +qYpWC3!T!Tnc@JF!Z$@cqu;0~> +qYpWC3!T!Tnc@JF!Z$@cqu;0~> +qYpfQI;3M4Ci+%dDZ=PTChmebBd%/&An>I]@:*>G>?Y02<`Dsn:JFJR84H$86UF()5X.FroK<7K +QMp^\J,~> +q>UJk-,9K^#[d)ts*t~> +q>UJk-,9K^#[d)ts*t~> +q>U]1Eb/lsBkhD]C]8&qBkV0mAnGUb@q&hQ?<g]<=BAO';c-@d9M7rI7RTR05s[b$5<_:'4T[ru +nbW99~> +q>UNlEtH.f!BSg-s*t~> +q>UNlEtH.f!BSg-s*t~> +q>UZpR:]o=AS1aNs(3KeA7K(X@:3GK>[(B6=&r=";G^.`9M.iG7RTR/5sR\"5<_:&4TT*Iq>Ys~> +q#:EU=UN%H!@>2Ls*t~> +q#:EU=UN%H!@>2Ls*t~> +q#:T]LLFOu@UipFAH--Z@UWYO?=$oB>?Y-1<E)mp:eseZ91_ZD779I.5lO"I54^o<<PS>/J,~> +p\t<F8-Hm3!Z%U2q#>j~> +p\t<F8-Hm3!Z%U2q#>j~> +p\tEPI9^#`?he"3?X@#C>Q.e?=BAL%;c-@e9h\/O84Q*:6UF%&5Q!_:4T\9]rqQMD~> +pAY030ua1p%YjfRs*t~> +pAY030ua1p%YjfRs*t~> +pAY?ADHC"G>[@;7r`pFI>?Y04=BAR(<)QRi:/+DS8Ou?@770C-5X563n3$hARec^XJ,~> +p&>'(%*/DM!c[c)s*t~> +p&>'(%*/DM!c[c)s*t~> +p&>37=&`4%=oDP'=TDS'<u+h:<)Z[l:JOVW8kDQD7R]^35sRY!541Q85Df%+s*t~> +p&>*lU'/U=!Wk"@p&BO~> +p&>*lU'/U=!Wk"@p&BO~> +p&>6pZ;=Cr<)rour)FJ2;c6Ih:JX\Y91hcH7R]^46:*t'5Q3k84T[iPmIgL0~> +o`#!la!f+2!He#,s*t~> +o`#!la!f+2!He#,s*t~> +o`#3rc='ID:f1+gr)"/):JOVY9M7uL84Q-<6pj:,5X7Our]]a5!KHgFs*t~> +oD\mkiD%Ps!OMXos*t~> +oD\mkiD%Ps!OMXos*t~> +oD]!njE=*f9_qHo9M8#N8OuBB7R]^46:!k$r''I1!PS@$s*t~> +nc&X]F3ssi#X$H3o)F4~> +nc&X]F3ssi#X$H3o)F4~> +nc&daN^H6*8Gbsf84Q0>7R]^46UF((5<e<p"%$SJrUTu=~> +nG`UdffB>f!!=7%n,DkWJ,~> +nG`UdffB>f!!=7%n,DkWJ,~> +nG`[fh.8u@6hs.M6iTLQ5m0G;5<_9r4TeNRnG_tXJ,~> +n,ELhoV3_b!!<dJhu)sCJ,~> +n,ELhoV3_b!!<dJhu)sCJ,~> +n,EOiorqI]og&OAr]]U1"%S+)r9sZ9~> +mJd:bfm4[n!!5U"p[/!2~> +mJd:bfm4[n!!5U"p[/!2~> +mJd:bglYJ-53>!0CVoi5s*t~> +m/I4fo[S^DhZ*aXZ0D8Ss*t~> +m/I4fo[S^DhZ*aXZ0D8Ss*t~> +m/I4fo\#^7h`V'a]BfI_s*t~> +l2LkYe;+q$!!?Z9kl'fHJ,~> +l2LkYe;+q$!!?Z9kl'fHJ,~> +l2LkZfUGUq4Tg/HlM^#JJ,~> +kPk_YcaAj2!pfmk"t4Gha6NWes*t~> +kPk_YcaAj2!pfmk"t4Gha6NWes*t~> +kPk_ZeA%\u5O:N;6!&oMc0P>ls*t~> +jo5Sbp>E]K>!*Mj!!XZJG,WdSqrRj.~> +jo5Sbp>E]K>!*Mj!!XZJG,WdSqrRj.~> +jo5Sbp>a/fH=TV=4U+l/NO74&qrRj.~> +iVs)Xk0puAP4sJ1SZp)kmeu/FJ,~> +iVs)Xk0puAP4sJ1SZp)kmeu/FJ,~> +iVs)Xkh!b[U\C#WXLl[8n,;8GJ,~> +h#@ERq#:!ep]($gq#LEMs*t~> +h#@ERq#:!ep]($gq#LEMs*t~> +h#@ERq#0seq#C-jqYo=NJ,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/macros/latex/contrib/elpres/bitmaps/ep-ball-05.png b/macros/latex/contrib/elpres/bitmaps/ep-ball-05.png Binary files differnew file mode 100644 index 0000000000..e499046da7 --- /dev/null +++ b/macros/latex/contrib/elpres/bitmaps/ep-ball-05.png diff --git a/macros/latex/contrib/elpres/elpres-example.pdf b/macros/latex/contrib/elpres/elpres-example.pdf Binary files differindex 1c28afdc8c..e822d13da0 100644 --- a/macros/latex/contrib/elpres/elpres-example.pdf +++ b/macros/latex/contrib/elpres/elpres-example.pdf diff --git a/macros/latex/contrib/elpres/elpres-example.tex b/macros/latex/contrib/elpres/elpres-example.tex index bb25d110bb..fdfd90d18e 100644 --- a/macros/latex/contrib/elpres/elpres-example.tex +++ b/macros/latex/contrib/elpres/elpres-example.tex @@ -1,26 +1,30 @@ -\documentclass[12pt,pdftex,helvetfont,4x3]{elpres} +\documentclass[12pt,pdftex,sansfont,4x3]{elpres} \usepackage[latin1]{inputenc} \usepackage[perpage,para,symbol,norule]{footmisc} \usepackage[document]{ragged2e} -\definecolor{darkteal}{rgb}{0,0.34,0.34} -\definecolor{darkred}{rgb}{0.7,0.1,0.1} +\RaggedRight + +\usepackage{elpreswhitebluescheme} +% \usepackage{elpresgrayscheme} +% \usepackage{elpreswhiteredscheme} +% \usepackage{elpresbluelightgrayscheme} +% \usepackage{elpreswhitetealscheme} -\newcommand{\ticolor}[1]{\textcolor{darkteal}{#1}} \begin{document} \begin{titlepage} \centering \distance{1} { - \Huge \bfseries \textcolor{darkred}{Title of presentation} \par + \Huge \bfseries \textcolor{eptitlecolor}{Title of presentation} \par } \vspace{1.3ex} \large Author\\[2ex]Date and place of presentation \distance{2} \end{titlepage} -\begin{psli}[\ticolor{Title of first page}] +\begin{psli}[Title of first page] This is an example of a \LaTeX\ \texttt{itemize} list \begin{itemize} @@ -32,8 +36,8 @@ This is an example of a \LaTeX\ \texttt{itemize} list \end{psli} -\begin{psli}[\ticolor{Title of second page\footnote{footnotes are often - not a good idea for a presentation}}] +\begin{psli}[Title of second page\footnote{footnotes are often + not a good idea for a presentation}] % \raggedright The second page with nested, ``vertically compressed'' lists using the \texttt{citemize} and \texttt{cenumerate} environments. @@ -56,45 +60,39 @@ The second page with nested, ``vertically compressed'' lists using the \end{psli} -\begin{psli}[\ticolor{Title of third page}] +\begin{psli}[Title of third page] \begin{cdescription} \item[environment name:] \texttt{cdescription}, comparable to - \LaTeX s \texttt{description} environment + \LaTeX s \texttt{des\-cription} environment \item[used for:] vertically compressed lists with small ``titles'' \end{cdescription} \end{psli} +\begin{psli}[A page with two columns] + + \begin{minipage}[b]{0.58\textwidth} + \includegraphics[width=1.0\textwidth]{ctan-lion} + \end{minipage} + \hspace{0.4em} + \begin{minipage}[b]{0.39\paperwidth} \small + Figure 1: The ``CTAN \TeX-lion'' drawn by Duane Bibby, + thanks to \texttt{ctan.org} + + \end{minipage} +\end{psli} + \begin{rsli} -A final page with freely arranged text and -graphics using the \texttt{rsli} environment\footnote{References to the - source of figures or tables may be added as footnotes} - -{ \tiny -\begin{verbatim} - + - / \ - /---\ - / \ - / \ - / \ - / \ - + + - | | - | | - | | - | | - | | - | | - | | - +-------------+ -\end{verbatim} -\par} - -... guess, what is this?\\[0.6ex] -(A) House\\ -(B) Pencil + A final page written with the \textcolor{ephighlightcolor}{\texttt{rsli}} + environment +\begin{itemize} +\item This slide type is intended to be used for freely arranged text and + graphics. + +\item In contrast to \textcolor{ephighlightcolor}{\texttt{psli}}-slides, the + contents are \emph{not} centered vertically. +\end{itemize} \end{rsli} \end{document} diff --git a/macros/latex/contrib/elpres/elpres-manual.pdf b/macros/latex/contrib/elpres/elpres-manual.pdf Binary files differindex 84953bc15c..64f164ed7e 100644 --- a/macros/latex/contrib/elpres/elpres-manual.pdf +++ b/macros/latex/contrib/elpres/elpres-manual.pdf diff --git a/macros/latex/contrib/elpres/elpres-manual.tex b/macros/latex/contrib/elpres/elpres-manual.tex index 1fb50dddb6..f9357f2044 100644 --- a/macros/latex/contrib/elpres/elpres-manual.tex +++ b/macros/latex/contrib/elpres/elpres-manual.tex @@ -1,37 +1,61 @@ +% -*- coding:utf-8 -*- \documentclass[11pt,a4paper]{article} \setlength{\parskip}{0.6ex} \setlength{\parindent}{0mm} -\usepackage[latin1]{inputenc} -\usepackage{textcomp} \usepackage[a4paper,hmargin=2.4cm,bottom=3.2cm]{geometry} -\newcommand{\hoch}[1]{\raisebox{0.6ex}{#1}} -\newcommand{\tief}[1]{\raisebox{-0.6ex}{#1}} \usepackage{url} \usepackage{framed} +\usepackage{graphicx} \usepackage{xcolor} +\usepackage{enumitem} + +\usepackage{luaotfload} +\usepackage{fontspec} +\setsansfont{Latin Modern Sans} +\setmonofont{Latin Modern Mono} +\setmainfont{Latin Modern Roman} + + +%% for tth: remove "noitemsep" !! + + +\usepackage[% + colorlinks=true% +]{hyperref} \title{\textsf{elpres} --- electronic presentations \\ with (pdf)\LaTeX} \author{Volker Kiefel\thanks{volker dot kiefel at freenet dot de, - http://vkiefel.de/elpres.html}} -\date{v0.5\\[1.8ex] - July 12, 2020} + \url{http://vkiefel.de/elpres.html}}} +\date{v0.6\\[1.8ex] + August 19, 2020} + + + + \begin{document} \maketitle \thispagestyle{empty} - + { -\setlength{\parskip}{0ex} +% \setlength{\parskip}{0ex} + \setlength{\parskip}{0.26ex} \tableofcontents } +% \clearpage + +\vspace{8ex} + \section{Introduction} -The \textsf{elpres} class can be used for presentations on a screen, a -beamer or projector. It is derived from \LaTeX's \texttt{article} class and +The \textsf{elpres} class is intended to be used for +presentations on a computer screen, a +beamer or a projector. It is derived from \LaTeX's \texttt{article} class and may be used with \LaTeX{}, pdf\LaTeX{} (and Lua\LaTeX ). The default ``virtual paper size'' -of documents produced by this class: width=128mm, height=96mm corresponds to a +of document pages +produced by this class: width=128mm, height=96mm corresponds to a 4:3 (width:height) aspect ratio. Other aspect ratios for widescreen monitors may be selected by class options. The \textsf{elpres} class requires that the \texttt{ifthen}, @@ -39,19 +63,62 @@ by class options. The \textsf{elpres} class requires that the \texttt{ifthen}, \texttt{hyperref}, \texttt{graphicx}, \texttt{xcolor} -and \texttt{geometry} packages are available on the system. +and \texttt{geometry} packages are available on the \TeX{} system: these +packages are loaded automatically by the \texttt{elpres} class. Enhancements to \texttt{elpres} are easily made available by other packages, these include overlay support for incremental slides (package \texttt{overlays}) and slides with a background from a bitmap (\texttt{wallpaper}, \texttt{eso-pic} -packages). +packages). Predefined color/layout schemes for \texttt{elpres} presentations +can be acitivated with +\verb+\usepackage+ (details can be found in +in section~\ref{sec:pres-scheme}) + +This manual is intended to support the user with ``recipes''. Use of +\texttt{elpres} with its default settings should be simple, additional aspects +including overlay functions, use of colors, graphics files, ``handout +documents'' are described in section \ref{secEnhancements}. Many code snippets +have been included in this manual. +They can be used in users' presentation files.\footnote{To make copying easier, +this manual is also available as \texttt{.html} document on the +\texttt{elpres} website (\url{http://www.vkiefel.de/elpres.html})} \section{Installation} -Copy \texttt{elpres.cls} into a directory, where -your \LaTeX-system can find it and update the files database\footnote{e.\,g. -by using the \texttt{mktexlsr} or \texttt{texhash} command (TeXlive)}. +\label{sec:installation} + + +\begin{sloppypar} + +If the \texttt{elpres} package has already been installed with the \TeX-system +nothing needs to be done. If an updated version shall be installed, +\texttt{elpres.cls}, the \texttt{.sty}, \texttt{.png} and \texttt{.eps} +files should be copied +into a directory, where your \TeX-system can find it: +if an old \texttt{elpres} version of the existing \TeX\ system shall be +replaced by the current version, please copy these +into the appropriate position in the +``local'' \texttt{texmf} directory tree +(e.\,g. \verb+~/texmf-local/tex/latex/elpres+) and this manual +(\texttt{elpres-manual.pdf}) to \verb+~/texmf-local/doc/latex/elpres+. +Then, the files database should be updated by entering (in case of a \TeX~Live +installation) the command: + +\end{sloppypar} + +\begin{verbatim} + mktexlsr ~/texmf-local +\end{verbatim} + +or you may enter \verb+texhash ~/texmf-local+\footnote{The location + for the ``local'', manually updated class and package files may be different, + depending on the \TeX\ system and the OS.}. +Other \TeX-systems e.\,g.\ Mik\TeX\ have +their own package updating mechanisms. The elpres manual file should be +accessible with the command ``\mbox{\texttt{texdoc elpres}}''. If this +still calls the old version of the manual, the command ``\texttt{texdoc -l elpres}'' +will prompt you to select either the old or the new version of the manual. \section{Usage} @@ -67,7 +134,7 @@ The class is used with (Helvetica), \texttt{cmfont} (Computer Modern), \texttt{sansfont} (Sans Serif: default) and \texttt{nofonts} (no font selection, intended for use of \texttt{elpres} with Lua\LaTeX\ -with is own font selection mechanisms) are used. +with its own font selection mechanisms) are used. Options for different screen aspect ratios: \texttt{4x3} (default), \texttt{16x9}, \texttt{16x10}. The option \texttt{navisymb} adds symbols for navigation to the presentation. @@ -76,13 +143,15 @@ Options of the \texttt{article} class are also available for e.\,g. \texttt{10pt}, \texttt{11pt}, \texttt{12pt} for selection of font size. -{ \sloppy + \textbf{\texttt{Elpres}-specific commands}: \verb+\distance+ vertically adjusts text on a slide. The \verb+\auvimm+\footnote{for \textbf{au}dio \textbf{vi}deo \textbf{m}edia} command inserts a link to an external audio or video file. Two commands: \verb+\fromlinktext+ and \verb+\totargettext+ can be used for internal links within a presentation. +With \verb+\slidetitlecolor+, the text color of slides (\texttt{psli}) +can be changed. \textbf{\texttt{Elpres}-specific environments}: @@ -90,48 +159,66 @@ the environments \texttt{psli} and \texttt{rsli} define ``slides'' in \texttt{elpres}; \texttt{citemize}, \texttt{cenumerate} and \texttt{cdescription} provide vertically compressed lists. -A simple example document: +\subsection{A minimalistic example presentation} + +The following code may be used for your first ``experiments'' by adding +features described in latex sections. \begin{verbatim} - \documentclass[12pt,pdftex,helvetfont,4x3]{elpres} + \documentclass[12pt,pdftex,4x3]{elpres} \usepackage[latin1]{inputenc} - \usepackage{color} \usepackage[document]{ragged2e} - \RaggedRight - + + % \usepackage{elpreswhitebluescheme} + % \usepackage{elpreswhitetealscheme} + % \usepackage{elpresbluelightgrayscheme} + % \usepackage{elpresgrayscheme} + % \usepackage{elpreswhiteredscheme} + \usepackage{elpreswhitetealscheme} + \begin{document} \begin{titlepage} - \centering - \distance{1} - { - \Huge \bfseries \textcolor{blue}{Title of the presentation} \par - } - \vspace{1.3ex} \large - Author\\[2ex]Institution - \distance{2} + \centering + \distance{1} + { + \Huge \bfseries \textcolor{eptitlecolor}{Title of the presentation} \par + } + \vspace{1.3ex} \large + Author\\[2ex]Institution + \distance{2} \end{titlepage} - + \begin{psli}[Title of Page] - The first page - + The first page: \texttt{psli} environment + \begin{itemize} - \item first line in an itemized list - \item second line in an itemized list + \item first line in an itemized list + \item second line in an itemized list \end{itemize} \end{psli} - + \begin{rsli} - The second page + The second page: \texttt{rsli} environment + + \begin{enumerate} + \item no title + \item not centered vertically + + \end{enumerate} + \end{rsli} \end{document} \end{verbatim} +You may copy the code examples from this manual more easily from the +\texttt{.html} version of this manual available at +\url{http://vkiefel.de/elpres/elpres-manual.html}. -%% Here a minimalistic example \subsection{Essential elements of an \texttt{elpres} presentation} -The \textbf{title page} can be created within the \texttt{titlepage} environment, the +The \textbf{title page} slide can be created with +the \texttt{titlepage} environment (or \texttt{rsli}, see below), \LaTeX's \verb+\maketitle+ command is not available. \textbf{Slides} may be created with the \texttt{psli}-environment\footnote{\texttt{psli}: \textbf{pl}ain @@ -216,23 +303,87 @@ Similarly, the \texttt{enumitem} package is also able to modify the +\subsection{Slide layout: changes in slide title, footer, page numbers} + +\label{sec:footerlayout} + +By default, the \textbf{text color of the titles} of +\texttt{psli}-slides is black, +it may be changed by redefining the ``value'' of the \verb+\slidetitlecolor{}+ +command like + +\begin{verbatim} + \slidetitlecolor{blue} +\end{verbatim} + +in the preamble. Of course, you may also use the named colors of the +\texttt{xcolor} package (see section \ref{sec:use-colors}). + +By default the \textbf{page number} appears at the right bottom of the slide +(in the ``footer'' in the terminology of the \texttt{fancyhdr} package) +this position can be addressed by the \verb+\rfoot{}+ command: the +\verb+\rfoot{}+, \verb+\cfoot{}+ and \verb+\lfoot{}+ commands can be used +by the author of a presentaton. + +\begin{sloppypar} +However, access to the header fields defined by \texttt{fancyhdr} +is blocked\footnote{If you enter + \texttt{\textbackslash rhead}, \texttt{\textbackslash chead} + or \texttt{\textbackslash lhead}, \texttt{elpres} will issue + an error message. Use of the header fields will generate unwanted effects + on page layout due to \texttt{fancyhdr}.}. +If you wish to change the position of the page number in the footer, +you can overwrite the default page number with an ``empty'' \verb+\rfoot{}+ +command and put it to the center or the left margin of the footer +(\verb+\cfoot{\footnotesize \thepage}+ or +\verb+\lfoot{\footnotesize \thepage}+). These ``footer fields'' +are also suitable to enter a \textbf{logo} visible on all pages +(in form of a graphics file using +\verb+\includegraphics[]{}+) or text with the name of the speaker's +institution. +\end{sloppypar} + +The user may also use predefined \textbf{presentation schemes} with defined +colors and layout elements (e.\,g. symbols used in list envoronments), details +are described in section \ref{sec:pres-scheme}. + + -\section{Enhancements to elpres} +\section{Enhancements to \texttt{elpres}} \label{secEnhancements} +\subsection{Use of named colors of \texttt{xcolor}} +\label{sec:use-colors} + +The \texttt{elpres} class automatically loads the \texttt{xcolor} package. +Color related commands may therefore be used with names defined by +\texttt{colorx}. They are however only accessible in groups +(\texttt{dvipsnames}, \texttt{svgnames}, \texttt{x11names}). As an example, +the color \texttt{Indigo} is available in \texttt{svgnames}. If you wish +to use it you will have to enter \texttt{svgnames} as \texttt{elpres} +class option: + +\begin{verbatim} + \documentclass[11pt,16x9,svgnames]{elpres} +\end{verbatim} + +This option is then automatically ``handed over'' to the +\texttt{xcolor} package. +The complete lists of named colors are found in the \texttt{xcolor} manual. + + \subsection{Include graphics files} Graphics files/pictures can be included with the \texttt{includegraphics}-command of the \texttt{graphicx}-package. Please be -aware that the dimensions of the pages are 128mm \texttimes{} 96mm and +aware that the dimensions of the pages are \mbox{128mm x 96mm} and therefore included graphics are scaled appropriately. A safe way to generate a page with a picture could be (with \texttt{pict.png} as the name of the graphics file): \label{secUsageGraph} - \begin{verbatim} \usepackage[pdftex]{graphicx} % (in preamble) ... @@ -289,8 +440,8 @@ If the contents of slides are to be made visible step by step this can be achieved by a series of output PDF or (PS) files (carrying the same page number) usually called \emph{overlays}. It may also be of interest to change a highlighting color in a series of overlays. This is most -easily done by using the \texttt{overlays} package written by Andreas Nolda -together with \texttt{elpres}. +easily done by using the excellent \texttt{overlays} package written by +Andreas Nolda. To generate a series of four overlays sequentially showing four lines of a list: @@ -340,6 +491,21 @@ sequentially: \end{overlays} \end{verbatim} +The last example shows short text fragments which are shown sequentially using +the \texttt{only} command: + +\begin{verbatim} + \begin{overlays}{4} + \begin{rsli} + \only{1}{a short text, which will be replaced \ldots } + \only{2}{\dots by a second \ldots} + \only{3}{\ldots and a third \ldots} + \only{4}{\ldots and a final text.} + \end{rsli} + \end{overlays} +\end{verbatim} + + The ``hidden'' text contents are written by \texttt{overlays} in the same color as the background, default is white. If you use a different background color, you have to change the color of the hidden text as well by assigning the @@ -356,14 +522,18 @@ yellow as background: \end{verbatim} + +If you use one of the \emph{presentation schemes} described in section +\ref{sec:pres-scheme}, the necessary adjustments +for the background color will be made automatically. For more details on \texttt{overlays}, see the documentation of the package. \subsection{Navigation symbols} \label{sec:NavigationSymbols} -With the \texttt{navisymb} option a panel with navigation symbols -(colored in light gray) appears +With the \texttt{navisymb} option of \texttt{elpres} a panel with navigation +symbols appears in the right lower corner of the presentation:\\ @@ -386,24 +556,41 @@ of the ``internal'' PDF-viewer in recent versions of the \texttt{Firefox}-browser (Linux, Windows). -\subsection{Call multimedia content from a presentation} +\subsection{Run multimedia content from a presentation} \label{sec:MultimediaContent} -The command \verb+\auvimm{text}{media-file}+ inserts \texttt{text} with -a link, which calls the default application for audio or video media files -\texttt{media-file}. -This seems to work with Adobe Acrobat Reader (Windows) and with -\texttt{evince} (Linux). -An example for using this command: +The command \verb+\auvimm{text}{media-file}+ inserts \texttt{text} with a +link (``poster''), which allows to start the default application +for an audio or video media file +(\texttt{media-file}). This worked flawlessly on the computers of the author of +this manual with Adobe Acrobat Reader (Windows) and with \texttt{evince} and +\texttt{Impress!ve}\footnote{Can be started from the terminal: + \texttt{impressive}} (Linux).\footnote{The \texttt{\textbackslash auvimm} + command uses the \texttt{\textbackslash href} command of the + \texttt{hyperref} package} An example for using this command: \begin{verbatim} \auvimm{[sound-file]}{./audiofile.mp3} \end{verbatim} -This produces the (text-based) ``button'' \texttt{[sound-file]}. If you -hit it with the mouse pointer it will call the default application for -audio files. This approach requires that you keep the presentation file +This produces the (text-based) ``button'' or ``poster'' \texttt{[sound-file]}. +You may also insert an image file as a poster with a graphics file using +\texttt{\textbackslash inlcudegraphics}: + +\begin{verbatim} + \auvimm{\includegraphics{/path/to/poster.png}}{./audiofile.mp3} +\end{verbatim} + +If you hit the poster with the mouse pointer it will call the default +application for audio files. If this does not work, it may be necessary to +write as ``launch'' command: + +\begin{verbatim} + \auvimm{[video-file]}{run:./videofile.mp4} +\end{verbatim} + +This approach requires that you keep the presentation file together with the multimedia files in the same folder, \textbf{also at the time of the presentation}. On an unknown computer system (where you have to show @@ -412,14 +599,15 @@ a call to an external program might be blocked due security reasons in Acrobat Reader. \begin{leftbar} -This \texttt{elpres}-command should be considered experimental. -Its behavior depends on the pdf-reader and the configuration of the OS. +This \texttt{\textbackslash auvimm}-command should be considered experimental. +Its behavior depends on the pdf-viewer and the configuration of the OS. \end{leftbar} -\subsection{Prepare a ``handout'' from a presentation} -\label{secHandout} +\subsection{Prepare a ``handout'' from a presentation} + +\label{secHandout} In advance of a lecture it is often expected that you prepare a ``handout'' from your presentation with more than one @@ -442,10 +630,12 @@ pages included. with \texttt{in.pdf} as the initial presentation. The syntax of \texttt{gs} is described in detail on the ghostscript website\footnote{\url{https://www.ghostscript.com/doc/current/Use.htm}}. -An alternative to \texttt{gs} is \texttt{pdftk} tool: +On Windows systems the name of the ghostscript command may be +\texttt{gswin32c.exe} or \texttt{gswin64c.exe}. +An alternative to \texttt{gs} is the \texttt{pdftk} tool: \begin{verbatim} - pdftk in.pdf burst output page_%02d.pdf + pdftk in.pdf burst output page_%03d.pdf \end{verbatim} The syntax of \texttt{pdftk} is explained in the documentation @@ -612,6 +802,258 @@ page. Details of \texttt{eso-pic}'s commands can be found in the documentation. +\subsection{Presentation schemes} + +\label{sec:pres-scheme} + +\texttt{Elpres} provides predefined \textbf{presentation schemes}: +color and layout schemes which are applied to a presentation with +\verb+usepackage{}+. Their naming follows the convention +\mbox{\texttt{elpres...scheme}}, an +example is \texttt{elpreswhiteredscheme}.\footnote{the name of the + corresponding style or package file is \texttt{elpreswhiteredscheme.sty}} +These \texttt{elpres}-schemes also support incremental slides with the +\texttt{overlays} package. +Moreover, these schemes define color names +which may be used by the author of a presentation:\footnote{Color names for use +by the presentation author start with \texttt{ep...}} + + + + +\begin{description}[noitemsep] +\item[\texttt{eptextcolor}] ``normal text color'' (default values for + documents without + presentation scheme included in \texttt{elpres.cls}: black) +\item[\texttt{ephighlightcolor}] color, which may be used for highlighting + text (default: + dark red) +\item[\texttt{eptitlecolor}] color of the title of slides, may be used to + highlight the + title in the title slide (default: dark red) +\end{description} + +Presentation schemes available in the current version of \texttt{elpres}: + +\begin{sloppypar} + +\begin{description}[noitemsep] + +% \item[\texttt{elpresplainscheme}] .. + +\item[\texttt{elpresbluelightgrayscheme}] dark blue background of slides; + \texttt{eptextcolor}: light gray; + \texttt{eptitlecolor}: turquoise; + \texttt{ephighlightcolor}: yellow; + symbols in \emph{itemize} environment: pale blue bullets; + highlighted elements in \emph{enumerate} and \emph{description} + environments: pale blue + +\item [\texttt{elpresgrayscheme}] gray background of slides; + \texttt{eptextcolor}: dark gray; + \texttt{eptitlecolor}: + dark green; \texttt{ephighlightcolor}: dark red; + symbols in \emph{itemize} environment: gray bullets; highlighted elements + in \emph{enumerate} and \emph{description} environments: dark green + +\item [\texttt{elpreswhitebluescheme}] white background of slides; + \texttt{eptextcolor}: blue-black; + \texttt{eptitlecolor}: blue; + \texttt{ephighlightcolor}: dark red; + symbols in \emph{itemize} environment: blue bullets; highlighted elements + in \emph{enumerate} and \emph{description} environments: blue + +\item [\texttt{elpreswhiteredscheme}] white background of slides; + \texttt{eptextcolor}: red/brown-black; + \texttt{eptitlecolor}: dark red; + \texttt{ephighlightcolor}: dark blue; + symbols in \emph{itemize} environment: red bullets; + highlighted elements in \emph{enumerate} and \emph{description} + environments: red + +\item [\texttt{elpreswhitetealscheme}] white background of slides; + \texttt{eptextcolor}: black-teal; + \texttt{eptitlecolor}: teal; + \texttt{ephighlightcolor}: dark red; + symbols in \emph{itemize} environment: blue bullets; highlighted elements + in \emph{enumerate} and \emph{description} environments: dark teal + +\end{description} +\end{sloppypar} + +In all of these schemes, the colors of borders for internal and external +links have been adjusted. + + +% Die Farben in LibreOffice / rgb (266) / rgb (1) +% ---------------------------------------------- +% Tango himmelblau 1 / 114 159 207 / +% Rot 5 / 153 0 102 / +% Grau 6 / 128 128 128 / + +\section{Recipes for use of \texttt{elpres}} +\label{sec:elpres-recipes} + +\subsection{Colored text boxes} +\label{sec:colored-text-boxes} + +Colored text boxes often help the presentation author to highlight small text +fragments and to make slides more ``readable'' and more attractive. + +\subsubsection{Text boxes with \texttt{\textbackslash colorbox}, \texttt{\textbackslash fcolorbox}} +\label{sec:simple-text-boxes} + + +A simple method for colored text boxes uses the \texttt{minipage} environment +and the \texttt{colorbox} or \texttt{fcolorbox} +commands (\texttt{xcolor} package): + +\begin{verbatim} + \begin{psli}[Slide with a textbox] + \begin{center} + \colorbox{eptitlecolor}{\begin{minipage}{0.85\textwidth} + \centering \color{white} \vspace{2ex} + {\Large + Text centered in a colorbox + } \par + \vspace{2ex} + \end{minipage}} + \end{center} + \end{psli} +\end{verbatim} + + +\subsubsection{Text boxes with the \texttt{tcolorbox} package} +\label{sec:tcolorbox-boxes} + +The \texttt{tcolorbox} package provides great support for colored boxes. A +minimal example: + +\begin{verbatim} + \begin{psli}[Slide with a textbox] + \begin{tcolorbox}[colframe=eptitlecolor!95!black] + \textcolor{eptitlecolor}{This is a textbox generated with the + \texttt{tcolorbox} package} + \tcblower This the lower part of the tcolorbox + \end{tcolorbox} + \end{psli} +\end{verbatim} + +An example with a titled colored textbox: + +\begin{verbatim} + \begin{psli}[Slide with a textbox] + \begin{tcolorbox}[colback=eptitlecolor!10!white,% + colframe=eptitlecolor!95!black,% + title=Heading of a textbox] + This is another \textbf{tcolorbox}. + \tcblower + Here, the lower part of the box. + \end{tcolorbox} + \end{psli} + +\end{verbatim} + +The manual of the \texttt{tcolorbox} provides perfect instuction for the use +of this package. + +\subsection{Inactivate \texttt{overlays} commands} +\label{sec:inact-overl-comm} + +\begin{sloppypar} +If a pesentation has been prepared with overlay slides (using the +\texttt{overlays}) package, the \LaTeX{} source code will contain +\verb+\visible+, \verb+\only+ and \verb+\alert+ commands and +\texttt{overlays} and \texttt{fragileoverlays} environments. + +Sometimes, it is desirable to generate a version of such a presentation +without overlays effects, for example for preparation of a printed handout +(see section \ref{secHandout}). +The effect of these overlay-specific instuctions can be +inactivated with this series of commands: +\end{sloppypar} + + +\begin{verbatim} + \renewenvironment{overlays}[1]{}{}% + \renewenvironment{fragileoverlays}[1]{}{}% + \renewcommand{\visible}[2]{#2}% + \renewcommand{\only}[2]{#2}% + \renewcommand{\alert}[2]{#2}% +\end{verbatim} + +which should be copied or entered in the preamble following +\verb+\usepackage{overlays}+. + + +\subsection{Convert an \texttt{elpres}-presentation (PDF) into an Impress (LibreOffice) or Powerpoint presentation} +\label{sec:convert-into-libreoff} + +Sometimes it is unclear, if organizers of a (scientific) meeting allow +presentations with pdf-files but insist on files in Powerpoint format. This is +an unpleasant situation, but sometimes it is better to be prepared. + +There is no elegant way for a reliable solution. +First, you may use one of the free or commercial online conversion +tools (intended to convert \texttt{.pdf} into +\texttt{.ppt} or \texttt{.pptx}-files). Results are often not satisfactory. + +An alternative, more reliable way preferred +by the author of this manual (although a little awkward) is: + + +\begin{enumerate} +\item convert the pdf-file of the presentation into a series of bitmap + graphics files, (e.\,g. in \texttt{.png} format) +\item import these image \texttt{.png} files into pages of an empty Impress + (LibreOffice or OpenOffice) presentation and save the presentation in + \texttt{.ppt} or \texttt{.pptx}-Format +\end{enumerate} + +\textbf{Details on step 1 --- generate \texttt{.png} images:} + +Please copy the following command (ignoring the line-break) into a single line +at the terminal command prompt or copy them into one line of a short shell +script (Windows: a \texttt{.bat} file) and ``run'' or execute the shell +script: + +\begin{verbatim} + gs -dNOPAUSE -dBATCH -sDEVICE=png256 -r300 + -sOutputFile=page_%03d.png input.pdf +\end{verbatim} + +\begin{sloppypar} + Please do not forget to adjust the name of the input file + \texttt{input.pdf}. This command generates a series of \texttt{.png}-files + \texttt{page\_001.png}, \texttt{page\_002.png} ... \texttt{page\_0nn.png}. + On Windows systems the name of the ghostscript command is + \texttt{gswin32c} or \texttt{gswin64c}. +\end{sloppypar} + +If you wish a better resolution of the \texttt{.png} change \texttt{-r300} to +\texttt{-r600} or even \texttt{-r1200}: + +\begin{verbatim} + gs -dNOPAUSE -dBATCH -sDEVICE=png256 -r600 + -dTextAlphaBits=4 -sOutputFile=page_%03d.png input.pdf +\end{verbatim} + +The additional option \texttt{-dTextAlphaBits=4} improves font +antialiasing.\footnote{Details can be found in the docume3ntation of gs + \url{https://www.ghostscript.com/doc/current/Use.htm}} + +\textbf{Details on step 2 --- Import \texttt{.png} images:} + +Open an empty presentation with LibreOffice Impress, adjust the appropriate +slide format (e.\,g. 4:3), import the first \texttt{.png} file with +\emph{Insert~/ Image}, then adjust the size of the included image with +\emph{Format~/ Object~and~Shape~/ Position~and~Size (F4)} in the +\emph{Position~and~Size} dialog box please enter: \emph{Postion~X}: +\texttt{0.0cm}, \emph{Postion~Y}: \texttt{0.0cm}, \emph{Width}: +\texttt{28.0cm}, activate the checkbox \emph{Keep~ratio}.\footnote{Menu + structure of LibreOffice v6.3}. The presentation can now be saved +in one of the Microsoft Powerpoint formats \texttt{.ppt} or \texttt{.pptx}. + \section{License} This class is distributed under the \textsl{\LaTeX{} Project Public License} @@ -653,8 +1095,18 @@ symbols for navigation), new commands: \verb+auvimm+ (generates a link to external audio, video files), \verb+\fromlinktext+ and \verb+\totargettext+ (create links within a presentation). Documentation has been partly rewritten. +\textbf{v0.6} (19.08.2020): +Access to the \texttt{fancyhdr} ``header fields'' (\verb+\lhead{}+, +\verb+\chead{}+ and \verb+\rhead{}+) is now explicitly blocked. +New command \verb+\slidetitlecolor{}+ for the text color of titles in +\texttt{psli}-slides. +New: style files for presentation schemes added. +Documentation has been significantly +completed: sections \ref{sec:footerlayout}, +\ref{sec:use-colors}, \ref{sec:pres-scheme} and \ref{sec:elpres-recipes} added, +section \ref{sec:installation} on installation rewritten. + \end{document} -% vim:spell:fileencoding=latin1:lines=55: diff --git a/macros/latex/contrib/elpres/elpres.cls b/macros/latex/contrib/elpres/elpres.cls index b1786496d3..f5334dd234 100644 --- a/macros/latex/contrib/elpres/elpres.cls +++ b/macros/latex/contrib/elpres/elpres.cls @@ -1,5 +1,5 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{elpres}[2020/07/12 class for plain electronic presentations] +\ProvidesClass{elpres}[2020/08/15 class for plain electronic presentations] % % 2004/06/19 v0.1 - initial version % @@ -24,6 +24,8 @@ % new class option `nofonts' for use with lualatex. % - documentation updated % +% 2020/08/15 v0.6 - command `slidetitlecolor' added, color scheme files +% added, most parts of the documentation rewritten % % Options: select fonts @@ -75,18 +77,25 @@ \LoadClass{article} \RequirePackage{ifthen} -\RequirePackage{xcolor} +\RequirePackageWithOptions{xcolor} +\RequirePackage{graphicx} \ifthenelse{\equal{\screenformat}{scr4x3}}{% -\RequirePackage[foot=10.2pt,head=0pt,paperwidth=128mm,paperheight=96mm,left=5mm,top=5mm,right=7mm,bottom=8mm]{geometry}% + \RequirePackage[foot=10.2pt,head=0pt,% + paperwidth=128mm,paperheight=96mm,% + left=5mm,top=5mm,right=7mm,bottom=8mm]{geometry}% }{} \ifthenelse{\equal{\screenformat}{scr16x9}}{% -\RequirePackage[foot=10.2pt,head=0pt,paperwidth=176mm,paperheight=99mm,left=5mm,top=5mm,right=7mm,bottom=8mm]{geometry}% + \RequirePackage[foot=10.2pt,head=0pt,% + paperwidth=176mm,paperheight=99mm,% + left=5mm,top=5mm,right=7mm,bottom=8mm]{geometry}% }{} \ifthenelse{\equal{\screenformat}{scr16x10}}{% -\RequirePackage[foot=10.2pt,head=0pt,paperwidth=160mm,paperheight=100mm,left=5mm,top=5mm,right=7mm,bottom=8mm]{geometry}% + \RequirePackage[foot=10.2pt,head=0pt,% + paperwidth=160mm,paperheight=100mm,% + left=5mm,top=5mm,right=7mm,bottom=8mm]{geometry}% }{} @@ -94,10 +103,6 @@ \RequirePackage{fancyhdr} \renewcommand{\headrulewidth}{0mm} -%% \pagestyle{fancy} -%% \rfoot{\thepage} -%% \cfoot{} -%% \lfoot{} \renewcommand{\maketitle}% {\ClassError{elpres}{Caution: ``maketitle'' command not supported}% @@ -107,17 +112,27 @@ \fancypagestyle{pres}{% \fancyhf{}% -\fancyfoot[RO]{\footnotesize \thepage}% +\rfoot{\footnotesize \thepage}% } +\renewcommand{\rhead}{\ClassError{elpres}{Caution: + command ``rhead'' not supported}} +\renewcommand{\chead}{\ClassError{elpres}{Caution: + command ``chead'' not supported}} +\renewcommand{\lhead}{\ClassError{elpres}{Caution: + command ``lhead'' not supported}} +\renewcommand{\fancyhead}{\ClassError{elpres}{Caution: + ``fancyhead'' not supported}} + \pagestyle{pres} %% menu for navigation symbols \ifthenelse{\equal{\navigation}{withnavi}}{% \hypersetup{menubordercolor=white}% \rfoot{% - \scriptsize% - \textcolor[gray]{0.6}{% + \scriptsize% + \providecolor{epnavigationmenucolor}{rgb}{0.6,0.6,0.6} + \textcolor{epnavigationmenucolor}{% \Acrobatmenu{FirstPage}{$\ll$}\hspace{0.5em}% \Acrobatmenu{PrevPage}{$<$}\hspace{0.5em}% \Acrobatmenu{NextPage}{$>$}\hspace{0.5em}% @@ -135,10 +150,18 @@ \setlength{\parindent}{0mm} %% plain slide -- heading line + +\providecommand{\sli@tico}{black} + +\providecommand{\slidetitlecolor}[1]{% + \renewcommand{\sli@tico}{#1}% +} + \newenvironment{psli}[1][]% - {{\raggedright \large\bfseries #1\par}\par\vspace*{\stretch{1}}}% +{{\raggedright \large\bfseries \textcolor{\sli@tico}{#1}\par}% + \par\vspace*{\stretch{1}}}% {\par\vspace*{\stretch{1}}\newpage} - + %% raw slide -- no heading \newenvironment{rsli}{}{\newpage}% @@ -175,14 +198,33 @@ {\end{description}% \vspace{-0.7ex}}% -\ifthenelse{\equal{\fontna}{tmrfo}}{\RequirePackage{mathptmx}\RequirePackage{courier}}{} -\ifthenelse{\equal{\fontna}{helvetfo}}{\RequirePackage[scaled=0.92]{helvet}\RequirePackage{courier}}{} -\ifthenelse{\equal{\fontna}{initialisiert}}{\renewcommand{\familydefault}{\sfdefault}}{} -\ifthenelse{\equal{\fontna}{withoutfont}}{}{} + \ifthenelse{\equal{\fontna}{tmrfo}}% + {\RequirePackage{mathptmx}% + \RequirePackage{courier}}{} + + \ifthenelse{\equal{\fontna}{helvetfo}}% + {\RequirePackage[scaled=0.92]{helvet}% + \RequirePackage{courier}}{} + + \ifthenelse{\equal{\fontna}{initialisiert}}{\renewcommand{\familydefault}% + {\sfdefault}}{} + + \ifthenelse{\equal{\fontna}{withoutfont}}{}{} \newcommand{\auvimm}[2]{\href{#2}{#1}} \newcommand{\fromlinktext}[2]{\hyperlink{#2}{#1}} \newcommand{\totargettext}[2]{\hypertarget{#2}{#1}} +%% (External): Default colors for defined slide elements, the are modified in +%% style files -- these color names may be used by authors of presentations + +% (External): normal text color +\definecolor{eptextcolor}{rgb}{0,0,0} +\color{eptextcolor} +% (External): highlighted text +\definecolor{ephighlightcolor}{rgb}{0.6,0.1,0.1} +% (External): may be used on the title page +\definecolor{eptitlecolor}{rgb}{0.6,0.1,0.1} + % vim: syntax=tex tw=2048 ai diff --git a/macros/latex/contrib/elpres/elpresbluelightgrayscheme.sty b/macros/latex/contrib/elpres/elpresbluelightgrayscheme.sty new file mode 100644 index 0000000000..fe2353df14 --- /dev/null +++ b/macros/latex/contrib/elpres/elpresbluelightgrayscheme.sty @@ -0,0 +1,45 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{elpresbluelightgrayscheme}[2020/08/15 elpres layout scheme blue lightgray] + +\definecolor{epturquoise}{rgb}{0.1,0.83,0.8} +\definecolor{eplistheadcolor}{rgb}{0.75,0.8,1} % color for list heads +\definecolor{epturquoisealert}{rgb}{0.2,1,1} % for highlighting text + + +\definecolor{alert}{named}{epturquoisealert} % for highlighting text +\definecolor{ephighlightcolor}{rgb}{0.9,0.94,0.1} % Ext: to be used for highlighting text +\definecolor{eptitlecolor}{named}{epturquoise} % Ext: to be used on the title page +\slidetitlecolor{epturquoise} % color for slide titles + +\definecolor{epdarkblue}{rgb}{0.12,0.02,0.5} +\definecolor{epbackgroundcolor}{named}{epdarkblue} +\definecolor{background}{named}{epbackgroundcolor} +\pagecolor{epbackgroundcolor} + +\definecolor{eplinkbordercolor}{rgb}{0.16,0.1,0.75} + +\hypersetup{menubordercolor=epbackgroundcolor,% + linkbordercolor=eplinkbordercolor,% + urlbordercolor= eplinkbordercolor,% + } +% navigation menu border color, color for normal link borders, +% for URLs + +\definecolor{epnavigationmenucolor}{rgb}{0.2,0.2,0.72} % navigation menu symbol color +\definecolor{eptextcolor}{rgb}{0.7,0.7,0.75} % Ext: normal text color +\color{eptextcolor} % Ext: normal text color + +\renewcommand{\labelitemi}{\includegraphics[scale=0.06]{ep-ball-01}} +\renewcommand{\labelitemii}{\includegraphics[scale=0.055]{ep-ball-01}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.05]{ep-ball-01}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.045]{ep-ball-01}} + +\renewcommand{\labelenumi}{\textcolor{eplistheadcolor}{\textbf{\theenumi.}}} +\renewcommand{\labelenumii}{\textcolor{eplistheadcolor}{\textbf{\theenumii.}}} +\renewcommand{\labelenumiii}{\textcolor{eplistheadcolor}{\textbf{\theenumiii.}}} +\renewcommand{\labelenumiv}{\textcolor{eplistheadcolor}{\textbf{\theenumiv.}}} + +\renewcommand{\descriptionlabel}[1]{\hspace{\labelsep}% + \textcolor{eplistheadcolor}{\textbf{#1}}} + +\endinput diff --git a/macros/latex/contrib/elpres/elpresgrayscheme.sty b/macros/latex/contrib/elpres/elpresgrayscheme.sty new file mode 100644 index 0000000000..af5bd77766 --- /dev/null +++ b/macros/latex/contrib/elpres/elpresgrayscheme.sty @@ -0,0 +1,45 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{elpresgrayscheme}[2020/08/15 elpres layout scheme gray] + +\definecolor{epgreen}{rgb}{0.11,0.34,0.3} +\definecolor{eplistheadcolor}{named}{epgreen} % color for list heads +\definecolor{epgreenalert}{rgb}{0.05,0.55,0.35} + +\definecolor{alert}{named}{epgreenalert} % used by overlays package +\definecolor{ephighlightcolor}{rgb}{0.6,0,0.1} % Ext: to be used for highlighting text +\definecolor{eptitlecolor}{named}{epgreen} % Ext: to be used on the title page +\slidetitlecolor{eptitlecolor} % color for slide titles + +\definecolor{epgray}{rgb}{0.8,0.8,0.8} +\definecolor{epbackgroundcolor}{named}{epgray} +\definecolor{background}{named}{epbackgroundcolor} % used by overlays package +\pagecolor{epbackgroundcolor} + +\definecolor{eplinkbordercolor}{rgb}{0.68,0.68,0.65} + +\hypersetup{menubordercolor=epbackgroundcolor,% + linkbordercolor=eplinkbordercolor,% + urlbordercolor= eplinkbordercolor,% + } +% navigation menu border color, color for normal link borders, +% for URLs + +\definecolor{epnavigationmenucolor}{rgb}{0.52,0.52,0.52} % navigation menu symbol color +\definecolor{eptextcolor}{rgb}{0.16,0.16,0.16} % Ext: normal text color +\color{eptextcolor} % Ext: normal text color + + +\renewcommand{\labelitemi}{\includegraphics[scale=0.065]{ep-ball-03}} +\renewcommand{\labelitemii}{\includegraphics[scale=0.055]{ep-ball-03}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.05]{ep-ball-03}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.045]{ep-ball-03}} + +\renewcommand{\labelenumi}{\textcolor{eplistheadcolor}{\textbf{\theenumi.}}} +\renewcommand{\labelenumii}{\textcolor{eplistheadcolor}{\textbf{\theenumii.}}} +\renewcommand{\labelenumiii}{\textcolor{eplistheadcolor}{\textbf{\theenumiii.}}} +\renewcommand{\labelenumiv}{\textcolor{eplistheadcolor}{\textbf{\theenumiv.}}} + +\renewcommand{\descriptionlabel}[1]{\hspace{\labelsep}% + \textcolor{epgreen}{\textbf{#1}}} + +\endinput diff --git a/macros/latex/contrib/elpres/elpreswhitebluescheme.sty b/macros/latex/contrib/elpres/elpreswhitebluescheme.sty new file mode 100644 index 0000000000..9879923cc9 --- /dev/null +++ b/macros/latex/contrib/elpres/elpreswhitebluescheme.sty @@ -0,0 +1,48 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{elpreswhitebluescheme}[2020/08/15 elpres layout scheme white blue] + +\definecolor{epdarkblue}{rgb}{0.12,0.09,0.65} +\definecolor{eplistheadcolor}{named}{epdarkblue} % color for list heads +\definecolor{epbluealert}{rgb}{0.2,0.1,0.82} % for highlighting text + + +\definecolor{alert}{named}{epbluealert} % for highlighting text +\definecolor{ephighlightcolor}{rgb}{0.66,0.03,0.2} % Ext: to be used for highlighting text +\definecolor{eptitlecolor}{named}{epdarkblue} % Ext: to be used on the title page +\slidetitlecolor{epdarkblue} % color for slide titles + +\definecolor{epwhite}{rgb}{1,1,1} +\definecolor{epbackgroundcolor}{named}{epwhite} +\definecolor{background}{named}{epbackgroundcolor} +\pagecolor{epbackgroundcolor} + +\definecolor{eplinkbordercolor}{rgb}{0.83,0.79,0.79} + +\hypersetup{menubordercolor=epbackgroundcolor,% + linkbordercolor=eplinkbordercolor,% + urlbordercolor= eplinkbordercolor,% + } +% navigation menu border color, color for normal link borders, +% for URLs + +\definecolor{epnavigationmenucolor}{rgb}{0.7,0.7,0.76} % navigation menu symbol color +\definecolor{eptextcolor}{rgb}{0.2,0.16,0.16} % Ext: normal text color +\color{eptextcolor} % Ext: normal text color + +\renewcommand{\labelitemi}{\includegraphics[scale=0.06]{ep-ball-05}} +\renewcommand{\labelitemii}{\includegraphics[scale=0.055]{ep-ball-05}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.05]{ep-ball-05}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.045]{ep-ball-05}} + +\renewcommand{\labelenumi}{\textcolor{eplistheadcolor}{\textbf{\theenumi.}}} +\renewcommand{\labelenumii}{\textcolor{eplistheadcolor}{\textbf{\theenumii.}}} +\renewcommand{\labelenumiii}{\textcolor{eplistheadcolor}{\textbf{\theenumiii.}}} +\renewcommand{\labelenumiv}{\textcolor{eplistheadcolor}{\textbf{\theenumiv.}}} + +\renewcommand{\descriptionlabel}[1]{\hspace{\labelsep}% + \textcolor{epdarkblue}{\textbf{#1}}} + +\definecolor{epverydarkblue}{rgb}{0.06,0.01,0.22} +\color{epverydarkblue} + +\endinput diff --git a/macros/latex/contrib/elpres/elpreswhiteredscheme.sty b/macros/latex/contrib/elpres/elpreswhiteredscheme.sty new file mode 100644 index 0000000000..911873b1f7 --- /dev/null +++ b/macros/latex/contrib/elpres/elpreswhiteredscheme.sty @@ -0,0 +1,48 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{elpreswhiteredscheme}[2020/08/15 elpres layout white red] + +\definecolor{epdarkred}{rgb}{0.6,0.09,0.1} +\definecolor{eplistheadcolor}{named}{epdarkred} % color for list heads +\definecolor{epredalert}{rgb}{0.75,0.2,0.28} % for highlighting text + + +\definecolor{alert}{named}{epredalert} % for highlighting text +\definecolor{ephighlightcolor}{rgb}{0.18,0.03,0.67} % Ext: to be used for highlighting text +\definecolor{eptitlecolor}{named}{epdarkred} % Ext: to be used on the title page +\slidetitlecolor{epdarkred} % color for slide titles + +\definecolor{epwhite}{rgb}{1,1,1} +\definecolor{epbackgroundcolor}{named}{epwhite} +\definecolor{background}{named}{epbackgroundcolor} +\pagecolor{epbackgroundcolor} + +\definecolor{eplinkbordercolor}{rgb}{0.83,0.79,0.79} + +\hypersetup{menubordercolor=epbackgroundcolor,% + linkbordercolor=eplinkbordercolor,% + urlbordercolor= eplinkbordercolor,% + } +% navigation menu border color, color for normal link borders, +% for URLs + +\definecolor{epnavigationmenucolor}{rgb}{0.75,0.7,0.7} % navigation menu symbol color +\definecolor{eptextcolor}{rgb}{0.2,0.16,0.16} % Ext: normal text color +\color{eptextcolor} % Ext: normal text color + +\renewcommand{\labelitemi}{\includegraphics[scale=0.06]{ep-ball-02}} +\renewcommand{\labelitemii}{\includegraphics[scale=0.055]{ep-ball-02}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.05]{ep-ball-02}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.045]{ep-ball-02}} + +\renewcommand{\labelenumi}{\textcolor{eplistheadcolor}{\textbf{\theenumi.}}} +\renewcommand{\labelenumii}{\textcolor{eplistheadcolor}{\textbf{\theenumii.}}} +\renewcommand{\labelenumiii}{\textcolor{eplistheadcolor}{\textbf{\theenumiii.}}} +\renewcommand{\labelenumiv}{\textcolor{eplistheadcolor}{\textbf{\theenumiv.}}} + +\renewcommand{\descriptionlabel}[1]{\hspace{\labelsep}% + \textcolor{epdarkred}{\textbf{#1}}} + +\definecolor{epverydarkred}{rgb}{0.26,0.1,0.16} +\color{epverydarkred} + +\endinput diff --git a/macros/latex/contrib/elpres/elpreswhitetealscheme.sty b/macros/latex/contrib/elpres/elpreswhitetealscheme.sty new file mode 100644 index 0000000000..833426a25f --- /dev/null +++ b/macros/latex/contrib/elpres/elpreswhitetealscheme.sty @@ -0,0 +1,48 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{elpreswhitetealscheme}[2020/08/15 elpres layout scheme white teal] + +\definecolor{epdarkteal}{rgb}{0.02,0.35,0.38} +\definecolor{eplistheadcolor}{named}{epdarkteal} % color for list heads +\definecolor{eptealalert}{rgb}{0.1,0.65,0.68} % for highlighting text + + +\definecolor{alert}{named}{eptealalert} % for highlighting text +\definecolor{ephighlightcolor}{rgb}{0.66,0.03,0.2} % Ext: to be used for highlighting text +\definecolor{eptitlecolor}{named}{epdarkteal} % Ext: to be used on the title page +\slidetitlecolor{epdarkteal} % color for slide titles + +\definecolor{epwhite}{rgb}{1,1,1} +\definecolor{epbackgroundcolor}{named}{epwhite} +\definecolor{background}{named}{epbackgroundcolor} +\pagecolor{epbackgroundcolor} + +\definecolor{eplinkbordercolor}{rgb}{0.83,0.79,0.79} + +\hypersetup{menubordercolor=epbackgroundcolor,% + linkbordercolor=eplinkbordercolor,% + urlbordercolor= eplinkbordercolor,% + } +% navigation menu border color, color for normal link borders, +% for URLs + +\definecolor{epnavigationmenucolor}{rgb}{0.7,0.7,0.76} % navigation menu symbol color +\definecolor{eptextcolor}{rgb}{0.2,0.16,0.16} % Ext: normal text color +\color{eptextcolor} % Ext: normal text color + +\renewcommand{\labelitemi}{\includegraphics[scale=0.06]{ep-ball-04}} +\renewcommand{\labelitemii}{\includegraphics[scale=0.055]{ep-ball-04}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.05]{ep-ball-04}} +\renewcommand{\labelitemiii}{\includegraphics[scale=0.045]{ep-ball-04}} + +\renewcommand{\labelenumi}{\textcolor{eplistheadcolor}{\textbf{\theenumi.}}} +\renewcommand{\labelenumii}{\textcolor{eplistheadcolor}{\textbf{\theenumii.}}} +\renewcommand{\labelenumiii}{\textcolor{eplistheadcolor}{\textbf{\theenumiii.}}} +\renewcommand{\labelenumiv}{\textcolor{eplistheadcolor}{\textbf{\theenumiv.}}} + +\renewcommand{\descriptionlabel}[1]{\hspace{\labelsep}% + \textcolor{epdarkteal}{\textbf{#1}}} + +\definecolor{epverydarkteal}{rgb}{0.02,0.1,0.12} +\color{epverydarkteal} + +\endinput diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf Binary files differindex 18e3ce9336..bddd1a53c0 100644 --- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf +++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex index bd13654d0d..7ea4ab69f8 100644 --- a/macros/latex/contrib/nicematrix/nicematrix-french.tex +++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex @@ -10,7 +10,7 @@ \usepackage{nicematrix} \usepackage{tikz} -\usetikzlibrary{fit} +\usetikzlibrary{fit,patterns} \usepackage{enumitem} @@ -300,7 +300,7 @@ Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|) immédiatement après un |\item| de liste. On remarquera que la présence d'un |\hline| initial n'empêche pas l'alignement sur la ligne de base de la première rangée (avec |{tabular}| ou |{array}| de \pkg{array}, il faut utiliser -|\firsthline|. +|\firsthline|). \smallskip \begin{BVerbatim}[baseline=c,boxwidth=9cm] @@ -367,6 +367,39 @@ u_n & 1 & 2 & 4 & 8 & 16 & 32 \\ \end{minipage} +\bigskip +\colorbox{yellow!50}{\textbf{Nouveau 5.2}}\enskip On peut aussi utiliser la clé +|baseline| pour aligner une matrice sur un filet horizontal (tracé par +|\hline|). On doit pour cela donner la valeur |line-|\textsl{i} où \textsl{i} +est le numéro de la rangée qui suit ce filet horizontal. + +\smallskip +\begin{Verbatim} +\NiceMatrixOptions{cell-space-top-limit=1pt,cell-space-bottom-limit=1pt} +\end{Verbatim} + +\smallskip +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +$A=\begin{pNiceArray}{cc|cc}[baseline=line-3] +\dfrac1A & \dfrac1B & 0 & 0 \\ +\dfrac1C & \dfrac1D & 0 & 0 \\ +\hline +0 & 0 & A & B \\ +0 & 0 & D & D \\ +\end{pNiceArray}$ +\end{BVerbatim} +\begin{scope} +\NiceMatrixOptions{cell-space-top-limit=1pt,cell-space-bottom-limit=1pt} +\raisebox{-5mm}{$A=\begin{pNiceArray}{cc|cc}[baseline=line-3] +\dfrac1A & \dfrac1B & 0 & 0 \\ +\dfrac1C & \dfrac1D & 0 & 0 \\ +\hline +0 & 0 & A & B \\ +0 & 0 & D & D \\ +\end{pNiceArray}$} +\end{scope} + + \section{Les blocs} @@ -528,6 +561,11 @@ Marie & Pauline \\ \hline \bigskip +\colorbox{yellow!50}{\textbf{Nouveau 5.2}}\enskip En revanche, les filets +verticaux ne sont pas tracés à l'intérieur des blocs. + + +\bigskip Si vous utilisez \pkg{booktabs} (qui fournit |\toprule|, |\midrule|, |\bottomrule|, etc.) et que vous tenez absolument à mettre des filets verticaux (ce qui est contraire à l'esprit à \pkg{booktabs}), vous constaterez que les @@ -680,7 +718,8 @@ p.~\pageref{OnlyMainNiceMatrix}. \subsection{Les clés hlines et vlines} La clé |hlines| demande un tracé de tous les filets horizontaux et la clé -|vlines| demande un tracé de tous les filets verticaux. En fait, dans les +|vlines| demande un tracé de tous les filets verticaux (sauf dans les blocs et +dans les blocs virtuels déterminés par des lignes en pointillés). En fait, dans les environnements avec délimiteurs (comme |{pNiceMatrix}| ou |{bNiceArray}|), les filets extérieurs ne sont pas tracés (ce qui est le comportement certainement attendu). @@ -706,10 +745,8 @@ $\begin{pNiceMatrix}[vlines,rules/width=0.2pt] \label{hvlines} La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux -\emph{sauf dans les blocs}.\footnote{En fait, quand la clé |hvlines| (ou la clé - |hvlines-except-corners| décrite juste après) est utilisée, les filets ne sont - pas non plus tracés dans les blocs virtuels délimités par des cases reliées - par des lignes pointillées (cf. p. \pageref{dotted-and-hvlines}).} +(sauf dans les blocs et dans les blocks virtuels déterminés par des +lignes en pointillés). \medskip \begin{Verbatim} @@ -734,7 +771,8 @@ arum & iris & jacinthe & muguet \subsection{La clé hvlines-except-corners} La clé |hvlines-except-corners| demande le tracé de tous les filets horizontaux -et verticaux \emph{sauf dans les blocs} et sauf dans les coins vides. +et verticaux sauf dans les blocs (y compris dans les blocks virtuels déterminés par des +lignes en pointillés) et sauf dans les coins vides. \medskip \begin{Verbatim} @@ -769,9 +807,15 @@ Comme on le voit, un «coin vide» est constitué de la réunion de tous les rectangles vides partant de la case située exactement dans le coin. \bigskip +\colorbox{yellow!50}{\textbf{Nouveau 5.2}}\enskip On peut passer en argument de +|\hvlines-except-corners| une liste de coins à prendre en considération. Les +coins étant désignés par |NW|, |SW|, |NE| et |SE| (\emph{north west}, +\emph{south west}, \emph{north east} et \emph{south east}). + +\medskip \begin{BVerbatim}[boxwidth=11cm,baseline=c] \begin{NiceTabular}{*{6}{c}}% - [~emphase#hvlines-except-corners@,cell-space-top-limit=3pt] + [~emphase#hvlines-except-corners=NE@,cell-space-top-limit=3pt] 1\\ 1&1\\ 1&2&1\\ @@ -781,7 +825,7 @@ rectangles vides partant de la case située exactement dans le coin. \end{NiceTabular} \end{BVerbatim} \begin{NiceTabular}{*{6}{c}}% - [c,hvlines-except-corners,cell-space-top-limit=3pt] + [c,hvlines-except-corners=NE,cell-space-top-limit=3pt] 1\\ 1&1\\ 1&2&1\\ @@ -904,10 +948,28 @@ incompatibilités (par exemple avec la commande |\hdotsfor|). \item L'extension \pkg{colortbl} construit le tableau ligne par ligne, en alternant rectangles colorés, filets et contenu des cases. Le \textsc{pdf} -résultant déroute certains lecteurs de \textsc{pdf} et on a des artefacts -d'affichage : des filets verticaux semblent disparaître ; au contraire, de fines -lignes blanches peuvent apparaître. L'extension \pkg{nicematrix} proposent des -outils qui évitent ces inconvénients. +résultant déroute certains lecteurs de \textsc{pdf} et on a parfois des artefacts +d'affichage. + +\begin{itemize} +\item Certains filets semblent disparaître. Ce phénomène est dû au fait que les +lecteurs de PDF donnent souvent la priorité aux éléments graphiques qui ont été +tracés postérieurement (conformément à l'esprit du «modèle du peintre» de +PostScript et PDF). De ce point de vue, MuPDF (qui est utilisé par exemple par +SumatraPDF) donne de meilleurs résultats que Adobe Reader. + +\item Une fine ligne blanche semble apparaître entre deux cellules de même +couleur. Ce phénomène se produit quand chaque cellule est coloriée avec sa +propre instruction |fill| (opérateur |fill| de PostScript noté |f| en PDF). +C'est le cas avec \pkg{colortbl} avec lequel chaque cellule est coloriée +individuellement même si on utilise |\columncolor| ou |\rowcolor|. + +Concernant ce phénomène, Adobe Reader donne de meilleurs résultats que +MuPDF. +\end{itemize} + +L'extension \pkg{nicematrix} proposent des outils qui permettent d'éviter ces +inconvénients. \end{itemize} \subsection{Les outils de nicematrix dans le code-before} @@ -958,6 +1020,10 @@ h & i & j \\ \hline \end{NiceTabular} \end{scope} +\medskip +Une commande |\cellcolor| ne produit qu'une instruction |fill| (codée |f|) dans +le \textsc{pdf}. + \bigskip \item La commande |\rectanglecolor| prend trois arguments obligatoires. Le premier est la couleur, les deux suivants fournissent la case en haut à gauche @@ -1025,6 +1091,10 @@ a_{10} & b_{10} & c_{10} \\ \end{NiceArray}$ \end{scope} +\medskip +Une commande |\rowcolor| ne produit qu'une instruction |fill| (codée |f|) dans +le \textsc{pdf}. + \bigskip \item La commande |\columncolor| doit son nom à la commande |\columncolor| de @@ -1061,6 +1131,45 @@ Estelle & 15 \end{NiceTabular} \end{scope} +\bigskip +\colorbox{yellow!50}{\textbf{Nouveau 5.2}}\enskip Il existe une option |respect-blocks| +pour la commande |\rowcolor|. Avec cette option, les ``rangées'' colorées +alternativement peuvent s'étendre sur plusieurs rangées réelles du tableau pour +englober les blocs. + +\medskip +\begin{scope} +\hfuzz=10cm +\begin{BVerbatim}[baseline=c,boxwidth=9cm] +\begin{NiceTabular}{cr}[hvlines,code-before = +~emphase#\rowcolors{1}{blue!10}{}[respect-blocks]@] +\Block{2-1}{Pierre} & 12 \\ + & 13 \\ +Jacques & 8 \\ +\Block{3-1}{Stéphanie} & 18 \\ + & 17 \\ + & 15 \\ +Amélie & 20 \\ +Henri & 14 \\ +\Block{2-1}{Estelle} & 15 \\ + & 19 +\end{NiceTabular} +\end{BVerbatim} +\begin{NiceTabular}{cr}[hvlines,code-before = \rowcolors{1}{blue!10}{}[respect-blocks],baseline=c] +\Block{2-1}{Pierre} & 12 \\ + & 13 \\ +Jacques & 8 \\ +\Block{3-1}{Stéphanie} & 18 \\ + & 17 \\ + & 15 \\ +Amélie & 20 \\ +Henri & 14 \\ +\Block{2-1}{Estelle} & 15 \\ + & 19 +\end{NiceTabular} +\end{scope} + + \bigskip @@ -1142,7 +1251,7 @@ On a utilisé le type de colonne |S| de \pkg{siunitx}. On peut accéder aux outils de coloriage précédents avec une syntaxe proche de celle proposée par \pkg{colortbl}. On doit pour cela utiliser la clé |colortbl-like| dans l'environnement concerné.\footnote{Pour le moment, cette - clé n'est pas disponible disponible dans |\NiceMatrixOptions|.} + clé n'est pas disponible dans |\NiceMatrixOptions|.} On a alors accès aux trois commandes suivantes : \begin{itemize} @@ -1157,7 +1266,7 @@ autre commande, elle-même utilisée dans le préambule.}. \medskip \begin{Verbatim} -\begin{NiceTabular}[colortbl-like]{>{~emphase#\columncolor{blue!15}}@ccc} +\begin{NiceTabular}[colortbl-like]{*{2}{>{~emphase#\columncolor{blue!15}@}c}c} \toprule ~emphase#\rowcolor{red!15}@ Nom & Prénom & Année de naissance \\ @@ -1172,7 +1281,7 @@ Dupont & Chantal & 15 janvier 1998 \\ \begin{center} -\begin{NiceTabular}[colortbl-like]{>{\columncolor{blue!15}}ccc} +\begin{NiceTabular}[colortbl-like]{*{2}{>{\columncolor{blue!15}}c}c} \toprule \rowcolor{red!15} Nom & Prénom & Année de naissance \\ @@ -1185,6 +1294,53 @@ Dupont & Chantal & 15 janvier 1998 \\ \end{NiceTabular} \end{center} +\medskip +\emph{Remarque}\par\nobreak + +Chacune de ces instructions |\cellcolor|, |\rowcolor| ou |\columncolor| +(utilisée hors du |code-before|) produit une instruction |fill| (codée |f|) dans +le \textsc{pdf} final. En cas de juxtaposition de rectangles de même couleur, +une fine ligne blanche peut donc apparaître dans certains lecteurs de +\textsc{pdf}\footnote{Par exemple SumatraPDF v3.1.2, qui utilise MuPDF de Artifex + Software, dont le moteur de rendu \textsc{pdf} est appelé Fitz.} (entre les +deux premières colonnes dans l'exemple ci-dessus). Pour éviter cela, il convient +d'utiliser les outils proposés dans le |code-before|. C'est ce que l'on fait +dans le codage qui suit. + + +\medskip +\begin{Verbatim} +\begin{NiceTabular}[colortbl-like]{ccc}% + [code-before = ~emphase#\columncolor{blue!15}{1,2}@] +\toprule +\rowcolor{red!15} +Nom & Prénom & Année de naissance \\ +\midrule +Achard & Jacques & 5 juin 1962 \\ +Lefebvre & Mathilde & 23 mai 1988 \\ +Vanesse & Stéphanie & 30 octobre 1994 \\ +Dupont & Chantal & 15 janvier 1998 \\ +\bottomrule +\end{NiceTabular} +\end{Verbatim} + + +\begin{center} +\begin{NiceTabular}[colortbl-like]{ccc}% + [code-before = \columncolor{blue!15}{1,2}] +\toprule +\rowcolor{red!15} +Nom & Prénom & Année de naissance \\ +\midrule +Achard & Jacques & 5 juin 1962 \\ +Lefebvre & Mathilde & 23 mai 1988 \\ +Vanesse & Stéphanie & 30 octobre 1994 \\ +Dupont & Chantal & 15 janvier 1998 \\ +\bottomrule +\end{NiceTabular} +\end{center} + + \section{La largeur des colonnes} \label{width} @@ -1946,14 +2102,16 @@ b & a & b & \Ddots & & \Vdots \\ \end{pNiceMatrix}\] -\subsection{Les lignes pointillées et la clé hvlines} +\subsection{Les lignes pointillées et les filets} + +\label{dotted-and-rules} -\label{dotted-and-hvlines} +Les lignes pointillées délimitent des blocs virtuels qui ont le même +comportement vis à vis des filets que les blocs créés par |\Block| (les filets +spécifiés par le spécificateur \verb+|+ dans le préambule et par les clés +|vlines|, |hlines|, |hvlines| et |hvlines-except-corners| ne sont pas tracés +dans les blocs). -On a dit (cf. p. \pageref{hvlines}) que la clé |hvlines| trace tous les filets -horizontaux et verticaux, exceptés dans les blocs. En fait, avec cette clé, les -filets ne sont pas non plus tracés dans les blocs virtuels délimités par des -cases reliées par des lignes pointillées. \medskip \begin{BVerbatim}[baseline=c,boxwidth=10.6cm] @@ -2397,11 +2555,6 @@ $\begin{bNiceMatrix}[r] \sin x & \cos x \end{bNiceMatrix}$ -\medskip -Il existe aussi l'option |S| qui impose que toutes les colonnes soient des -colonnes |S| de \pkg{siunitx} (si cette extension est chargée).\footnote{Cela - reprend une partie des fonctionnalités proposées par les environnements - |{pmatrix*}|, |{bmatrix*}|, etc. de \pkg{mathtools}.} \subsection{La commande \textbackslash rotate} @@ -3044,54 +3197,59 @@ l'intersection du filet horizontal~$i$ et du filet vertical~$j$ avec la syntaxe \end{NiceMatrix}\] -\section{Outils pour les développeurs} +\section{API pour les développeurs} -Comme son nom l'indique, la liste de tokens |\g_nicematrix_code_after_tl| est -publique (conformément aux conventions de LaTeX3, toute variable dont le nom -débute par |\g_nicematrix| ou |\l_nicematrix| est publique alors que toute variable -dont le nom débute par |\g__nicematrix| ou par |\l__nicematrix| est privée). +L'extension \pkg{nicematrix} fournit deux variables internes mais publiques\footnote{Conformément aux conventions de LaTeX3, + toute variable dont le nom commence par |\g_nicematrix| ou |\l_nicematrix| est + publique alors que toute variable dont le nom débute par |\g__nicematrix| ou + par |\l__nicematrix| est privée.} : +\begin{itemize} +\item \colorbox{yellow!50}{\textbf{Nouveau 5.2}}\enskip |\g_nicematrix_code_before_tl| ; +\item |\g_nicematrix_code_after_tl|. +\end{itemize} \medskip -Cette variable contient le code qui constitue le «|code-after|». Le développeur -peut donc l'utiliser pour y ajouter du code à partir d'une cellule du tableau -(l'affectation devra être globale, ce qui permettra de sortir de la cellule, qui -est un groupe au sens de TeX). +Ces variables constituent le code du «|code-before|» et du «|code-after|». Le +développeur peut donc les utiliser pour y ajouter du code à partir d'une cellule +du tableau (l'affectation devra être globale, ce qui permettra de sortir de la +cellule, qui est un groupe au sens de TeX). \medskip -\emph{Exemple} : On souhaite écrire une commande |\crossbox| qui barre en croix -la cellule courante. Cette commande prendra en argument optionnel une liste de -couples \textsl{clé}-\textsl{valeur} qui sera passée à Tikz avant que la croix -ne soit tracée. - +On remarquera que l'utilisation de |\g_nicematrix_code_before_tl| nécessite une +compilation supplémentaire (car les instructions sont écrites dans le fichier +|aux| pour être utilisées à la compilation suivante). -On peut alors programmer cette commande |\crossbox| de la manière suivante, qui -utilise explicitement la variable publique |\g_nicematrix_code_after_tl|. +\bigskip +\emph{Example} : On souhaite écrire une commande |\hatchcell| pour hachurer la +cellule courante (avec un argument optionnel entre crochets pour la couleur des +hachures). Il est possible de programmer une telle commande |\hatchcell| comme +suit, en utilisant explicitement la variable publique +|\g_nicematrix_code_before_tl| (ce code nécessite le chargement préalable de la +bibliothèque Tikz \pkg{patterns}). \begin{scope} \fvset{commandchars=\§\¤\μ} \begin{Verbatim} \ExplSyntaxOn -\cs_new_protected:Nn \__pantigny_crossbox:nnn +\cs_new_protected:Nn \__pantigny_hatchcell:nnn { \begin { tikzpicture } - \draw [ #3 ] - ( row-#1 -| col-\int_eval:n { #2 + 1 } ) - -- ( row-\int_eval:n { #1 + 1 } -| col-#2 ) - ( row-#1 -| col-\int_eval:n #2 ) - -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ; + \fill [ pattern = north~west~lines , pattern~color = #3 ] + ( row - #1 -| col - #2) + rectangle + ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ; \end { tikzpicture } } - -\NewDocumentCommand \crossbox { ! O { } } +\NewDocumentCommand \hatchcell { ! O { black } } { - \tl_gput_right:Nx §emphase¤\g_nicematrix_code_after_tlμ + \tl_gput_right:Nx §emphase¤\g_nicematrix_code_before_tlμ { - \__pantigny_crossbox:nnn + \__pantigny_hatchcell:nnn { \int_use:c { c@iRow } } { \int_use:c { c@jCol } } - { \exp_not:n { #1 } } + { #1 } } } \ExplSyntaxOff @@ -3100,47 +3258,47 @@ utilise explicitement la variable publique |\g_nicematrix_code_after_tl|. \ExplSyntaxOn -\cs_new_protected:Nn \__pantigny_crossbox:nnn +\cs_new_protected:Nn \__pantigny_hatchcell:nnn { \begin { tikzpicture } - \draw [ #3 ] - ( row-#1 -| col-\int_eval:n { #2 + 1 } ) - -- ( row-\int_eval:n { #1 + 1 } -| col-#2 ) - ( row-#1 -| col-\int_eval:n #2 ) - -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ; + \fill [ pattern = north~west~lines , pattern~color = #3 ] + ( row - #1 -| col - #2) + rectangle + ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ; \end { tikzpicture } } - -\NewDocumentCommand \crossbox { ! O { } } +\NewDocumentCommand \hatchcell { ! O { black } } { - \tl_gput_right:Nx \g_nicematrix_code_after_tl + \tl_gput_right:Nx \g_nicematrix_code_before_tl { - \__pantigny_crossbox:nnn + \__pantigny_hatchcell:nnn { \int_use:c { c@iRow } } { \int_use:c { c@jCol } } - { \exp_not:n { #1 } } + { #1 } } } \ExplSyntaxOff + \bigskip -Voici un exemple d'utilisation : +Voici un exemple d'utilisation. \medskip \begin{BVerbatim}[baseline=c,boxwidth=9cm] \begin{NiceTabular}{ccc}[hvlines] -merlan & requin & cabillaud \\ -baleine & ~emphase#\crossbox[red]@ & morue \\ -mante & raie & poule +Tokyo & Paris & London \\ +Roma & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\ +Los Angeles & Madrid & Roma \end{NiceTabular} \end{BVerbatim} \begin{NiceTabular}{ccc}[hvlines] -merlan & requin & cabillaud \\ -baleine & \crossbox[red] & morue \\ -mante & raie & poule +Tokyo & Paris & London \\ +Lima & \hatchcell[blue!30]Oslo & Miami \\ +Los Angeles & Madrid & Roma \end{NiceTabular} + \section{Remarques techniques} Première remarque : l'extension \pkg{nicematrix} doit être chargée après diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx index c2856d51a2..10e84b7b07 100644 --- a/macros/latex/contrib/nicematrix/nicematrix.dtx +++ b/macros/latex/contrib/nicematrix/nicematrix.dtx @@ -15,8 +15,8 @@ % % \fi % \iffalse -\def\myfileversion{5.1} -\def\myfiledate{2020/07/31} +\def\myfileversion{5.2} +\def\myfiledate{2020/08/19} % % %<*batchfile> @@ -52,7 +52,7 @@ version 2005/12/01 or later. \geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}} \usepackage{tikz} -\usetikzlibrary{fit} +\usetikzlibrary{fit,patterns} \usepackage{nicematrix} \usepackage{siunitx} @@ -408,6 +408,38 @@ version 2005/12/01 or later. % \end{enumerate} % \end{minipage} % +% \bigskip +% \colorbox{yellow!50}{\textbf{New 5.2}}\enskip It's also possible to use the +% key |baseline| to align a matrix on an horizontal rule (drawn by |\hline|). In +% this aim, one should give the value |line-|\textsl{i} where \textsl{i} is the +% number of the row following the horizontal rule. +% +% \smallskip +% \begin{Verbatim} +% \NiceMatrixOptions{cell-space-top-limit=1pt,cell-space-bottom-limit=1pt} +% \end{Verbatim} +% +% \smallskip +% \begin{BVerbatim}[baseline=c,boxwidth=9cm] +% $A=\begin{pNiceArray}{cc|cc}[baseline=line-3] +% \dfrac1A & \dfrac1B & 0 & 0 \\ +% \dfrac1C & \dfrac1D & 0 & 0 \\ +% \hline +% 0 & 0 & A & B \\ +% 0 & 0 & D & D \\ +% \end{pNiceArray}$ +% \end{BVerbatim} +% \begin{scope} +% \NiceMatrixOptions{cell-space-top-limit=1pt,cell-space-bottom-limit=1pt} +% \raisebox{-5mm}{$A=\begin{pNiceArray}{cc|cc}[baseline=line-3] +% \dfrac1A & \dfrac1B & 0 & 0 \\ +% \dfrac1C & \dfrac1D & 0 & 0 \\ +% \hline +% 0 & 0 & A & B \\ +% 0 & 0 & D & D \\ +% \end{pNiceArray}$} +% \end{scope} +% % % \section{The blocks} % \label{Block} @@ -569,6 +601,11 @@ version 2005/12/01 or later. % Mary & George \\ \hline % \end{NiceTabular} % +% +% \bigskip +% \colorbox{yellow!50}{\textbf{New 5.2}}\enskip However, the vertical rules are +% not drawn in the blocks. +% % \bigskip % If you use \pkg{booktabs} (which provides |\toprule|, |\midrule|, % |\bottomrule|, etc.) and if you really want to add vertical rules (which is @@ -712,9 +749,10 @@ version 2005/12/01 or later. % \subsection{The keys hlines and vlines} % % The key |hlines| draws all the horizontal rules and the key |vlines| draws all -% the vertical rules. In fact, in the environments with delimiters (as +% the vertical rules excepted in the blocks (and the virtual blocks determined +% by dotted lines). In fact, in the environments with delimiters (as % |{pNiceMatrix}| or |{bNiceArray}|) the exteriors rules are not drawn (as -% expected). +% expected). % % \medskip % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm] @@ -735,11 +773,8 @@ version 2005/12/01 or later. % \subsection{The key hvlines} % \label{hvlines} % -% The key |hvlines| draws all the vertical and horizontal rules \emph{excepted -% in the blocks}.\footnote{In fact, when the key |hvlines| (or the key -% |hvlines-except-corners| described just after) is in force, the -% rules are also not drawn in the virtual blocks delimited by cells relied par -% dotted lines (cf. p. \pageref{dotted-and-hvlines}).} +% The key |hvlines| draws all the vertical and horizontal rules excepted +% in the blocks (and the virtual blocks determined by dotted lines). % % \medskip % \begin{Verbatim} @@ -766,7 +801,8 @@ version 2005/12/01 or later. % \subsection{The key hvlines-except-corners} % % The key |hvlines-except-corners| draws all the horizontal and vertical rules, -% \emph{excepted in the blocks} and excepted in the empty corners. +% excepted in the blocks (and the virtual blocks determined by dotted lines) and +% excepted in the empty corners. % % \medskip % \begin{Verbatim} @@ -801,9 +837,16 @@ version 2005/12/01 or later. % rectangles starting from the cell actually in the corner of the array. % % \bigskip +% \colorbox{yellow!50}{\textbf{New 5.2}}\enskip It's possible to give as value to the +% key |\hvlines-except-corners| a list of the corners to take into +% consideration. The corners are designed by |NW|, |SW|, |NE| and |SE| +% (\emph{north west}, \emph{south west}, \emph{north east} and \emph{south +% east}). +% +% \bigskip % \begin{BVerbatim}[boxwidth=11cm,baseline=c] % \begin{NiceTabular}{*{6}{c}}% -% [~emphase#hvlines-except-corners@,cell-space-top-limit=3pt] +% [~emphase#hvlines-except-corners=NE@,cell-space-top-limit=3pt] % 1\\ % 1&1\\ % 1&2&1\\ @@ -812,7 +855,7 @@ version 2005/12/01 or later. % 1&5&10&10&5&1 % \end{NiceTabular} % \end{BVerbatim} -% \begin{NiceTabular}{*{6}{c}}[c,hvlines-except-corners,cell-space-top-limit=3pt] +% \begin{NiceTabular}{*{6}{c}}[c,hvlines-except-corners=NE,cell-space-top-limit=3pt] % 1\\ % 1&1\\ % 1&2&1\\ @@ -912,7 +955,7 @@ version 2005/12/01 or later. % %\section{The color of the rows and columns} % -% \subsection{Utilisation of colortbl} +% \subsection{Use of colortbl} % % We recall that the package \pkg{colortbl} can be loaded directly with % |\usepackage{colortbl}| or by loading \pkg{xcolor} with the key |table|: @@ -931,9 +974,23 @@ version 2005/12/01 or later. % \item The package \pkg{colortbl} constructs the array row by row, alterning % colored rectangles, rules and contents of the cells. The resulting % \textsc{pdf} is difficult to interpret by some \textsc{pdf} viewers and may -% lead to artefacts on the screen : some rules seem to disappear and on the -% other side, some thin white lines appear. The package \pkg{nicematrix} -% provides some tools without those drawbacks. +% lead to artefacts on the screen. +% \begin{itemize} +% \item Some rules seem to disappear. This is because many PDF viewers give +% priority to graphical element drawn posteriorly (which is in the spirit of the +% ``painting model'' of PostScript and PDF). Concerning this problem, MuPDF +% (which is used, for instance, by SumatraPDF) gives better results than Adobe +% Reader). +% \item A thin white line may appear between two cells of the same color. This +% phenomenon occurs when each cell is colored with its own instruction |fill| +% (the PostScript operator |fill| noted |f| in PDF). This is the case with +% \pkg{colortbl}: each cell is colored on its own, even when |\columncolor| or +% |\rowcolor| is used. +% +% As for this phenomenon, Adobe Reader gives better results than MuPDF. +% \end{itemize} +% +% The package \pkg{nicematrix} provides tools to avoid those problems. % \end{itemize} % % \subsection{The tools of nicematrix in the code-before} @@ -985,6 +1042,10 @@ version 2005/12/01 or later. % h & i & j \\ \hline % \end{NiceTabular} % \end{scope} +% +% \medskip +% A command |\cellcolor| generates only one instruction |fill| (coded |f|) in the +% resulting \textsc{pdf}. % % \bigskip % \item The command |\rectanglecolor| takes three mandatory arguments. The first @@ -1050,6 +1111,10 @@ version 2005/12/01 or later. % a_{10} & b_{10} & c_{10} \\ % \end{NiceArray}$ % \end{scope} +% +% \medskip +% A command |\rowcolor| generates only one instruction |fill| (coded |f|) in the +% resulting \textsc{pdf}. % % % \bigskip @@ -1088,6 +1153,44 @@ version 2005/12/01 or later. % Madison & 15 % \end{NiceTabular} % \end{scope} +% +% \bigskip +% \colorbox{yellow!50}{\textbf{New 5.2}}\enskip There is a key |respect-blocks| +% for the instruction |\rowcolor|. With that key, the ``rows'' alternately +% colored may extend over several row if they have to incorporate blocks. +% +% \medskip +% \begin{scope} +% \hfuzz=10cm +% \begin{BVerbatim}[baseline=c,boxwidth=9cm] +% \begin{NiceTabular}{cr}[hvlines,code-before = +% ~emphase#\rowcolors{1}{blue!10}{}[respect-blocks]@] +% \Block{2-1}{John} & 12 \\ +% & 13 \\ +% Stephen & 8 \\ +% \Block{3-1}{Sarah} & 18 \\ +% & 17 \\ +% & 15 \\ +% Ashley & 20 \\ +% Henry & 14 \\ +% \Block{2-1}{Madison} & 15 \\ +% & 19 +% \end{NiceTabular} +% \end{BVerbatim} +% \begin{NiceTabular}{cr}[hvlines,code-before = \rowcolors{1}{blue!10}{}[respect-blocks],baseline=c] +% \Block{2-1}{John} & 12 \\ +% & 13 \\ +% Stephen & 8 \\ +% \Block{3-1}{Sarah} & 18 \\ +% & 17 \\ +% & 15 \\ +% Ashley & 20 \\ +% Henry & 14 \\ +% \Block{2-1}{Madison} & 15 \\ +% & 19 +% \end{NiceTabular} +% \end{scope} +% % % \bigskip % \item The command |\chessboardcolors| takes in as mandatory arguments two colors @@ -1184,7 +1287,7 @@ version 2005/12/01 or later. % % \medskip % \begin{Verbatim} -% \begin{NiceTabular}[colortbl-like]{>{~emphase#\columncolor{blue!15}}@ccc} +% \begin{NiceTabular}[colortbl-like]{*{2}{>{~emphase#\columncolor{blue!15}@}c}c} % \toprule % ~emphase#\rowcolor{red!15}@ % Last name & First name & Birth day \\ @@ -1199,7 +1302,7 @@ version 2005/12/01 or later. % % % \begin{center} -% \begin{NiceTabular}[colortbl-like]{>{\columncolor{blue!15}}ccc} +% \begin{NiceTabular}[colortbl-like]{*{2}{>{\columncolor{blue!15}}c}c} % \toprule % \rowcolor{red!15} % Last name & First name & Birth day \\ @@ -1212,6 +1315,47 @@ version 2005/12/01 or later. % \end{NiceTabular} % \end{center} % +% \medskip +% Each instruction |\cellcolor|, |\rowcolor| or |\columncolor| will generate an +% instruction |fill| (coded~|f|) in the resulting \textsc{pdf}. In cases of +% juxtaposed colored rectangles, one may have a thin white color line in some +% \textsc{pdf} viewers\footnote{For example SumatraPDF v3.1.2, which uses MuPDF +% of Artifex Software, whose \textsc{pdf} renderer is called Fitz.} (between the +% two first columns in the above example). In you want to avoid this problem, +% you should use the tools in the |code-before|. That's what we do with the +% following code. +% +% +% \medskip +% \begin{Verbatim} +% \begin{NiceTabular}[colortbl-like]{ccc}% +% [code-before = ~emphase#\columncolor{blue!15}{1,2}@] +% \toprule +% \rowcolor{red!15} +% Last name & First name & Birth day \\ +% \midrule +% Achard & Jacques & 5 juin 1962 \\ +% Lefebvre & Mathilde & 23 mai 1988 \\ +% Vanesse & Stephany & 30 octobre 1994 \\ +% Dupont & Chantal & 15 janvier 1998 \\ +% \bottomrule +% \end{NiceTabular} +% \end{Verbatim} +% +% +% \begin{center} +% \begin{NiceTabular}[colortbl-like]{ccc}[code-before = \columncolor{blue!15}{1,2}] +% \toprule +% \rowcolor{red!15} +% Last name & First name & Birth day \\ +% \midrule +% Achard & Jacques & 5 juin 1962 \\ +% Lefebvre & Mathilde & 23 mai 1988 \\ +% Vanesse & Stephany & 30 octobre 1994 \\ +% Dupont & Chantal & 15 janvier 1998 \\ +% \bottomrule +% \end{NiceTabular} +% \end{center} % % \section{The width of the columns} % \label{width} @@ -1957,14 +2101,14 @@ version 2005/12/01 or later. % \end{pNiceMatrix}\] % % -% \subsection{The dotted lines and the key hvlines} +% \subsection{The dotted lines and the rules} % -% \label{dotted-and-hvlines} +% \label{dotted-and-rules} % -% We have said (cf. p. \pageref{hvlines}) that the key |hvlines| draws all the -% horizontal and vertical rules, excepted in the blocks. In fact, when this key -% is in force, the rules are also not drawn in the virtual blocks delimited by -% cells relied par dotted lines. +% The dotted lines determine virtual blocks which have the same behaviour +% regarding the rules (the rules specified by the specifier \verb+|+ in the +% preamble and by the keys |hlines|, |vlines|, |hvlines| and +% |hvlines-except-corners| are not drawn within the blocks). % % \medskip % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm] @@ -2145,7 +2289,7 @@ version 2005/12/01 or later. % \begin{table} % \setlength{\belowcaptionskip}{1ex} % \centering -% \caption{Utilisation of \texttt{\textbackslash tabularnote}~emphase#\tabularnote{It's possible! +% \caption{Use of \texttt{\textbackslash tabularnote}~emphase#\tabularnote{It's possible! % ~emphase#to put a note in the caption.}}! % \label{t:tabularnote} % \begin{NiceTabular}{@{}llc@{}[~emphase#notes/bottomrule!] @@ -2169,7 +2313,7 @@ version 2005/12/01 or later. % \begin{table} % \setlength{\belowcaptionskip}{1ex} % \centering -% \caption{Utilisation of \texttt{\textbackslash tabularnote}\tabularnote{It's possible +% \caption{Use of \texttt{\textbackslash tabularnote}\tabularnote{It's possible % to put a note in the caption.}} % \label{t:tabularnote} % \begin{NiceTabular}{@{}llc@{}}[notes/bottomrule] @@ -2255,7 +2399,7 @@ version 2005/12/01 or later. % puts several consecutive commands |\tabularnote|. The marker |#1| is meant to % be the name of a LaTeX counter. % -% Initial value: |\emph{\alph{#1}}| +% Initial value: |\textit{\alph{#1}}| % % Another possible value should be a mere |\arabic{#1}| % @@ -2334,7 +2478,7 @@ version 2005/12/01 or later. % For an example of customization of the tabular notes, see p.~\pageref{ex:notes}. % % -% \subsection{Utilisation of \{NiceTabular\} with threeparttable} +% \subsection{Use of \{NiceTabular\} with threeparttable} % % % If you wish to use the environment |{NiceTabular}| in an environment @@ -2404,11 +2548,6 @@ version 2005/12/01 or later. % \sin x & \cos x % \end{bNiceMatrix}$ % -% \medskip -% There is also a key |S| which sets all the columns all type |S| of -% \pkg{siunitx} (if this package is loaded).\footnote{This is a part of the -% functionality provided by the environments |{pmatrix*}|, |{bmatrix*}|, etc. of -% \pkg{mathtools}.} % % \subsection{The command \textbackslash rotate} % @@ -2655,7 +2794,7 @@ version 2005/12/01 or later. % % % -% \section{Utilisation of Tikz with nicematrix} +% \section{Use of Tikz with nicematrix} % % \label{name} % \subsection{The nodes corresponding to the contents of the cells} @@ -2936,7 +3075,7 @@ version 2005/12/01 or later. % % \vspace{1cm} % \begin{minipage}[c]{7cm} -% Here are the ``large nodes'' of this array (without utilisation of |margin| +% Here are the ``large nodes'' of this array (without use of |margin| % nor |extra-margin|). % \end{minipage} % \hspace{1.5cm} @@ -3041,53 +3180,60 @@ version 2005/12/01 or later. % 1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1 % \end{NiceMatrix}\] % -% \section{Tools for the developpers} -% -% As its name implies, the token list |\g_nicematrix_code_after_tl| is public -% (according to the LaTeX3 conventions, each variable with name beginning with -% |\g_nicematrix| ou |\l_nicematrix| is public and each variable with name -% beginning with |\g__nicematrix| or |\l__nicematrix| is private). +% \section{API for the developpers} % +% The package \pkg{nicematrix} provides two variables which are internal but +% public\footnote{According to the LaTeX3 conventions, +% each variable with name beginning with |\g_nicematrix| ou |\l_nicematrix| is +% public and each variable with name beginning with |\g__nicematrix| or +% |\l__nicematrix| is private.}: +% \begin{itemize} +% \item \colorbox{yellow!50}{\textbf{New 5.2}}\enskip |\g_nicematrix_code_before_tl| ; +% \item |\g_nicematrix_code_after_tl|. +% \end{itemize} +% % % \medskip -% This variable contains the code of what we have called the ``|code-after|''. -% The developper can use it to add code from a cell of the array (the -% affectation must be global, allowing to exit the cell, which is a TeX group). +% These variables contain the code of what we have called the ``|code-before|'' +% and the ``|code-after|''. The developper can use them to add code from a cell +% of the array (the affectation must be global, allowing to exit the cell, which +% is a TeX group). % % \medskip -% \emph{Example} : We want to write a command |\crossbox| to draw a cross in the -% current cell. This command will take in an optional argument between square -% brackets for a list of pairs \textsl{key}-\textsl{value} which will be given to -% Tikz before the drawing. +% One should remark that the use of |\g_nicematrix_code_before_tl| needs one +% compilation more (because the instructions are written on the |aux| file to be +% used during the next run). % -% It's possible to program such command |\crossbox| as follows, explicitely -% using the public variable |\g_nicematrix_code_after_tl|. +% \bigskip +% \emph{Example} : We want to write a command |\hatchcell| to hatch the current +% cell (with an optional argument between brackets for the color). It's possible +% to program such command |\hatchcell| as follows, explicitely using the public +% variable |\g_nicematrix_code_before_tl| (this code requires the Tikz library +% \pkg{patterns}). % % % \begin{scope} % \fvset{commandchars=\§\¤\μ} % \begin{Verbatim} -% \ExplSyntaxOn -% \cs_new_protected:Nn \__pantigny_crossbox:nnn +%\ExplSyntaxOn +% \cs_new_protected:Nn \__pantigny_hatchcell:nnn % { % \begin { tikzpicture } -% \draw [ #3 ] -% ( row-#1 -| col-\int_eval:n { #2 + 1 } ) -% -- ( row-\int_eval:n { #1 + 1 } -| col-#2 ) -% ( row-#1 -| col-\int_eval:n #2 ) -% -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ; +% \fill [ pattern = north~west~lines , pattern~color = #3 ] +% ( row - #1 -| col - #2) +% rectangle +% ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ; % \end { tikzpicture } % } % -% -% \NewDocumentCommand \crossbox { ! O { } } +% \NewDocumentCommand \hatchcell { ! O { black } } % { -% \tl_gput_right:Nx §emphase¤\g_nicematrix_code_after_tlμ +% \tl_gput_right:Nx §emphase¤\g_nicematrix_code_before_tlμ % { -% \__pantigny_crossbox:nnn +% \__pantigny_hatchcell:nnn % { \int_use:c { c@iRow } } % { \int_use:c { c@jCol } } -% { \exp_not:n { #1 } } +% { #1 } % } % } % \ExplSyntaxOff @@ -3095,45 +3241,44 @@ version 2005/12/01 or later. % \end{scope} % % -% \ExplSyntaxOn -% \cs_new_protected:Nn \__pantigny_crossbox:nnn +%\ExplSyntaxOn +% \cs_new_protected:Nn \__pantigny_hatchcell:nnn % { % \begin { tikzpicture } -% \draw [ #3 ] -% ( row-#1 -| col-\int_eval:n { #2 + 1 } ) -% -- ( row-\int_eval:n { #1 + 1 } -| col-#2 ) -% ( row-#1 -| col-\int_eval:n #2 ) -% -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ; +% \fill [ pattern = north~west~lines , pattern~color = #3 ] +% ( row - #1 -| col - #2) +% rectangle +% ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ; % \end { tikzpicture } % } % -% -% \NewDocumentCommand \crossbox { ! O { } } +% \NewDocumentCommand \hatchcell { ! O { black } } % { -% \tl_gput_right:Nx \g_nicematrix_code_after_tl +% \tl_gput_right:Nx \g_nicematrix_code_before_tl % { -% \__pantigny_crossbox:nnn +% \__pantigny_hatchcell:nnn % { \int_use:c { c@iRow } } % { \int_use:c { c@jCol } } -% { \exp_not:n { #1 } } +% { #1 } % } % } % \ExplSyntaxOff % +% % \bigskip -% Here is an example of utilisation: +% Here is an example of use: % % \medskip % \begin{BVerbatim}[baseline=c,boxwidth=9cm] % \begin{NiceTabular}{ccc}[hvlines] % Tokyo & Paris & London \\ -% Cap Town & ~emphase#\crossbox[red]@ & Miami \\ +% Roma & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\ % Los Angeles & Madrid & Roma % \end{NiceTabular} % \end{BVerbatim} % \begin{NiceTabular}{ccc}[hvlines] % Tokyo & Paris & London \\ -% Cap Town & \crossbox[red] & Miami \\ +% Lima & \hatchcell[blue!30]Oslo & Miami \\ % Los Angeles & Madrid & Roma % \end{NiceTabular} % @@ -4330,14 +4475,24 @@ version 2005/12/01 or later. % \end{macrocode} % The command |\CT@arc@| is a command of \pkg{colortbl} which sets the color of % the rules in the array. We will use it to store the instruction of color for -% the rules even if \pkg{colortbl} is not loaded. +% the rules even if \pkg{colortbl} is not loaded. Idem for % \begin{macrocode} \cs_set_protected:Npn \CT@arc@ { } \cs_set:Npn \arrayrulecolor #1 # { \CT@arc { #1 } } \cs_set:Npn \CT@arc #1 #2 { \dim_compare:nNnT \baselineskip = \c_zero_dim \noalign - { \cs_gset:Npn \CT@arc@ { \color #1 { #2 } } } + { \cs_gset:Npn \CT@arc@ { \color #1 { #2 } } } + } +% \end{macrocode} +% Idem for |\CT@drs@|. +% \begin{macrocode} + \cs_set_protected:Npn \CT@drsc@ { } + \cs_set:Npn \doublerulesepcolor #1 # { \CT@drs { #1 } } + \cs_set:Npn\CT@drs #1 #2 + { + \dim_compare:nNnT \baselineskip = \c_zero_dim \noalign + { \cs_gset:Npn \CT@drsc@ { \color #1 { #2 } } } } \cs_set:Npn \hline { @@ -4364,7 +4519,16 @@ version 2005/12/01 or later. \int_compare:nNnT \l_@@_first_col_int = 0 { \omit & } \int_compare:nNnT { #1 } > 1 { \multispan { \@@_pred:n { #1 } } & } \multispan { \int_eval:n { #2 - #1 + 1 } } - { \CT@arc@ \leaders \hrule \@height \arrayrulewidth \hfill } + { + \CT@arc@ + \leaders \hrule \@height \arrayrulewidth \hfill +% \end{macrocode} +% The following |\skip_horizontal:N \c_zero_dim| is to prevent a potential +% |\unskip| to delete the |\leaders|\footnote{See question 99041 on TeX +% StackExchange.} +% \begin{macrocode} + \skip_horizontal:N \c_zero_dim + } % \end{macrocode} % Our |\everycr| has been modified. In particular, the creation of the |row| % node is in the |\everycr| (maybe we should put it with the incrementation of @@ -4379,7 +4543,7 @@ version 2005/12/01 or later. % % \bigskip % The following version of |\cline| spreads the array of a quantity equal -% to |\arrayrulewidth| as does |\hline|. It will be loaded except if the key +% to |\arrayrulewidth| as does |\hline|. It will be loaded excepted if the key % |standard-cline| has been used. % \begin{macrocode} \cs_set:Npn \@@_cline @@ -4403,7 +4567,11 @@ version 2005/12/01 or later. \int_compare:nNnT { #1 } < { #2 } { \multispan { \int_eval:n { #2 - #1 } } & } \multispan { \int_eval:n { #3 - #2 + 1 } } - { \CT@arc@ \leaders \hrule \@height \arrayrulewidth \hfill } + { + \CT@arc@ + \leaders \hrule \@height \arrayrulewidth \hfill + \skip_horizontal:N \c_zero_dim + } % \end{macrocode} % You look whether there is another |\cline| to draw (the final user may put % several |\cline|). @@ -4596,7 +4764,7 @@ version 2005/12/01 or later. { \ExplSyntaxOn \cs_if_free:NT \pgfsyspdfmark - { \cs_set_eq:NN \pgfsyspdfmark \use:nnn } + { \cs_set_eq:NN \pgfsyspdfmark \@gobblethree } \ExplSyntaxOff } \cs_gset_eq:NN \@@_provide_pgfsyspdfmark: \prg_do_nothing: @@ -4750,7 +4918,7 @@ version 2005/12/01 or later. % \emph{environment} whether we are in a command of \pkg{nicematrix} or in an % environment of \pkg{nicematrix}. The default value is \emph{environment}. % \begin{macrocode} -\str_set:Nn \g_@@_com_or_env_str { environment } +\tl_set:Nn \g_@@_com_or_env_str { environment } % \end{macrocode} % % \bigskip @@ -4813,6 +4981,7 @@ version 2005/12/01 or later. \bool_new:N \g_@@_row_of_col_done_bool % \end{macrocode} % +% % \bigskip % |\l_@@_code_before_tl| may contain two types of informations: % \begin{itemize} @@ -4889,7 +5058,7 @@ version 2005/12/01 or later. % \end{macrocode} % In fact, this sequence will also contain the positions of the cells with a % |\diagbox|. The sequence |\g_@@_pos_of_blocks_seq| will be used when we will -% draw the rules required by the keys |hvlines| or |hvlines-except-corners|. +% draw the rules (which respect the blocks). % % \bigskip % We will also manage a sequence for the positions of the dotted lines. These @@ -5031,10 +5200,10 @@ version 2005/12/01 or later. % % \bigskip % The following counter will be used to count the number of successive tabular -% notes such as in +% notes such as in % |\tabularnote{Note 1}\tabularnote{Note 2}\tabularnote{Note 3}|. % In the tabular, the labels of those nodes are composed as a comma -% separated list (e.g. \textsuperscript{\emph{a},\emph{b},\emph{c}}). +% separated list (e.g. \textsuperscript{\textit{a},\textit{b},\textit{c}}). % \begin{macrocode} \int_new:N \l_@@_number_of_notes_int % \end{macrocode} @@ -5042,7 +5211,7 @@ version 2005/12/01 or later. % \bigskip % The following function can be redefined by using the key |notes/style|. % \begin{macrocode} -\cs_new:Npn \@@_notes_style:n #1 { \emph { \alph { #1 } } } +\cs_new:Npn \@@_notes_style:n #1 { \textit { \alph { #1 } } } % \end{macrocode} % % \bigskip @@ -5134,7 +5303,7 @@ version 2005/12/01 or later. % \begin{macrocode} \int_incr:N \l_@@_number_of_notes_int % \end{macrocode} -% We expand the content of the note at the point of utilisation of +% We expand the content of the note at the point of use of % |\tabularnote| as does |\footnote|. % \begin{macrocode} \seq_gput_right:Nx \g_@@_tabularnotes_seq { #1 } @@ -5339,7 +5508,7 @@ version 2005/12/01 or later. % array). % \begin{macrocode} \str_new:N \l_@@_baseline_str -\str_set:Nn \l_@@_baseline_str c +\tl_set:Nn \l_@@_baseline_str c % \end{macrocode} % % \bigskip @@ -5360,21 +5529,28 @@ version 2005/12/01 or later. % \end{macrocode} % % \bigskip -% The flag |\l_@@_hlines_bool| corresponds to the key |hlines|, the flag -% |\l_@@_vlines_bool| to the key |vlines| and the flag |hvlines| to the key -% |hvlines|. The key |hvlines| is not a mere alias for the conjonction of -% |hlines| and |vlines|. Indeed, with |hvlines|, the vertical and horizontal -% rules are \emph{not} drawn within the blocks (created by |\Block|). +% If the flag |\l_@@_vlines_bool| is raised, horizontal space will be reserved +% in the the preamble of the array (for the vertical rules) and, after the +% construction of the array, the vertical rules will be drawn. % \begin{macrocode} -\bool_new:N \l_@@_hlines_bool \bool_new:N \l_@@_vlines_bool -\bool_new:N \l_@@_hvlines_bool % \end{macrocode} % % \bigskip -% The flag |\l_@@_hlines_except_corners_bool| corresponds to the key |hlines-except-corners|. +% If the flag |\l_@@_hlines_bool| is raised, vertical space will be reserved +% between the rows of the array (for the horizontal rules) and, after the +% construction of the array, the vertical rules will be drawn. % \begin{macrocode} -\bool_new:N \l_@@_hvlines_except_corners_bool +\bool_new:N \l_@@_hlines_bool +% \end{macrocode} +% +% \bigskip +% The flag |\l_@@_except_corners_bool| will be raised when the key +% |except-corners| will be used. In that case, the corners will be computed +% before we draw rules and the rules won't be drawn in the corners. As expected, +% the key |hvlines-except-corners| raises the key |except-corners|. +% \begin{macrocode} +\clist_new:N \l_@@_except_corners_clist % \end{macrocode} % % \begin{macrocode} @@ -5553,7 +5729,6 @@ version 2005/12/01 or later. vlines .bool_set:N = \l_@@_vlines_bool , hvlines .code:n = { - \bool_set_true:N \l_@@_hvlines_bool \bool_set_true:N \l_@@_vlines_bool \bool_set_true:N \l_@@_hlines_bool } , @@ -5590,30 +5765,37 @@ version 2005/12/01 or later. % We define a set of keys used by the environments of \pkg{nicematrix} (but not % by the command |\NiceMatrixOptions|). % \begin{macrocode} -\keys_define:nn { NiceMatrix / Env } - { - hvlines-except-corners .bool_set:N = \l_@@_hvlines_except_corners_bool , - hvlines-except-corners .default:n = true , - code-before .code:n = +\keys_define:nn { NiceMatrix / Env } + { + except-corners .clist_set:N = \l_@@_except_corners_clist , + except-corners .default:n = { NW , SW , NE , SE } , + hvlines-except-corners .code:n = { - \tl_if_empty:nF { #1 } - { - \tl_put_right:Nn \l_@@_code_before_tl { #1 } - \bool_set_true:N \l_@@_code_before_bool - } + \clist_set:Nn \l_@@_except_corners_clist { #1 } + \bool_set_true:N \l_@@_vlines_bool + \bool_set_true:N \l_@@_hlines_bool } , + hvlines-except-corners .default:n = { NW , SW , NE , SE } , + code-before .code:n = + { + \tl_if_empty:nF { #1 } + { + \tl_put_right:Nn \l_@@_code_before_tl { #1 } + \bool_set_true:N \l_@@_code_before_bool + } + } , % \end{macrocode} % \bigskip % The options |c|, |t| and |b| of the environment |{NiceArray}| have the same % meaning as the option of the classical environment |{array}|. % \begin{macrocode} - c .code:n = \str_set:Nn \l_@@_baseline_str c , - t .code:n = \str_set:Nn \l_@@_baseline_str t , - b .code:n = \str_set:Nn \l_@@_baseline_str b , + c .code:n = \tl_set:Nn \l_@@_baseline_str c , + t .code:n = \tl_set:Nn \l_@@_baseline_str t , + b .code:n = \tl_set:Nn \l_@@_baseline_str b , baseline .tl_set:N = \l_@@_baseline_str , baseline .value_required:n = true , columns-width .code:n = - \str_if_eq:nnTF { #1 } { auto } + \tl_if_eq:nnTF { #1 } { auto } { \bool_set_true:N \l_@@_auto_columns_width_bool } { \dim_set:Nn \l_@@_columns_width_dim { #1 } } , columns-width .value_required:n = true , @@ -5778,7 +5960,7 @@ version 2005/12/01 or later. % In |\NiceMatrixOptions|, the special value |auto| is not available. % \begin{macrocode} columns-width .code:n = - \str_if_eq:nnTF { #1 } { auto } + \tl_if_eq:nnTF { #1 } { auto } { \@@_error:n { Option~auto~for~columns-width } } { \dim_set:Nn \l_@@_columns_width_dim { #1 } } , % \end{macrocode} @@ -5803,7 +5985,7 @@ version 2005/12/01 or later. % \begin{macrocode} letter-for-dotted-lines .code:n = { - \int_compare:nTF { \tl_count:n { #1 } = 1 } + \tl_if_single_token:nTF { #1 } { \str_set:Nx \l_@@_letter_for_dotted_lines_str { #1 } } { \@@_error:n { Bad~value~for~letter~for~dotted~lines } } } , @@ -5845,9 +6027,6 @@ version 2005/12/01 or later. { \int_set:Nn \l_@@_last_col_int { #1 } } , l .code:n = \tl_set:Nn \l_@@_type_of_col_tl l , r .code:n = \tl_set:Nn \l_@@_type_of_col_tl r , - S .code:n = \bool_if:NTF \c_@@_siunitx_loaded_bool - { \tl_set:Nn \l_@@_type_of_col_tl S } - { \@@_error:n { option~S~without~siunitx } } , small .bool_set:N = \l_@@_small_bool , small .value_forbidden:n = true , unknown .code:n = \@@_error:n { Unknown~option~for~NiceMatrix } @@ -6466,6 +6645,7 @@ version 2005/12/01 or later. \cs_set_eq:NN \Ddots \@@_Ddots \cs_set_eq:NN \Iddots \@@_Iddots \cs_set_eq:NN \hdottedline \@@_hdottedline: + \cs_set_eq:NN \Hline \@@_Hline: \cs_set_eq:NN \Hspace \@@_Hspace: \cs_set_eq:NN \Hdotsfor \@@_Hdotsfor: \cs_set_eq:NN \Vdotsfor \@@_Vdotsfor: @@ -6473,7 +6653,7 @@ version 2005/12/01 or later. \cs_set_eq:NN \Block \@@_Block: \cs_set_eq:NN \rotate \@@_rotate: \cs_set_eq:NN \OnlyMainNiceMatrix \@@_OnlyMainNiceMatrix:n - \cs_set_eq:NN \dotfill \@@_dotfill: + \cs_set_eq:NN \dotfill \@@_old_dotfill: \cs_set_eq:NN \CodeAfter \@@_CodeAfter:n \cs_set_eq:NN \diagbox \@@_diagbox:nn \bool_if:NT \l_@@_colortbl_like_bool \@@_colortbl_like: @@ -6542,7 +6722,7 @@ version 2005/12/01 or later. % % \medskip % \begin{macrocode} - \tl_gclear_new:N \g_@@_code_before_tl + \tl_gclear_new:N \g_nicematrix_code_before_tl } % \end{macrocode} % This is the end of |\@@_pre_array:|. @@ -6575,7 +6755,7 @@ version 2005/12/01 or later. \bool_set_true:N \l_@@_in_env_bool % \end{macrocode} % The command |\CT@arc@| contains the instruction of color for the rules of the -% array\footnote{e.g. |\color[rgb]{0.5,0.5,0}|)}. This command is used by |\CT@arc@| but +% array\footnote{e.g. |\color[rgb]{0.5,0.5,0}|}. This command is used by |\CT@arc@| but % we use it also for compatibility with \pkg{colortbl}. But we want also to be % able to use color for the rules of the array when \pkg{colortbl} is \emph{not} % loaded. That's why we do the following instruction which is in the patch of @@ -6605,20 +6785,14 @@ version 2005/12/01 or later. % \end{macrocode} % % -% We do a redefinition of |\@arrayrule| because we want that the vertical rules -% drawn by "|" in the preamble of the array don't extend in the potential -% exterior rows. -% \begin{macrocode} - \cs_set_protected:Npn \@arrayrule { \@addtopreamble \@@_vline: } -% \end{macrocode} -% % The sequence |\g_@@_blocks_seq| will contain the carateristics of the blocks % (specified by |\Block|) of the array. The sequence |\g_@@_pos_of_blocks_seq| % will contain only the position of the blocks. Of course, this is redundant but % it's for efficiency. % \begin{macrocode} - \seq_clear:N \g_@@_blocks_seq - \seq_clear:N \g_@@_pos_of_blocks_seq + \seq_gclear:N \g_@@_blocks_seq + \seq_gclear:N \g_@@_pos_of_blocks_seq + \seq_gclear:N \g_@@_pos_of_xdots_seq % \end{macrocode} % In fact, the sequence |\g_@@_pos_of_blocks_seq| will also contain the % positions of the cells with a |\diagbox|. @@ -7217,7 +7391,6 @@ version 2005/12/01 or later. l { \@@_patch_preamble_i:n #1 } r { \@@_patch_preamble_i:n #1 } > { \@@_patch_preamble_ii:nn #1 } - < { \@@_patch_preamble_ii:nn #1 } ! { \@@_patch_preamble_ii:nn #1 } @ { \@@_patch_preamble_ii:nn #1 } | { \@@_patch_preamble_iii:n #1 } @@ -7247,17 +7420,14 @@ version 2005/12/01 or later. % We increment the counter of columns. % \begin{macrocode} \int_gincr:N \c@jCol - \bool_if:NT \l_@@_vlines_bool - { - \tl_gput_right:Nn \g_@@_preamble_tl - { ! { \skip_horizontal:N \arrayrulewidth } } - } - \@@_patch_preamble:n + \@@_patch_preamble_viii:n } % \end{macrocode} % +% +% % \medskip -% For |>|, |<|, |!| and |@| +% For |>|, |!| and |@| % \begin{macrocode} \cs_new_protected:Npn \@@_patch_preamble_ii:nn #1 #2 { @@ -7301,7 +7471,7 @@ version 2005/12/01 or later. } } \tl_gput_right:Nx \g_@@_internal_code_after_tl - { \@@_vline:nn { \int_use:N \c@jCol } { \int_use:N \l_tmpa_int } } + { \@@_vline:nn { \@@_succ:n \c@jCol } { \int_use:N \l_tmpa_int } } \int_zero:N \l_tmpa_int \@@_patch_preamble:n #1 } @@ -7329,7 +7499,7 @@ version 2005/12/01 or later. % We increment the counter of columns. % \begin{macrocode} \int_gincr:N \c@jCol - \@@_patch_preamble:n + \@@_patch_preamble_viii:n } % \end{macrocode} % @@ -7356,7 +7526,7 @@ version 2005/12/01 or later. % We increment the counter of columns. % \begin{macrocode} \int_gincr:N \c@jCol - \@@_patch_preamble:n + \@@_patch_preamble_viii:n } % \end{macrocode} % @@ -7371,22 +7541,13 @@ version 2005/12/01 or later. % We increment the counter of columns. % \begin{macrocode} \int_gincr:N \c@jCol - \bool_if:NT \l_@@_vlines_bool - { - \tl_gput_right:Nn \g_@@_preamble_tl - { ! { \skip_horizontal:N \arrayrulewidth } } - } - \@@_patch_preamble:n + \@@_patch_preamble_viii:n } % \end{macrocode} % % \begin{macrocode} \cs_new_protected:Npn \@@_patch_preamble_vii:n #1 { -% \end{macrocode} -% Here, we have a problem in the cases of the use in the first column or the ``last -% one''. -% \begin{macrocode} \tl_gput_right:Nn \g_@@_preamble_tl { ! { \skip_horizontal:N 2\l_@@_radius_dim } } % \end{macrocode} @@ -7399,6 +7560,33 @@ version 2005/12/01 or later. } % \end{macrocode} % +% After a specifier of column, we have to test whether there is one or several +% |<{..}| because, after those potential |<{...}|, we have to insert +% |!{\skip_horizontal:N ...}| when the key |vlines| is used. +% \begin{macrocode} +\cs_new_protected:Npn \@@_patch_preamble_viii:n #1 + { + \str_if_eq:nnTF { #1 } { < } + \@@_patch_preamble_ix:n + { + \bool_if:NT \l_@@_vlines_bool + { + \tl_gput_right:Nn \g_@@_preamble_tl + { ! { \skip_horizontal:N \arrayrulewidth } } + } + \@@_patch_preamble:n { #1 } + } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_patch_preamble_ix:n #1 + { + \tl_gput_right:Nn \g_@@_preamble_tl { < { #1 } } + \@@_patch_preamble_viii:n + } +% \end{macrocode} +% % % \bigskip % The command |\@@_put_box_in_flow:| puts the box |\l_tmpa_box| (which contains @@ -7425,21 +7613,6 @@ version 2005/12/01 or later. % \begin{macrocode} \cs_new_protected:Npn \@@_put_box_in_flow_i: { - \str_case:VnF \l_@@_baseline_str - { - { t } { \int_set:Nn \l_tmpa_int 1 } - { b } { \int_set_eq:NN \l_tmpa_int \c@iRow } - } - { \int_set:Nn \l_tmpa_int \l_@@_baseline_str } - \bool_if:nT - { - \int_compare_p:nNn \l_tmpa_int < \l_@@_first_row_int - || \int_compare_p:nNn \l_tmpa_int > \g_@@_row_total_int - } - { - \@@_error:n { bad~value~for~baseline } - \int_set:Nn \l_tmpa_int 1 - } \pgfpicture \@@_qpoint:n { row - 1 } \dim_gset_eq:NN \g_tmpa_dim \pgf@y @@ -7450,12 +7623,38 @@ version 2005/12/01 or later. % Now, |\g_tmpa_dim| contains the $y$-value of the center of the array (the % delimiters are centered in relation with this value). % \begin{macrocode} - \@@_qpoint:n { row - \int_use:N \l_tmpa_int - base } - \dim_gsub:Nn \g_tmpa_dim \pgf@y + \str_if_in:NnTF \l_@@_baseline_str { line- } + { + \int_set:Nn \l_tmpa_int + { + \str_range:Nnn + \l_@@_baseline_str + 6 + { \str_count:N \l_@@_baseline_str } + } + \@@_qpoint:n { row - \int_use:N \l_tmpa_int } + } + { + \str_case:VnF \l_@@_baseline_str + { + { t } { \int_set:Nn \l_tmpa_int 1 } + { b } { \int_set_eq:NN \l_tmpa_int \c@iRow } + } + { \int_set:Nn \l_tmpa_int \l_@@_baseline_str } + \bool_lazy_or:nnT + { \int_compare_p:nNn \l_tmpa_int < \l_@@_first_row_int } + { \int_compare_p:nNn \l_tmpa_int > \g_@@_row_total_int } + { + \@@_error:n { bad~value~for~baseline } + \int_set:Nn \l_tmpa_int 1 + } + \@@_qpoint:n { row - \int_use:N \l_tmpa_int - base } % \end{macrocode} % We take into account the position of the mathematical axis. % \begin{macrocode} - \dim_gsub:Nn \g_tmpa_dim { \fontdimen22 \textfont2 } + \dim_gsub:Nn \g_tmpa_dim { \fontdimen22 \textfont2 } + } + \dim_gsub:Nn \g_tmpa_dim \pgf@y % \end{macrocode} % Now, |\g_tmpa_dim| contains the value of the $y$ translation we have to to. % \begin{macrocode} @@ -7561,7 +7760,7 @@ version 2005/12/01 or later. % We convert a value of |t| to a value of |1|. % \begin{macrocode} \str_if_eq:VnT \l_@@_baseline_str { t } - { \str_set:Nn \l_@@_baseline_str { 1 } } + { \tl_set:Nn \l_@@_baseline_str { 1 } } % \end{macrocode} % Now, we convert the value of |\l_@@_baseline_str| (which should represent an % integer) to an integer stored in |\l_tmpa_int|. @@ -8173,7 +8372,7 @@ version 2005/12/01 or later. \str_gset:Nn \g_@@_name_env_str { #1 NiceMatrix } \tl_set:Nn \l_@@_type_of_col_tl c \keys_set:nn { NiceMatrix / NiceMatrix } { ##1 } - \exp_args:Nnx \@@_begin_of_NiceMatrix:nn { #1 } \l_@@_type_of_col_tl + \exp_args:Nne \@@_begin_of_NiceMatrix:nn { #1 } \l_@@_type_of_col_tl } { \use:c { end #1 NiceArray } } } @@ -8317,6 +8516,13 @@ version 2005/12/01 or later. \int_use:N \g_@@_col_total_int } +% \end{macrocode} +% We write also the potential content of |\g_@@_pos_of_blocks_seq| (it will be +% useful if the commands |\rowcolors| is used with the key |respect-blocks|. +% \begin{macrocode} + \seq_gset_from_clist:cn + { c_@@_pos_of_blocks_ \int_use:N \g_@@_env_int _ seq } + { \seq_use:Nnnn \g_@@_pos_of_blocks_seq , , , } } \iow_now:Nn \@mainaux \ExplSyntaxOff } @@ -8385,29 +8591,54 @@ version 2005/12/01 or later. % \end{macrocode} % % \bigskip -% Now, we actually draw the dotted lines. +% Now, we actually draw the dotted lines (specified by |\Cdots|, |\Vdots|, +% etc.). % \begin{macrocode} \@@_draw_dotted_lines: % \end{macrocode} % +% \bigskip +% The following computes the ``corners'' (made up of empty cells) but if there +% is no corner to compute, it will do nothing. % \begin{macrocode} - \bool_if:NTF \l_@@_hvlines_bool - \@@_draw_hvlines: - { - \bool_if:NT \l_@@_hlines_bool \@@_draw_hlines: - \bool_if:NT \l_@@_vlines_bool \@@_draw_vlines: - \bool_if:NT \l_@@_hvlines_except_corners_bool - \@@_draw_hvlines_except_corners: - } + \@@_compute_corners: % \end{macrocode} -% -% We have to revert to a clean version of |\ialign| because there may be -% tabulars in the |\Block| instructions that will be composed now. +% +% \bigskip +% The following code is only for efficiency. We determine whether the potential +% horizontal and vertical rules are ``complete'', that is to say drawn in the +% whole array. We are sure that all the rules will be complete when there is no +% block, no virtual block (determined by a command such as |\Cdots|, |\Vdots|, +% etc.) and no corners. In that case, we switch to a shortcut version of +% |\@@_vline_i:nn| and |\@@_hline:nn|. % \begin{macrocode} - \cs_set_eq:NN \ialign \@@_old_ialign: - \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks: + % \bool_lazy_all:nT + % { + % { \seq_if_empty_p:N \g_@@_pos_of_blocks_seq } + % { \seq_if_empty_p:N \g_@@_pos_of_xdots_seq } + % { \seq_if_empty_p:N \l_@@_empty_corner_cells_seq } + % } + % { + % \cs_set_eq:NN \@@_vline_i:nn \@@_vline_i_complete:nn + % \cs_set_eq:NN \@@_hline_i:nn \@@_hline_i_complete:nn + % } + \bool_if:NT \l_@@_hlines_bool \@@_draw_hlines: + \bool_if:NT \l_@@_vlines_bool \@@_draw_vlines: \g_@@_internal_code_after_tl \tl_gclear:N \g_@@_internal_code_after_tl +% \end{macrocode} +% +% \bigskip +% We draw the blocks. We have to revert to a clean version of |\ialign| because +% there may be tabulars in the |\Block| instructions that will be composed now. +% \begin{macrocode} + \cs_set_eq:NN \ialign \@@_old_ialign: + \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks: +% \end{macrocode} +% +% \bigskip +% Now, the |code-after|. +% \begin{macrocode} \bool_if:NT \c_@@_tikz_loaded_bool { \tikzset @@ -8438,17 +8669,17 @@ version 2005/12/01 or later. % % % \medskip -% |\g_@@_code_before_tl| is for instructions in the cells of the array such as +% |\g_nicematrix_code_before_tl| is for instructions in the cells of the array such as % |\rowcolor| and |\cellcolor| (when the key |colortbl-like| is in % force). These instructions will be written on the |aux| file to be added to % the |code-before| in the next run. % \begin{macrocode} - \tl_if_empty:NF \g_@@_code_before_tl + \tl_if_empty:NF \g_nicematrix_code_before_tl { % \end{macrocode} % The command |\rowcolor| in tabular will in fact use |\rectanglecolor| in order % to follow the behaviour of |\rowcolor| of \pkg{colortbl}. That's why there may -% be a command |\rectanglecolor| in |\g_@@_code_before_tl|. In order to avoid an +% be a command |\rectanglecolor| in |\g_nicematrix_code_before_tl|. In order to avoid an % error during the expansion, we define a protected version of |\rectanglecolor|. % \begin{macrocode} \cs_set_protected:Npn \rectanglecolor { } @@ -8458,7 +8689,7 @@ version 2005/12/01 or later. { \tl_gset:cn { g_@@_code_before_ \int_use:N \g_@@_env_int _ tl } - { \g_@@_code_before_tl } + { \g_nicematrix_code_before_tl } } \iow_now:Nn \@mainaux \ExplSyntaxOff \bool_set_true:N \l_@@_code_before_bool @@ -8751,19 +8982,16 @@ version 2005/12/01 or later. } } % \end{macrocode} -% If the key |hvlines| is used, we remind the rectangle described by all the -% dotted lines in order to respect the corresponding virtual ``block'' when -% drawing the horizontal and vertical rules. +% We remind the rectangle described by all the dotted lines in order to respect +% the corresponding virtual ``block'' when drawing the horizontal and vertical +% rules. % \begin{macrocode} - \bool_if:NT \l_@@_hvlines_bool - { - \seq_gput_right:Nx \g_@@_pos_of_xdots_seq - { - { \int_use:N \l_@@_initial_i_int } - { \int_use:N \l_@@_initial_j_int } - { \int_use:N \l_@@_final_i_int } - { \int_use:N \l_@@_final_j_int } - } + \seq_gput_right:Nx \g_@@_pos_of_xdots_seq + { + { \int_use:N \l_@@_initial_i_int } + { \int_use:N \l_@@_initial_j_int } + { \int_use:N \l_@@_final_i_int } + { \int_use:N \l_@@_final_j_int } } } % \end{macrocode} @@ -9700,11 +9928,22 @@ version 2005/12/01 or later. % since |\tl_lower_case:n| seems to be deprecated. % \begin{macrocode} { - > \@@_Cell: - \bool_if:NT \c_@@_define_L_C_R_bool \tl_lower_case:n - #2 - < \@@_end_Cell: - } + \exp_args:Ne \str_case:nn { \tl_lower_case:n { #2 } } + { + l { > \@@_Cell: l < \@@_end_Cell: } + r { > \@@_Cell: r < \@@_end_Cell: } + c { > \@@_Cell: c < \@@_end_Cell: } + { l | } { > \@@_Cell: l < \@@_end_Cell: | } + { r | } { > \@@_Cell: r < \@@_end_Cell: | } + { c | } { > \@@_Cell: c < \@@_end_Cell: | } + { | l } { | > \@@_Cell: l < \@@_end_Cell: } + { | r } { | > \@@_Cell: r < \@@_end_Cell: } + { | c } { | > \@@_Cell: c < \@@_end_Cell: } + { | l | } { | > \@@_Cell: l < \@@_end_Cell: | } + { | r | } { | > \@@_Cell: r < \@@_end_Cell: | } + { | c | } { | > \@@_Cell: c < \@@_end_Cell: | } + } + } { #3 } % \end{macrocode} % The |\peek_remove_spaces:n| is mandatory. @@ -9990,7 +10229,7 @@ version 2005/12/01 or later. \vbox_to_zero:n { } % \end{macrocode} % |0.8 ex| will be the distance between the principal part of the array and our -% element (which is composed with |\rotate|. +% element (which is composed with |\rotate|). % \begin{macrocode} \skip_vertical:n { - \box_ht:N \@arstrutbox + 0.8 ex } \box_use:N \l_@@_cell_box @@ -10033,7 +10272,7 @@ version 2005/12/01 or later. \group_begin: \keys_set:nn { NiceMatrix / xdots } { #1 , #4 , down = #5 , up = #6 } \tl_if_empty:VF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } } - \use:x + \use:e { \@@_line_i:nn { \@@_double_int_eval:n #2 \q_stop } @@ -10295,17 +10534,127 @@ version 2005/12/01 or later. % The command |\rowcolors| (accessible in the |code-before|) is inspired by the % command |\rowcolors| of the package \pkg{xcolor} (with the option |table|). % However, the command |\rowcolors| of \pkg{nicematrix} has \emph{not} the -% optional argument of the command |\rowcolors| of \pkg{xcolor}. +% optional argument of the command |\rowcolors| of \pkg{xcolor}. Here is an +% example: |\rowcolors{1}{blue!10}{}[respect-blocks]|. +% +% The last optional argument is for options. As of now, there is only one key +% available : |respect-blocks|. +% +% \begin{macrocode} +\keys_define:nn { NiceMatrix / rowcolors } + { + respect-blocks .bool_set:N = \l_@@_respect_blocks_bool , + respect-blocks .default:n = true , + unknown .code:n = \@@_error:n { Unknown~option~for~rowcolors } + } +% \end{macrocode} +% % \begin{macrocode} -\NewDocumentCommand \@@_rowcolors { O { } m m m } +\NewDocumentCommand \@@_rowcolors { O { } m m m O { } } { - \int_step_inline:nnn { #2 } { \int_use:N \c@iRow } + \keys_set:nn { NiceMatrix / rowcolors } { #5 } + \bool_lazy_and:nnTF + \l_@@_respect_blocks_bool + { \cs_if_exist_p:c { c_@@_pos_of_blocks_ \int_use:N \g_@@_env_int _ seq } } + { \@@_rowcolors_i:nnnn { #1 } { #2 } { #3 } { #4 } } { - \int_if_odd:nTF { ##1 } - { \@@_rowcolor [ #1 ] { #3 } } - { \@@_rowcolor [ #1 ] { #4 } } - { ##1 } - } + \int_step_inline:nnn { #2 } { \int_use:N \c@iRow } + { + \int_if_odd:nTF { ##1 } + { \@@_rowcolor [ #1 ] { #3 } } + { \@@_rowcolor [ #1 ] { #4 } } + { ##1 } + } + } + } +% \end{macrocode} +% +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_rowcolors_i:nnnn #1 #2 #3 #4 + { + \seq_set_eq:Nc \l_tmpb_seq + { c_@@_pos_of_blocks_ \int_use:N \g_@@_env_int _ seq } +% \end{macrocode} +% We don't want to take into account a block which is completely in the ``first +% column'' of (number $0$) or in the ``last column''. +% \begin{macrocode} + \seq_set_filter:NNn \l_tmpa_seq \l_tmpb_seq + { \@@_not_in_exterior_p:nnnn ##1 } +% \end{macrocode} +% The counter |\l_tmpa_int| will be the index of the loop. +% \begin{macrocode} + \int_set:Nn \l_tmpa_int { #2 } +% \end{macrocode} +% The boolean |\l_tmpa_bool| will indicate whereas we are in a row of the first +% color or of the second color. +% \begin{macrocode} + \bool_set_false:N \l_tmpa_bool +% \end{macrocode} +% We recall that, in the |code-before|, |\c@iRow| is the total number of rows of +% the array (excepted the potential exterior rows). +% \begin{macrocode} + \int_do_until:nNnn \l_tmpa_int > \c@iRow + { + \seq_set_filter:NNn \l_tmpb_seq \l_tmpa_seq + { \@@_intersect_our_row_p:nnnn ##1 } +% \end{macrocode} +% We compute in |\l_tmpb_int| the last row covered by a block. +% \begin{macrocode} + \int_set_eq:NN \l_tmpb_int \l_tmpa_int + \seq_map_inline:Nn \l_tmpb_seq { \@@_rowcolors_ii:nnnn ##1 } + \bool_if:NTF \l_tmpa_bool + { + \@@_rowcolor [ #1 ] { #4 } + { \int_use:N \l_tmpa_int - \int_use:N \l_tmpb_int } + \bool_set_false:N \l_tmpa_bool + } + { + \@@_rowcolor [ #1 ] { #3 } + { \int_use:N \l_tmpa_int - \int_use:N \l_tmpb_int } + \bool_set_true:N \l_tmpa_bool + } + \int_set:Nn \l_tmpa_int { \l_tmpb_int + 1 } + } + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_rowcolors_ii:nnnn #1 #2 #3 #4 + { + \int_compare:nNnT { #3 } > \l_tmpb_int + { \int_set:Nn \l_tmpb_int { #3 } } + } +% \end{macrocode} +% +% +% \bigskip +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_not_in_exterior:nnnn p + { + \bool_lazy_or:nnTF + { \int_compare_p:nNn { #4 } = \c_zero_int } + { \int_compare_p:nNn { #2 } = { \@@_succ:n { \c@jCol } } } + \prg_return_false: + \prg_return_true: + } +% \end{macrocode} +% +% \bigskip +% The following command return |true| when the block intersects the row +% |\l_tmpa_int|. +% \begin{macrocode} +\prg_new_conditional:Nnn \@@_intersect_our_row:nnnn p + { + \bool_if:nTF + { + \int_compare_p:n { #1 <= \l_tmpa_int } + && + \int_compare_p:n { \l_tmpa_int <= #3 } + } + \prg_return_true: + \prg_return_false: } % \end{macrocode} % @@ -10332,7 +10681,7 @@ version 2005/12/01 or later. % \begin{macrocode} \NewDocumentCommand \@@_cellcolor_tabular { O { } m } { - \tl_gput_right:Nx \g_@@_code_before_tl + \tl_gput_right:Nx \g_nicematrix_code_before_tl { \cellcolor [ #1 ] { #2 } { \int_use:N \c@iRow - \int_use:N \c@jCol } } } % \end{macrocode} @@ -10343,7 +10692,7 @@ version 2005/12/01 or later. % \begin{macrocode} \NewDocumentCommand \@@_rowcolor_tabular { O { } m } { - \tl_gput_right:Nx \g_@@_code_before_tl + \tl_gput_right:Nx \g_nicematrix_code_before_tl { \exp_not:N \rectanglecolor [ #1 ] { #2 } { \int_use:N \c@iRow - \int_use:N \c@jCol } @@ -10362,7 +10711,7 @@ version 2005/12/01 or later. % You use |gput_left| because we want the specification of colors for the % columns drawn before the specifications of color for the rows (and the cells). % \begin{macrocode} - \tl_gput_left:Nx \g_@@_code_before_tl + \tl_gput_left:Nx \g_nicematrix_code_before_tl { \exp_not:N \columncolor [ #1 ] { #2 } { \int_use:N \c@jCol } } } } @@ -10424,45 +10773,118 @@ version 2005/12/01 or later. % |\l_@@_last_row_int| may be equal to $-2$ or $-1$ (we can't write % |\int_compare:nNnT \c@iRow < \l_@@_last_row_int|). % -% -% % % \bigskip -% The following command will be executed in the |internal-code-after|. |#1| is -% the number the column where to draw the rule and |#2| is the number of -% consecutive occurrences of \verb+|+. +% The following command will be executed in the |internal-code-after|. The rule +% will be drawn \emph{before} the column |#1|. |#2| is the number of consecutive +% occurrences of \verb+|+. % \begin{macrocode} \cs_new_protected:Npn \@@_vline:nn #1 #2 { - \bool_if:NTF \c_@@_tikz_loaded_bool - { - \tikzpicture - \@@_vline_i:nn { #1 } { #2 } - \endtikzpicture - } +% \end{macrocode} +% The following test is for the case where the user don't use all the columns +% specified in the preamble of the environment (for instance, a preamble of +% \verb+|c|c|c|+ but only two columns used). +% \begin{macrocode} + \int_compare:nNnT { #1 } < { \c@jCol + 2 } { \pgfpicture - \@@_vline_i:nn { #1 } { #2 } + \@@_vline_i:nn { #1 } { #2 } \endpgfpicture } } % \end{macrocode} % % \begin{macrocode} -\cs_new_protected:Npn \@@_vline_i:nn #1 #2 +\cs_new_protected:Npn \@@_vline_i:nn #1 #2 + { +% \end{macrocode} +% |\l_tmpa_tl| is the number of row and |\l_tmpb_tl| the number of column. +% \begin{macrocode} + \tl_set:Nx \l_tmpb_tl { #1 } + \int_step_variable:nNn \c@iRow \l_tmpa_tl + { +% \end{macrocode} +% The boolean |\g_tmpa_bool| indicates whether the small vertical rule will be +% drawn. If we find that it is in a block (a real block, created by |\Block| or +% a virtual block corresponding to a dotted line, created by |\Cdots|, |\Vdots|, +% etc.), we will set |\g_tmpa_bool| to |false| and the small vertical rule won't +% be drawn. +% \begin{macrocode} + \bool_gset_true:N \g_tmpa_bool + \seq_map_inline:Nn \g_@@_pos_of_blocks_seq + { \@@_test_if_vline_in_block:nnnn ##1 } + \seq_map_inline:Nn \g_@@_pos_of_xdots_seq + { \@@_test_if_vline_in_block:nnnn ##1 } + \clist_if_empty:NF \l_@@_except_corners_clist + \@@_test_in_corner_v: + \bool_if:NT \g_tmpa_bool + { \@@_vline_ii:nnnn { #1 } { #2 } \l_tmpa_tl \l_tmpa_tl } + } + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_test_in_corner_v: + { + \int_compare:nNnTF \l_tmpb_tl = { \@@_succ:n \c@jCol } + { + \seq_if_in:NxT + \l_@@_empty_corner_cells_seq + { \l_tmpa_tl - \@@_pred:n \l_tmpb_tl } + { \bool_set_false:N \g_tmpa_bool } + } + { + \seq_if_in:NxT + \l_@@_empty_corner_cells_seq + { \l_tmpa_tl - \l_tmpb_tl } + { + \int_compare:nNnTF \l_tmpb_tl = 1 + { \bool_set_false:N \g_tmpa_bool } + { + \seq_if_in:NxT + \l_@@_empty_corner_cells_seq + { \l_tmpa_tl - \@@_pred:n \l_tmpb_tl } + { \bool_set_false:N \g_tmpa_bool } + } + } + } + } +% \end{macrocode} +% +% \bigskip +% |#1| is the number of the column; |#2| is the number of vertical rules to +% draw (with potentially a color between); |#3| and |#4| are the number of the +% rows between which the rule has to be drawn. +% \begin{macrocode} +\cs_new_protected:Npn \@@_vline_ii:nnnn #1 #2 #3 #4 { - \CT@arc@ \pgfrememberpicturepositiononpagetrue \pgf@relevantforpicturesizefalse - \pgfsetlinewidth { 1.1 \arrayrulewidth } - \pgfsetrectcap - \@@_qpoint:n { row - 1 } + \@@_qpoint:n { row - #3 } \dim_set_eq:NN \l_tmpa_dim \pgf@y - \@@_qpoint:n { col - \int_eval:n { #1 + 1 } } + \@@_qpoint:n { col - #1 } \dim_set_eq:NN \l_tmpb_dim \pgf@x - \pgfpathmoveto { \pgfpoint \l_tmpb_dim \l_tmpa_dim } - \@@_qpoint:n { row - \@@_succ:n \c@iRow } + \@@_qpoint:n { row - \@@_succ:n { #4 } } \dim_set_eq:NN \l_tmpc_dim \pgf@y + \bool_lazy_and:nnT + { \int_compare_p:nNn { #2 } > 1 } + { ! \tl_if_blank_p:V \CT@drsc@ } + { + \group_begin: + \CT@drsc@ + \dim_add:Nn \l_tmpa_dim { 0.5 \arrayrulewidth } + \dim_sub:Nn \l_tmpc_dim { 0.5 \arrayrulewidth } + \dim_set:Nn \l_tmpd_dim + { \l_tmpb_dim - ( \doublerulesep + \arrayrulewidth ) * ( #2 - 1 ) } + \pgfpathrectanglecorners + { \pgfpoint \l_tmpb_dim \l_tmpa_dim } + { \pgfpoint \l_tmpd_dim \l_tmpc_dim } + \pgfusepathqfill + \group_end: + } + \pgfpathmoveto { \pgfpoint \l_tmpb_dim \l_tmpa_dim } \pgfpathlineto { \pgfpoint \l_tmpb_dim \l_tmpc_dim } \prg_replicate:nn { #2 - 1 } { @@ -10471,268 +10893,215 @@ version 2005/12/01 or later. \pgfpathmoveto { \pgfpoint \l_tmpb_dim \l_tmpa_dim } \pgfpathlineto { \pgfpoint \l_tmpb_dim \l_tmpc_dim } } + \CT@arc@ + \pgfsetlinewidth { 1.1 \arrayrulewidth } + \pgfsetrectcap \pgfusepathqstroke } % \end{macrocode} % % \bigskip -% The command |\@@_draw_vlines| will be executed when the user uses the option -% |vlines| (which draws all the vlines of the array). +% The following draws a complete vertical rule in the column |#1| (|#2| is the +% number of consecutive rules specified by the number of \verb+|+ in the +% preamble). This command will be used if there is no block in the array (and +% the key |except-corners| is not used). % \begin{macrocode} -\cs_new_protected:Npn \@@_draw_vlines: - { - \group_begin: +\cs_new_protected:Npn \@@_vline_i_complete:nn #1 #2 + { \@@_vline_ii:nnnn { #1 } { #2 } 1 { \int_use:N \c@iRow } } % \end{macrocode} % -% The command |\CT@arc@| is a command of \pkg{colortbl} which sets the color of -% the rules in the array. The package \pkg{nicematrix} uses it even when -% \pkg{colortbl} is not loaded. -% \begin{macrocode} - \CT@arc@ - \pgfpicture - \pgfrememberpicturepositiononpagetrue - \pgf@relevantforpicturesizefalse - \pgfsetlinewidth \arrayrulewidth - \pgfsetrectcap - \@@_qpoint:n { row - 1 } - \dim_set_eq:NN \l_tmpa_dim \pgf@y - \@@_qpoint:n { row - \@@_succ:n \c@iRow } - \dim_set_eq:NN \l_tmpb_dim \pgf@y -% \end{macrocode} -% -% Now, we can draw the vertical rules with a loop. +% \bigskip +% The command |\@@_draw_hlines:| draws all the vertical rules excepted in the +% blocks, in the virtual blocks (determined by a command such as |\Cdots|) and in +% the corners (if the key |except-corners| is used). % \begin{macrocode} +\cs_new_protected:Npn \@@_draw_vlines: + { \int_step_inline:nnn - { \bool_if:NTF \l_@@_NiceArray_bool 1 2 } - { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@jCol } \c@jCol } - { - \@@_qpoint:n { col - ##1 } - \dim_set_eq:NN \l_tmpc_dim \pgf@x - \pgfpathmoveto { \pgfpoint \l_tmpc_dim \l_tmpa_dim } - \pgfpathlineto { \pgfpoint \l_tmpc_dim \l_tmpb_dim } - } - \pgfusepathqstroke - \endpgfpicture - \group_end: + { \bool_if:NTF \l_@@_NiceArray_bool 1 2 } + { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@jCol } \c@jCol } + { \@@_vline:nn { ##1 } 1 } } % \end{macrocode} % % -% \subsection*{The key hvlines} -% -% \subsubsection*{The key hvlines} +% +% \subsection*{The horizontal rules} % +% \bigskip +% The following command will be executed in the |internal-code-after|. The row +% will be drawn \emph{before} the row |#1|. |#2| is the number of consecutive +% occurrences of |\Hline|. % \begin{macrocode} -\cs_new_protected:Npn \@@_draw_hlines: +\cs_new_protected:Npn \@@_hline:nn #1 #2 { \pgfpicture - \CT@arc@ - \pgfrememberpicturepositiononpagetrue - \pgf@relevantforpicturesizefalse - \pgfsetlinewidth \arrayrulewidth - \int_step_inline:nnn - { \bool_if:NTF \l_@@_NiceArray_bool 1 2 } - { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@iRow } \c@iRow } - { - \@@_qpoint:n { row - ##1 } - \dim_set_eq:NN \l_tmpa_dim \pgf@y - \pgfpathmoveto { \pgfpoint \pgf@x \pgf@y } - \@@_qpoint:n { col - \@@_succ:n { \c@jCol } } - \dim_set:Nn \l_tmpb_dim { \pgf@x + 0.5 \arrayrulewidth } - \pgfpathlineto { \pgfpoint \l_tmpb_dim \l_tmpa_dim } - } - \pgfusepathqstroke + \@@_hline_i:nn { #1 } { #2 } \endpgfpicture } % \end{macrocode} -% -% \bigskip -% Since version 4.1, the key |hvlines| is no longer a mere alias for -% the conjonction of |hlines| and |vlines|. Indeed, with |hvlines|, the vertical -% and horizontal rules are \emph{not} drawn within the blocks (created by -% |\Block|) nor within the ``virtual blocks'' (corresponding to the dotted lines -% drawn by |\Cdots|, |\Vdots|, etc.). -% \begin{macrocode} -\cs_new_protected:Npn \@@_draw_hvlines: - { - \bool_lazy_and:nnTF - { \seq_if_empty_p:N \g_@@_pos_of_blocks_seq } - { \seq_if_empty_p:N \g_@@_pos_of_xdots_seq } - \@@_draw_hvlines_i: - \@@_draw_hvlines_ii: - } -% \end{macrocode} % -% \bigskip -% This version is only for efficiency. The general case (in -% |\@@_draw_hvlines_ii:|) does the job in all case (but slower). % \begin{macrocode} -\cs_new_protected:Npn \@@_draw_hvlines_i: +\cs_new_protected:Npn \@@_hline_i:nn #1 #2 { - \@@_draw_hlines: - \@@_draw_vlines: - } % \end{macrocode} -% -% \bigskip -% Now, the general case, where there are blocks or dots in the array. +% |\l_tmpa_tl| is the number of row and |\l_tmpb_tl| the number of column. % \begin{macrocode} -\cs_new_protected:Npn \@@_draw_hvlines_ii: - { - \group_begin: - \CT@arc@ -% \end{macrocode} -% -% The horizontal rules. -% \begin{macrocode} - \int_step_variable:nnNn - { \bool_if:NTF \l_@@_NiceArray_bool 1 2 } - { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@iRow } \c@iRow } - \l_tmpa_tl + \tl_set:Nn \l_tmpa_tl { #1 } + \int_step_variable:nNn \c@jCol \l_tmpb_tl { - \int_step_variable:nNn \c@jCol \l_tmpb_tl - { % \end{macrocode} % The boolean |\g_tmpa_bool| indicates whether the small horizontal rule will be % drawn. If we find that it is in a block (a real block, created by |\Block| or % a virtual block corresponding to a dotted line, created by |\Cdots|, |\Vdots|, -% etc.), we will set |\g_tmpa_bool| to |false| and the small horizontal rule -% won't be drawn. +% etc.), we will set |\g_tmpa_bool| to |false| and the small horizontal rule won't +% be drawn. % \begin{macrocode} - \bool_gset_true:N \g_tmpa_bool - \seq_map_inline:Nn \g_@@_pos_of_blocks_seq - { \@@_test_if_hline_in_block:nnnn ##1 } - \seq_map_inline:Nn \g_@@_pos_of_xdots_seq - { \@@_test_if_hline_in_block:nnnn ##1 } + \bool_gset_true:N \g_tmpa_bool + \seq_map_inline:Nn \g_@@_pos_of_blocks_seq + { \@@_test_if_hline_in_block:nnnn ##1 } + \seq_map_inline:Nn \g_@@_pos_of_xdots_seq + { \@@_test_if_hline_in_block:nnnn ##1 } + \clist_if_empty:NF \l_@@_except_corners_clist \@@_test_in_corner_h: + \bool_if:NT \g_tmpa_bool + { \@@_hline_ii:nnnn { #1 } { #2 } \l_tmpb_tl \l_tmpb_tl } + } + } % \end{macrocode} +% +% \bigskip % \begin{macrocode} - \bool_if:NT \l_@@_hvlines_except_corners_bool - { - \int_compare:nNnTF \l_tmpa_tl = { \c@iRow + 1 } - { - \seq_if_in:NxT - \l_@@_empty_corner_cells_seq - { \@@_pred:n \l_tmpa_tl - \l_tmpb_tl } - { \bool_set_false:N \g_tmpa_bool } - } - { - \seq_if_in:NxT - \l_@@_empty_corner_cells_seq - { \l_tmpa_tl - \l_tmpb_tl } - { - \int_compare:nNnTF \l_tmpa_tl = 1 - { \bool_set_false:N \g_tmpa_bool } - { - \seq_if_in:NxT - \l_@@_empty_corner_cells_seq - { \@@_pred:n \l_tmpa_tl - \l_tmpb_tl } - { \bool_set_false:N \g_tmpa_bool } - } - } - } - } +\cs_new_protected:Npn \@@_test_in_corner_h: + { + \int_compare:nNnTF \l_tmpa_tl = { \@@_succ:n \c@iRow } + { + \seq_if_in:NxT + \l_@@_empty_corner_cells_seq + { \@@_pred:n \l_tmpa_tl - \l_tmpb_tl } + { \bool_set_false:N \g_tmpa_bool } + } + { + \seq_if_in:NxT + \l_@@_empty_corner_cells_seq + { \l_tmpa_tl - \l_tmpb_tl } + { + \int_compare:nNnTF \l_tmpa_tl = 1 + { \bool_set_false:N \g_tmpa_bool } + { + \seq_if_in:NxT + \l_@@_empty_corner_cells_seq + { \@@_pred:n \l_tmpa_tl - \l_tmpb_tl } + { \bool_set_false:N \g_tmpa_bool } + } + } + } + } % \end{macrocode} +% +% \bigskip +% |#1| is the number of the row; |#2| is the number of horizontal rules to +% draw (with potentially a color between); |#3| and |#4| are the number of the +% columns between which the rule has to be drawn. % \begin{macrocode} - \bool_if:NT \g_tmpa_bool - { - \pgfpicture - \pgfrememberpicturepositiononpagetrue - \pgf@relevantforpicturesizefalse - \pgfsetlinewidth \arrayrulewidth - \pgfsetrectcap - \@@_qpoint:n { row - \l_tmpa_tl } - \dim_set_eq:NN \l_tmpb_dim \pgf@y - \@@_qpoint:n { col - \l_tmpb_tl } - \dim_set_eq:NN \l_tmpa_dim \pgf@x - \@@_qpoint:n { col - \@@_succ:n \l_tmpb_tl } - \dim_set_eq:NN \l_tmpc_dim \pgf@x - \pgfpathmoveto { \pgfpoint \l_tmpa_dim \l_tmpb_dim } - \pgfpathlineto { \pgfpoint \l_tmpc_dim \l_tmpb_dim } - \pgfusepathqstroke - \endpgfpicture - } - } +\cs_new_protected:Npn \@@_hline_ii:nnnn #1 #2 #3 #4 + { + \pgfrememberpicturepositiononpagetrue + \pgf@relevantforpicturesizefalse + \@@_qpoint:n { col - #3 } + \dim_set_eq:NN \l_tmpa_dim \pgf@x + \@@_qpoint:n { row - #1 } + \dim_set_eq:NN \l_tmpb_dim \pgf@y + \@@_qpoint:n { col - \@@_succ:n { #4 } } + \dim_set_eq:NN \l_tmpc_dim \pgf@x + \bool_lazy_and:nnT + { \int_compare_p:nNn { #2 } > 1 } + { ! \tl_if_blank_p:V \CT@drsc@ } + { + \group_begin: + \CT@drsc@ + \dim_set:Nn \l_tmpd_dim + { \l_tmpb_dim - ( \doublerulesep + \arrayrulewidth ) * ( #2 - 1 ) } + \pgfpathrectanglecorners + { \pgfpoint \l_tmpa_dim \l_tmpb_dim } + { \pgfpoint \l_tmpc_dim \l_tmpd_dim } + \pgfusepathqfill + \group_end: + } + \pgfpathmoveto { \pgfpoint \l_tmpa_dim \l_tmpb_dim } + \pgfpathlineto { \pgfpoint \l_tmpc_dim \l_tmpb_dim } + \prg_replicate:nn { #2 - 1 } + { + \dim_sub:Nn \l_tmpb_dim \arrayrulewidth + \dim_sub:Nn \l_tmpb_dim \doublerulesep + \pgfpathmoveto { \pgfpoint \l_tmpa_dim \l_tmpb_dim } + \pgfpathlineto { \pgfpoint \l_tmpc_dim \l_tmpb_dim } } + \CT@arc@ + \pgfsetlinewidth { 1.1 \arrayrulewidth } + \pgfsetrectcap + \pgfusepathqstroke + } % \end{macrocode} -% Now, the vertical rules. +% +% \bigskip % \begin{macrocode} - \int_step_variable:nNn \c@iRow \l_tmpa_tl - { - \int_step_variable:nnNn - { \bool_if:NTF \l_@@_NiceArray_bool 1 2 } - { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@jCol } \c@jCol } - \l_tmpb_tl - { +\cs_new_protected:Npn \@@_hline_i_complete:nn #1 #2 + { \@@_hline_ii:nnnn #1 #2 1 { \int_use:N \c@jCol } } % \end{macrocode} -% The boolean |\g_tmpa_bool| indicates whether the small vertical rule will be -% drawn. If we find that it is in a block (a real block, created by |\Block| or -% a virtual block corresponding to a dotted line, created by |\Cdots|, |\Vdots|, -% etc.), we will set |\g_tmpa_bool| to |false| and the small vertical rule won't -% be drawn. +% +% \bigskip +% The command |\@@_draw_hlines:| draws all the horizontal rules excepted in the +% blocks (even the virtual drawn determined by commands such as |\Cdots| and in +% the corners (if the key |except-corners| is used). % \begin{macrocode} - \bool_gset_true:N \g_tmpa_bool - \seq_map_inline:Nn \g_@@_pos_of_blocks_seq - { \@@_test_if_vline_in_block:nnnn ##1 } - \seq_map_inline:Nn \g_@@_pos_of_xdots_seq - { \@@_test_if_vline_in_block:nnnn ##1 } +\cs_new_protected:Npn \@@_draw_hlines: + { + \int_step_inline:nnn + { \bool_if:NTF \l_@@_NiceArray_bool 1 2 } + { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@iRow } \c@iRow } + { \@@_hline:nn { ##1 } 1 } + } % \end{macrocode} % +% +% \medskip +% The command |\@@_Hline:| will be linked to |\Hline| in the environments of \pkg{nicematrix}. % \begin{macrocode} - \bool_if:NT \l_@@_hvlines_except_corners_bool - { - \int_compare:nNnTF \l_tmpb_tl = { \@@_succ:n \c@jCol } - { - \seq_if_in:NxT - \l_@@_empty_corner_cells_seq - { \l_tmpa_tl - \@@_pred:n \l_tmpb_tl } - { \bool_set_false:N \g_tmpa_bool } - } - { - \seq_if_in:NxT - \l_@@_empty_corner_cells_seq - { \l_tmpa_tl - \l_tmpb_tl } - { - \int_compare:nNnTF \l_tmpb_tl = 1 - { \bool_set_false:N \g_tmpa_bool } - { - \seq_if_in:NxT - \l_@@_empty_corner_cells_seq - { \l_tmpa_tl - \@@_pred:n \l_tmpb_tl } - { \bool_set_false:N \g_tmpa_bool } - } - } - } - } +\cs_set:Npn \@@_Hline: { \noalign { \ifnum 0 = `} \fi \@@_Hline_i:n { 1 } } % \end{macrocode} -% +% +% \medskip +% The argument of the command |\@@_Hline_i:n| is the number of successive +% |\Hline| found. % \begin{macrocode} - \bool_if:NT \g_tmpa_bool - { - \pgfpicture - \pgfrememberpicturepositiononpagetrue - \pgf@relevantforpicturesizefalse - \pgfsetlinewidth \arrayrulewidth - \pgfsetrectcap - \@@_qpoint:n { row - \l_tmpa_tl } - \dim_set_eq:NN \l_tmpb_dim \pgf@y - \@@_qpoint:n { col - \l_tmpb_tl } - \dim_set_eq:NN \l_tmpa_dim \pgf@x - \@@_qpoint:n { row - \@@_succ:n \l_tmpa_tl } - \dim_set_eq:NN \l_tmpc_dim \pgf@y - \pgfpathmoveto { \pgfpoint \l_tmpa_dim \l_tmpb_dim } - \pgfpathlineto { \pgfpoint \l_tmpa_dim \l_tmpc_dim } - \pgfusepathqstroke - \endpgfpicture - } - } - } +\cs_set:Npn \@@_Hline_i:n #1 + { + \peek_meaning_ignore_spaces:NTF \Hline + { \@@_Hline_ii:nn { #1 + 1 } } + { \@@_Hline_iii:n { #1 } } + } % \end{macrocode} -% The group was for the color of the rules. +% % \begin{macrocode} - \group_end: - \seq_gclear:N \g_@@_pos_of_xdots_seq +\cs_set:Npn \@@_Hline_ii:nn #1 #2 { \@@_Hline_i:n { #1 } } +% \end{macrocode} +% +% \begin{macrocode} +\cs_set:Npn \@@_Hline_iii:n #1 + { + \skip_vertical:n + { + \arrayrulewidth * ( #1 ) + + \doublerulesep * ( \int_max:nn 0 { #1 - 1 } ) + } + \tl_gput_right:Nx \g_@@_internal_code_after_tl + { \@@_hline:nn { \@@_succ:n { \c@iRow } } { #1 } } + \ifnum 0 = `{ \fi } } % \end{macrocode} +% +% \subsection*{The key hvlines} +% % % The following command tests wether the current position in the array (given by % |\l_tmpa_tl| for the row and |\l_tmpb_tl| for the col) would provide an @@ -10770,25 +11139,39 @@ version 2005/12/01 or later. % % % \bigskip -% \subsubsection*{The key hvlines-except-corners} +% \subsubsection*{The key except-corners} % +% When the key |except-corners| is raised, the rules are not drawn in the +% corners. Of course, we have to compute the corners before we begin to draw the +% rules. % % \begin{macrocode} -\cs_new_protected:Npn \@@_draw_hvlines_except_corners: +\cs_new_protected:Npn \@@_compute_corners: { % \end{macrocode} % The sequence |\l_@@_empty_corner_cells_seq| will be the sequence of all the -% cells empty (and not in a block) considered in the corners of the array. +% empty cells (and not in a block) considered in the corners of the array. % \begin{macrocode} \seq_clear_new:N \l_@@_empty_corner_cells_seq - \@@_compute_a_corner:nnnnnn 1 1 1 1 \c@iRow \c@jCol - \@@_compute_a_corner:nnnnnn 1 \c@jCol 1 { -1 } \c@iRow 1 - \@@_compute_a_corner:nnnnnn \c@iRow 1 { -1 } 1 1 \c@jCol - \@@_compute_a_corner:nnnnnn \c@iRow \c@jCol { -1 } { -1 } 1 1 - \@@_draw_hvlines_ii: + \clist_map_inline:Nn \l_@@_except_corners_clist + { + \str_case:nnF { ##1 } + { + { NW } + { \@@_compute_a_corner:nnnnnn 1 1 1 1 \c@iRow \c@jCol } + { NE } + { \@@_compute_a_corner:nnnnnn 1 \c@jCol 1 { -1 } \c@iRow 1 } + { SW } + { \@@_compute_a_corner:nnnnnn \c@iRow 1 { -1 } 1 1 \c@jCol } + { SE } + { \@@_compute_a_corner:nnnnnn \c@iRow \c@jCol { -1 } { -1 } 1 1 } + } + { \@@_error:nn { bad~corner } { ##1 } } + } } % \end{macrocode} % +% % \bigskip % ``Computing a corner'' is determining all the empty cells (which are not in a % block) that belong to that corner. These cells will be added to the sequence @@ -10798,11 +11181,11 @@ version 2005/12/01 or later. % The six arguments of |\@@_compute_a_corner:nnnnnn| are as follow: % \begin{itemize} % \item |#1| and |#2| are the number of row and column of the cell which is -% actually in the corner ; -% \item |#3| and |#4| are the step in rows and the step in columns when moving -% from the corner ; +% actually in the corner; +% \item |#3| and |#4| are the steps in rows and the step in columns when moving +% from the corner; % \item |#5| is the number of the final row when scanning the rows from the -% corner ; +% corner; % \item |#6| is the number of the final column when scanning the columns from % the corner. % \end{itemize} @@ -10818,17 +11201,17 @@ version 2005/12/01 or later. % |\l_tmpa_bool| will be raised when a non-empty cell is found. % \begin{macrocode} \bool_set_false:N \l_tmpa_bool - \int_zero_new:N \l_@@_last_empty_row_int + \int_zero_new:N \l_@@_last_empty_row_int + \int_set:Nn \l_@@_last_empty_row_int { #1 } \int_step_inline:nnnn { #1 } { #3 } { #5 } { \@@_test_if_cell_in_a_block:nn { ##1 } { \int_eval:n { #2 } } - \bool_if:nTF + \bool_lazy_or:nnTF { \cs_if_exist_p:c { pgf @ sh @ ns @ \@@_env: - ##1 - \int_eval:n { #2 } } - || - \l_tmpb_bool } + \l_tmpb_bool { \bool_set_true:N \l_tmpa_bool } { \bool_if:NF \l_tmpa_bool @@ -10839,15 +11222,16 @@ version 2005/12/01 or later. % Now, you determine the last empty cell in the row of number~$1$. % \begin{macrocode} \bool_set_false:N \l_tmpa_bool - \int_zero_new:N \l_@@_last_empty_column_int + \int_zero_new:N \l_@@_last_empty_column_int + \int_set:Nn \l_@@_last_empty_column_int { #2 } \int_step_inline:nnnn { #2 } { #4 } { #6 } { \@@_test_if_cell_in_a_block:nn { \int_eval:n { #1 } } { ##1 } - \bool_if:nTF + \bool_lazy_or:nnTF + \l_tmpb_bool { \cs_if_exist_p:c { pgf @ sh @ ns @ \@@_env: - \int_eval:n { #1 } - ##1 } - || \l_tmpb_bool } { \bool_set_true:N \l_tmpa_bool } { @@ -10867,11 +11251,11 @@ version 2005/12/01 or later. \int_step_inline:nnnn { #2 } { #4 } \l_@@_last_empty_column_int { \@@_test_if_cell_in_a_block:nn { ##1 } { ####1 } - \bool_if:nTF + \bool_lazy_or:nnTF + \l_tmpb_bool { - \cs_if_exist_p:c - { pgf @ sh @ ns @ \@@_env: - ##1 - ####1 } - || \l_tmpb_bool + \cs_if_exist_p:c + { pgf @ sh @ ns @ \@@_env: - ##1 - ####1 } } { \bool_set_true:N \l_tmpa_bool } { @@ -10901,7 +11285,7 @@ version 2005/12/01 or later. \int_set:Nn \l_tmpb_int { #2 } \bool_set_false:N \l_tmpb_bool \seq_map_inline:Nn \g_@@_pos_of_blocks_seq - { \@@_test_if_cell_in_block:nnnnnnn { \l_tmpa_int } { \l_tmpb_int } ##1 } + { \@@_test_if_cell_in_block:nnnnnnn \l_tmpa_int \l_tmpb_int ##1 } } % \end{macrocode} % @@ -10909,14 +11293,17 @@ version 2005/12/01 or later. % \begin{macrocode} \cs_new_protected:Npn \@@_test_if_cell_in_block:nnnnnnn #1 #2 #3 #4 #5 #6 { - \bool_lazy_all:nT - { - { \int_compare_p:n { #3 <= #1 } } - { \int_compare_p:n { #1 <= #5 } } - { \int_compare_p:n { #4 <= #2 } } - { \int_compare_p:n { #2 <= #6 } } + \int_compare:nNnT { #3 } < { \@@_succ:n { #1 } } + { + \int_compare:nNnT { #1 } < { \@@_succ:n { #5 } } + { + \int_compare:nNnT { #4 } < { \@@_succ:n { #2 } } + { + \int_compare:nNnT { #2 } < { \@@_succ:n { #6 } } + { \bool_set_true:N \l_tmpb_bool } + } + } } - { \bool_set_true:N \l_tmpb_bool } } % \end{macrocode} % @@ -11564,7 +11951,7 @@ version 2005/12/01 or later. % put before the math mode of the label) % % It's mandatory to use a expandable command (probably because of the first -% optional argument ?). +% optional argument?). % \begin{macrocode} \NewExpandableDocumentCommand \@@_Block: { O { } m D < > { } m } { \@@_Block_i #2 \q_stop { #1 } { #3 } { #4 } } @@ -11663,7 +12050,7 @@ version 2005/12/01 or later. % \begin{macrocode} \tl_if_empty:NF \l_@@_color_tl { - \tl_gput_right:Nx \g_@@_code_before_tl + \tl_gput_right:Nx \g_nicematrix_code_before_tl { \exp_not:N \rectanglecolor { \l_@@_color_tl } @@ -11690,7 +12077,7 @@ version 2005/12/01 or later. % \begin{macrocode} \bool_lazy_or:nnTF { \int_compare_p:nNn { #3 } > \g_@@_row_total_int } - { \int_compare_p:nNn { #4 } > \c@jCol } + { \int_compare_p:nNn { #4 } > \g_@@_col_total_int } { \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } } { % \end{macrocode} @@ -11995,14 +12382,14 @@ version 2005/12/01 or later. % \subsection*{The redefinition of the command \textbackslash dotfill } % % \begin{macrocode} -\cs_set_eq:NN \@@_dotfill \dotfill +\cs_set_eq:NN \@@_old_dotfill \dotfill \cs_new_protected:Npn \@@_dotfill: { % \end{macrocode} % First, we insert |\@@_dotfill| (which is the saved version of |\dotfill|) in % case of use of |\dotfill| ``internally'' in the cell (e.g. |\hbox to 1cm {\dotfill}|). % \begin{macrocode} - \@@_dotfill + \@@_old_dotfill \bool_if:NT \l_@@_NiceTabular_bool { \group_insert_after:N \@@_dotfill_ii: } { \group_insert_after:N \@@_dotfill_i: } @@ -12016,7 +12403,7 @@ version 2005/12/01 or later. % array, and it will extend, since it is no longer in |\l_@@_cell_box|. % \begin{macrocode} \cs_new_protected:Npn \@@_dotfill_iii: - { \dim_compare:nNnT { \box_wd:N \l_@@_cell_box } = \c_zero_dim \@@_dotfill } + { \dim_compare:nNnT { \box_wd:N \l_@@_cell_box } = \c_zero_dim \@@_old_dotfill } % \end{macrocode} % % \bigskip @@ -12041,7 +12428,7 @@ version 2005/12/01 or later. % \end{macrocode} % We put the cell with |\diagbox| in the sequence |\g_@@_pos_of_blocks_seq| % because a cell with |\diagbox| must be considered as non empty by the key -% |hvlines-except-corners|. +% |except-corners|. % \begin{macrocode} \seq_gput_right:Nx \g_@@_pos_of_blocks_seq { @@ -12425,15 +12812,6 @@ version 2005/12/01 or later. } % \end{macrocode} % -% -% \begin{macrocode} -\@@_msg_new:nn { option~S~without~siunitx } - { - You~can't~use~the~option~'S'~in~your~environment~\@@_full_name_env: - because~you~have~not~loaded~siunitx.\\ - If~you~go~on,~this~option~will~be~ignored. - } -% \end{macrocode} % % \begin{macrocode} \@@_msg_new:nn { bad~option~for~line-style } @@ -12452,6 +12830,14 @@ version 2005/12/01 or later. } % \end{macrocode} % +% \begin{macrocode} +\@@_msg_new:nn { Unknown~option~for~rowcolors } + { + As~for~now~there~is~only~one~option~available~here:~'respect-blocks'~ + (and~you~try~to~use~'\l_keys_key_tl').~If~you~go~on,~ + this~option~will~be~ignored. + } +% \end{macrocode} % % \begin{macrocode} \@@_msg_new:nn { ampersand~in~light-syntax } @@ -12504,7 +12890,16 @@ version 2005/12/01 or later. } % \end{macrocode} % -% +% \begin{macrocode} +\@@_msg_new:nn { bad~corner } + { + #1~is~an~incorrect~specification~for~a~corner~(in~the~keys~ + 'except-corners'~and~'hvlines-except-corners').~The~available~ + values~are:~NW,~SW,~NE~and~SE.\\ + If~you~go~on,~this~specification~of~corner~will~be~ignored. + } +% \end{macrocode} +% % \begin{macrocode} \@@_msg_new:nn { last-col~non~empty~for~NiceArray } { @@ -12780,7 +13175,6 @@ version 2005/12/01 or later. right-margin,~ rules/color,~ rules/width,~ - S,~ small,~ t,~ vlines,~ @@ -12849,7 +13243,8 @@ version 2005/12/01 or later. the~same~environment~name~twice.~You~can~go~on,~but,~ maybe,~you~will~have~incorrect~results~especially~ if~you~use~'columns-width=auto'.~If~you~don't~want~to~see~this~ - message~again,~use~the~option~'allow-duplicate-names'.\\ + message~again,~use~the~option~'allow-duplicate-names'~in~ + '\token_to_str:N \NiceMatrixOptions'.\\ For~a~list~of~the~names~already~used,~type~H~<return>. \\ } { @@ -13208,6 +13603,19 @@ version 2005/12/01 or later. % % The variable |\g_nicematrix_code_after_tl| is now public. % +% \subsection*{Changes between versions 5.1 and 5.2} +% +% The vertical rules specified by \verb+|+ or \verb+||+ in the preamble respect +% the blocks. +% +% Key |respect-blocks| for |\rowcolors| (with a \emph{s}) in the |code-before|. +% +% The variable |\g_nicematrix_code_before_tl| is now public. +% +% The key |baseline| can take in as value of the form \textsl{line-i} to align +% the |\hline| in the row \textsl{i}. +% +% The key |hvlines-except-corners| may take in as value a list of corner (eg: NW,SE). % % \PrintIndex % diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf Binary files differindex f2ebe92444..ebefac27a8 100644 --- a/macros/latex/contrib/nicematrix/nicematrix.pdf +++ b/macros/latex/contrib/nicematrix/nicematrix.pdf diff --git a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf Binary files differindex 0327b10bdf..0a8f1a4f59 100644 --- a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf +++ b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf Binary files differindex ffa19b186b..70eb0fcf9e 100644 --- a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf Binary files differindex a632114824..78d94863b8 100644 --- a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf Binary files differindex 9a46a910eb..e71ac057a9 100644 --- a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-tabular.pdf b/macros/latex/contrib/reledmac/examples/1-tabular.pdf Binary files differindex f754fb92d5..d2308f501f 100644 --- a/macros/latex/contrib/reledmac/examples/1-tabular.pdf +++ b/macros/latex/contrib/reledmac/examples/1-tabular.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf Binary files differindex a8caba9384..2f4a6424a7 100644 --- a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf +++ b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-verses.pdf b/macros/latex/contrib/reledmac/examples/1-verses.pdf Binary files differindex 372064051d..7dc1310345 100644 --- a/macros/latex/contrib/reledmac/examples/1-verses.pdf +++ b/macros/latex/contrib/reledmac/examples/1-verses.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf Binary files differindex 962601c4d2..6ad8abb626 100644 --- a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf +++ b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf Binary files differindex 7a6d630686..4478eb70f6 100644 --- a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf Binary files differindex 5b3be98f48..914e2148b7 100644 --- a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf Binary files differindex 9a7897a258..d69aa2d5d5 100644 --- a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf +++ b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-indexing.pdf b/macros/latex/contrib/reledmac/examples/2-indexing.pdf Binary files differindex bd988943f8..61dbcfe94c 100644 --- a/macros/latex/contrib/reledmac/examples/2-indexing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-indexing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf Binary files differindex cc21ccb463..35494fe2dc 100644 --- a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf +++ b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf Binary files differindex 6a47482810..b3b237d1ed 100644 --- a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf +++ b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf Binary files differindex 5346163ee7..05eb705885 100644 --- a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf Binary files differindex 434c24a7d6..f4f916a8e3 100644 --- a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf +++ b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf Binary files differindex a5bc61e982..ab821f550d 100644 --- a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf +++ b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf Binary files differindex 81b1fdfae3..d6d468e170 100644 --- a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf +++ b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-performances.pdf b/macros/latex/contrib/reledmac/examples/2-performances.pdf Binary files differindex 2431038e61..867f9273c9 100644 --- a/macros/latex/contrib/reledmac/examples/2-performances.pdf +++ b/macros/latex/contrib/reledmac/examples/2-performances.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf Binary files differindex f4894533f5..7b2e049f36 100644 --- a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf +++ b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf Binary files differindex 1bd75aa4bc..82f0696c7b 100644 --- a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf +++ b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf Binary files differindex d32e42cbb9..f3212b5cf6 100644 --- a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf Binary files differindex 12a988d76c..a7f456243c 100644 --- a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf +++ b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf Binary files differindex 5c3865e263..2ff8b07f71 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf Binary files differindex 77202d9937..18bffd18c2 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf Binary files differindex af531d011a..dd7a0cb583 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf Binary files differindex 630f293ca6..7d24d26f34 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf Binary files differindex 5c4f31cc77..b9072668f4 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf Binary files differindex 5dd12288de..75c3144745 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf Binary files differindex ea0c19cee9..f1b0a91afd 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf Binary files differindex 69c0be0328..1959d31336 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf Binary files differindex 2b06c26c29..12bda733c8 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf Binary files differindex 0f3f3d83f7..8623e289cc 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf Binary files differindex 6338e3533f..43863c3f59 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf Binary files differindex 4b5c178133..731a816e29 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf Binary files differindex 0bddffc700..aabb96429b 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf Binary files differindex e3629fc2f1..84ea8b4735 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf Binary files differindex 4057be0095..660f345338 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf Binary files differindex eff50e7f80..bfc981593b 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf Binary files differindex fb1d23ba7a..22854199d4 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf Binary files differindex ed24286b37..b3ccd178ee 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf Binary files differindex 303499d2e0..f1eeaddd22 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf Binary files differindex 3a3e97fa6a..1154fe4b6e 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf Binary files differindex c18113d2af..8b9084f626 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf Binary files differindex e86ba5639d..fd5c065016 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf Binary files differindex e3ff587d44..f1f6ddc92b 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf diff --git a/macros/latex/contrib/reledmac/migration.pdf b/macros/latex/contrib/reledmac/migration.pdf Binary files differindex 38c4a5b1dc..e278cd0267 100644 --- a/macros/latex/contrib/reledmac/migration.pdf +++ b/macros/latex/contrib/reledmac/migration.pdf diff --git a/macros/latex/contrib/reledmac/reledmac.dtx b/macros/latex/contrib/reledmac/reledmac.dtx index a568f76f44..a2e92f6b3e 100644 --- a/macros/latex/contrib/reledmac/reledmac.dtx +++ b/macros/latex/contrib/reledmac/reledmac.dtx @@ -560,6 +560,9 @@ % \changes{v2.34.0}{2020/06/24}{Add \protect\cs{Xpstartseparator}.} % \changes{v2.34.1}{2020/06/30}{Fix bug with page number when using stanazindentsrepetition, bug introduced in v2.33.0} % \changes{v2.34.2}{2020/07/06}{Fix bug with tabular environment, in some specific use case, added in v2.32.7} +% \changes{v2.34.3}{2020/08/19}{Fix bug with \protect\cs{parafootsepX} when the footnotes are called outside of a numbered section.} +% \changes{v2.34.3}{2020/08/19}{Fixes incompatibility between Fixes incompatibility between lineation by \protect\cs{pstart} and (a)stanza.} +% \changes{v2.34.3}{2020/08/19}{Makes command like \protect\cs{hidenumbering} working at the very beginning of a verse when the first argument of \protect\cs{setstanzaindents} is equal to 0.} % Typeset scholarly editions with \LaTeX\thanks{This file (\dtxfilename) % has version number \fileversion, last revised \filedate.}} % @@ -4400,7 +4403,7 @@ % \begin{macrocode} %<*code> \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{reledmac}[2020/07/06 v2.34.2 typesetting critical editions]% +\ProvidesPackage{reledmac}[2020/08/19 v2.34.3 typesetting critical editions]% % \end{macrocode} % % \subsection{Package options} @@ -7673,12 +7676,16 @@ % \begin{macrocode} \newcommand*{\setlinenum}[1]{% - \ifnum#1<\z@ - \led@warn@BadSetlinenum - \else - \ifledRcol \write\linenum@outR{\string\l@d@set[#1]} - \else \write\linenum@out{\string\l@d@set[#1]} \fi - \fi} + \ifnum#1<\z@% + \led@warn@BadSetlinenum% + \else% + \ifledRcol% + \write\linenum@outR{\string\l@d@set[#1]}% + \else% + \write\linenum@out{\string\l@d@set[#1]}% + \fi% + \fi% +}% % \end{macrocode} % \end{macro} @@ -8953,8 +8960,10 @@ % \begin{macrocode} \ifbypstart@% \begingroup% - \let\leavevmode\relax% - \setlinenum{0}% + \unless\ifinstanza% + \let\leavevmode\relax% + \setlinenum{0}% + \fi% \endgroup% \resetprevline@% \fi% @@ -13653,10 +13662,17 @@ {}% \global\csname prevpage#1@numR\endcsname=\page@numR% \else% - \ifnumequal{\csuse{prevpage#1@num}}{\page@num}% - {\csuse{parafootsepX@#1}}% - {}% - \global\csname prevpage#1@num\endcsname=\page@num% + \ifnumbering% + \ifnumequal{\csuse{prevpage#1@num}}{\page@num}% + {\csuse{parafootsepX@#1}}% + {}% + \global\csname prevpage#1@num\endcsname=\page@num% + \else% + \ifnumequal{\csuse{prevpage#1@num}}{\c@page}% + {\csuse{parafootsepX@#1}}% + {}% + \global\csname prevpage#1@num\endcsname=\c@page% + \fi% \fi% } % \end{macrocode} @@ -18877,7 +18893,7 @@ \parindent@beforestanza=\parindent}%Keep in memory the standard \parindent \global\stanza@count\@ne\stanza@modulo\@ne \noexpand\ifnum\expandafter\noexpand\csname sza@0@\endcsname=\z@% - \let\noexpand\stanza@hang\relax% + \def\noexpand\stanza@hang{\unexpanded{\leavevmode\null}}% \let\noexpand\endlock\relax% \noexpand\else% \interlinepenalty% diff --git a/macros/latex/contrib/reledmac/reledmac.pdf b/macros/latex/contrib/reledmac/reledmac.pdf Binary files differindex c8bdfbb9da..c9d70a57a2 100644 --- a/macros/latex/contrib/reledmac/reledmac.pdf +++ b/macros/latex/contrib/reledmac/reledmac.pdf diff --git a/macros/latex/contrib/reledmac/reledpar.dtx b/macros/latex/contrib/reledmac/reledpar.dtx index 2570473276..bc15113c88 100644 --- a/macros/latex/contrib/reledmac/reledpar.dtx +++ b/macros/latex/contrib/reledmac/reledpar.dtx @@ -343,6 +343,8 @@ % \changes{v2.23.1}{2020/04/19}{Fix bug when using \protect\package{polyglossia} v1.45 or later.} % \changes{v2.24.0}{2020/05/31}{Add startstanzaindentsrepetition feature.} % \changes{v2.24.0}{2020/05/31}{Add antilabe feature.} +% \changes{v2.24.1}{2020/08/19}{Makes \protect\cs{numberstantzatrue} working with \protect\env{astanza}.} +% \changes{v2.24.1}{2020/08/19}{Fixes incompatibility between lineation by \protect\cs{pstart} and (a)stanza.} % ^^A PW added following as the definitions are at some unknown elsewhere % % \newcommand{\egstart}{% @@ -1398,7 +1400,7 @@ % \begin{macrocode} %<*code> \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{reledpar}[2020/05/31 v2.24.0 reledmac extension for parallel texts]% +\ProvidesPackage{reledpar}[2020/08/19 v2.24.1 reledmac extension for parallel texts]% % \end{macrocode} % \subsection{Package's requirement} @@ -2897,11 +2899,21 @@ % % \begin{macrocode} \renewcommand*{\@pend}[1]{% - \ifbypstart@\global\line@num=0\fi% - \xright@appenditem{#1}\to\linesinpar@listL} + \ifbypstart@% + \unless\ifinstanza% + \global\line@num=0% + \fi% + \fi% + \xright@appenditem{#1}\to\linesinpar@listL% +}% \renewcommand*{\@pendR}[1]{% - \ifbypstart@R\global\line@numR=0\fi - \xright@appenditem{#1}\to\linesinpar@listR} + \ifbypstart@R% + \unless\ifinstanzaR% + \global\line@numR=0% + \fi% + \fi% + \xright@appenditem{#1}\to\linesinpar@listR% +}% % \end{macrocode} % \end{macro} @@ -5386,6 +5398,7 @@ \fi% \catcode`\&\active \global\stanza@count\@ne\stanza@modulo\@ne + \@advancestanzanumber% \newdimen\parindent@beforestanza% \parindent@beforestanza=\parindent%Keep in memory the standard \parindent \ifnum\usenamecount{sza@0@}=\z@ @@ -5410,6 +5423,7 @@ {\pstart[][\at@every@stanza]\at@start@every@stanza}% {\pstart[#1][#2]\at@start@every@stanza}% \@astanza@line + \@insertstanzanumber% \let\par\relax\ignorespaces%No paragraph in verses }{% \global\undef\parindent@beforestanza% @@ -5935,12 +5949,16 @@ \@writelinesinparR \check@pstarts \ifbypstart@% - \write\linenum@out{\string\@set[1]} - \resetprevline@ + \unless\ifinstanza% + \write\linenum@out{\string\@set[1]}% + \resetprevline@% + \fi% \fi \ifbypstart@R - \write\linenum@outR{\string\@set[1]} - \resetprevline@ + \unless\ifinstanza% + \write\linenum@outR{\string\@set[1]}% + \resetprevline@% + \fi% \fi \Columns@print@after@pend% \repeat @@ -7343,8 +7361,10 @@ \ifnum\l@dnumpstartsR>\l@dpscR \writtenlinesRfalse \ifbypstart@R + \unless\ifinstanzaR% \global\line@numR=0% \resetprevline@% + \fi% \fi \csuse{after@pendR@\the\l@dpscR}% \global\csundef{after@pendR@\the\l@dpscR}% diff --git a/macros/latex/contrib/reledmac/reledpar.pdf b/macros/latex/contrib/reledmac/reledpar.pdf Binary files differindex 44c2757a2d..d6db142012 100644 --- a/macros/latex/contrib/reledmac/reledpar.pdf +++ b/macros/latex/contrib/reledmac/reledpar.pdf diff --git a/macros/latex/contrib/tasks/README b/macros/latex/contrib/tasks/README index d597763e70..487fd31097 100644 --- a/macros/latex/contrib/tasks/README +++ b/macros/latex/contrib/tasks/README @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -the TASKS package v1.2b 2020/05/11 +the TASKS package v1.3 2020/08/19 lists with columns filled horizontally diff --git a/macros/latex/contrib/tasks/tasks-manual.pdf b/macros/latex/contrib/tasks/tasks-manual.pdf Binary files differindex 708bc9b981..b941305e24 100644 --- a/macros/latex/contrib/tasks/tasks-manual.pdf +++ b/macros/latex/contrib/tasks/tasks-manual.pdf diff --git a/macros/latex/contrib/tasks/tasks-manual.tex b/macros/latex/contrib/tasks/tasks-manual.tex index 2bcfb18d3e..b1f5ac54c8 100644 --- a/macros/latex/contrib/tasks/tasks-manual.tex +++ b/macros/latex/contrib/tasks/tasks-manual.tex @@ -11,12 +11,12 @@ % Copyright 2013--2020 Clemens Niederberger % % This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 +% conditions of the LaTeX Project Public License, either version 1.3c % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008/05/04 or later. % % This work has the LPPL maintenance status `maintained'. % @@ -235,6 +235,10 @@ following ones that can be set using a setup command: \changedversion{1.0}Sets a custom label. The \code{*} is replaced by \Marg{task}. This is heavily inspired by \pkg{enumitem}'s~\cite{pkg:enumitem} \code{label} option. + \keyval{ref}{code}\Default + \sinceversion{1.3}Works like \option{label} but sets the output of the + reference by setting \cs*{the\meta{counter}} (\cs{thetask} in the default + setting). \keyval{label-width}{dim}\Default{1em} Sets the width of the item labels. \keyval{label-offset}{dim}\Default{.3333em} @@ -391,12 +395,38 @@ argument of \cs{task}. This will temporarily overwrite the default label. \end{tasks} \end{example} +You've already seen examples for the \option{label} option. +\begin{options} + \keyval{label}{code}\Default{\cs*{alph}\code{*)}} + It can be used to set the label for a list. A \code{*} inside is always + replaced by the current counter name inside braces. It can contain + formatting instructions like \cs*{bfseries} but it can be cleaner to use + \keyval{label-format}{code}\Default + instead. This is especially true since the \option{label} also sets + \cs*{the\meta{counter}} where you usually don't want to have formatting + instructions. Another way to deal with this issue is the option + \keyval{ref}{code}\Default + which sets \cs*{the\meta{counter}} (\cs{thetask} in the default setting). +\end{options} + +\begin{example}[side-by-side] + \begin{tasks}[label=\arabic*.,ref=\arabic*] + \task first item + \task second item \label{foo} + \end{tasks} + See item~\ref{foo} without dot. +\end{example} + +Two additional commands are defined which in some circumstances might prove +useful: \begin{commands} \command{tasksifmeasuringTF}[\marg{true}\marg{false}] \sinceversion{1.2}This command used inside a label checks if the label is typeset for measuring its width or if it is typeset \enquote{for - real}. Might be useful sometimes. There are also the variants - \cs{tasksifmeasuringT} and \cs{tasksifmeasuringF}. + real}. There are also the variants \cs{tasksifmeasuringT} and + \cs{tasksifmeasuringF}. + \command{tasklabel} + \sinceversion{1.3}Holds the current label text. \end{commands} \section{New \code{tasks}-like Environments} diff --git a/macros/latex/contrib/tasks/tasks.sty b/macros/latex/contrib/tasks/tasks.sty index 22ac99035b..42afb7320e 100644 --- a/macros/latex/contrib/tasks/tasks.sty +++ b/macros/latex/contrib/tasks/tasks.sty @@ -11,12 +11,12 @@ % Copyright 2013--2020 Clemens Niederberger % % This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 +% conditions of the LaTeX Project Public License, either version 1.3c % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008/05/04 or later. % % This work has the LPPL maintenance status `maintained'. % @@ -28,10 +28,10 @@ \RequirePackage {expl3,xparse,xtemplate} \ExplSyntaxOn -\tl_const:Nn \c_tasks_date_tl {2020/05/11} +\tl_const:Nn \c_tasks_date_tl {2020/08/19} \tl_const:Nn \c_tasks_version_major_number_tl {1} -\tl_const:Nn \c_tasks_version_minor_number_tl {2} -\tl_const:Nn \c_tasks_version_subrelease_tl {b} +\tl_const:Nn \c_tasks_version_minor_number_tl {3} +\tl_const:Nn \c_tasks_version_subrelease_tl {} \tl_const:Nx \c_tasks_version_number_tl { \c_tasks_version_major_number_tl . @@ -59,7 +59,7 @@ \cs_generate_variant:Nn \tl_set:Nn {cV} \cs_generate_variant:Nn \hbox_set:Nn {NV} \cs_generate_variant:Nn \msg_warning:nnnn {nnV,nnnx} -\cs_generate_variant:Nn \tl_replace_once:Nnn {Nne} +\cs_generate_variant:Nn \tl_replace_all:Nnn {Nne} % -------------------------------------------------------------------------- \msg_new:nnn {tasks} {width-too-small} @@ -111,6 +111,7 @@ \bool_new:N \l__tasks_item_indent_bool \bool_new:N \l__tasks_label_offset_bool \bool_new:N \l__tasks_custom_label_bool +\bool_new:N \l__tasks_custom_ref_bool \bool_new:N \l__tasks_custom_label_format_bool \bool_new:N \l__tasks_custom_after_item_skip_bool \bool_new:N \l__tasks_debug_bool @@ -121,6 +122,8 @@ \tl_new:N \l__tasks_instance_tl \tl_new:N \l__tasks_label_tl \tl_new:N \l__tasks_custom_label_tl +\tl_new:N \l__tasks_ref_tl +\tl_new:N \l__tasks_custom_ref_tl \tl_new:N \l__tasks_label_format_tl \tl_new:N \l__tasks_custom_label_format_tl \tl_new:N \l__tasks_counter_tl @@ -442,6 +445,7 @@ \DeclareTemplateInterface {tasks} {default} {3} { label : tokenlist = \alph*) , + ref : tokenlist , indent : length = 2.5em , label-format : tokenlist , label-width : length = 11pt , @@ -460,6 +464,7 @@ \DeclareTemplateCode {tasks} {default} {3} { label = \l__tasks_label_tl , + ref = \l__tasks_label_ref_tl , indent = \l__tasks_item_default_indent_dim , label-format = \l__tasks_label_format_tl , label-width = \l__tasks_label_default_width_dim , @@ -524,15 +529,23 @@ { \tl_to_str:V \l__tasks_custom_label_tl } { \tl_to_str:V \l__tasks_label_tl } } - \bool_set_false:N \l__tasks_tmpa_bool - \tl_if_in:NnT \l__tasks_tmpa_tl {*} + \tl_set:Nx \l__tasks_tmpb_tl { - \tl_replace_once:Nne \l__tasks_tmpa_tl {*} {{ \l__tasks_counter_tl }} - \bool_set_true:N \l__tasks_tmpa_bool + \bool_if:NTF \l__tasks_custom_ref_bool + { \tl_to_str:V \l__tasks_custom_ref_tl } + { \tl_to_str:V \l__tasks_ref_tl } } + % replace the stars: + \tl_replace_all:Nne \l__tasks_tmpa_tl {*} {{ \l__tasks_counter_tl }} \tl_set_rescan:NnV \l__tasks_tmpa_tl {} \l__tasks_tmpa_tl - \bool_if:NT \l__tasks_tmpa_bool - { \tl_set:cV { the \l__tasks_counter_tl } \l__tasks_tmpa_tl } + \tl_if_blank:VTF \l__tasks_tmpb_tl + { \tl_set_eq:NN \l__tasks_tmpb_tl \l__tasks_tmpa_tl } + { + \tl_replace_all:Nne \l__tasks_tmpb_tl {*} {{ \l__tasks_counter_tl }} + \tl_set_rescan:NnV \l__tasks_tmpb_tl {} \l__tasks_tmpb_tl + } + % update \thecounter: + \tl_set:cV { the \l__tasks_counter_tl } \l__tasks_tmpb_tl \dim_compare:nNnT { \l__tasks_item_indent_dim } < @@ -547,8 +560,10 @@ \seq_map_inline:Nn \l__tasks_seq { \__tasks_read_item:www ##1 \q_stop + % TODO \refstepcounter { \l__tasks_counter_tl } \tl_set:Nx \l__tasks_label_tl { { \exp_not:V \l__tasks_tmpa_tl } } + \tl_set:cV {tasklabel} \l__tasks_label_tl \bool_if:NTF \l__tasks_custom_label_format_bool { \tl_put_left:NV \l__tasks_label_tl \l__tasks_custom_label_format_tl } { \tl_put_left:NV \l__tasks_label_tl \l__tasks_label_format_tl } @@ -649,6 +664,9 @@ label .code:n = \bool_set_true:N \l__tasks_custom_label_bool \tl_set:Nn \l__tasks_custom_label_tl {#1} , + ref .code:n = + \bool_set_true:N \l__tasks_custom_ref_bool + \tl_set:Nn \l__tasks_custom_ref_tl {#1} , label-format .code:n = \bool_set_true:N \l__tasks_custom_label_format_bool \tl_set:Nn \l__tasks_custom_label_format_tl {#1} , @@ -864,3 +882,4 @@ - rename manual files 2020/04/19 v1.2a - only use arabic numbers for \theHtask 2020/05/11 v1.2b - options are set to late for `before-skip' -- fixed +2020/05/11 v1.3 - add `ref' option |