%! Author = Jander Moreira
%! Date = 2024

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}

\usepackage[presets]{packdoc}

\title{The \PackageName{packdoc} package\\\normalsize\textsf{\PDVersion}}
\author{%
    Jander Moreira\\%
    \texttt{moreira.jander@gmail.com}\\%
    \url{https://github.com/jandermoreira/packdoc}%
}
\date{\PDDate}

\begin{document}

\maketitle
\tableofcontents

\PDNewVersion{0.1}{2025/01/31}
\PDAddChange {0.1}{
    description = {Initial version.},
    no box,
    no page,
}
\PDPrintChanges


\section{Introduction}

The \PackageName{packdoc} package was developed to assist in the writing of documents or manuals that use \LaTeX. The intention is to simplify the documentation process by providing standardized formatting for key components. This includes the ability to describe the syntax and functionality of macros and environments, as well as available options and their usage. Additionally, the package facilitates the inclusion of elements such as index entries, ensuring a clear and consistent structure throughout the text.

This package is not intended to replace or compete with the use of \FileName{.dtx} and \FileName{.ins} files, which is an important strategy for writing \FileName{.sty} files. The development of a package and its documentation should be done independently. A very personal reason for this approach is that my background is in Computer Science, and, as such, I have a strong inclination towards writing well-formatted and well-documented code. Therefore, in the end, while the style file created from \FileName{.dtx} and .ins files is functional, it often lacks attention to the elegance in the look of the code. For this reason, I write \FileName{.sty} files and their documentation completely separately.

This package offers the capability to document commands and environments, in addition to supporting versioning through a change log.

\section{Package usage and options}
To use this package, it must be loaded with \Macro{usepackage}.

\begin{Macro*}{usepackage}{\OArg{options}\PArg{packdoc}}{}
    So far there is only one option to the package: \OptionRef{presets}. This is covered in \Cref{sec:preset-elements}.
\end{Macro*}


\section{Documentation}

\subsection{Basic commands}

A set of useful macros is provided to facilitate the creation of consistent documents and ensure uniform formatting across the text.

\begin{Macrodef}{PackageName}{\OArg{options}\MArg{name}}{}
    This macro is designed to format \Argument {name} as the name of \LaTeX packages and classes, such as \PackageName{amsmath} or \PackageName{article}. The optional argument \Argument{options} allows for local adjustments to the style used for package names by modifying the \OptionRef{package style}.
\end{Macrodef}

\begin{PDExample}
    Examples of useful packages include \PackageName{graphicx} and \PackageName{xcolor}. Additionally, \PackageName[package style=\scshape\color{blue}]{babel} and \PackageName{inputenc} are also important.
\end{PDExample}

\begin{Macrodef}{Argument}{\OArg{options}\MArg{name}}{}
    The \Macro{Argument} macro is used to format generic arguments.

    The optional \OptionRef{argument color} allows the color of the argument to be customized. However, the font, size, and shape of arguments are currently hardcoded and cannot be adjusted.
\end{Macrodef}

\begin{PDExample}
    The \PackageName{article} class supports \Argument{options}, including settings like paper size and the number of columns.
\end{PDExample}

\begin{Macrodef}{MArg}{\OArg{options}\MArg{name}}{}
    ``MArg'' means \textit{mandatory argument}, and the result is the same as \MacroRef{Argument} enclosed in braces. The same \Argument{options} available for \MacroRef{Argument} also apply.
\end{Macrodef}

\begin{Macrodef}{OArg}{\OArg{options}\MArg{name}}{}
    ``OArg'' stands for \textit{optional argument}, and the result is the same as \MacroRef{Argument} enclosed in square brackets. The same \Argument{options} available for \MacroRef{Argument} also apply.
\end{Macrodef}

\begin{PDExample}
    Mandatory argument: \MArg{arg}.\par
    Optional argument: \OArg{arg}.
\end{PDExample}

Additionally, macros for arguments between angle brackets (e.g., \texttt{<\Option{color} = blue>}) and plain text (e.g., \PDInline{{newcounter}}) are also available.

\begin{Macrodef}{AArg}{\OArg{options}\MArg{name}}{}
    ``AArg'' stands for \textit{optional argument between angular brackets}. The same \Argument{options} for \MacroRef{Argument} also apply.
\end{Macrodef}

\begin{PDExample}
    Class \PackageName{beamer} can use overlays in slides. For example, \AArg[argument color = red]{range} can be used in a itemized list and \Argument{range} can be set to \PDInline{2} (only on slide 2) or \PDInline{2-5} (from slide 2 to 5), for example.
\end{PDExample}

\begin{Macrodef}{PArg}{\MArg{name}}{}
    ``PArg'' stands for \textit{mandatory plain text argument} and is an \MacroRef{Argument} between brackets without any special format.
\end{Macrodef}

\begin{PDExample}
    Plain argument: \PArg{article}
\end{PDExample}

\subsection{Elements}

An \textit{element} in the scope of this document refers to an item that can be highlighted and referenced, such as macros, options and environments, for example.

To instance an element, the \MacroRef{PDNewElement} macro must be used.

\PDNewElement{EnumItemOption}{
    color = red!75!black,
    arguments prefix = \texttt{~=~},
    index heading = \texttt{EnumItemOption} example,
    index remark = (\texttt{EnumItemOption} example),
    no single index,
    no group index,
}
\begin{Macrodef}{PDNewElement}{\MArg{element name}\MArg{element options}}{}
    This macro creates a new element named \Argument{element name} and several other macros to use it. The \Argument{element options} are a key/value list of options to change how the item will look like.
\end{Macrodef}

\begin{PDListing}
    \PDNewElement{EnumItemOption}{color = red!75!black}
\end{PDListing}

\begin{PDExample}
    I like to use the \PackageName{enumitem} package. It makes easier to fine tune the lists appearance, such as using \EnumItemOption{itemsep} or \EnumItemOption{parsep} to change the spaces between the items.
\end{PDExample}


When an element is created, several other macros are created for different needs.

\begin{center}
    \begin{tabular}{lp{4.3cm}l}
        \textbf{Macro}                        & \textbf{Description}                                                                  & \textbf{Ex0.1}                          \\
        \hline
        \Macro{\Argument{element name}}       & Formats to element style.                                                             & \latexinline{\MyElement{a4paper}}       \\
        \Macro{\Argument{element name}Def}    & Formats to element style, sets a label and index the element. & \latexinline{\MyElementDef{left}} \\
        \Macro{\Argument{element name}Ref}    & Formats to element style and hyperlinks to the definition. & \latexinline{\MyElementRef{no align}} \\
        \Macro{\Argument{element name}Ind}    & Formats to element style and index the element.  & \latexinline{\MyElementInd{showframe}} \\
        \Macro{\Argument{element name}RefInd} & Formats to element style, hyperlinks to the definition and add an entry to the index. & \latexinline{\MyElementRefInd{a4paper}} \\
        \Macro{\Argument{element name}Index}  & Index the element without any typeset.                                                & \latexinline{\MyElementIndex{element}}  \\
    \end{tabular}
\end{center}

\begin{Macro*}{\Argument{element name}}{\OArg{options}\MArg{item}}{}
    A macro named after \Argument{element name} is created to typeset \Argument{item} in a consistent way. The appearance will follow that defined when \Argument{element name} was created with \Macro{PDNewElement}, but can be overridden with \Argument{options} (see \Cref{sec:options-for-elements}).
\end{Macro*}

\begin{PDExample}
    I like to use the \PackageName{enumitem} package. It makes easier to fine tune lists, such as using \EnumItemOption{itemsep} or \EnumItemOption{parsep} to change the spaces between them items.
\end{PDExample}

\begin{Macro*}{\Argument{element name}Def}{\OArg{options}\MArg{item}}{}
    A macro \Macro{\Argument{element name}Def} is used to define an \Argument{item}, so it can be cross-referenced and have index entries. The definition can be referenced by the \Macro{\Argument{element name}Ref} macro.

    The appearance will follow that defined when \Argument{element name} was created with \Macro{PDNewElement}, but can be overridden with \Argument{options} (see \Cref{sec:options-for-elements}).

    The definition of an \Argument {item} can be stated with an environment called \hyperref[environmentdef]{\Environment{\Argument {element name}def}} instead.
\end{Macro*}

\begin{PDExample}
    I wrote some code to extend the \PackageName{enumitem} package. Now \EnumItemOptionDef{float} can be used to insert a list in a float.
    % The name 'float' has an anchor (label) and entries in the index.
\end{PDExample}

\begin{Macro*}{\Argument{element name}Ref}{\OArg{options}\MArg{text}}{}
    The macro \Macro{\Argument{element name}Ref} typesets the \Argument{item} and creates a link to its definition.

    The appearance will follow that defined when \Argument{element name} was created with \Macro{PDNewElement}, but can be overridden with \Argument{options} (see \Cref{sec:options-for-elements}).
\end{Macro*}

\begin{PDExample}
    Remember that the \EnumItemOptionRef{float} cannot be used if the list is already in a float.
    % 'float' is a link to the definition
\end{PDExample}

\begin{Macro*}{\Argument{element name}Ind}{\OArg{options}\MArg{item}}{}
    The \Macro{\Argument{element name}} macro defines \Argument{item} and inserts entries to the index. Sometimes a secondary index entry is desired, so \Macro{\Argument{element name}Ind} does the job. A reference to the definition is not created.

    The appearance will follow that defined when \Argument{element name} was created with \Macro{PDNewElement}, but can be overridden with \Argument{options} (see \Cref{sec:options-for-elements}).
\end{Macro*}

\begin{PDExample}
    Here we describe some other important information about the  \EnumItemOptionInd{float} option.
    % 'float' has now new index entries, but it's not a link
\end{PDExample}

\begin{Macro*}{\Argument{element name}RefInd}{\OArg{options}\MArg{text}}{}
    The \Macro{\Argument{element name}RefInd} performs the job of both \Macro{\Argument{element name}Ind} and \Macro{\Argument{element name}Ind}, so the index is affected and a reference to the definition is created.

    The appearance will follow that defined when \Argument{element name} was created with \Macro{PDNewElement}, but can be overridden with \Argument{options} (see \Cref{sec:options-for-elements}).
\end{Macro*}

\begin{PDExample}
    Here we describe some other important information about the  \EnumItemOptionRefInd{float} option.
    % 'float' has now new index entries and is also a link
\end{PDExample}

An element can be defined, as previously stated, by calling \Macro{\Argument{element name}Def}. This is handy for inline definitions. An alternative way to define an element is to use an environment also created by \MacroRef{PDNewElement}. This environment is named \Environment{\Argument{element name}def}.

\begin{Environmentenv*}{\Argument{element name}def}{\OArg{options}\MArg{item}\MArg{arguments}\MArg{complement}}{\Argument{element description}}
    \label{environmentdef}
    This environment uses \Argument{element name}'s styles to define an instance named \Argument{item}, along with its \Argument{arguments} and a \Argument{complement}. The \Argument{complement} is any additional text.

    The header of the definition will use the following format:

    \fbox{\Argument{item}\Argument{args prefix}\Argument {arguments}\Argument {complement prefix}\Argument {complement}}

    The values for \Argument {args prefix} and \Argument {complement prefix} are set by \OptionRef{arguments prefix} and \OptionRef{complement prefix} options respectively.

    This environment will create an anchor to \Argument {item} and add it to the index.
\end{Environmentenv*}


\begin{PDExample}
    % args prefix is \texttt{~=~} and complement prefix is \hfill
    \begin{EnumItemOptiondef}{float}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}; initially: \PDInline{false}}
        By adding \EnumItemOption{float} to a list, it will be inserted in a float environment.
    \end{EnumItemOptiondef}
    % This definition can be linked with \<element>Def and item is indexed
