% \iffalse meta-comment % % Copyright (C) 2024 Christian Schreinemachers % % This work may be distributed and/or modified under the 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.3c or later is part of all distributions of LaTeX % version 2008-05-04 or later. % % This work has the LPPL maintenance status `maintained'. % % The current maintainer of this work is Christian Schreinemachers. % % This work consists of the files % doibanner.dtx % doibanner.ins % README.md % and the derived files % doibanner.sty % doibanner.pdf % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \fi % \iffalse %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{doibanner} % [2024-07-28 v0.3 Generate DOI banners and links] % %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage[% pdfusetitle,% hyperindex=false,% pdfsubject={LaTeX package documentation},% pdfkeywords={doibanner, latex, documentation}% ]{hyperref} \usepackage{doibanner} \usepackage[toc]{multitoc} \usepackage{geometry} \usepackage{fancyvrb} \EnableCrossrefs \CodelineIndex \RecordChanges \DoNotIndex{\adjustbox,\begin,\bfseries,\DeclareKeys,\definecolor,\end,\fill, \fontfamily,\href,\IfBooleanTF,\Large,\NewDocumentCommand,\node, \ProcessKeyOptions,\RequirePackage,\relax,\selectfont,\SetKeys, \sfdefault,\tikzstyle} \setcounter{IndexColumns}{2} \setlength{\IndexMin}{40ex} \setlength{\columnseprule}{.4pt} \addtolength{\oddsidemargin}{2cm} \addtolength{\textwidth}{-2cm} \begin{document} \DocInput{doibanner.dtx} \end{document} % % \fi % % \pagestyle{headings} % % \newcommand*{\package}[1]{\textsf{#1}} % \newcommand*{\opt}[1]{\texttt{#1}} % \newcommand*{\default}[1]{(default: \opt{#1})} % % % ^^A ----------------------------- % % \changes{v0.3}{2024-07-28}{% % Add package options \opt{width} and \opt{label}, % fix mistakes, % improve documentation, % remove unnecessary dependencies} % \changes{v0.2}{2024-07-23}{% % Initial release, % convert into dtx, % add documentation, % add \opt{urlbase} package option} % \changes{v0.1}{2021/05/09}{Initial version} % % \GetFileInfo{doibanner.sty} % % % ^^A ----------------------------- % % \title{The \package{doibanner} package} % \author{Christian Schreinemachers} % \date{% % Released \filedate\thanks{% % \package{doibanner}~\fileversion % ~(\href{https://codeberg.org/Cs137/doibanner/releases/tag/\fileversion}{source code})}% % } % \maketitle % % % ^^A ----------------------------- % % \begin{abstract} % The \package{doibanner} package allows to generate a banner for a declared % \href{https://www.doi.org/the-identifier/what-is-a-doi/}{digital object identifier} % (DOI). It provides the \cs{doibanner} macro, which draws the banner using % \package{TikZ} and adds a link via \package{hyperref}, if desired. Its % output can be scaled by \package{adjustbox} and it might look as follows: % \par\medskip\centering{\doibanner*[width=5cm]{xx.xxxx/yyyyyy.zzzzzzzz}} % \end{abstract} % % % ^^A ----------------------------- % % \tableofcontents % % % ^^A ----------------------------- % % \section{Introduction} % ^^A % I published several documents on \href{https://zenodo.org/}{\emph{Zenodo}}, % a general-purpose open repository. They offer to register a % \href{https://www.doi.org/the-identifier/what-is-a-doi/}{digital object identifier} % (DOI) for an entry and download a banner of it. The latter can be added to % contents foreseen for the entry, or e.g. when referring to the entry in a % slide deck. % % Since I frequently use such banners in \LaTeX{} documents, I decided to % create a package that generates a similar banner and includes a link to the % corresponding URL. Additionally, this package eliminates the need to % manually download the banner and manage a file that might be used across % multiple documents. % % Due to the motivation, the resulting banner is heavily inspired by the % design applied in the banner offered by \emph{Zenodo}. It is drawn using % the \package{tikz} package, a link to its URL can be included with % \package{hyperref}, and it can be scaled using \package{adjustbox}. % % The application of this package is not limited to \emph{Zenodo} % depositions, it can be used to create a banner for a DOI that can % be included in any \LaTeX{} document. % % % ^^A ----------------------------- % % \section{Usage} % ^^A % Load the package in your document's preamble and specify any of the % options described in the next subsection as follows: % % \begin{quote} % \cs{usepackage}\oarg{option(s)}\{doibanner\} % \end{quote} % % % ^^A ----------------------------- % % \subsection{Options} % ^^A % In order to change the default behaviour of this package, declare one % or more of the options described in this subsection with your desired % value. % % \DescribeMacro{label=\meta{string}} % \default{DOI} specifies the label (left part) of the DOI banner generated % by \cs{doibanner}. The widths of the left and right part of the banner % are fixed and do currently not take the length of the text displayed on % top into account. Consequently, only a short expression should be declared % as value for the option \opt{label}. % % \DescribeMacro{urlbase=\meta{string}} % \default{https://doi.org/} specifies the base URL to convert a DOI string % into its URL, for normal use cases this does not require any adjustment. % % \DescribeMacro{width=\meta{dimen}} % \default{3.6cm} specifies the total width of the DOI banner generated by % \cs{doibanner}. The widths of the individual parts of the banner are % fixed and can currently not be changed. % % % ^^A ----------------------------- % % \subsection{Macros} % ^^A % \subsubsection*{\cs{doibanner}\oarg{dimen}\marg{string}} % % A DOI banner can be created using the command \cs{doibanner}, which requires % a DOI string as argument. Moreover, a \oarg{dimen} option can be defined. % The latter specifies the banner's width. If it is not declared, the value % of the \opt{width} package option is taken into account \default{3.6cm}. % % \DescribeMacro{\doibanner} % An execution of \cs{doibanner\{xx.xxxx/yyyyyy.zzzzzzzz\}} results in this % banner: \doibanner{xx.xxxx/yyyyyy.zzzzzzzz} If a banner with a width of % let's say 3\,cm is desired, it can be achieved by specifying the macro option % \opt{width} accordingly (\cs{doibanner}\opt{[width=3cm]\{xx.xxxx/yyyyyy.zzzzzzzz\}}): % \doibanner[width=3cm]{xx.xxxx/yyyyyy.zzzzzzzz} % % \DescribeMacro{\doibanner*} % The starred version of the command leads to the same banner, but it does % not contain a link to the DOI's URL: % \doibanner*{xx.xxxx/yyyyyy.zzzzzzzz} % % \subsubsection*{\cs{doiurl}\marg{string}} % ^^A % \DescribeMacro{\doiurl} % An URL is generated by appending the provided \emph{string} to the string % defined as the package option \opt{urlbase}. The resulting link is labelled % with the DOI string. % A call of \cs{doiurl\{xx.xxxx/yyyyyy.zzzzzzzz\}} results in % \doiurl{xx.xxxx/yyyyyy.zzzzzzzz}. % % \DescribeMacro{\doiurl*} % The command is also available as starred version, which prints the full % URL instead of the DOI string and does not include a link. Its output for % the aforementioned example is as follows: % \doiurl*{xx.xxxx/yyyyyy.zzzzzzzz}. % % % ^^A ----------------------------- % % ^^A \section{Known limitations} % ^^A ^^A % ^^A \begin{itemize} % ^^A \item % ^^A \end{itemize} % % % ^^A ----------------------------- % % \MaybeStop{ % % \IndexPrologue{% % \section{Index} % Numbers written in italic refer to the page where the corresponding entry % is described; numbers underlined refer to the code line of the definition; % numbers in roman refer to the code lines where the entry is used. % } % \PrintIndex % % \GlossaryPrologue{% % \section{Change History} % The changes listed in this section aim to provide a brief overview of the % changes introduced into the package \package{doibanner}. The % \href{https://codeberg.org/Cs137/doibanner/}{package repository on Codeberg} % contains a % \href{https://codeberg.org/Cs137/doibanner/src/branch/main/CHANGELOG.md}{changelog file}, % consult it to read a detailed description of the changes introduced into % this package. % } % \PrintChanges % % } % % % ^^A ----------------------------- % % \section{Implementation} % % \subsection{Dependencies} % ^^A % In order to use \package{doibanner}, the packages % \href{https://www.ctan.org/pkg/adjustbox}{\package{adjustbox}}, % \href{https://www.ctan.org/pkg/hyperref}{\package{hyperref}}, and % \href{https://www.ctan.org/pkg/tikz}{\package{tkiz}} % are required as package dependencies. % % \iffalse %<*package> % \fi % \begin{macrocode} \RequirePackage{adjustbox} \RequirePackage{hyperref} \RequirePackage{tikz} % \end{macrocode} % % % ^^A ----------------------------- % % \subsection{Constants} % ^^A % Definition of colours for the banner areas and labels, custom colour % definitions are currently not supported. % \begin{macrocode} \definecolor{leftcolor}{RGB}{82,82,82} \definecolor{rightcolor}{RGB}{6,119,183} % \definecolor{toptextcolor}{RGB}{235,235,235} \definecolor{bottomtextcolor}{RGB}{59,59,59} % \end{macrocode} % ^^A % Definition of font and colour for the banner's top and bottom text layers. % \begin{macrocode} \tikzstyle{toptextstyle} = [ font=\fontfamily{\sfdefault}\selectfont\bfseries\Large,toptextcolor] \tikzstyle{bottomtextstyle} = [ font=\fontfamily{\sfdefault}\selectfont\bfseries\Large,bottomtextcolor] % \end{macrocode} % % % ^^A ----------------------------- % % \subsection{Options} % ^^A % The package options are internally available as \cs{@doibanner@}\meta{option}. % \begin{macrocode} \DeclareKeys[@doibanner]{ label.store = \@doibanner@label, label.usage = load, urlbase.store = \@doibanner@urlbase, urlbase.usage = load, width.store = \@doibanner@width, width.usage = load, } % \end{macrocode} % % \subsubsection*{Assignement of default values} % \begin{macrocode} \SetKeys[@doibanner]{ label=DOI, urlbase=https://doi.org/, width=3.6cm, } % \end{macrocode} % % \subsubsection*{Processing of package options} % \begin{macrocode} \ProcessKeyOptions[@doibanner]\relax % \end{macrocode} % % % ^^A ----------------------------- % % \subsection{Macros} % % \changes{v0.2}{2024-07-23}{Remove \cs{doi} macro} % % \begin{macro}{\doiurl} % \changes{v0.2}{2024-07-23}{Remove trailing space} % \oarg{dimen}\\ % The \meta{string} is appended to the package option \opt{urlbase} to % generate the URL. % \begin{macrocode} \NewDocumentCommand\doiurl{s m}{% \IfBooleanTF#1 {\@doibanner@urlbase#2}% {\href{\@doibanner@urlbase#2}{#2}}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\@doibanner@draw} % \changes{v0.3}{2024-07-28}{Rename macro, remove top part} % \oarg{dimen}\marg{string}\\ % Draw the DOI banner including its \opt{label} and \meta{string}, provide % \opt{width=\meta{dimen}} to define the banners width as well. % \begin{macrocode} \NewDocumentCommand\@doibanner@draw{o m}{% \adjustbox{#1}{% \begin{tikzpicture} % left part \fill [leftcolor,draw] (1.5,0) -- ++(0,.8) {[rounded corners=5] -- ++(-1.5,0) -- ++(0,-.8)} -- cycle {}; \node[bottomtextstyle] at (.75,.35) {\@doibanner@label}; \node[toptextstyle] at (.75,.4) {\@doibanner@label}; % right part \fill [rightcolor,draw] (1.5,0) {[rounded corners=5] -- ++(6.5,0) -- ++(0,.8)} -- ++(-6.5,0) -- cycle {}; \node[bottomtextstyle] at (4.75,.35) {#2}; \node[toptextstyle] at (4.75,.4) {#2}; \end{tikzpicture}% }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\doibanner} % \changes{v0.3}{2024-07-28}{Add \opt{width} option} % \changes{v0.2}{2024-07-23}{Remove trailing space} % \oarg{dimen}\marg{string}\\ % Display the DOI banner with or without (*) a link to its URL. Specify a % \oarg{dimen}, if you want a banner width deviating from the one defined % as \opt{width} package option. % \begin{macrocode} \NewDocumentCommand\doibanner{s O{width=\@doibanner@width} m}{% \IfBooleanTF#1 {\@doibanner@draw[#2]{#3}}% {\href{\@doibanner@urlbase#3}{\@doibanner@draw[#2]{#3}}}% } % \end{macrocode} % \end{macro} % % \iffalse % % \fi % % \Finale \endinput %% %% End of file `doibanner.dtx'.