% \iffalse meta-comment
%
% Copyright (C) 2019-2024 by Leo C. Stein <leo.stein@gmail.com>
% ---------------------------------------------------------------------------
% 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 Leo C. Stein.
%
% This work consists of the files orcidlink.dtx and orcidlink.ins
% and the derived filebase orcidlink.sty.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{orcidlink.dtx}
%</driver>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage[dvipsnames]{xcolor}
\usepackage{orcidlink}[2024/06/25]
\hypersetup{colorlinks,urlcolor=NavyBlue,citecolor=NavyBlue,linkcolor=NavyBlue}
\hypersetup{pdftitle={The orcidlink package},pdfauthor={Leo C. Stein},
  pdfsubject={-}}
\usepackage{graphicx}
\usepackage{microtype}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{orcidlink.dtx}
  \PrintChanges
\end{document}
%</driver>
% \fi
%
% \CheckSum{59}
%
% \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{v1.0.0}{2020/11/19}{Converted to DTX file}
% \changes{v1.0.1}{2020/11/21}{Bugfix due to misunderstanding of docstrip}
% \changes{v1.0.2}{2020/11/21}{Fix fragility of command when inside of
% author, and combined with hyperref's option pdfusetitle}
% \changes{v1.0.3}{2021/03/15}{Improve fragility by calculating
% scaling ourselves, and using DeclareRobustCommand}
% \changes{v1.0.4}{2021/06/11}{Use XeTeXLinkBox to get hyperlink
% working correctly with XeTeX.  Thanks to Tim Henke for the bug report.}
% \changes{v1.0.5}{2023/12/30}{Turn off TikZ externalization of logos.
% Thanks to github user aquileia for the bug report.}
% \changes{v1.1.0}{2024/06/25}{Support ORCID's three different ID
% formats. Thanks to Hugo Heagren for suggestions.}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
% \GetFileInfo{orcidlink.sty}
% \title{The \textsf{orcidlink} package}
% \author{Leo C.\ Stein\,\orcidlink{0000-0001-7559-9597} \\ \href{mailto:leo.stein@gmail.com}{leo.stein@gmail.com}}
% \date{\fileversion~from \filedate}
%
% \maketitle
%
% \noindent Source repo:
% \url{https://github.com/duetosymmetry/orcidlink-LaTeX-command}.
%
% \section{Introduction}
%
% This is a LaTeX style file providing a macro for inserting a
% hyperlinked ORCiD logo.  The package also provides three commands
% for ORCiD's three recommended ID printing formats, and a command for
% just the ORCiD logo, not linked to anything.
%
% \section{Usage}
%
% To use this package, in the preamble include
% \begin{verbatim}
%    \usepackage{orcidlink}
% \end{verbatim}
%
% \DescribeMacro{\orcidlink\marg{orcid}}
% Insert the ORCiD logo (\orcidlink{}), which is hyperlinked to the URL
% of the researcher whose iD was specified.
% Replace the mandatory argument \meta{orcid} with your
% ORCiD --- just the digits, not your whole URL.
% For example, the command
% |\orcidlink{0000-0001-7559-9597}| will hyperlink to the URL
% \url{https://orcid.org/0000-0001-7559-9597}.
% This is most common in
% the author list.  For example, in the preamble of a RevTeX article,
% if you write
% \begin{verbatim}
%    \author{Emmy Noether\,\orcidlink{0000-0000-0000-0000}}
% \end{verbatim}
% then the article byline will look something like this:
%
% \includegraphics[width=0.5\textwidth]{preview}\newline{}
% The macro is used in the author line of this documentation as well.
%
% \DescribeMacro{\orcidlogo}
% If you simply want the ORCiD logo without a hyperlink anywhere, use
% |\orcidlogo|.
%
% ORCiD's \href{https://info.orcid.org/brand-guidelines/}{guidelines}
% recommend three formats: full, compact, and inline.  The three
% formats are available:
% \begin{enumerate}
% \item \DescribeMacro{\orcidlinkf\marg{orcid}} Full format.  Example:
% |\orcidlinkf{0000-0001-7559-9597}| will insert
% \orcidlinkf{0000-0001-7559-9597}
% \item \DescribeMacro{\orcidlinkc\marg{orcid}} Compact format.
% Example: |\orcidlinkc{0000-0001-7559-9597}| will insert
% \orcidlinkc{0000-0001-7559-9597}
% \item \DescribeMacro{\orcidlinki\marg{Name}\marg{orcid}} Inline
% format.  Example: |\orcidlinki{Leo C. Stein}{0000-0001-7559-9597}|
% will insert \orcidlinki{Leo C. Stein}{0000-0001-7559-9597}
% \end{enumerate}
%
% \DescribeMacro{\orcidlinkX\marg{before}\marg{orcid}\marg{after}}
%
% The command |\orcidlinkX{before}{orcid}{after}| is a helper macro
% that's used to implement all of the others.  Though it is just an
% internal helper, I saw no reason to keep it internal.
% |\orcidlinkX{before}{orcid}{after}| results in
% \orcidlinkX{before}{orcid}{after}.  The entire output is hyperlinked
% to the ORCiD page.  There is a thin space |\,| between ``before,''
% the logo, and ``after.''  However if ``before'' is empty, the space
% will be omitted; similarly for ``after.''
%
% \section{Package Compatibility}
%
% This package relies on \texttt{hyperref} and \texttt{tikz}.  If you
% want to pass options to either of these packages, load them
% \emph{before} you load \texttt{orcidlink}.  Similarly, if you want
% to specify options to e.g. \texttt{xcolor}, load \texttt{xcolor}
% before loading \texttt{tikz} or \texttt{orcidlink}.
%
% \StopEventually{}
%
% \section{Implementation}
%
% \iffalse
%<*package>
% \fi
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{orcidlink}
    [2024/06/26 v1.1.0 Support ORCID's three different ID formats.]

%% This started out as Milo's code on TeX.SE,
%% see https://tex.stackexchange.com/a/445583/34063.
%% It has since been expanded with more commands.
\RequirePackage{hyperref}
\RequirePackage{tikz}

\ProcessOptions\relax

\usetikzlibrary{svg.path}

\definecolor{orcidlogocol}{HTML}{A6CE39}
\tikzset{
  orcidlogo/.pic={
    \fill[orcidlogocol] svg{M256,128c0,70.7-57.3,128-128,128C57.3,256,0,198.7,0,128C0,57.3,57.3,0,128,0C198.7,0,256,57.3,256,128z};
    \fill[white] svg{M86.3,186.2H70.9V79.1h15.4v48.4V186.2z}
                 svg{M108.9,79.1h41.6c39.6,0,57,28.3,57,53.6c0,27.5-21.5,53.6-56.8,53.6h-41.8V79.1z M124.3,172.4h24.5c34.9,0,42.9-26.5,42.9-39.7c0-21.5-13.7-39.7-43.7-39.7h-23.7V172.4z}
                 svg{M88.7,56.8c0,5.5-4.5,10.1-10.1,10.1c-5.6,0-10.1-4.6-10.1-10.1c0-5.6,4.5-10.1,10.1-10.1C84.2,46.7,88.7,51.3,88.7,56.8z};
  }
}

%% Reciprocal of the height of the svg whose source is above.  The
%% original generates a 256pt high graphic; this macro holds 1/256.
\newcommand{\@OrigHeightRecip}{0.00390625}

%% We will compute the current X height to make the logo the right height
\newlength{\@curXheight}

%% Prevent externalization of the ORCiD logo.
\newcommand{\@preventExternalization}{%
\ifcsname tikz@library@external@loaded\endcsname%
\tikzset{external/export next=false}\else\fi%
}

%    \end{macrocode}
%
% \begin{macro}{\orcidlogo}
%    \begin{macrocode}
\newcommand{\orcidlogo}{%
\texorpdfstring{%
\setlength{\@curXheight}{\fontcharht\font`X}%
\XeTeXLinkBox{%
\@preventExternalization%
\begin{tikzpicture}[yscale=-\@OrigHeightRecip*\@curXheight,
xscale=\@OrigHeightRecip*\@curXheight,transform shape]
\pic{orcidlogo};
\end{tikzpicture}%
}}{}}
%    \end{macrocode}
% \end{macro}

% \begin{macro}{\orcidlinkX}
%    \begin{macrocode}
\DeclareRobustCommand\orcidlinkX[3]{\href{https://orcid.org/#2}{%
\ifstrempty{#1}{}{#1\,}\orcidlogo\ifstrempty{#3}{}{\,#3}}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\orcidlinkf}
%    \begin{macrocode}
\newcommand{\orcidlinkf}[1]{\orcidlinkX{}{#1}{https://orcid.org/#1}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\orcidlinkc}
%    \begin{macrocode}
\newcommand{\orcidlinkc}[1]{\orcidlinkX{}{#1}{#1}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\orcidlinki}
%    \begin{macrocode}
\newcommand{\orcidlinki}[2]{\orcidlinkX{#1}{#2}{}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\orcidlink}
%    \begin{macrocode}
\newcommand{\orcidlink}[1]{\orcidlinkX{}{#1}{}}

\endinput
%    \end{macrocode}
% \end{macro}
%

%
% \iffalse
%</package>
% \fi
%
% \Finale
\endinput