\end{PDExample}

Another environment is available to just typeset an item, without creating an anchor and not adding entries to the index.

\begin{Environmentenv*}{\Argument{element name}*}{\OArg{options}\MArg{item}\MArg{arguments}\MArg{complement}}{\Argument{element description}}
    The \Environment{\Argument{element name}env*} environment has the same behavior as \Environment{\Argument{element name}env}, but no anchor is created and no entry is added to the index.
\end{Environmentenv*}

\begin{PDExample}
    \begin{EnumItemOption*}{float}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}; initially: \PDInline{false}}
        By adding \EnumItemOption{float} to a list, it will be inserted in a float environment.
    \end{EnumItemOption*}
\end{PDExample}

\subsection{Options for elements}\label{sec:options-for-elements}

Several options can be used to customize each element. These options are typically specified when the element is created with \MacroRef{PDNewElement}, but can also be modified with \MacroRef{PDSetElement}. Options not specified at creation assume predefined default values, which can also be changed with \MacroRef{PDSet}.

\begin{Macrodef}{PDSetElement}{\MArg{element name}\MArg{option list}}{}
    After created with \MacroRef{PDNewElement}, options can be changed \textit{a posteriori} with \Macro{PDSetElement}
\end{Macrodef}

\begin{PDExample}
    \PDNewElement{MyItem}{color = magenta, no single index, no group index}
    An example of MyItem is \MyItem{PDExample}.\par
    \PDSetElement{MyItem}{color = blue!80!black, font = \slshape}
    This is another one: \MyItem{instance}.
