%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Copyright © 2022 Maximilian Keßler % % This work may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU General Public License % % Distribution under conditions of the LaTeX Project Public License, % requires 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 Maximilian Keßler. % % % Distribution under the GNU General Public License requires either % version 3 or (at your opinion) any later version. % % This package has been generated by PyTeX, available at % https://github.com/kesslermaximilian/PyTeX % and built from source file 'findpackage.pysty'. % It is STRONGLY DISCOURAGED to edit this source file directly, since local % changes will not be versioned by Git and overwritten by the next build. Always % edit the source file and build the package again. % % Build details: % PyTeX version: v1.7-4-gc9bb0e8 (commit c9bb0e8) % Source code version: v2.6-3-g31a9aae (commit 31a9aae) % % This LaTeX package is free software and is dual-licensed % under the LPPLv1.3c and the GPLv3 licenses. % You may use it freely for your purposes. % The latest version of the package sources can be obtained % via GitLab under % https://gitlab.com/latexci/packages/LatexPackages % The latest version of the built packages can be obtained via GitLab under % https://gitlab.com/latexci/packages/LatexPackagesBuild % For further information see the urls above. % Reportings of bugs, suggestions and improvements are welcome, see the README % at the Git repository for further information. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{mkessler-findpackage}[2022/03/13 - Find a package that provides some command] % This is just a quick packaging of the post by % 'Martin Nyolt' (https://tex.stackexchange.com/users/78783/martin-nyolt) % found at % https://tex.stackexchange.com/users/78783/martin-nyolt % Note that SO answers are by default CC BY-SA 3.0 licensed, see % https://creativecommons.org/licenses/by-sa/3.0/ \def\find@load#1[#2]#3[#4]{% % load the package \find@fileswith@pti@ns{#1}[#2]{#3}[#4]% % check if commands exists now \ifcsname\find@command\endcsname \typeout{Package #3 introduces command \find@command.}% % command has been found, revert to original version without checks \let\@fileswith@pti@ns\find@fileswith@pti@ns \else % somehow, \@fileswith@pti@ns is restored after loading a package % thus, patch it again \let\@fileswith@pti@ns\find@load \fi }% \newcommand*{\findpackagebycommand}[1]{% % using this multiple times - esp. when the package has not been found yet - % will break things. Thus, check first that \find@command has never been defined before \ifx\find@command\undefined \def\find@command{#1}% % first, check if this command is already defined \ifcsname\find@command\endcsname % in this case, just issue a warning and do nothing \@latex@warning@no@line{Command \find@command \space is already defined}% \else % overwrite the internal \@fileswith@pti@ns command, which does the actual loading % \@fileswith@pti@ns is used internally by \usepackage and \RequirePackage \let\find@fileswith@pti@ns\@fileswith@pti@ns \let\@fileswith@pti@ns\find@load \fi \else % used multiple times - prevent and give a warning \@latex@warning@no@line{You can use \protect\findpackagebycommand \space only once}% \errmessage{Invalid use of command findpackagebycommand.}% \fi }