summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/changelog
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/changelog
Initial commit
Diffstat (limited to 'macros/latex/contrib/changelog')
-rw-r--r--macros/latex/contrib/changelog/LICENSE.txt416
-rw-r--r--macros/latex/contrib/changelog/README.md21
-rw-r--r--macros/latex/contrib/changelog/changelog.pdfbin0 -> 46076 bytes
-rw-r--r--macros/latex/contrib/changelog/changelog.sty206
-rw-r--r--macros/latex/contrib/changelog/changelog.tex357
5 files changed, 1000 insertions, 0 deletions
diff --git a/macros/latex/contrib/changelog/LICENSE.txt b/macros/latex/contrib/changelog/LICENSE.txt
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/contrib/changelog/LICENSE.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % 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 M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/contrib/changelog/README.md b/macros/latex/contrib/changelog/README.md
new file mode 100644
index 0000000000..b582ea33de
--- /dev/null
+++ b/macros/latex/contrib/changelog/README.md
@@ -0,0 +1,21 @@
+# The `changelog` LaTeX package
+
+[Available on CTAN as `changelog`][changelog]
+
+Changelogs are important. Unfortunately, there are few facilities
+for typesetting changelogs in LaTeX. `changelog` defines a `changelog`
+environment to make changelogs simple and intuitive.
+
+Inspired by [keepachangelog.com].
+
+File | Description
+-----------------------------|-------------------------------
+changelog.sty | The changelog package
+changelog.pdf | Documentation (English)
+changelog.tex | Documentation source
+changelog-doc.sty | Documentation styles
+README.md | This file
+LICENSE.md | GNU GPLv3
+
+[keepachangelog.com]: https://keepachangelog.com/
+[changelog]: https://ctan.org/pkg/changelog
diff --git a/macros/latex/contrib/changelog/changelog.pdf b/macros/latex/contrib/changelog/changelog.pdf
new file mode 100644
index 0000000000..bc54571d96
--- /dev/null
+++ b/macros/latex/contrib/changelog/changelog.pdf
Binary files differ
diff --git a/macros/latex/contrib/changelog/changelog.sty b/macros/latex/contrib/changelog/changelog.sty
new file mode 100644
index 0000000000..491e78d754
--- /dev/null
+++ b/macros/latex/contrib/changelog/changelog.sty
@@ -0,0 +1,206 @@
+\ProvidesPackage{changelog}[2019/07/06 2.1.0 Typesetting changelogs]
+% Description: Provides the changelog environment for typesetting changelogs
+% License: LPPL 1.3c
+% Homepage: https://github.com/9999years/latex-changelog
+% https://ctan.org/pkg/changelog
+% Maintainer: Rebecca Turner <637275@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 Rebecca Turner <637275@gmail.com>.
+%
+% This work consists of the files changelog.sty and changelog.tex.
+
+\RequirePackage{xparse}
+\RequirePackage{xkeyval}
+\RequirePackage{translations}
+
+% See https://github.com/olivierlacan/keep-a-changelog/issues/195
+% for a discussion about the term yanked
+
+% Fallback translations will be used if there is no translation for
+% the current document language
+\DeclareTranslationFallback{changelog-Added}{Added}
+\DeclareTranslationFallback{changelog-Changed}{Changed}
+\DeclareTranslationFallback{changelog-Deprecated}{Deprecated}
+\DeclareTranslationFallback{changelog-Removed}{Removed}
+\DeclareTranslationFallback{changelog-Fixed}{Fixed}
+\DeclareTranslationFallback{changelog-Security}{Security}
+\DeclareTranslationFallback{changelog-Miscellaneous}{Miscellaneous}
+\DeclareTranslationFallback{changelog-Unreleased}{Unreleased}
+\DeclareTranslationFallback{changelog-Yanked}{YANKED}
+% English translations
+\DeclareTranslation{English}{changelog-Added}{Added}
+\DeclareTranslation{English}{changelog-Changed}{Changed}
+\DeclareTranslation{English}{changelog-Deprecated}{Deprecated}
+\DeclareTranslation{English}{changelog-Removed}{Removed}
+\DeclareTranslation{English}{changelog-Fixed}{Fixed}
+\DeclareTranslation{English}{changelog-Security}{Security}
+\DeclareTranslation{English}{changelog-Miscellaneous}{Miscellaneous}
+\DeclareTranslation{English}{changelog-Unreleased}{Unreleased}
+\DeclareTranslation{English}{changelog-Yanked}{YANKED}
+% German translations
+% Alternative german translations as comment at the end of the line
+\DeclareTranslation{German}{changelog-Added}{Hinzugef\"{u}gt}% Neu
+\DeclareTranslation{German}{changelog-Changed}{Ge\"{a}ndert}
+\DeclareTranslation{German}{changelog-Deprecated}{Überholt}% Veraltet
+\DeclareTranslation{German}{changelog-Removed}{Entfernt}
+\DeclareTranslation{German}{changelog-Fixed}{Behoben}% Fehlerbehebung
+\DeclareTranslation{German}{changelog-Security}{Sicherheit}
+\DeclareTranslation{German}{changelog-Miscellaneous}{Verschiedenes}
+\DeclareTranslation{German}{changelog-Unreleased}{Unver\"{o}ffentlicht}
+\DeclareTranslation{German}{changelog-Yanked}{Zur{\"u}ckgezogen}
+
+\newif\ifchangelog@versionfirst
+\newcommand{\changelog@item}[1]{%
+ \noindent
+ \ifchangelog@versionfirst
+ \changelog@versionfirstfalse
+ \else
+ \end{changelogitemize}
+ \fi
+ \textbf{#1}%
+ \begin{changelogitemize}%
+}
+
+\newcommand{\changelogyanked}{\fbox{\textbf{\GetTranslation{changelog-Yanked}}}}
+
+\newcommand{\changelog@sectioncmds}{
+ \newcommand{\added} {\changelog@item{\GetTranslation{changelog-Added}}}
+ \newcommand{\changed} {\changelog@item{\GetTranslation{changelog-Changed}}}
+ \newcommand{\deprecated}{\changelog@item{\GetTranslation{changelog-Deprecated}}}
+ \newcommand{\removed} {\changelog@item{\GetTranslation{changelog-Removed}}}
+ \newcommand{\fixed} {\changelog@item{\GetTranslation{changelog-Fixed}}}
+ \newcommand{\security} {\changelog@item{\GetTranslation{changelog-Security}}}
+ \newcommand{\misc} {\changelog@item{\GetTranslation{changelog-Miscellaneous}}}
+}
+
+\define@cmdkeys{version}{author, version, date, changes}
+\define@key{version}{v}{\def\cmdKV@version@version{#1}}
+\define@boolkey{version}{yanked}[true]{}
+\define@boolkey{version}{simple}[true]{}
+\define@boolkey{version}{short}[true]{}
+
+\define@cmdkeys{changelog}{sectioncmd, title, label}
+\define@boolkey{changelog}{section}[true]{}
+\presetkeys{changelog}{sectioncmd=\section, title=Changelog,
+ label=sec:changelog, section}{}
+
+\newenvironment{changelogdescription}
+ {\begin{description}}
+ {\end{description}}
+\newenvironment{changelogitemize}
+ {\begin{itemize}}
+ {\end{itemize}}
+
+\newcommand{\changelog@section@maybe}{%
+ \ifKV@changelog@section
+ \expandafter\cmdKV@changelog@sectioncmd{\cmdKV@changelog@title}%
+ \expandafter\label{\cmdKV@changelog@label}%
+ \fi
+}
+
+\newcommand{\changelog@shortversion@definedate}{%
+ \@ifundefined{cmdKV@version@version}{
+ \@ifundefined{cmdKV@version@date}{
+ \newcommand{\cmdKV@version@version}{\GetTranslation{changelog-Unreleased}}
+ \let\cmdKV@version@date\today
+ }{%
+ \let\cmdKV@version@version\cmdKV@version@date
+ \let\cmdKV@version@date\undefined
+ }%
+ }{}%
+}
+
+\newcommand{\changelog@yanked@maybe}
+ {\ifKV@version@yanked\ \changelogyanked\fi}
+
+\newcommand{\changelog@shortversion@item}
+ {\cmdKV@version@version
+ \changelog@yanked@maybe}
+
+
+\newcommand{\changelog@shortversion@authordate}{%
+ \@ifundefined{cmdKV@version@author}{}{\cmdKV@version@author}
+ \@ifundefined{cmdKV@version@date}{%
+ % if both undefined, add a linebreak
+ \@ifundefined{cmdKV@version@author}{\hspace{0pt}}{}%
+ }{(\cmdKV@version@date)}%
+}
+
+\newcommand{\changelog@version@pre}{%
+ \par
+ \changelog@versionfirsttrue
+ \changelog@sectioncmds
+ \ifKV@version@simple
+ \begin{changelogitemize}
+ \fi
+}
+\newcommand{\changelog@version@post}{%
+ \ifchangelog@versionfirst
+ \ifKV@version@simple
+ \else
+ \PackageError{changelog}{Something's wrong in version environment;
+ perhaps a missing \protect\added, \protect\changed,
+ \protect\deprecated, \protect\removed, \protect\fixed,
+ \protect\security, or \protect\misc}{A version environment needs to
+ introduce its \protect\item-ized lists with one of the provided
+ section commands; maybe you meant to use the [simple] option?}
+ \fi
+ \fi
+ \end{changelogitemize}%
+}
+
+\newif\ifchangelog@hadversion
+\NewDocumentEnvironment{changelog}{o}
+ {\global\changelog@hadversionfalse
+ \IfValueT{#1}{\setkeys{changelog, version}{#1}}%
+ \changelog@section@maybe
+ %\today
+ % version environment; wraps a list
+ \NewDocumentEnvironment{version}{ O{} }%
+ {\setkeys{version}{##1}%
+ \@shortversion
+ \ifKV@version@short
+ \else
+ \changelog@version@pre
+ \fi}
+ {\ifKV@version@short
+ \else
+ \changelog@version@post
+ \fi}%
+
+ % doesn't set keys so this can share code with the version
+ % environment
+ \NewDocumentCommand{\@shortversion}{}{%
+ \changelog@shortversion@definedate
+ \global\changelog@hadversiontrue
+ \item[\changelog@shortversion@item]%
+ \changelog@shortversion@authordate
+ \ifKV@version@short
+ \ ---
+ \@ifundefined{cmdKV@version@changes}{}{\cmdKV@version@changes}%
+ \fi
+ }%
+
+ % short version; "like" a 1-bullet list
+ % extra braces keep command definitions local
+ \NewDocumentCommand{\shortversion}{m}{{%
+ \setkeys{version}{##1, short}%
+ \@shortversion
+ }}%
+ \begin{changelogdescription}}
+ {\ifchangelog@hadversion
+ \else
+ \PackageError{changelog}{No versions in changelog environment body}{A
+ changelog environment must have at least one version or shortversion in
+ it.}%
+ \fi\end{changelogdescription}}
diff --git a/macros/latex/contrib/changelog/changelog.tex b/macros/latex/contrib/changelog/changelog.tex
new file mode 100644
index 0000000000..22a6222195
--- /dev/null
+++ b/macros/latex/contrib/changelog/changelog.tex
@@ -0,0 +1,357 @@
+\documentclass{ltxguidex}
+% for demonstrating translations
+\usepackage[german, american]{babel}
+%\babelprovide{chinese}
+%\usepackage{translations}
+%\DeclareLanguage{Chinese}
+%\DeclareTranslation{Chinese}{changelog-added}{新增}
+
+\usepackage{fontspec}
+\errorcontextlines=10
+\usepackage{changelog}
+\usepackage{changepage}
+\newcommand{\cl}{\ctan{changelog}}
+\newcommand{\keepachangelog}{\https{keepachangelog.com}}
+
+\makeatletter
+\renewcommand{\SX@explpreset}{
+ language=[LaTeX]TeX,
+ numbers=none,
+}
+\makeatother
+
+\setmainfont{Tiempos Text}
+\usepackage{FiraSans}
+\usepackage{FiraMono}
+\lstset{basewidth=0.6em}
+
+
+\NewDocumentEnvironment{ctandescription}{}
+ {\NewDocumentCommand{\pkg}{m}{\item[\ctan{##1}]}
+ \begin{description}}
+ {\end{description}}
+
+\author{Rebecca Turner\thanks{Brandeis University; \email{rebeccaturner@brandeis.edu}}}
+\title{The \cl\ Package}
+\date{2019/07/06 2.1.0}
+\begin{document}
+\maketitle
+
+\begin{abstract}
+ Changelogs are important. Unfortunately, there are few facilities
+ for typesetting changelogs in \LaTeX. \cl\ defines a |changelog|
+ environment to make changelogs simple and intuitive.
+
+ For rationale, read \keepachangelog.
+\end{abstract}
+
+\begin{note}
+ Browse the sources, contribute, or complain at \\
+ \https{github.com/9999years/latex-changelog}
+\end{note}
+
+\tableofcontents
+\vfill
+\pagebreak
+
+\section{I don't want to read this documentation}
+
+Perfectly understandable. \cl\ comes in a ``simple'' flavor:
+
+\begin{LTXexample}
+\begin{changelog}[author=Rebecca Turner, simple, sectioncmd=\section*]
+\begin{version}[v=1.0.0, date=2018-12-28]
+ \item Cool features
+ \item Bug fixes
+\end{version}
+\shortversion{v=0.1.0, date=2018-10-25, changes=Initial beta}
+\end{changelog}
+\end{LTXexample}
+
+And a more organized variant based on \keepachangelog:
+
+\begin{LTXexample}
+\begin{changelog}[author=Rebecca Turner, sectioncmd=\section*]
+\begin{version}[v=1.0.0, date=2018-12-28]
+ \added
+ \item Cool features
+ \fixed
+ \item Bug fixes
+\end{version}
+\shortversion{v=0.1.0, date=2018-10-25, changes=Initial beta}
+\end{changelog}
+\end{LTXexample}
+
+\section{Intro}
+
+\subsection{Why?}
+
+Read \href{https://olivierlacan.com/}{Olivier Lacan}'s lovely site
+\keepachangelog. To excerpt:
+
+\begin{adjustwidth}{1in}{1in}
+ \subsubsection{What is a changelog?}
+ A changelog is a file which contains a curated, chronologically
+ ordered list of notable changes for each version of a project.
+
+ \subsubsection{Why keep a changelog?}
+ To make it easier for users and contributors to see precisely what
+ notable changes have been made between each release (or version) of
+ the project.
+
+ \subsubsection{Who needs a changelog?}
+ People do. Whether consumers or developers, the end users of
+ software are human beings who care about what's in the software.
+ When the software changes, people want to know why and how.
+\end{adjustwidth}
+
+\subsection{The competition}
+
+It's always good to know the competition. Unfortunately, there isn't much
+here. Know of another package with similar functionality? Drop me a line or
+open a pull request!
+
+\begin{ctandescription}
+ \pkg{vhistory} provides a decent-looking changelog. However, it's
+ designed for short changes and provides a less-than-elegant
+ interface. Additionally, it's based on the \ctan{ltxtable}
+ package, meaning it makes restrictions on the contents of
+ version information and writes the table to a file.
+
+ \pkg{holtxdoc} has a decent changelog feature (via
+ Oberdiek's |History| and |Version| environments),
+ but \ctan{holtxdoc} ``contains some private macros and setup
+ for my needs. Thus do not use it.'' In addition, Oberdiek's
+ changelogs don't support multiple authors.
+
+ \pkg{gitlog} is an interesting idea, but \ctan{gitlog} ``is a
+ proof-of-concept release to allow users an early
+ evaluation\dots''
+
+ Also,
+ \href{https://keepachangelog.com/en/1.0.0/}{friends don't
+ let friends dump git logs into changelogs}.
+\end{ctandescription}
+
+\section{The \texttt{changelog} environment}
+
+\begin{desc}
+|\begin{changelog}[<options>]...\end{changelog}|
+\end{desc}
+Wraps |description| while providing the |version| environment and the
+\cs{shortversion} command. In addition to the options shown below,
+\meta{options} may contain any of the options for |version| as a form of
+``partial application''; this may be useful if, for example, most of your
+versions have the same author.
+
+\begin{keys}
+ \key{section}[\bool][true]
+ Insert a \cs{section} before the changelog?
+ \key{sectioncmd}[\m{command}][\cs{section}]
+ Which sectioning command to use?
+ \key{title}[\m{txt}][Changelog]
+ What to title the changelog section?
+ \key{label}[\m{label}][sec:changelog]
+ What to \cs{label} the section?
+\end{keys}
+
+\begin{desc}
+|\begin{version}[<options>]...\end{version}|
+\end{desc}
+Gives a single version; wraps |itemize|.
+
+If the \option{date} option is absent, the date isn't printed.
+
+If the \option{v}/\option{version} option is absent, the date is used in its
+place.
+
+If both \option{version} and \option{date} are absent, the version is shown
+as \texttt{Unreleased} and \cs{today} is used for the date. \cs{today} isn't
+ideal (which is to say, not
+\href{https://en.wikipedia.org/wiki/ISO_8601}{\textsc{iso} 8601} compliant)
+but it's well-known and easy to redefine.\footnote{Try the \ctan{datetime2}
+package or
+\href{https://tex.stackexchange.com/questions/152392/date-format-yyyy-mm-dd}{any
+of the other solutions here.}}
+
+\m{options} may include:
+
+\begin{keys}
+ \key{version}[\m{version string}]
+ The version string for this version
+ \key{v}[\m{version string}]
+ An alias for \option{version}
+ \key{author}[\m{author(s)}]
+ The author(s) of this version
+ \key{date}[\m{date string}]
+ The date of this version's release
+ \key{yanked}[\bool][false]
+ Indicates that the release was revoked due to a ``serious bug or
+ security issue''; prints a visible notice next to the version number
+ \key{simple}[\bool][false]
+ Indicates this version isn't split up into \cs{added}, \cs{changed},
+ etc.\ categories; if this option is given, a |version| environment acts
+ like a plain |itemize|
+ \key{short}[\bool][false]
+ Renders a short version, like |\shortversion|'s \option{changes} option;
+ useful if you need to put verbatim material in the changes which would
+ otherwise cause an error due to being used in an argument.
+\end{keys}
+
+\begin{desc}
+|\shortversion{<options>}|
+\end{desc}
+A short, one-line version. In addition to |version|'s options, the following
+options are available for \cs{shortversion}:
+
+\begin{keys}
+ \key{changes}[\m{change text}] The changes to display for this version
+\end{keys}
+
+\subsection{Helper commands}
+
+The \cl\ package defines several ``helper commands.'' These commands
+introduce a \textit{set} of changes within the version. There must be at
+least one \cs{item} between one of these commands and the end of the
+|version| environment.
+
+Note that these commands are \emph{only} available when not using
+the \option{simple} option!
+
+\begin{desc}|\added|\end{desc}Introduces a list of \cs{item}s that represent added
+ features
+\begin{desc}|\changed|\end{desc}Introduces a list of \cs{item}s that represent
+ changed features
+\begin{desc}|\deprecated|\end{desc}Introduces a list of \cs{item}s that represent
+ deprecated features
+\begin{desc}|\removed|\end{desc}Introduces a list of \cs{item}s that represent
+ features which have been removed
+\begin{desc}|\fixed|\end{desc}Introduces a list of \cs{item}s that represent bug
+ fixes
+\begin{desc}|\security|\end{desc}Introduces a list of \cs{item}s that represent
+ security-fixes and closed security holes
+
+\subsection{Customization}
+
+The |changelog| environment wraps |changelogdescription| (which is
+defined by default to be just the |description| environment), and the
+|version| environment wraps |changelogitemize|. One could customize
+these in depth with \ctan{enumitem}, as in:
+
+\begin{latexcode}
+\usepackage{enumitem}
+\renewenvironment{changelogitemize}
+ {\begin{itemize}[label=---]}
+ {\end{itemize}}
+\end{latexcode}
+
+\begin{desc}
+|\changelogyanked|
+\end{desc}
+Prints the ``revoked release'' notice:
+\changelogyanked. See:
+\href{https://keepachangelog.com/en/1.0.0/#yanked}{yanked releases on
+\texttt{keepachangelog.com}}.
+
+\section{Translations}
+
+Want to use \cl\ in a non-English document? Great! Thanks to a contribution
+by Holger Schieferdecker (see section~\ref{s:contrib} below), \cl\ comes
+with translations for English, German, and support for adding new
+translations. To use built-in translations, simply load \ctan{babel} with
+the desired language:
+\begin{otherlanguage}{german}
+\begin{LTXexample}
+% In the preamble:
+% \usepackage[german]{babel}
+
+\begin{changelog}[section=false, author=Holger Schieferdecker]
+ \begin{version}[v=1.0.0]
+ \added
+ \item Features!
+ \end{version}
+\end{changelog}
+\end{LTXexample}
+\end{otherlanguage}
+
+\subsection{Creating new translations}
+
+\cl\ uses the \ctan{translations} package to provide translations, and a
+complete translation looks like this:
+\begin{latexcode}
+\documentclass{article}
+\usepackage[english]{babel}
+\usepackage{translations}
+\DeclareTranslation{English}{changelog-Added}{Added}
+\DeclareTranslation{English}{changelog-Changed}{Changed}
+\DeclareTranslation{English}{changelog-Deprecated}{Deprecated}
+\DeclareTranslation{English}{changelog-Removed}{Removed}
+\DeclareTranslation{English}{changelog-Fixed}{Fixed}
+\DeclareTranslation{English}{changelog-Security}{Security}
+\DeclareTranslation{English}{changelog-Miscellaneous}{Miscellaneous}
+\DeclareTranslation{English}{changelog-Unreleased}{Unreleased}
+\DeclareTranslation{English}{changelog-Yanked}{YANKED}
+\begin{document}
+% ...
+\end{document}
+\end{latexcode}
+Refer to the
+\href{http://mirrors.ctan.org/macros/latex/contrib/translations/translations_en.pdf}{\texttt{translations}
+package documentation} and the
+\href{http://mirrors.ctan.org/macros/latex/required/babel/base/babel.pdf}{\texttt{babel}
+package documentation} for more information.
+
+If you create a translation, please \href{mailto:637275@gmail.com}{send me
+an email} and I'll incorporate the translation into \cl's next release!
+
+\section{Contributors}%
+\label{s:contrib}
+
+\begin{description}
+ \item[Rebecca Turner] Original implementation.
+ \item[Holger Schieferdecker]
+ Internationalization support and German translations.
+\end{description}
+
+\section{Changelog}
+
+This is this package's actual changelog --- not an example!
+
+\begin{changelog}[author=Rebecca Turner, section=false]
+\begin{version}[v=2.1.0, date=2019-06-29,
+ author={Holger Schieferdecker}]
+\added
+ \item Internationalization support.
+ \item German translations.
+\end{version}
+
+\begin{version}[v=2.0.0, date=2019-04-15]
+\added
+ \item Better error handling; more informative messages for empty
+ \texttt{version} or \texttt{changelog} environments.
+ \item \option{short} option in versions.
+\removed
+ \item Removed \texttt{color} package option.
+\fixed
+ \item Added dependencies for \ctan{xparse} and \ctan{xkeyval}, which had
+ erroneously been excluded from the package.
+\end{version}
+
+\begin{version}[v=1.0.0, date=2018-12-28]
+\added
+ \item The ``simple'' option for changelogs which aren't split up
+ into sections of added, changed, removed, etc.\ features
+\changed
+ \item Instead of commands like \cs{added} introducing an item, they
+ introduce a list of items; this is what \keepachangelog\
+ actually intended; previous implementations were incorrect to
+ display an ``Added'' (or whatever) marker next to each item.
+\end{version}
+
+\shortversion{v=0.2.1, date=2018-10-26, changes=Documented \option{yanked}
+ option}
+\shortversion{v=0.2.0, date=2018-10-26, changes=First stable release}
+\shortversion{v=0.1.0, date=2018-10-25, changes=Initial beta}
+\end{changelog}
+
+\end{document}