% \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 % and the derived files % doibanner.sty % doibanner.pdf % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \fi % \iffalse %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{doibanner} % [2024-07-23 v0.2 Generate DOI banners and links] % %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage[T1]{fontenc} \usepackage{doibanner} \usepackage[toc]{multitoc} \usepackage{geometry} \usepackage{fancyvrb} \EnableCrossrefs \CodelineIndex \RecordChanges \DoNotIndex{\def,\definecolor,\adjustbox,\begin,\bfseries,\DeclareStringOption, \end,\endinput,\fill,\fontfamily,\href,\hspace,\IfBooleanTF,\Large, \NewDocumentCommand,\node,\ProcessKeyvalOptions,\RequirePackage, \SetupKeyvalOptions,\selectfont,\sfdefault,\vspace} \setlength{\IndexMin}{40ex} \setlength{\columnseprule}{.4pt} \addtolength{\oddsidemargin}{2cm} \addtolength{\textwidth}{-2cm} \begin{document} \DocInput{doibanner.dtx} \end{document} % % \fi % \CheckSum{60} % \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 % Lower-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 % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \changes{v0.2}{2024-07-23}{Add documentation} % \changes{v0.2}{2024-07-23}{Convert into dtx} % \changes{v0.1}{2021/05/09}{Initial version} % % \GetFileInfo{doibanner.sty} % % % ^^A ----------------------------- % % \pagestyle{headings} % % \newcommand*{\package}[1]{\textsf{#1}} % \newcommand*{\opt}[1]{\texttt{#1}} % \newcommand*{\default}[1]{(default: \opt{#1})} % % % ^^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})}% % } % \hypersetup{% % pdfauthor={Christian Schreinemachers},% % pdftitle={The doibanner package},% % pdfsubject={LaTeX package documentation},% % pdfkeywords={doibanner, latex, documentation}% % } % \maketitle % % % ^^A ----------------------------- % % \begin{abstract} % The \package{doibanner} package allows to generate a banner for a % declared 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 might look as follows: % \par\medskip\centering{\doibanner*{xx.xxxx/yyyyyy.zzzzzzzz}} % \end{abstract} % % % ^^A ----------------------------- % % \tableofcontents % % % ^^A ----------------------------- % % \section{Introduction} % ^^A % I published several documents on \href{https://zenodo.org/}{\textit{Zenodo}}, % a general-purpose open repository. They offer to register a DOI for an % entry and download a banner of it. The latter can be added to contents % foreseen for the entry, or when referring to it. % % In order to avoid the manual step of downloading a banner to add to % my material, I decided to create a \LaTeX{} package that draws a comparable % banner and includes a link to the corresponding URL. Due to the motivation, % the resulting banner is heavily inspired by the design applied in the % banner offered by \textit{Zenodo}. It is drawn using the \package{tikz} % package the link is included with \package{hyperref}. % % The application of this package is not limited to \textit{Zenodo} % depositions, it can be used to create a banner from a DOI string 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 % \DescribeMacro{urlbase=\meta{string}} % \default{https://doi.org/} specifies the prefix to convert a DOI string % into an URL, for normal usecases this does not require any adjustment. % % % ^^A ----------------------------- % % \subsection{Macros} % ^^A % The following subsections list the content that can be generated with this package. % % \subsubsection*{doibanner} % ^^A % \DescribeMacro{\doibanner\marg{string}} % A DOI banner can be created using the command \cs{doibanner}, which % requires a DOI string as argument. % An execiton of \cs{doibanner\{xx.xxxx/yyyyyy.zzzzzzzz\}}, generates the % following banner: \doibanner{xx.xxxx/yyyyyy.zzzzzzzz} % % \DescribeMacro{\doibanner*\marg{string}} % 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*{doiurl} % ^^A % \DescribeMacro{\doiurl\marg{string}} % 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*\marg{string}} % 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 will be as follows: % \doiurl*{xx.xxxx/yyyyyy.zzzzzzzz}. % % % ^^A ----------------------------- % % ^^A \section{Known limitations} % ^^A ^^A % ^^A \begin{itemize} % ^^A \item % ^^A \end{itemize} % % % ^^A ----------------------------- % % \MaybeStop{ % % \PrintIndex % % \PrintChanges % \par\noindent % The % \href{https://codeberg.org/Cs137/doibanner/}{package repository on Codeberg} % contains a detailed % \href{https://codeberg.org/Cs137/doibanner/src/branch/main/CHANGELOG.md}{changelog file}. % % } % % % ^^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}}, % \href{https://www.ctan.org/pkg/kvoptions}{\package{kvoptions}}, % \href{https://www.ctan.org/pkg/tikz}{\package{tkiz}}, and % \href{https://www.ctan.org/pkg/xparse}{\package{xparse}} % are required as dependencies. % % \iffalse %<*package> % \fi % \begin{macrocode} \RequirePackage{adjustbox} \RequirePackage{hyperref} \RequirePackage{kvoptions} \RequirePackage{tikz} \RequirePackage{xparse} % \end{macrocode} % % % ^^A ----------------------------- % % \subsection{Options} % ^^A % \begin{macro}{\doibanner@urlbase} % \changes{v0.2}{2024-07-23}{Add \opt{urlbase} option} % The package options and are internally available as \cs{doibanner@}\meta{option}. % \begin{macrocode} \SetupKeyvalOptions{family=doibanner,prefix=doibanner@} \DeclareStringOption[https://doi.org/]{urlbase} \ProcessKeyvalOptions{doibanner} % \end{macrocode} % \end{macro} % % % ^^A ----------------------------- % % \subsection{Macros} % % \changes{v0.2}{2024-07-23}{Remove \cs{doi} macro} % % \begin{macro}{\doiurl} % \changes{v0.2}{2024-07-23}{Remove trailing whitespace} % The \meta{string} is appended to the option \opt{urlbase} to % generate an 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} % Draw the DOI banner including its \meta{string}. % \begin{macrocode} \definecolor{leftcolor}{RGB}{85,85,85} \definecolor{rightcolor}{RGB}{0,126,198} \definecolor{topcolor}{RGB}{59,59,59} \definecolor{bottomtextcolor}{RGB}{60,60,60} \NewDocumentCommand\doibanner@draw{ O{width=3.6cm} m}{% \adjustbox{#1}{% \begin{tikzpicture} \fill [leftcolor,draw] (1.5,0) -- ++(0,.8) {[rounded corners=5] -- ++(-1.5,0) -- ++(0,-.8)} -- cycle {}; \node[bottomtextcolor] at (.75,.35) {{\fontfamily{\sfdefault}\selectfont\bfseries \Large DOI}}; \node[white] at (.75,.4) {{\fontfamily{\sfdefault}\selectfont\bfseries \Large DOI}}; \fill [rightcolor,draw] (1.5,0) {[rounded corners=5] -- ++(6.5,0) -- ++(0,.8)} -- ++(-6.5,0) -- cycle {}; \node[bottomtextcolor] at (4.75,.35) {{\fontfamily{\sfdefault}\selectfont\bfseries \Large #2}}; \node[white] at (4.75,.4) {{\fontfamily{\sfdefault}\selectfont\bfseries \Large #2}}; \fill [topcolor,draw,opacity=0.1] (0,0) [rounded corners=5] -- ++(8,0) -- ++(0,.8) -- ++(-8,0) -- cycle {}; \end{tikzpicture} \hspace{-4mm} \vspace{-4mm} } } % \end{macrocode} % \end{macro} % % \begin{macro}{\doibanner@draw} % \changes{v0.2}{2024-07-23}{Remove trailing whitespace} % Display the DOI banner with or without (*) a link to its URL. % \begin{macrocode} \NewDocumentCommand\doibanner{s m}{% \IfBooleanTF#1 {\doibanner@draw{#2}}% {\href{\doibanner@urlbase#2}{\doibanner@draw{#2}}}% } % \end{macrocode} % \end{macro} % % \begin{macrocode} \endinput % \end{macrocode} % \iffalse % % \fi % % \Finale \endinput %% %% End of file `doibanner.dtx'.