\end{PDExample}

\begin{Optiondef}{package style}{\Argument {commands}}{Initially: \Macro{sffamily}}
    Sets how \MacroRef{PackageName} will typeset classes and package names.
\end{Optiondef}

\begin{Optiondef}{argument color}{\Argument {color}}{Inititally: \PDInline{orange!50!black}}
    Sets the color to typeset arguments (see \MacroRef{Argument}).
\end{Optiondef}

\begin{Optiondef}{prefix}{\Argument {text}}{Initially empty}
    When an element is typeset, \Argument {text} is added before the item's name. For example, if an element is created for macros, \Option{prefix} can be set to \Macro{textbackslash}.
\end{Optiondef}

\begin{Optiondef}{arguments prefix}{\Argument{text}}{Initially empty}
    This options sets the text to be put between the item name and its arguments. For macros, for example, it must be empty; for options it can be set to \PDInline{=}.

    This element is only typeset if the \Argument{arguments} are not empty (meaning anything with width equal to zero).
\end{Optiondef}

\begin{Optiondef}{complement prefix}{\Argument{text}}{Initially: \Macro{hfill}}
    The contents of \Argument {text} will be inserted between the \Argument {arguments} and the \Argument {complement}.

    This element is only typeset if the \Argument{complement} is not empty (meaning anything with width equal to zero).
