% \iffalse meta-comment % % Copyright (C) 2015 by Robin Schneider % % 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 Robin Schneider. % % This work consists of the files doclicense.dtx and doclicense.ins % and the derived files doclicense.sty and doclicense.pdf. % % \fi % % \iffalse %<*driver> \ProvidesFile{doclicense.dtx} % %%% See file 'doclicense.dtx' for copyright and license. %\NeedsTeXFormat{LaTeX2e}[1998/12/01] %\ProvidesPackage{doclicense} %<*package> [2015/02/06 v0.8 Set and print the license of a document] % % %<*driver> \documentclass[english]{ltxdoc} \newcommand{\PackageURL}{https://github.com/ypid/latex-packages/tree/master/doclicense} \newcommand{\PackageCTANURL}{https://www.ctan.org/pkg/doclicense} \newcommand{\PackageAuthor}{Robin Schneider} \newcommand{\PackageAuthorEmail}{ypid@riseup.net} \newcommand{\PackageName}{\PrintPackage{doclicense}\xspace} \newcommand{\PrintPackage}[1]{\textsf{#1}} \newcommand{\PrintOptionF}[1]{\emph{#1}} %% ^^A This macro is used for %% ^^A explaining any parameter when they first come up in the documentation. \newcommand{\DescribePara}[1]{\marginpar{\raggedleft\strut\MacroFont\string#1}} \usepackage{doclicense} \usepackage{ babel, csquotes, xcolor, url, hypdoc, nameref, xspace, } \GetFileInfo{doclicense.dtx} \hypersetup{ pdftitle={A manual for \PackageName}, pdfauthor={\PackageAuthor{} <\PackageAuthorEmail>}, pdfsubject={\fileinfo}, baseurl={\PackageURL}, pdfkeywords={This document corresponds to \PackageName~\fileversion, dated \filedate} } \title{The \PackageName{} package\thanks{This document corresponds to \PackageName~\fileversion, dated \filedate.}} \author{\PackageAuthor\\ \texttt{\href{mailto:\PackageAuthorEmail?subject=LaTeX package doclicense% \&body=Dear Robin Schneider,}% {\PackageAuthorEmail}% }% } \EnableCrossrefs% \CodelineIndex% \RecordChanges% \begin{document} \DocInput{doclicense.dtx} \PrintChanges% \PrintIndex% \end{document} % % \fi % % ^^A \CheckSum{0} % ^^A I use version control and so on which has much better checksums :) % % \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{0.7}{2015/02/05}{Initial version} % \changes{0.8}{2015/02/06}{Added support for CC-zero and CC-pd and small improvements} % % \DoNotIndex{\RequirePackage, \DeclareOption, \ProcessOptions} % \DoNotIndex{\PackageWarning, \MessageBreak} % \DoNotIndex{\DeclareRobustCommand, \newcommand, \renewcommand, \def, \edef} % \DoNotIndex{\DeclareStringOption, \ProcessLocalKeyvalOptions} % \DoNotIndex{\ProcessKeyvalOptions, \SetupKeyvalOptions, \DeclareBoolOption} % \DoNotIndex{\newenvironment} % \DoNotIndex{\if, \else, \fi, \ifcase, \or, \ifthenelse, \AND, \OR, \value, \relax} % \DoNotIndex{\loop, \repeat, \the, \ifnum} % \DoNotIndex{\equal, \boolean, \@currname, \newcounter, \setcounter} % \DoNotIndex{\stepcounter, \addtocounter} % \DoNotIndex{\endinput, \begin, \end} % \DoNotIndex{\not} % % \maketitle % % \phantomsection % \addcontentsline{toc}{section}{\abstractname} % \begin{abstract} % The \PackageName{} package can calculate the age in years. \\ % Information site on CTAN: \url{\PackageCTANURL} \\ % Example on Stackexchange: \url{https://tex.stackexchange.com/a/226788/32320} \\ % Fork me on GitHub: \url{\PackageURL} \end{abstract} % % \tableofcontents % % \section{Introduction} % Make it easy to set your documents under a certain license. % % The \PrintPackage{doclicense} package allows you to put your document under a % license and include a link to read about the license or include an icon or % image of the license. Currently, only \doclicenseLongType is supported but this % package is designed to handle all kinds of licenses. See \nameref{sec:contributing}. % % \section{Usage} % Just load the package placing % \begin{quote} % |\usepackage{doclicense}| % \end{quote} % in the preamble of your \LaTeXe{} source file. This will select the default % license which is \doclicenseNameRef, currently. Please always set your % license explicitly as package options like so: % % \begin{quote} % |\usepackage[| \\ % | type={CC},| \\ % | modifier={by-sa},| \\ % | version={3.0},| \\ % |]{doclicense}| % \end{quote} % % This will explicitly set the license to \doclicenseNameRef. % \bigskip % % The first parameter is \enquote{\PrintOptionF{type}}. \DescribePara{type} % This sets the license type. Like in this example, the type can be % \enquote{CC} to cover all the \doclicenseLongType licenses. % % The \DescribePara{modifier} next parameter is \enquote{\PrintOptionF{modifier}} which allows to % select different subclasses of a license. In this % example it is \enquote{by-sa}. % % As \DescribePara{version} there can be more than one version of a license, the version can also be set. % % This package can output some texts like the long license name. % \DescribePara{lang} % Because of this, there needs to be a way to specify the language to use. % If this parameter is omitted, then this package will default to % \cmd{\languagename} which is normally set by packages like % \PrintPackage{babel} or \PrintPackage{polyglossia}. % Currently only English and German are supported. % % Default image width for the license image. % \DescribePara{imagewidth} % % \section{Macros} % \DescribeMacro{\doclicenseType} % Expands to the type as set in the package options. For this document this % macro expands to: \enquote{\doclicenseType{}} % % \DescribeMacro{\doclicenseLongType} % Same as \cmd{\doclicenseType} expect that it expands to the long license % type. For this document, it looks like this: \enquote{\doclicenseLongType{}} % % \DescribeMacro{\doclicenseModifier} % Expands to the modifier as set in the package options. For this document this % macro expands to: \enquote{\doclicenseModifier{}} % % \DescribeMacro{\doclicenseVersion} % Expands to the version as set in the package options. For this document this % macro expands to: \enquote{\doclicenseVersion{}} % % \DescribeMacro{\doclicenseName} % Expands to the short name of the license. For this document this macro % expands to: \enquote{\doclicenseName{}} % % \DescribeMacro{\doclicenseLongName} % Expands to the long name of the license. For this document this macro expands % to: \enquote{\doclicenseLongName{}} % % \DescribeMacro{\doclicenseNameRef} % Same as \cmd{\doclicenseName} expect that it links to the URL of the license. % For this document, it looks like this: \enquote{\doclicenseNameRef{}} % % \DescribeMacro{\doclicenseLongNameRef} % Same as \cmd{\doclicenseLongName} expect that it links to the URL of the % license. For this document, it looks like this: % \enquote{\doclicenseLongNameRef{}} % % \DescribeMacro{\doclicenseURL} % Expands to the official URL about the license. Note that it expands to the % raw URL string without the use of \cmd{\href} or similar. If you want the % link to be clickable then you can use \cmd{\href} or \cmd{\url} from the % \PrintPackage{hyperref} package. For this document the macro expands to: % \enquote{\doclicenseURL{}} % % \DescribeMacro{\doclicenseText} % Expands to a localized text which states that this document is licensed under % the license. For this document this macro expands to: % \enquote{\doclicenseText{}} % % \DescribeMacro{\doclicenseIcon} % Expands to a icon of the license. For this document this macro expands to: % \enquote{\doclicenseIcon{}}. This macro is based on the % \PrintPackage{ccicons} package. % % \DescribeMacro{\doclicenseImage} % This is kind of similar with \cmd{\doclicenseIcon} but it will typeset an % bigger pictogram of the license. For this document this macro expands to: % \enquote{\doclicenseImage} % % Note that you can change the image size with the \oarg{imagewidth} parameter % like this: % \enquote{\doclicenseImage[imagewidth=2em]} % % The images are bundled with the \PackageName package. % % \DescribeMacro{\doclicenseLicense} % And last but not least there is the \cmd{\doclicenseLicense} macro which will % typeset the \cmd{\doclicenseText} next to the \cmd{\doclicenseImage} in a % \enquote{minipage} environment. This will look like the following. % % \doclicenseLicense % % \section{Contributing} % \label{sec:contributing} % This package is being developed on GitHub: \url{\PackageURL}. When you want % to modify the .sty file, make sure that you make your changes in the .dtx % file instead, as the .sty file is automatically generated. % % \StopEventually{} % % \newpage % \section{Implementation} % \iffalse %<*package> % \fi % This package depends on these packages. % \begin{macrocode} %% Dependencies {{{ \RequirePackage{kvoptions} \RequirePackage{xifthen} \RequirePackage{etoolbox} %% \ifcsdef \RequirePackage{xspace} \AtEndPreamble{% \@ifpackageloaded{csquotes}{}{\RequirePackage{csquotes}} \@ifpackageloaded{ccicons}{}{\RequirePackage{ccicons}} %% For \doclicenseIcon \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}} %% For \doclicenseImage \@ifpackageloaded{hyperref}{}{\RequirePackage{hyperref}} } %% }}} % \end{macrocode} % \subsection{Declaring the options} % \begin{macrocode} %% Parameters {{{ \DeclareStringOption[CC]{type} \DeclareStringOption[by-sa]{modifier} \DeclareStringOption{version} \DeclareStringOption{lang} \DeclareStringOption[10em]{imagewidth} %% }}} % \end{macrocode} % To test if all parameters are valid the macro |\ProcessLocalKeyvalOptions*| % is expanded to ensure this before leaving the preamble. This is the only % purpose for the |\ProcessLocalKeyvalOptions*| macro in this case. % \begin{macrocode} \ProcessLocalKeyvalOptions* % \end{macrocode} % \subsection{Declare variables and macros} % \begin{macrocode} %% Declare variables {{{ \newcommand{\doclicense@baseUrlCC}{https://creativecommons.org} \newcommand{\doclicense@versionFallback}{} \newcommand{\doclicense@versionUsed}{} \newboolean{doclicense@licenseKnown} \newlength{\doclicense@hsize} \newcommand{\doclicense@longName}{% \csname doclicense@lang@lic@\doclicense@type @\doclicense@modifier @\doclicense@versionUsed\endcsname } \newcommand{\doclicense@icon}{% \PackageError{doclicense}{Icon not defined} {Please check the documentation of doclicense to see what you can do about it.}% } %% }}} % \end{macrocode} % \subsection{Macro user macros} % \begin{macrocode} %% User macros {{{ \newcommand{\doclicenseType}{\doclicense@type\xspace} \newcommand{\doclicenseLongType}{} \newcommand{\doclicenseModifier}{\MakeUppercase{\doclicense@modifier}\xspace} \newcommand{\doclicenseVersion}{\doclicense@versionUsed\xspace} \newcommand{\doclicenseName}{\doclicense@type~\doclicense@modifier~\doclicense@versionUsed\xspace} \newcommand{\doclicenseNameRef}{\href{\doclicenseURL}{\doclicenseName}\xspace} \newcommand{\doclicenseLongName}{\doclicenseLongType\space\doclicense@longName\xspace} \newcommand{\doclicenseLongNameRef}{\href{\doclicenseURL}{\doclicenseLongName}} \newcommand{\doclicenseText}{% \doclicense@lang@thisDoc\space \href{\doclicenseURL}{\enquote{\doclicenseName}} \doclicense@lang@word@license.\xspace } \newcommand{\doclicenseLongText}{% \doclicense@lang@thisDoc\space \href{\doclicenseURL}{\doclicenseLongType\space\enquote{\doclicense@longName}} \doclicense@lang@word@license.\xspace } \newcommand{\doclicenseIcon}{\doclicense@icon\xspace} \newcommand{\doclicenseImage}[1][]{% \setkeys{doclicense}{#1} \href{\doclicenseURL}{% \includegraphics[width=\doclicense@imagewidth]% {doclicense-\doclicense@type-\doclicense@modifier}% } } \newcommand{\doclicenseLicense}{ \setlength{\doclicense@hsize}{\textwidth-\doclicense@imagewidth-2em} \ifthenelse{\lengthtest{\hsize > \vsize}}{%% landscape \setlength{\doclicense@hsize}{\doclicense@hsize-10em} }{} \begin{center} \begin{minipage}{\doclicense@hsize} \doclicenseLongText% \end{minipage} \hfill \begin{minipage}{\doclicense@imagewidth} \doclicenseImage% \end{minipage} \end{center} } %% }}} % \end{macrocode} % \subsection{Language selection} % The following lines include the ldf files. All language dependent things % should be stored there or can be changed there. Note that one could redefine % macros like \cmd{\doclicenseLongText} if necessary. % \begin{macrocode} %% Language support {{{ \ifthenelse{\equal{\doclicense@lang}{}}{% \renewcommand{\doclicense@lang}{\languagename}}{} \IfFileExists{doclicense-\doclicense@lang.ldf}{% \input{doclicense-\doclicense@lang.ldf} }{% \PackageWarning{doclicense}{No language definition for \doclicense@lang not found. Please add one and submit a patch. Using English as fallback.} \renewcommand{\doclicense@lang}{english} \input{doclicense-\doclicense@lang.ldf} } %% }}} % \end{macrocode} % \subsection{Internals} % \begin{macrocode} %% Set license {{{ \newcommand{\doclicense@setVersion}[1][]{% \ifthenelse{\equal{#1}{}}{}{% \renewcommand{\doclicense@versionFallback}{#1} } \ifthenelse{\equal{\doclicense@version}{}}{% \renewcommand{\doclicense@versionUsed}{\doclicense@versionFallback} }{% \renewcommand{\doclicense@versionUsed}{\doclicense@version} } } \newcommand{\doclicense@set}{% %% CC {{{ \ifthenelse{\equal{\doclicense@type}{CC}}{% \renewcommand{\doclicenseLongType}{Creative Commons\xspace} \ifthenelse{\equal{\doclicense@lang@lic@CC@code}{}}{% \edef\doclicense@UrlLangPart{} }{% \edef\doclicense@UrlLangPart{/\doclicense@lang@lic@CC@code} } \doclicense@setVersion[3.0] \edef\doclicenseURL{% \doclicense@baseUrlCC/% licenses/% \doclicense@modifier/% \doclicense@versionUsed\doclicense@UrlLangPart} \ifthenelse{\equal{\doclicense@modifier}{by-sa}} {\renewcommand{\doclicense@icon}{\ccbysa}}{} \ifthenelse{\equal{\doclicense@modifier}{by-nd}} {\renewcommand{\doclicense@icon}{\ccbynd}}{} \ifthenelse{\equal{\doclicense@modifier}{by-nc}} {\renewcommand{\doclicense@icon}{\ccbync}}{} \ifthenelse{\equal{\doclicense@modifier}{by-nc-sa}} {\renewcommand{\doclicense@icon}{\ccbync}}{} \ifthenelse{\equal{\doclicense@modifier}{by-nc-nd}} {\renewcommand{\doclicense@icon}{\ccbync}}{} \ifthenelse{\equal{\doclicense@modifier}{zero}}{% \renewcommand{\doclicense@icon}{\cczero} \doclicense@setVersion[1.0] \edef\doclicenseURL{% \doclicense@baseUrlCC/% publicdomain/% \doclicense@modifier/% \doclicense@versionUsed\doclicense@UrlLangPart} }{} \ifthenelse{\equal{\doclicense@modifier}{pd}}{ \renewcommand{\doclicense@icon}{\ccpd} \doclicense@setVersion[1.0] \edef\doclicenseURL{% \doclicense@baseUrlCC/% licenses/publicdomain/% \doclicense@versionUsed\doclicense@UrlLangPart} }{} \ifcsdef{doclicense@lang@lic@\doclicense@type% @\doclicense@modifier @\doclicense@versionUsed}{}{% \PackageError{doclicense}{License long name not defined}% {Please check the documentation of doclicense to see what you can do about it.}% } \setboolean{doclicense@licenseKnown}{true} }{}%% }}} \ifthenelse{\not\boolean{doclicense@licenseKnown}}{% \PackageError{doclicense}{License unknown}% {Please check the documentation of doclicense to see what you can do about it.}% }{}% } %% }}} \doclicense@set% % \end{macrocode} % That's it. % \begin{macrocode} \endinput % \end{macrocode} % % \iffalse % % \fi % % \Finale \endinput