\end{Optiondef}

\begin{Optiondef}{font}{\Argument{commands}}{Initially: \Macro{ttfamily}}
    These \Argument {commands} are prepended to every \Argument {item}.
\end{Optiondef}

\begin{Optiondef}{color}{\Argument{color}}{Initially: \PDInline{.!75}}
    This sets the color to be used with the \Argument {item}.
\end{Optiondef}

\begin{Optiondef}{index heading}{\Argument {text}}{Initially: \Argument {element name}}
    When an item is defined (\Macro{\Argument{element name}Def} macro or \hyperref[environmentdef]{\Environment{\Argument {element name}env}}), index entries will be grouped under a main entry named \Argument {text}.

    Grouped index entries can be disabled with \OptionRef{no group index}.

    This option is element-specific and will not work as a global option.
\end{Optiondef}

\begin{Optiondef}{no group index}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}; initially \PDInline{true}}
    This option suppresses adding entries as groups to the index. Single entries are not affected.
\end{Optiondef}

\begin{Optiondef}{index remark}{\Argument {text}}{Default: \texttt{\{\PDTilde(\Argument{element name})\}}}
    Every index entry will be appended with \Argument {text} the item name.

    Single entries can be removed with \OptionRef{no single index}.

    This option is element-specific and will not work as a global option.
\end{Optiondef}

\begin{Optiondef}{no single index}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}; initially \PDInline{true}}
    This option suppresses adding single entries to the index. Group entries are not affected.
\end{Optiondef}

\subsection{Preset elements}\label{sec:preset-elements}


\begin{Optiondef}{presets}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}; initially: \PDInline{false}}
    When \PackageName{packdoc} is loaded with the \OptionRef{presets} option, some useful elements are automatically created.

    \bigskip
    \begin{tabular}{ll}
        \textbf{Element name} & \textbf{Description}                                   \\
        \hline
        \texttt{Option}       & To use with options (as those passed within brackets). \\
        \texttt{Macro}        & For macros, preceding them with a backslash.           \\
        \texttt{Environment}  & For general environments.                              \\
    \end{tabular}

    \bigskip
    This document used these presets.
\end{Optiondef}


\begin{PDExample}
    The preset elements include \Option{option}, \Macro{macro} and \Environment{environment}.

    For example, \OptionRef{presets} is a package option. The \MacroRef{PDNewElement} macro is used to create new elements and \Environment{tabular} is a well known environment.
\end{PDExample}

\subsection{Supplementary resources}

Code examples can be displayed with \EnvironmentRef{PDListing}, while examples along with their corresponding results can be shown using \EnvironmentRef{PDExample}.

\begin{Environmentenv}{PDListing}{}{\Argument{code}}
    This environment is used to display \LaTeX\ code.
\end{Environmentenv}

\begin{tcblisting}{example}
    This is an example code:

    \begin{PDListing}
        \usepackage{packdoc}
    \end{PDListing}
\end{tcblisting}

\begin{Environmentenv}{PDExample}{}{\Argument{code}}
    This environment is used to present \LaTeX\ code along with its output.
\end{Environmentenv}

\begin{tcblisting}{example}
    This is an example of use:

    \begin{PDExample}
        Resources are macros, such as \Macro{Option}, and environments, such as \Environment{PDExample}.
    \end{PDExample}
\end{tcblisting}

Inline code can use \Macro{PDInline}.

\begin{Macrodef}{PDInline}{\MArg{code}}{}
    %! parser = off
    This macro is used to display \LaTeX\ code. If braces are balanced, the use \PDInline{\PDInline{{example}}} (\PDInline{{example}}) holds; when unbalanced, \PDInline$\PDInline!{example!$ (\PDInline!{example!) can be used. The use is equivalent to \Macro{verb}.
    %! parser = on
\end{Macrodef}

\begin{PDExample}
    Someone can use \PDInline{\usepackage[presets]{packdoc}} instead of just \PDInline{\usepackage{packdoc}}.
\end{PDExample}

\begin{Macrodef}{PDTilde}{}{}
    The \Macro{PDTilde} generates a more visually appealing and accurately positioned single tilde (\PDTilde) for representing a non-breaking space.

    In context, some tildes can be compared:

    \begin{tabular}{ccc}
        \textbf{Code} & Result & Result (monotype) \\
        \hline
        ab\Macro{PDTilde} cd & ab\PDTilde cd & \texttt{ab\PDTilde cd} \\
        ab\PDInline{\~{}cd} & ab\~{}cd & \texttt{ab\~{}cd} \\
        ab\PDInline{\texttildelow}cd (\PackageName{textcomp}) & ab\texttildelow cd & \texttt{ab\texttildelow cd} \\
        ab\PDInline{\textasciitilde}cd & ab\textasciitilde cd & \texttt{ab\textasciitilde cd} \\
    \end{tabular}

\end{Macrodef}


\section{Change history support}

This package provides a straightforward yet flexible set of tools for tracking and managing changes across different versions. Each version is uniquely identified by its version number and has its release date.

A sample document, \FileName{packdoc-change-history-example}, is included with this package to demonstrate the use of versions and change markings.


\subsection{Creating versions and changes}

Creating versions and changes is straightforward. A version is created with \MacroRef{PDNewVersion}, and each individual change is logged using \MacroRef{PDAddChange}. The change history is then produced with \MacroRef{PDPrintChanges}.

\begin{Macrodef}{PDNewVersion}{\MArg{version number}\MArg{version date}}{}
    The \Macro{PDNewVersion} macro creates a new version entry in the change log. The first required parameter, \Argument{version number}, is used to reference and group the changes made in that version. The version number can follow standard formats, such as \texttt{1.0} or \texttt{2.5.1}, for instance. For the \Argument{version date}, a date in the \textit{YYYY-MM-DD} format is typically used. This date is purely for display in the log, so the specific text format is flexible.
\end{Macrodef}

\begin{PDListing}
    \PDNewVersion{1.0}{2025-01-01}
\end{PDListing}

\begin{Macrodef}{PDAddChange}{\MArg{version number}\MArg{description}\OArg{box options}}{}
    The mandatory parameters for \Macro{PDAddChange} include the \Argument{version number}, which must have been previously defined using \MacroRef{PDNewVersion}, and a comma-separated \Argument{description} list that outlines the specifics of the change.

    The primary component of the \Argument{description} is, of course, \OptionRef{description}. In addition to this, several other options are available, which are outlined in \Cref{sec:change-options}.

    The change boxes utilize the \PackageName{snaptodo} package, meaning that the final optional parameter, \Argument{box options}, can be used to adjust the appearance or modify other properties of the box.
\end{Macrodef}

\begin{PDListing}
    \PDAddChange{1.0}{
        updated,
        description = {\Macro{SomeMacro} now allows floating point calculations.},
    }
\end{PDListing}

The change log is generated using the \MacroRef{PDPrintChanges} macro, which functions similarly to other macros, such as \Macro{printindex}.

\begin{Macrodef}{PDPrintChanges}{\OArg{options}}{}
    \Macro{PDPrintChanges} generates the change log using a fixed, predefined format. Its position within the document is not important and can be determined based on the author's preference.

    The \Argument{options} allow for customization of the \OptionRef{version prefix}, the \OptionRef{header style}, and the \OptionRef{entry style}. (See \Cref{sec:options-change-history}.)
\end{Macrodef}

\begin{PDListing}
    \PDPrintChanges[version prefix = {V}]
\end{PDListing}

\subsection{Options for the Change History}\label{sec:options-change-history}

This section outlines the options available for the change history. These are categorized into general options, which apply to the entire document, and specific options for the change record, which are limited to the particular change being marked.

\subsubsection{General options}

The following are the general options. All of them are defined using \MacroRef{PDSet} and can be set either in the preamble or within the body of the text. They can also be used locally as options for \MacroRef{PDPrintChanges} and \MacroRef{PDAddChange}.

\begin{Optiondef}{version prefix}{\Argument{text}}{Initially empty}
    The \Option{version prefix} option sets a \Argument{text} that is added before the version number, appearing both in the change listing and in the margin boxes.
\end{Optiondef}

\begin{Optiondef}{header style}{\Argument{format}}{Initially: \Macro{bfseries}\Macro{footnotesize}}
    This option defines the formatting commands for the style to be applied to each header line in the change history.
\end{Optiondef}

\begin{Optiondef}{entry style}{\Argument{format}}{Initially: \Macro{footnotesize}\Macro{RaggedRight}}
    This option defines the formatting commands for the style to be applied to each change in the change history.
\end{Optiondef}

\subsubsection{Change options}\label{sec:change-options}

The options specific to changes are used to define each individual change and therefore have a local effect. However, some can be applied globally with \MacroRef{PDSet}, as noted in their description.

\begin{Optiondef}{description}{\Argument{text}}{}
    The description of a change refers to the \Argument{text} that will be included in the change history.

    The \Option{description} key can be omitted when the \OptionRef{no listing} option is applied.
\end{Optiondef}

\begin{Optiondef}{type}{\Argument{type}}{}
    \Argument{type} defines the type of change. Its value can be one of the following: \PDInline{new}, \PDInline{update}, \PDInline{change}, \PDInline{removal}, or \PDInline{deprecation}. In practice, the key \Option{type} is optional and one can specify directly the values of \Argument{type}.

    If no type is specified, the change defaults to \PDInline{new}.
\end{Optiondef}

\begin{PDListing}
    % The three change markers are equivalent.
    \PDAddChange{1.0}{
        description = {A new feature has been implemented.},
    }
    \PDAddChange{1.0}{
        new,
        description = {A new feature has been implemented.},
    }
    \PDAddChange{1.0}{
        type = new,
        description = {A new feature has been implemented.},
    }
\end{PDListing}

\begin{Optiondef}{title}{\Argument{text}}{}
    Using \Option{title}, a \Argument{text} can be added to the box to provide additional relevant information.
\end{Optiondef}

\begin{PDListing}
    \PDAddChange{1.0}{
        update,
        title = {Paragraphs},
        description = {A modification has been implemented regarding paragraphs.},
    }
\end{PDListing}


\begin{Optiondef}{no page}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}}
    The \Option{no page} option is used to omit the page from the change log listing.

    This option can be set globally with \MacroRef{PDSet}.
\end{Optiondef}

\begin{PDListing}
    \PDAddChange{1.0}{
        deprecation,
        description = {\Macro{OldThing} is no longer supported.},
        no page,
    }
\end{PDListing}


\begin{Optiondef}{no listing}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}}
    The \Option{no listing} option prevents the change from being added to the change log.

    This option can be set globally with \MacroRef{PDSet}.
\end{Optiondef}

\begin{PDListing}
    \PDAddChange{1.0}{
        deprecation,
        description = {\Macro{OldThing} is no longer supported.},
        no listing,
    }
\end{PDListing}

\begin{Optiondef}{no box}{\PDInline{true} | \PDInline{false}}{Default: \PDInline{true}}
    The \Option{no box} option prevents the change box from being displayed in the left margin.

    This option can be set globally with \MacroRef{PDSet}.
\end{Optiondef}

\begin{Optiondef}{page}{\Argument{text}}{}
    By default, the page number where a change was recorded is included in the change log. This can be modified using the \Option{page} option, which allows for an alternative \Argument{text}.

    In a special case, an empty \Argument{text} is equivalent to \OptionRef{no page}.
\end{Optiondef}

\begin{PDListing}
    \PDAddChange{1.0}{
        update,
        description = {A substantial amount of changes have been made.},
        page = {Chapt.~5.},
    }
\end{PDListing}


\section{\Macro{PDSet}}

Certain options, both general and specific to the changes, can be defined globally using \MacroRef{PDSet}.

\begin{Macrodef}{PDSet}{\MArg{options}}{}
    This macro enables certain settings for the change history and the changes themselves to be applied globally across the entire text, starting with the use of \Macro{PDSet}.
\end{Macrodef}

\begin{PDListing}
    \PDSet{
        version prefix = {V},  % 0.1 is displayed V0.1
        argument color = blue,  % color for <argument>
        no page,  % all pages are suppressed from the Change History
    }
\end{PDListing}


\section{Issues}

As this is the initial version, it is premature to provide a list of known issues. Therefore, any problems or suggestions may be submitted directly to me via email or by opening an issue on \FileName{github} (\url{https://github.com/jandermoreira/packdoc}).

\printindex

\end{document}