summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-01-19 03:00:44 +0000
committerNorbert Preining <norbert@preining.info>2024-01-19 03:00:44 +0000
commit849336321485cc972b028c23f8276fa6bdf4818e (patch)
tree43e99f8f941334e9d2dab5b65c67787e0daa1408 /macros/latex
parentc4dbe7c982d00abf62e9a8927ecdef11521773a8 (diff)
CTAN sync 202401190300
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx10
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin599045 -> 599049 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex18
-rw-r--r--macros/latex/contrib/hvqrurl/Changes1
-rw-r--r--macros/latex/contrib/hvqrurl/doc/hvqrurl.pdfbin107179 -> 107212 bytes
-rw-r--r--macros/latex/contrib/hvqrurl/doc/hvqrurl.tex9
-rw-r--r--macros/latex/contrib/hvqrurl/latex/hvqrurl.sty10
-rw-r--r--macros/latex/contrib/l3build/CHANGELOG.md12
-rw-r--r--macros/latex/contrib/l3build/README.md2
-rw-r--r--macros/latex/contrib/l3build/l3build-arguments.lua51
-rw-r--r--macros/latex/contrib/l3build/l3build-check.lua8
-rw-r--r--macros/latex/contrib/l3build/l3build-stdmain.lua8
-rw-r--r--macros/latex/contrib/l3build/l3build.132
-rw-r--r--macros/latex/contrib/l3build/l3build.dtx34
-rwxr-xr-xmacros/latex/contrib/l3build/l3build.lua2
-rw-r--r--macros/latex/contrib/l3build/l3build.pdfbin749004 -> 749769 bytes
-rw-r--r--macros/latex/contrib/odesandpdes/README.txt23
-rw-r--r--macros/latex/contrib/odesandpdes/odesandpdes.dtx1675
-rw-r--r--macros/latex/contrib/odesandpdes/odesandpdes.ins77
-rw-r--r--macros/latex/contrib/odesandpdes/odesandpdes.pdfbin0 -> 286175 bytes
20 files changed, 1878 insertions, 94 deletions
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 47c8f1d4f2..a8dad994d6 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -15,7 +15,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/01/18}{2024J}
+\ProvidesExplClass{easybook}{2024/01/18}{2024K}
{Easily typesetting Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -302,7 +302,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/01/18}{2024J}
+\ProvidesExplPackage{easybase}{2024/01/18}{2024K}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -2186,8 +2186,8 @@
{ crimson, dc143c,00c1c9,afcd20 }
}
\eb_link_color_set:n
- linkcolor .default:n = navyblue,
- linkcolor .initial:n = navyblue,
+ linkcolor .default:n = navyblue,
+ linkcolor .initial:n = navyblue,
linkcolor-every .code:n = \eb_define_link_color:n { \exp_not:n {#1} }
}
\ctex_define:nx { style }
@@ -2334,7 +2334,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/18}{2024J}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/01/18}{2024K}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index f6999524ac..265c1e40d0 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index 80069337fe..60c949af32 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,7 +23,7 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024J,
+ version = v2024K,
date = 2024/01/18,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
@@ -31,7 +31,7 @@
url = https://gitee.com/texno3/easybook,
abstract =
{
- \cls*{easybook} 是基于 \cls*{ctexbook} 书籍文档类创建的纯净学术模板,同时兼具 \cls*{book} 与 \cls*{article} 文档类的功能。结合中国许多高校学位论文的通用框架设计,提供多个命令和接口可以使用户简便地定制论文模板。它的基础宏包 \pkg*{easybase} 还可以搭配 \CTeX 和标准文档类使用。
+ \easybook{} 是基于 \cls*{ctexbook} 书籍文档类创建的纯净学术模板,同时兼具 \cls*{book} 与 \cls*{article} 文档类的功能。结合中国许多高校学位论文的通用框架设计,提供多个命令和接口可以使用户简便地定制论文模板。它的基础宏包 \pkg*{easybase} 还可以搭配 \CTeX 和标准文档类使用。
},
arg-format = \normalfont\small\itshape\xeCJKVerbAddon,
abstract-format = \small,
@@ -90,6 +90,7 @@
\newsplitarg[\code{|}]{\baroarg}{[}{]}
\newcommand{\harg}{\textcolor{argument}{\code{-}}}
\newcommand{\HoLogo@TeXLive}[1]{\hologo{TeX}\HOLOGO@space\HOLOGO@mbox{Live}}
+\renewcommand{\cnltxpackagenameformat}[1]{\textcolor{cnltx}{\textsf{#1}}}
% Remove default braces of values
\RenewDocumentCommand{\key}{s}
{
@@ -175,7 +176,7 @@
\begin{document}
\section{准备开始}
-您在使用 \cls*{easybook} 文档类编写文档前可能需要具备以下的条件:
+您在使用 \easybook{} 文档类编写文档前可能需要具备以下的条件:
\begin{itemize}
\item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式。
\item 由于文档类用到了一些 \LaTeX 和依赖宏包较新的功能,需要版本至少在\textbf{2020/10/01}以后的 \LaTeX 内核支持。建议您安装最新的 \TeX 发行版。
@@ -184,7 +185,7 @@
\subsection{基本用法}
\label{subsec:basic usage}
-以下一份简单的 \TeX 文档演示了 \cls*{easybook} 的最基本用法,在导言区进行宏包载入与文档设置,一些详细的使用样例会不定期上传在 \href{https://www.latexstudio.net/}{\LaTeX 工作室} 的网站。
+以下一份简单的 \TeX 文档演示了 \easybook{} 的最基本用法,在导言区进行宏包载入与文档设置,一些详细的使用样例会不定期上传在 \href{https://www.latexstudio.net/}{\LaTeX 工作室} 的网站。
\begin{frameverb}
\documentclass[文档类选项]{easybook}
@@ -248,7 +249,7 @@
\section{文档类选项}
\label{sec:document class options}
-文档类选项应当在使用 \cls*{easybook} 文档类或 \pkg*{easybase} 宏包(部分支持)时指定,可见\ref{subsec:basic usage} 的例子。选项前带有 \ding{73} 符号表示只可用于文档类,否则文档类与宏包都适用。除了下面列举的选项以外,还支持标准和 \CTeX 文档类的选项。
+文档类选项应当在使用 \easybook{} 文档类或 \pkg*{easybase} 宏包(部分支持)时指定,可见\ref{subsec:basic usage} 的例子。选项前带有 \ding{73} 符号表示只可用于文档类,否则文档类与宏包都适用。除了下面列举的选项以外,还支持标准和 \CTeX 文档类的选项。
\subsection{基本选项}
\begin{options}
@@ -313,7 +314,7 @@
\subsection{\textsf{article} 模式}
\begin{options}
\keychoice{class}{\fbox{book},article}
- 使用 \cls*{easybook} 文档类可以有两种模式,默认为 \cls*{book} 模式。选用 \code{article} 会变为 \code{oneside} 单面排版,同时使文档编号、结构等与标准 \cls*{article} 文档类的特性相似,可用于短篇幅的文章,不需要再使用 \cs*{chapter} 命令。此时\ref{subsec:directory command} 中目录命令的 \option{chapter} 选项会失效,将以 \code{section} 标题级别输出目录。如果使用 \cls*{ctexart} 配合 \pkg*{easybase} 宏包,则选项值 \code{book} 会失效。
+ 使用 \easybook{} 文档类可以有两种模式,默认为 \cls*{book} 模式。选用 \code{article} 会变为 \code{oneside} 单面排版,同时使文档编号、结构等与标准 \cls*{article} 文档类的特性相似,可用于短篇幅的文章,不需要再使用 \cs*{chapter} 命令。此时\ref{subsec:directory command} 中目录命令的 \option{chapter} 选项会失效,将以 \code{section} 标题级别输出目录。如果使用 \cls*{ctexart} 配合 \pkg*{easybase} 宏包,则选项值 \code{book} 会失效。
\opt{book}
开启 \cls*{book} 书籍模式,与 \keyis*{class}{book} 等效。
\opt{article}
@@ -324,7 +325,7 @@
\label{sec:interface options}
\begin{commands}
\command*{ctexset}[\marg{键值列表}]
- \cls*{easybook} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如下表所示。模块名也是统一接口 \cs*{ctexset} 的路径,不同模块单独接口的命令名\textbf{加上前缀} \code{eb}:
+ \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如下表所示。模块名也是统一接口 \cs*{ctexset} 的路径,不同模块单独接口的命令名\textbf{加上前缀} \code{eb}:
\insertalltblr
{
colspec = @{}*{5}{c}@{},
@@ -963,7 +964,6 @@
更改英文目录 \code{chapter} 级别的标题编号输出格式,类似于 \CTeX 的 \option*{number} 选项。下面两种设置英文目录中章标题编号的方式等效:
\end{options}
\begin{ctexexam}
- \bisection{zhtitle}{entitle}
\ctexset{chapter/binumber = \arabic{chapter}}
\BeforeAddBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
\end{ctexexam}
@@ -1350,7 +1350,7 @@
\shortversion{v = 1.638,date = 2022/03/04,changes = 增加目录条目样式选项注册命令 \cs{RegisterTocName}。}
\shortversion{v = 1.644,date = 2022/03/10,changes = 增加浮动环境目录声明命令 \cs{DeclareFloatList} 配合 \pkg*{caption} 宏包。}
\shortversion{v = 1.682,date = 2022/05/01,changes = 将迷你页判断命令 \cs{notminipage} 改为被保护命令兼容 \pkg*{circledtext} 宏包。}
- \begin{version}[v = 2024J,date = 2024/01/18,simple]
+ \begin{version}[v = 2024K,date = 2024/01/18,simple]
\item 核对依赖宏包的更新改动,优化使用手册的内容细节。
\item 修复图表等浮动环境题注目录中条目标签编号的计数器值显示错误问题。
\item 新增目录风格定义命令 \cs{SetTocStyle} 和使用命令 \cs{UseTocStyle}。
diff --git a/macros/latex/contrib/hvqrurl/Changes b/macros/latex/contrib/hvqrurl/Changes
index d9bf68a6b3..7dcfb5b15a 100644
--- a/macros/latex/contrib/hvqrurl/Changes
+++ b/macros/latex/contrib/hvqrurl/Changes
@@ -1,4 +1,5 @@
hvqrurl.sty:
+0.04 2024-01-18 - fix for wrong text
0.03 2023-10-29 - fix for # in an url
0.02 2021-05-18 - added optional argument qrreverse to the set
the qr code in the opposite margin
diff --git a/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf b/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
index 69e8e5fa77..c2a087895c 100644
--- a/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
+++ b/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex b/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
index c3639f6609..a67122f6bd 100644
--- a/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
+++ b/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
@@ -1,9 +1,9 @@
-%% $Id: hvqrurl.tex 790 2023-10-29 15:33:17Z herbert $
+%% $Id: hvqrurl.tex 837 2024-01-18 07:43:31Z herbert $
\listfiles
\errorcontextlines=100
-\documentclass[twoside,usegeometry]{scrartcl}
+\documentclass[twoside=on,usegeometry]{scrartcl}
\usepackage{libertinus-otf}
-\setmonofont[Scale=MatchLowercase,FakeStretch=0.9]{DejaVu Sans Mono}
+\setmonofont[Scale=MatchLowercase,FakeStretch=0.85]{DejaVu Sans Mono}
\usepackage{microtype}
\usepackage[english]{babel}
\usepackage[automark]{scrlayer-scrpage}
@@ -31,14 +31,13 @@
\usepackage{ragged2e}
\usepackage{hvqrurl}
-
\usepackage{hvdoctools}
\usepackage{hyperref}
\hypersetup{urlcolor=blue, linktocpage, colorlinks=true}%
\begin{document}
-\title{Package \texttt{hvqrurl}\\Creating a QR-code of an URL in the margin \\\small ver 0.02}
+\title{Package \texttt{hvqrurl}\\Creating a QR-code of an URL in the margin \\\small ver 0.04}
\author{Herbert Voß\thanks{\protect\url{hvoss@tug.org}}}
\date{\today}
\maketitle
diff --git a/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty b/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
index fa73a30854..e016534270 100644
--- a/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
+++ b/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
@@ -1,13 +1,13 @@
-%% $Id: hvqrurl.sty 790 2023-10-29 15:33:17Z herbert $
+%% $Id: hvqrurl.sty 837 2024-01-18 07:43:31Z herbert $
%%
%% This file is distributed under the terms of the LaTeX Project Public
%% License from CTAN archives in directory macros/latex/base/lppl.txt.
%% Either version 1.3 or, at your option, any later version.
%%
-% Copyright 2019,21,23 Herbert Voss hvoss@tug.org
+% Copyright 2019,21,23,24 Herbert Voss hvoss@tug.org
%%
\ProvidesPackage{hvqrurl}[%
- 2023/10/29 v.0.03 (Herbert Voss) Supports qr images into the margin (hv)]
+ 2024/01/18 v.0.04 (Herbert Voss) Supports qr images into the margin (hv)]
%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{url}
@@ -24,7 +24,7 @@
\define@key{hvqr}{qrcolor}[black]{\colorlet{qr@url@qrcolor}{#1}}
\define@key{hvqr}{qrlevel}[M]{\def\qr@url@qrlevel{#1}}
\define@key{hvqr}{qrlink}[link]{\def\qr@url@qrlink{#1}}
-\define@boolkey{hvqr}[hv@]{qrreverse}[true]{}% use of the hvOBox contents
+\define@boolkey{hvqr}[hv@]{qrreverse}[true]{}
\setkeys{hvqr}{qrheight,qrcolor=black,qradjust,qrlevel,qrlink=link,qrreverse=false}% the default setting
@@ -42,7 +42,7 @@
\ifhv@qrreverse\reversemarginpar\fi
\if@tempswa
\edef\hv@foo{\detokenize\expandafter{#2}}%
- \url{\hv@foo}
+ \expandafter\url\expandafter{\hv@foo}%
\fi
\edef\reserved@a{\noexpand\marginnote{\noexpand\color{qr@url@qrcolor}\noexpand\qrcode{%
\detokenize\expandafter{#2}}}[\qr@url@qradjust]}%
diff --git a/macros/latex/contrib/l3build/CHANGELOG.md b/macros/latex/contrib/l3build/CHANGELOG.md
index 02ad0179e1..2f5f843086 100644
--- a/macros/latex/contrib/l3build/CHANGELOG.md
+++ b/macros/latex/contrib/l3build/CHANGELOG.md
@@ -7,6 +7,15 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-01-18]
+
+### Added
+- Switch `-s|--stdengine` to run a set of tests only with the standard engine
+ even where this varies between configs (issue \#343)
+
+### Removed
+- Switch `--force|-f`
+
## [2024-01-09]
### Fixed
@@ -760,7 +769,8 @@ this project uses date-based 'snapshot' version identifiers.
- Rationalise short option names: removed `-d`, `-E`, `-r`
- Target `cmdcheck`: specific to LaTeX kernel work
-[Unreleased]: https://github.com/latex3/l3build/compare/2024-01-09...HEAD
+[Unreleased]: https://github.com/latex3/l3build/compare/2024-01-18...HEAD
+[2024-01-18]: https://github.com/latex3/l3build/compare/2024-01-09...2024-01-18
[2024-01-09]: https://github.com/latex3/l3build/compare/2024-01-04...2024-01-09
[2024-01-04]: https://github.com/latex3/l3build/compare/2023-12-15...2024-01-04
[2023-12-15]: https://github.com/latex3/l3build/compare/2023-12-13-2...2023-12-15
diff --git a/macros/latex/contrib/l3build/README.md b/macros/latex/contrib/l3build/README.md
index 1196dc6d42..1dfdc42d52 100644
--- a/macros/latex/contrib/l3build/README.md
+++ b/macros/latex/contrib/l3build/README.md
@@ -1,7 +1,7 @@
l3build: a testing and building system for LaTeX
=================================================
-Release 2024-01-09
+Release 2024-01-18
Overview
--------
diff --git a/macros/latex/contrib/l3build/l3build-arguments.lua b/macros/latex/contrib/l3build/l3build-arguments.lua
index a1755d693d..ec3b5335d3 100644
--- a/macros/latex/contrib/l3build/l3build-arguments.lua
+++ b/macros/latex/contrib/l3build/l3build-arguments.lua
@@ -54,7 +54,7 @@ option_list =
},
dirty =
{
- desc = "Skip cleaning up the test area",
+ desc = "Skips cleaning up the test area",
type = "boolean"
},
["dry-run"] =
@@ -80,7 +80,7 @@ option_list =
},
file =
{
- desc = "Take the upload announcement from the given file",
+ desc = "Takes the upload announcement from the given file",
short = "F",
type = "string"
},
@@ -89,15 +89,9 @@ option_list =
desc = "Name of first test to run",
type = "string"
},
- force =
- {
- desc = "Force tests to run if engine is not set up",
- short = "f",
- type = "boolean"
- },
full =
{
- desc = "Install all files",
+ desc = "Installs all files",
type = "boolean"
},
["halt-on-error"] =
@@ -108,7 +102,7 @@ option_list =
},
help =
{
- desc = "Print this message and exit",
+ desc = "Prints this message and exits",
short = "h",
type = "boolean"
},
@@ -131,23 +125,29 @@ option_list =
},
rerun =
{
- desc = "Skip setup: simply rerun tests",
+ desc = "Skips setup: simply reruns tests",
type = "boolean"
},
["show-log-on-error"] =
{
- desc = "Show the full log of the failure with 'halt-on-error'",
+ desc = "Shows the full log of the failure with 'halt-on-error'",
type = "boolean"
},
["show-saves"] =
{
- desc = "Show the invocation to update failing .tlg files",
+ desc = "Shows the invocation to update failing .tlg files",
short = "S",
type = "boolean"
},
shuffle =
{
- desc = "Shuffle order of tests",
+ desc = "Shuffles order of tests",
+ type = "boolean"
+ },
+ stdengine =
+ {
+ desc = "Run tests only with the standard engine (which may vary between configs)",
+ short = "s",
type = "boolean"
},
texmfhome =
@@ -157,7 +157,7 @@ option_list =
},
version =
{
- desc = "Print version information and exit",
+ desc = "Prints version information and exits",
type = "boolean"
}
}
@@ -292,22 +292,23 @@ options = argparse()
-- Sanity check
function check_engines(config)
- if options["engine"] and not options["force"] then
+ if options["engine"] then
-- Make a lookup table
local t = { }
for _, engine in pairs(checkengines) do
t[engine] = true
end
- for _, engine in pairs(options["engine"]) do
- if not t[engine] then
- print("\n! Error: Engine \"" .. engine .. "\" not set up for testing with configuration \"" .. config .. "\"!")
- print("\n Valid values are:")
- for _, engine in ipairs(checkengines) do
- print(" - " .. engine)
- end
- print("")
- exit(1)
+ checkengines = {}
+ for _,engine in ipairs(options["engine"]) do
+ if t[engine] then
+ insert(checkengines,engine)
+ else
+ print("Skipping unknown engine " .. engine)
end
end
end
+ if not next(checkengines) then
+ print("No applicable engine requested, config ignored")
+ exit(0)
+ end
end
diff --git a/macros/latex/contrib/l3build/l3build-check.lua b/macros/latex/contrib/l3build/l3build-check.lua
index 2a50c590db..9bfb09971a 100644
--- a/macros/latex/contrib/l3build/l3build-check.lua
+++ b/macros/latex/contrib/l3build/l3build-check.lua
@@ -595,8 +595,8 @@ function runcheck(name, hide)
return 1
end
local checkengines = checkengines
- if options["engine"] then
- checkengines = options["engine"]
+ if options["stdengine"] then
+ checkengines = {stdengine}
end
local failedengines = {}
-- Used for both .lvt and .pvt tests
@@ -1065,10 +1065,6 @@ function checkdiff(config)
if next(diff_files) then
if config then
print("Failed tests for configuration \"" .. config .. "\":")
- local testdir = testdir
- if config ~= "build" then
- testdir = testdir .. "-" .. config
- end
end
print("\n Check failed with difference files")
for _,i in ipairs(diff_files) do
diff --git a/macros/latex/contrib/l3build/l3build-stdmain.lua b/macros/latex/contrib/l3build/l3build-stdmain.lua
index d264a78fa4..70d7560f20 100644
--- a/macros/latex/contrib/l3build/l3build-stdmain.lua
+++ b/macros/latex/contrib/l3build/l3build-stdmain.lua
@@ -73,19 +73,19 @@ target_list =
check =
{
bundle_target = true,
- desc = "Run all automated tests",
+ desc = "Runs all automated tests",
func = check,
},
clean =
{
bundle_func = bundleclean,
- desc = "Clean out directory tree",
+ desc = "Cleans out directory tree",
func = clean
},
ctan =
{
bundle_func = ctan,
- desc = "Create CTAN-ready archive",
+ desc = "Creates CTAN-ready archive",
func = ctan
},
doc =
@@ -142,7 +142,7 @@ target_list =
},
upload =
{
- desc = "Send archive to CTAN for public release",
+ desc = "Sends archive to CTAN for public release",
func = upload
},
}
diff --git a/macros/latex/contrib/l3build/l3build.1 b/macros/latex/contrib/l3build/l3build.1
index 47462ae7a4..c558ee000e 100644
--- a/macros/latex/contrib/l3build/l3build.1
+++ b/macros/latex/contrib/l3build/l3build.1
@@ -1,4 +1,4 @@
-.TH l3build 1 "2024-01-09"
+.TH l3build 1 "2024-01-18"
.SH NAME
l3build \- Checking and building packages
.SH SYNOPSIS
@@ -12,11 +12,11 @@ defaults are set up for LaTeX packages written in the DocStrip style.
.PP
The standard l3build targets are:
.IP check
-Run all automated tests
+Runs all automated tests
.IP clean
-Clean out directory tree
+Cleans out directory tree
.IP ctan
-Create CTAN-ready archive
+Creates CTAN-ready archive
.IP doc
Typesets all documentation files
.IP install
@@ -32,7 +32,7 @@ Uninstalls files from the local texmf tree
.IP unpack
Unpacks the source files into the build tree
.IP upload
-Send archive to CTAN for public release
+Sends archive to CTAN for public release
.SH OPTIONS
Various options apply
.IP --config|-c
@@ -42,7 +42,7 @@ Sets the date to insert into sources
.IP --debug
Runs target in debug mode
.IP --dirty
-Skip cleaning up the test area
+Skips cleaning up the test area
.IP --dry-run
Dry run for install or upload
.IP --email
@@ -52,17 +52,15 @@ Sets the engine(s) to use for running test
.IP --epoch
Sets the epoch for tests and typesetting
.IP --file|-F
-Take the upload announcement from the given file
+Takes the upload announcement from the given file
.IP --first
Name of first test to run
-.IP --force|-f
-Force tests to run if engine is not set up
.IP --full
-Install all files
+Installs all files
.IP --halt-on-error|-H
Stops running tests after the first failure
.IP --help|-h
-Print help message and exit
+Prints help message and exits
.IP --last
Name of last test to run
.IP --message|-m
@@ -70,17 +68,19 @@ Text for upload announcement message
.IP --quiet|-q
Suppresses TeX output when unpacking
.IP --rerun
-Skip setup: simply rerun tests
+Skips setup: simply reruns tests
.IP --show-log-on-error
-Show the full log of the failure with 'halt-on-error'
+Shows the full log of the failure with 'halt-on-error'
.IP --show-saves|-S
-Show the invocation to update failing .tlg files
+Shows the invocation to update failing .tlg files
.IP --shuffle
-Shuffle order of tests
+Shuffles order of tests
+.IP --stdengine|-s
+Run tests only with the standard engine (which may vary between configs)
.IP --texmfhome
Location of user texmf tree
.IP --version
-Print version information and exit
+Prints version information and exits
.SH BUGS
.SH AUTHOR
The LaTeX Project (latex-team@latex-project.org)
diff --git a/macros/latex/contrib/l3build/l3build.dtx b/macros/latex/contrib/l3build/l3build.dtx
index e02dfd6f53..28b06030c9 100644
--- a/macros/latex/contrib/l3build/l3build.dtx
+++ b/macros/latex/contrib/l3build/l3build.dtx
@@ -251,7 +251,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-09}
+% \date{Released 2024-01-18}
%
% \maketitle
% \tableofcontents
@@ -371,17 +371,14 @@
% \item |--config| (|-c|) Configuration(s) to use for testing
% \item |--date| Date to use when tagging data
% \item |--debug| Runs the target in debug mode (not supported by all targets)
-% \item |--dirty| Skip cleaning up of the test area
+% \item |--dirty| Skips cleaning up of the test area
% \item |--dry-run| Runs the \texttt{install} target but does not copy
% any files: simply lists those that would be installed
% \item |--email| Sets the email address for CTAN upload
% \item |--engine| (|-e|) Sets the engine to use for testing
% \item |--epoch| Sets the epoch for typesetting and testing
-% \item |--file| (|-F|) Take the upload announcement from the given file
+% \item |--file| (|-F|) Takes the upload announcement from the given file
% \item |--first| Name of the first test to run
-% \item |--force| (|-f|) Force checks to run even if sanity
-% checks fail, \emph{e.g.}~when |--engine| is not given in
-% \var{checkengines}
% \item |--full| Instructs the \texttt{install} target to include the
% \texttt{doc} and \texttt{source} trees
% \item |--halt-on-error| (|-H|) Specifies that checks
@@ -390,12 +387,14 @@
% \item |--last| Name of the last test to run
% \item |--message| (|-m|) Text for upload announcement
% \item |--quiet| (|-q|) Suppresses output from unpacking
-% \item |--rerun| Run tests without unpacking/set up
+% \item |--rerun| Runs tests without unpacking/set up
% \item |--show-log-on-error| To be used in addition to \texttt{--halt-on-error} and results
% in the full \texttt{.log} file of a failed test to be shown on the console
-% \item |--show-saves| (|-S|) When tests fail, print the \texttt{l3build save} commands needed
+% \item |--show-saves| (|-S|) When tests fail, prints the \texttt{l3build save} commands needed
% to regenerate the tests assuming that the failures were false negatives.
-% \item |--shuffle| Shuffle the order in which tests run
+% \item |--shuffle| Shuffles the order in which tests run
+% \item |--stdengine| (|-s|) Run tests only with the standard engine (which can vary between
+% configurations)
% \item |--texmfhome| Sets the location of the user tree for installing
% \end{itemize}
%
@@ -457,7 +456,7 @@
% line option |--engine| (or |-e|) has been given to limit
% testing to a single engine. Normally testing is preceded by unpacking
% source files and copying the result plus any additional support to the
-% test directory: this may be skipped using the |-s| option.
+% test directory: this may be skipped using the |--rerun| (|-r|) option.
% \end{buildcmd}
%
% \begin{buildcmd}{clean}
@@ -591,7 +590,9 @@
% \end{buildcmd}
%
% \begin{buildcmd}{tag [\meta{tag name}]}
-% Apply the Lua |update_tag()| function to modify the contents of files specified by |tagfiles| to update the `release tag' (or package version) and date.
+% Applies the Lua |update_tag()| function to modify the contents of all the files
+% specified by |tagfiles|; this function updates the `release tag' (or package version)
+% and date.
% The tag is given as the optional command line argument \meta{tag name} and the date using
% |--date| (or |-d|). If not given, the date will default to the current date in
% ISO format (YYYY-MM-DD). If no \meta{tag name} is given, the tag will default to |nil|.
@@ -981,13 +982,14 @@
% \cs{BEGINTEST}\marg{title} \dots \cs{ENDTEST} is an environment form of
% \cs{TEST}, allowing verbatim material, \emph{etc.} to appear.
% \item
-% \cs{SHOWFILE}\marg{filename} (\eTeX{} only) Shows the content of
+% \cs{SHOWFILE}\marg{filename} (\eTeX{} only) shows the content of
% \meta{filename}.
% \item
% \cs{ASSERT}\marg{arg_1}\marg{arg_2} and \cs{ASSERTSTR}\marg{arg_1}\marg{arg_2}
-% Asserts if the full expansion of \meta{arg_1} and \meta{arg_2} are the same:
-% the \cs{ASSERT} function is token-based,
-% the \cs{ASSERTSTR} works on a string basis.
+% Test if the full expansion of \meta{arg_1} and \meta{arg_2} are the same:
+% on a token basis in \cs{ASSERT} and on a string basis in \cs{ASSERTSTR}.
+% Depending on the outcome, record either \texttt{PASSED} or \texttt{FAILED}
+% in the \texttt{.log}.
% \end{itemize}
% An example of some of these commands is shown following.
% \begin{Verbatim}
@@ -1671,7 +1673,6 @@
% \var{epoch} & String \\
% \var{file} & string \\
% \var{first} & Boolean \\
-% \var{force} & Boolean \\
% \var{full} & Boolean \\
% \var{halt-on-error} & Boolean \\
% \var{help} & Boolean \\
@@ -1680,6 +1681,7 @@
% \var{quiet} & Boolean \\
% \var{rerun} & Boolean \\
% \var{shuffle} & Boolean \\
+% \var{stdengine} & Boolean \\
% \var{texmfhome} & String \\
% \bottomrule
% \end{tabular}
diff --git a/macros/latex/contrib/l3build/l3build.lua b/macros/latex/contrib/l3build/l3build.lua
index 8b0dcbda6f..5575dc9b90 100755
--- a/macros/latex/contrib/l3build/l3build.lua
+++ b/macros/latex/contrib/l3build/l3build.lua
@@ -25,7 +25,7 @@ for those people who are interested.
--]]
-- Version information
-release_date = "2024-01-09"
+release_date = "2024-01-18"
-- File operations are aided by the LuaFileSystem module
local lfs = require("lfs")
diff --git a/macros/latex/contrib/l3build/l3build.pdf b/macros/latex/contrib/l3build/l3build.pdf
index 8883e78d95..54b3c2c198 100644
--- a/macros/latex/contrib/l3build/l3build.pdf
+++ b/macros/latex/contrib/l3build/l3build.pdf
Binary files differ
diff --git a/macros/latex/contrib/odesandpdes/README.txt b/macros/latex/contrib/odesandpdes/README.txt
new file mode 100644
index 0000000000..d77a112f65
--- /dev/null
+++ b/macros/latex/contrib/odesandpdes/README.txt
@@ -0,0 +1,23 @@
+----------------------------------------------------------------
+odesandpdes --- A package for the streamlining of the use of
+odes and pdes in mathematical texts typset by LaTeX
+
+E-mail: anakin@ruc.dk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package is the solution no one asked for, to a problem
+nobody had. Have you ever thought to yourself "wow, I sure do
+dislike having to remember multiple macros for my odes and pdes"
+and the author of this package has to agree, wholeheartedly.
+In the modern world of "tik-toking" and "family guy surfing",
+our brains have rotted beyond salvage for even basic levels of
+cognitive recall. This package aims to fix this, through two
+macros that have been set to each have an identical form and
+function. with an emphasis on intuitive use. Through setting
+options, the multiple common notational style are easily
+swapped between, all by a single option.
+You're Welcome.
+
+----------------------------------------------------------------
diff --git a/macros/latex/contrib/odesandpdes/odesandpdes.dtx b/macros/latex/contrib/odesandpdes/odesandpdes.dtx
new file mode 100644
index 0000000000..c7bd3a9a9f
--- /dev/null
+++ b/macros/latex/contrib/odesandpdes/odesandpdes.dtx
@@ -0,0 +1,1675 @@
+% \iffalse meta-comment
+% !TEX program = pdfLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+odesandpdes --- A package for the streamlining of the use of
+odes and pdes in mathematical texts typset by LaTeX
+
+E-mail: anakin@ruc.dk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package is the solution no one asked for, to a problem
+nobody had. Have you ever thought to yourself "wow, I sure do
+dislike having to remember multiple macros for my odes and pdes"
+and the author of this package has to agree, wholeheartedly.
+In the modern world of "tik-toking" and "family guy surfing",
+our brains have rotted beyond salvage for even basic levels of
+cognitive recall. This package aims to fix this, through two
+macros that have been set to each have an identical form and
+function. with an emphasis on intuitive use. Through setting
+options, the multiple common notational style are easily
+swapped between, all by a single option.
+You're Welcome.
+
+----------------------------------------------------------------
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+odesandpdes --- A package for the streamlining of the use of
+odes and pdes in mathematical texts typset by LaTeX
+
+E-mail: anakin@ruc.dk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+\endpreamble
+\postamble
+File: odesandpdes.dtx
+
+Copyright (C) 2024 by Anakin anakin@ruc.dk
+-----------------------------------------------------------
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+ http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Anakin.
+
+This work consists of the file odesandpdes.dtx
+and the derived files odesandpdes.ins,
+ odesandpdes.pdf and
+ odesandpdes.sty.
+
+\endpostamble
+\usedir{tex/latex/odesandpdes}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/odesandpdes}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/odesandpdes}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{odesandpdes}[2024/01/17 v1.0.0 For streamlining ODE and PDE usage]
+%
+%</package>
+%<*driver>
+\PassOptionsToPackage{hidelinks, breaklinks= true,
+linkcolor = [rgb]{0,0,0}, urlcolor = [rgb]{0,0,0}, citecolor = [rgb]{0,0,0},
+pdfdisplaydoctitle = true,
+pdfkeywords={LaTeX, dtx, source, odesandpdes, ODE, PDE, differentials},
+pdfsubject={Optimizing useage of ODE and PDE commands for LaTeX},
+pdfauthor={Anakin}, pdftitle={The odesandpdes package}}{hyperref}
+\documentclass[11pt,a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{indentfirst}
+\usepackage[centering, vscale = 0.80, hscale = 0.65]{geometry}
+\usepackage{mathptmx,amsmath,fdsymbol}
+\usepackage{\jobname}
+\usepackage{tikz}
+\usetikzlibrary{graphs,quotes}
+\makeatletter
+\setlength{\parskip}{5\p@ plus2\p@ minus2\p@}
+\setlength{\jot}{7\p@}
+\makeatother
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{618}
+%
+% \DoNotIndex{\def,\gdef,\global,\edef,\xdef,\long,\let,\futurelet}
+% \DoNotIndex{\ifnum,\ifdim,\iftrue,\iffalse,\ifx,\ifcase,\else,\or,\fi}
+% \DoNotIndex{\kern,\mkern,\setbox,\box}
+% \DoNotIndex{\bgroup,\egroup,\begingroup,\endgroup,\begin,\end}
+% \DoNotIndex{\relax,\endinput}
+% \DoNotIndex{\csname,\endcsname,\string,\the,\noexpand,\expandafter}
+% \DoNotIndex{\hbox,\raise,\lower,\vbox,\vtop,\vcenter,\left,\right}
+% \DoNotIndex{\newcount,\newbox,\newtoks,\countdef}
+% \DoNotIndex{\above,\atop,\over}
+% \DoNotIndex{\cdot,\cdots,\dot,\dots,\prime}
+% \DoNotIndex{\displaystyle,\scriptstyle,\scriptscriptstyle}
+% \DoNotIndex{\advance,\count,\dimen}
+% \DoNotIndex{\baselineskip,\lineskip}
+% \DoNotIndex{\loop,\repeat}
+% \DoNotIndex{\DeclareOptionX,\ExecuteOptionsX,\ProcessOptionsX}
+% \DoNotIndex{\m@ne,\z@,\@ne,\tw@,\p@,\@@tmp}
+%
+% \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 \~}
+%
+%
+% \iffalse
+%<*documentation>
+% \fi
+%
+%
+% \GetFileInfo{\jobname.sty}
+%
+% \author{Anakin\\ \texttt{anakin@ruc.dk}}
+% \title{The \textsf{odesandpdes} package\thanks{This document
+% corresponds to \textsf{odesandpdes}~\fileversion, dated \filedate.}}
+% \date{Released \filedate}
+%
+% \maketitle
+%
+%
+% \changes{v1.0}{2024/01/17}{Initial version}
+%
+% \begin{abstract}
+% This package is the solution no one asked for, to a problem
+% nobody had. Have you ever thought to yourself "wow, I sure do
+% dislike having to remember \emph{multiple} macros for my odes and pdes"
+% and the author of this package has to agree, wholeheartedly.
+% In the modern world of "tik-toking" and "family guy surfing",
+% our brains have rotted beyond salvage for even basic levels of
+% cognitive recall. This package aims to fix this, through two
+% macros that have been set to each have an identical form and
+% function, with an emphasis on intuitive use.
+% Through setting options, the multiple
+% common notational style are easily
+% swapped between, all by a single option.
+% \emph{You're welcome}.
+% \end{abstract}
+%
+%
+%
+%
+% {\setlength{\parskip}{0.25ex}\small
+% \tableofcontents}
+%
+%
+%
+% \newpage
+% \section*{My funny little ODE/PDE package}
+% \hspace{1em} Start by first having \verb|odesandpdes.sty| downloaded in an
+% accessible directory, or in the same directory as your
+% overleaf main.tex, using it by inserting;
+% \begin{center}
+% \cs{usepackage\oarg{options}\{odesandpdes\}}
+% \end{center}
+% into the preamble, Ideally after any font changing packages you use.
+%
+% \section{Usage}
+%
+% If the reader does not wish to be gradually introduced to the package
+% and its features, feel free to skip directly to section \ref{sec:examples}.
+%
+% \subsection{Options}
+%
+% \DescribeMacro{notation}
+% \DescribeMacro{maxprimes}
+% The options included are based off of the three most
+% common notations
+% (according to Wikipedia), Lagrange, Leibniz, and Newton.
+% They can be accessed through the \oarg{options} when importing the package;
+% \par\hbox to \textwidth{\hss
+% \cs{usepackage[notation=\meta{option}]\{odesandpdes\}} \hss}
+%
+% In the case of Lagrange or Newton notation, there is the |maxprimes| option
+% for determination of how many physical markings are allowed to be
+% made before the notation switches to a symbolic version;
+% \par\hbox to \textwidth{\hss
+% \cs{usepackage[maxprimes=\meta{integer}]\{odesandpdes\}}\hss}
+% \vspace{1ex}
+%
+%
+% \DescribeMacro{\setDE}
+% However, if one might wish to change it on a section to section basis,
+% the command \cs{setDE}\marg{options} is able
+% to take any package option as an argument and will
+% apply the new option going forward.
+%
+%
+% \par\hbox to \textwidth{\hss
+% \begin{tabular}{lcl}\hline
+% Option list & Default Value & Valid Arguments \\ \hline
+% notation & Leibniz & {default, Lagrange, Leibniz, Newton} \\
+% maxprimes & 3 & $\text{maxprimes} = n, n \in \mathbb N_+$ \\ \hline
+% \end{tabular}\hss}
+%
+%
+%
+% \subsection{The Meat and Potatoes}
+%
+% \hspace{1em} The command(s) are approached with the philosophy
+% of of an intuitive and modular usage.
+% The full extent of its usage can look like;
+% \begin{equation*} |\ode*[x]^2 X(x) =\ode T_{\eta} at 0; -\alpha|
+% \Rightarrow
+% \ode*[x]^2 X(x)=\ode T_{\eta} at 0; -\alpha
+% \end{equation*}
+% very quickly, and very easily building complex interactions
+% of differentials.
+% The quick functional break down of each element that comprises the macro;
+% \newline
+% \centerline{ \cs{ode}\meta{star}\oarg{variable}\string^\meta{degree}
+% \marg{function}at\textvisiblespace\meta{position};}\vspace{1ex}
+% \par\hbox to \textwidth{\hss
+% \begin{tabular}{cl}\hline
+% Argument & Usage \\ \hline
+% \oarg{variable} & The variable being derived \\
+% \meta{degree} & The order/degree of the derivative \\
+% \marg{function} & The function being derived \\
+% \textvisiblespace at\textvisiblespace\meta{point};
+% & Where the function is being derived \\ \hline
+% \end{tabular}\hss}\vspace{1ex}
+% All arguments are conditionally optional, only the function is
+% mandatory, but the command can forgo needing a function if a star is placed.
+%
+% \subsubsection*{Notation Style}
+%
+% \DescribeMacro{\LagrODE}
+% \DescribeMacro{\LeibODE}
+% \DescribeMacro{\NewtODE}
+% \DescribeMacro{\LagrPDE}
+% \DescribeMacro{\LeibPDE}
+% \DescribeMacro{\NewtPDE}
+% There are 3 distinct notational styles
+% one can choose between. This choice can be made as a package option
+% in the preamble, in the text with \cs{setDE}\marg{options}, or if
+% one only needs to use a notation style once, through its respective
+% macro.
+%
+% In essense, all the \cs{ode} or \cs{pde} commands do are call the
+% respective notational varient aligned with the currently set option.
+% This makes it simple enough to just use one of the notational varients,
+% should one wish to do so:
+% \begin{equation*} |\LagrODE[x] c = \LeibODE[x] c = \NewtODE[x] c |\quad
+% \Rightarrow\quad \LagrODE[x] c = \LeibODE[x] c = \NewtODE[x] c
+% \end{equation*}
+% This also means that all these functions are identical in what arguments
+% they take.
+%
+%
+% \subsubsection*{Variable and Function Arguments}
+% \DescribeMacro{\ode}
+% \DescribeMacro{\ode*}
+% The most barebone form can be understood as:\par\noindent
+% \hbox to \textwidth{\hss\vbox{
+% \hbox{\cs{ode}\oarg{variable}\marg{ function}}
+% \hbox{\cs{ode*}\oarg{variable}}}\hss}
+%
+% \DescribeMacro{\pde}
+% \DescribeMacro{\pde*}
+% and for the sake of parity, the PDE usage is identical:\par\noindent
+% \hbox to \textwidth{\hss\vbox{
+% \hbox{\cs{pde}\oarg{variable}\marg{ function}}
+% \hbox{\cs{pde*}\oarg{variable}}}\hss}\par
+% Any value you give to the \emph{optional} \oarg{variable} argument
+% will be represented as the variable being derived.
+% While the \emph{mandatory} \marg{function} argument will be the function you
+% are deriving.
+% Say you wish to indicate you are deriving $X(t)$, simple as writing
+% |\ode[t]{X}|, however, its worth noting that $t$ is the default variable
+% so writing |\ode{X}| will produce identical results.
+% Hence |\ode[t]{X} = \ode{X}| will produce;
+% \begin{equation*} |\ode[t]{X} =\ode{X}| \implies \ode[t]{X} = \ode{X}
+% \end{equation*}
+%
+%
+% While the \marg{function} argument is mandatory using the
+% non-starred command, using the starred varient
+% omits the need for the \marg{function} argument.
+% Therefor, writing the exact same equation, just starred
+% |\ode*[t]{X} = \ode*{X}| will instead produce;
+% \begin{equation*} |\ode*[t]{X} =\ode*{X}| \implies \ode*[t]{X} = \ode*{X}
+% \end{equation*}
+% Effectively one can rewrite the `bare-bones' display as:\par\vspace{1ex}
+% \par\hbox to \textwidth{\hss
+% \cs{ode}\meta{star}\oarg{variable}\marg{ function}
+% \hss}
+%
+% \subsubsection*{Degree of Derivative}
+% The previously shown stated section is something the reader has
+% likely encountered before, made themselves. This is where
+% this package begins to differentiate\footnote{Calculus Pun!} itself.
+% Consider:
+% \par\hbox to \textwidth{\hss
+% \cs{ode}\meta{star}\oarg{variable}$\uparrow$\meta{degree}\marg{function}
+% \hss}
+%
+% A feature of this family of commands, is that it can `\emph{easily}'
+% recognize a following exponent should one be placed.
+% There was rational in choosing to check for the exponent immediately
+% after the macro command opposed to checking for the exponent at
+% the end after the function.
+% As, often you would want add a higher degree very
+% quickly as opposed to \emph{after} defining the function.
+%
+% \hbox to \textwidth{\hss
+% \cs{ode}|^2{f(x)}| as opposed to \cs{ode\{f(x)\}}|^2| \hss}
+%
+%
+% This was one of the main motivations of creating a package to begin with
+% as instead of needing, maybe, two personalized commands,
+% such as ``|\ddt{f}| and |\ddxx{f}|'', or ``|\dd{x}{f}| and |\dd[2]{x}{f}|''.
+% One simply needs to treat the \cs{ode} macro itself as being raised
+% to a higher degree.
+% \begin{equation*} |\ode* \left(\ode{f} \right)=\ode^2{f} |
+% \Rightarrow \ode* \left(\ode{f} \right)=\ode^2{f}
+% \end{equation*}
+%
+%
+% \subsubsection*{Defining Where the Derivative is}
+%
+% Imagine you, as the reader, are trying to quickly and easily
+% write up the boundry conditions of your problem.
+% One could always make another macro, in what is no doubt an impressive
+% display of differential shortcuts.
+% \emph{Or}: \vspace{1ex}
+% \par\hbox to \textwidth{\hss
+% \cs{ode}\meta{star}\oarg{variable}$\uparrow$\meta{degree}\marg{
+% function}\textvisiblespace{}at\textvisiblespace{}\meta{postion};
+% \hss}
+%
+% See, \TeX\ does something very interesting when it uses `\emph{glue}',
+% which is partially replicated by packages such as |TikZ|, where it will
+% happily take `soft' modifiers written directly in plain english.
+% If one wishes to strictly define paragraph spacing in \TeX, they would use
+% `\cs{parskip}|=1ex|'. If one would rather give it a range of tolerance
+% the following construct `\cs{parskip}|=1ex plus 0.5ex minus 0.5ex|'
+% then allows a spacing of $1\pm 0.5$ |ex|.
+%
+% Glue is of course something special, but that does not mean
+% that the author can not gain inspiration. Say one wishes
+% to define Neumann boundries;
+% \begin{equation*} |\ode[x]{c} at 0;=0\land\ode[x]{c} at L;=1|
+% \Rightarrow \ode[x]{c} at 0;=0\land\ode[x]{c} at L;=1
+% \end{equation*}
+% \begin{equation*} |\ode[x]{c} at 0 = L;=1|
+% \Rightarrow \ode[x]{c} at 0 = L;=1
+% \end{equation*}
+% Literally could not be easier.\footnote{My source is that I made it up}
+%
+%
+% Those reading til this point may have recalled that the first example
+% did not contain many braces.
+% This is because with the ``proper'' spacing, there is little
+% need for the use of the braces, so as to help promote a more fluid,
+% (and readable),
+% workflow without always needing to worry about the f|***|ing brace.
+% Not that one can not use the brace for personal taste.
+% In the following section, many examples of use will be illustrated
+% to show the range and versitility of the functions.
+%
+% \noindent
+% \fbox{\parbox{\textwidth}{The most important thing to always remember.
+% \emph{Just because} the author
+% of this package has done as much as they can to `\emph{\rlap{idiot}\hbox{------}
+% user proof}' its functions
+% does not mean the user does not still need to be cautious. This is
+% \LaTeX\ we are talking about. There are likely many
+% scenarios that the author did not think of, nor accidentally came across.}}
+%
+% \newpage
+% \section{Examples of use}\label{sec:examples}
+%
+% \stepcounter{subsection}
+%
+% \addcontentsline{toc}{subsection}{\thesubsection\quad Common Use Examples}
+%
+% To show the generality of use. The following examples all take identical form
+% in the \TeX/\LaTeX\ itself.
+% Additionally, in order to illustrate the functional boundries of the command with
+% respect to each of the notational styles.
+% There is a variety of spacing and bracketing to help highlight these features,
+% and will be shown in the following |verbatim| enviroment;
+%
+%
+% \begin{minipage}{0.98\textwidth}
+% \begin{verbatim}
+%\begin{align*}
+%\ode A(x) && \ode[x]{B(x)} && \ode^1 C(x) && \ode[x]^5 {D(x)} \\
+%\ode* {E(x)} && \ode*[x] F(x) && \ode*^2 {G(x)} && \ode*[x]^6H(x) \\
+%\pde[t] I(x) && \pde[x] {J(x)}&& \pde[t]^3K(x) && \pde[x]^7 {L(x)} \\
+%\pde*[t] {M(x)}&& \pde*[x]N(x) && \pde*[t]^4 O(x) && \pde*[x]^8 P(x)
+%\end{align*}
+% \end{verbatim}
+% \end{minipage}
+%
+% \vbox{\centering
+% \hbox{\verb|\setDE{notation=Lagrange}| \emph{and/or} \verb|\usepackage[notation=Lagrange]{odesandpdes}|}
+% \fbox{\parbox{0.65\textwidth}{
+% \setDE{notation=Lagrange}
+% \begin{align*}
+% \ode A(x) && \ode[x]{B(x)} && \ode^1 C(x) && \ode[x]^5 {D(x)} \\
+% \ode* {E(x)} && \ode*[x] F(x) && \ode*^2 {G(x)} && \ode*[x]^6H(x) \\
+% \pde[t] I(x) && \pde[x] {J(x)}&& \pde[t]^3K(x) && \pde[x]^7 {L(x)} \\
+% \pde*[t] {M(x)}&& \pde*[x]N(x) && \pde*[t]^4 O(x) && \pde*[x]^8 P(x)
+% \end{align*}
+% }}}\vspace{1.25em}
+%
+% \vbox{\centering
+% \hbox{\verb|\setDE{notation=Leibniz}| \emph{and/or} \verb|\usepackage[notation=Leibniz]{odesandpdes}|}
+% \fbox{\parbox{0.65\textwidth}{
+% \setDE{notation=Leibniz}
+% \begin{align*}
+% \ode A(x) && \ode[x]{B(x)} && \ode^1 C(x) && \ode[x]^5 {D(x)} \\
+% \ode* {E(x)} && \ode*[x] F(x) && \ode*^2 {G(x)} && \ode*[x]^6H(x) \\
+% \pde[t] I(x) && \pde[x] {J(x)}&& \pde[t]^3K(x) && \pde[x]^7 {L(x)} \\
+% \pde*[t] {M(x)}&& \pde*[x]N(x) && \pde*[t]^4 O(x) && \pde*[x]^8 P(x)
+% \end{align*}
+% }}}\vspace{1.25em}
+%
+% \vbox{\centering
+% \hbox{\verb|\setDE{notation=Newton}| \emph{and/or} \verb|\usepackage[notation=Newton]{odesandpdes}|}
+% \fbox{\parbox{0.65\textwidth}{
+% \setDE{notation=Newton}
+% \begin{align*}
+% \ode A(x) && \ode[x]{B(x)} && \ode^1 C(x) && \ode[x]^5 {D(x)} \\
+% \ode* {E(x)} && \ode*[x] F(x) && \ode*^2 {G(x)} && \ode*[x]^6H(x) \\
+% \pde[t] I(x) && \pde[x] {J(x)}&& \pde[t]^3K(x) && \pde[x]^7 {L(x)} \\
+% \pde*[t] {M(x)}&& \pde*[x]N(x) && \pde*[t]^4 O(x) && \pde*[x]^8 P(x)
+% \end{align*}
+% }}}
+%
+% \vbox{\centering
+% \hbox{\verb|\setDE{maxprimes=7}| \emph{and/or} \verb|\usepackage[maxprimes=7]{odesandpdes}|}
+% \fbox{\parbox{0.65\textwidth}{
+% \setDE{notation=Lagrange,maxprimes=7}
+% \begin{align*}
+% \ode^1 f &&\ode^2 f &&\ode^3 f &&\ode^4 f &&
+% \ode^5 f &&\ode^6 f &&\ode^7 f &&\ode^8 f &&\ode^9 f
+% \end{align*}
+% \setDE{notation=Newton}
+% \vspace{-1.5em}
+% \begin{align*}
+% \ode^1 f &&\ode^2 f &&\ode^3 f &&\ode^4 f &&
+% \ode^5 f &&\ode^6 f &&\ode^7 f &&\ode^8 f &&\ode^9 f
+% \end{align*}
+% }}}
+%
+%
+%
+% \subsection{"at x;" Usage Examples}
+%
+%
+%
+% \hspace{1em} Now, because the author is not an insane person, and went through the
+% effort of learning how TEX deconstructs text into constitute
+% registries and boxes, the way any sane person might. When using
+% a non-starred version of a command, after the function is defined, you can
+% place an `|at|\textvisiblespace\meta{point}|;|', and the representation will
+% shown according to notational convention.
+%
+%
+% \vbox{
+% \begin{center}
+% \begin{minipage}[c]{0.45\textwidth}
+% \begin{verbatim}
+%\begin{align*}
+% \ode[x] c at 23\pi; &= 1 \\
+% \ode[x]^3 c at 69; &= 2 \\
+% \ode[x]^{69} c at L;+t &= 3 \\
+% \ode[x]^9 c af 420; &= 4 \\
+% \ode[x]^6 c a t 13; &= 5
+%\end{align*}
+% \end{verbatim}
+% \end{minipage}
+% \end{center}
+% \noindent
+% \hbox{\begin{minipage}[t]{0.35\textwidth}
+% \setDE{notation=Lagrange}
+% \noindent\setlength{\jot}{2em}
+% \begin{verbatim}
+%\setDE{notation=Lagrange}
+% \end{verbatim}
+% \vspace{-1em}
+%\begin{align*}
+% \ode[x] c at 23\pi; &= 1 \\
+% \ode[x]^3 c at 69; &= 2 \\
+% \ode[x]^{69} c at L;+t &= 3 \\
+% \ode[x]^9 c af 420; &= 4 \\
+% \ode[x]^6 c a t 13; &= 5
+%\end{align*}
+% \end{minipage}}\vline~
+% \hbox{\begin{minipage}[t]{0.34\textwidth}
+% \setDE{notation=Leibniz}
+% \noindent\setlength{\jot}{0.70em}
+% \begin{verbatim}
+%\setDE{notation=Leibniz}
+% \end{verbatim}
+% \vspace{-1em}
+%\begin{align*}
+% \ode[x] c at 23\pi; &= 1 \\
+% \ode[x]^3 c at 69; &= 2 \\
+% \ode[x]^{69} c at L;+t &= 3 \\
+% \ode[x]^9 c af 420; &= 4 \\
+% \ode[x]^6 c a t 13; &= 5
+%\end{align*}
+% \vphantom{l}
+% \end{minipage}}\vline~
+% \hbox{\begin{minipage}[t]{0.32\textwidth}
+% \setDE{notation=Newton}
+% \noindent\setlength{\jot}{1.75em}
+% \begin{verbatim}
+%\setDE{notation=Newton}
+% \end{verbatim}
+% \vspace{-1em}
+%\begin{align*}
+% \ode[x] c at 23\pi; &= 1 \\
+% \ode[x]^3 c at 69; &= 2 \\
+% \ode[x]^{69} c at L;+t &= 3 \\
+% \ode[x]^9 c af 420; &= 4 \\
+% \ode[x]^6 c a t 13; &= 5
+%\end{align*}
+% \end{minipage}}}
+%
+% \hspace{1em} As can be seen in the examples, this `\emph{modifier}' is robust
+% enough that one can write effectively any combination of characters
+% after the function, excluding, \emph{verbatim}, `|at|\textvisiblespace'
+% and it will work as intended.
+%
+% \vbox{
+% \hspace{1em} \emph{Important to note}, due to a slight difference in how the
+% notational styles are defined,
+% only the Leibniz notation can take arguments for the
+% function that involve subscripts and superscripts without delimiters.
+% Mostly easily illustrated in this following
+% example using the \cs{pde} command;
+% \begin{center}
+% \begin{minipage}[c]{0.45\textwidth}
+% \begin{verbatim}
+%\begin{align*}
+% \pde[y] f_1 &= 1 \\
+% \pde[y] f_1 at L; &= 2 \\
+% \pde[y] f at L; &= 3 \\
+% \pde[y] {(f_1)} &= 4 \\
+% \pde[y] {(f_1)} at L; &= 5
+%\end{align*}
+% \end{verbatim}
+% \end{minipage}
+% \end{center}
+% \noindent
+% \hbox{\begin{minipage}[t]{0.35\textwidth}
+% \setDE{notation=Lagrange}
+% \noindent\setlength{\jot}{2.20em}
+% \begin{verbatim}
+%\setDE{notation=Lagrange}
+% \end{verbatim}
+% \vspace{-1em}
+%\begin{align*}
+% \pde[y] f_1 &= 1 \\
+% \pde[y] f_1 at L; &= 2 \\
+% \pde[y] f at L; &= 3 \\
+% \pde[y] {(f_1)} &= 4 \\
+% \pde[y] {(f_1)} at L; &= 5
+%\end{align*}
+% \end{minipage}}\vline~
+% \hbox{\begin{minipage}[t]{0.34\textwidth}
+% \setDE{notation=Leibniz}
+% \noindent\setlength{\jot}{0.70em}
+% \begin{verbatim}
+%\setDE{notation=Leibniz}
+% \end{verbatim}
+% \vspace{-1em}
+%\begin{align*}
+% \pde[y] f_1 &= 1 \\
+% \pde[y] f_1 at L; &= 2 \\
+% \pde[y] f at L; &= 3 \\
+% \pde[y] {(f_1)} &= 4 \\
+% \pde[y] {(f_1)} at L; &= 5
+%\end{align*}
+% \vphantom{l}
+% \end{minipage}}\vline~
+% \hbox{\begin{minipage}[t]{0.32\textwidth}
+% \setDE{notation=Newton}
+% \noindent\setlength{\jot}{2.20em}
+% \begin{verbatim}
+%\setDE{notation=Newton}
+% \end{verbatim}
+% \vspace{-1em}
+%\begin{align*}
+% \pde[y] f_1 &= 1 \\
+% \pde[y] f_1 at L; &= 2 \\
+% \pde[y] f at L; &= 3 \\
+% \pde[y] {(f_1)} &= 4 \\
+% \pde[y] {(f_1)} at L; &= 5
+%\end{align*}
+% \end{minipage}}
+% }
+%
+% \subsection{Prime Count Limits}
+% \hspace{1em} Because the Newton and Lagrange notation is procedural;
+% the only limit is your imagination, and also the fact that
+% \TeX\ can only have something like 127 unplaced tokens at a time.\par
+% \hbox to \textwidth{\hss\cs{setDE\{maxprimes=69\}}\hss}
+% \fbox{\parbox{\textwidth}{
+% \setDE{maxprimes=69}
+% \begin{minipage}{0.45\textwidth}
+% \setDE{notation=Lagrange}
+% \begin{equation*}
+% \begin{split}
+% \ode^{5} f \\
+% \ode^{16} f \\
+% \ode^{32} f \\
+% \ode^{54} f \\
+% \ode^{69} f \\
+% \ode^{70} f \\
+% \end{split}
+% \end{equation*}
+% \end{minipage}~
+% \begin{minipage}{0.05\textwidth}
+% \setDE{notation=Lagrange}
+% \begin{equation*}
+% \begin{split}
+% \boxed{5} \\
+% \boxed{16} \\
+% \boxed{32} \\
+% \boxed{54} \\
+% \boxed{69} \\
+% \boxed{70} \\
+% \end{split}
+% \end{equation*}
+% \end{minipage}~
+% \begin{minipage}{0.35\textwidth}
+% \setDE{notation=Newton}
+% \begin{equation*}
+% \ode^{5} f \quad
+% \ode^{16} f \quad
+% \ode^{32} f \quad
+% \ode^{54} f \quad
+% \ode^{69} f \quad
+% \ode^{70} f \quad
+% \end{equation*}
+% \begin{equation*}
+% \mkern-15mu\boxed{5}
+% \boxed{16}
+% \boxed{32}
+% \boxed{54}
+% \boxed{69}
+% \boxed{70}
+% \end{equation*}
+% \end{minipage}}}
+%
+%
+% ^^A Truly beautiful.\par\vspace{1em}
+%
+% ^^A In the next semester I expect to try seeing if its possible to, given that you put multiple variable in the options, to procedurally generate partials that address separate variables sequatentially.
+% ^^A \begin{equation*}
+% ^^A \frac{\partial^2}{\partial x \partial y}
+% ^^A \end{equation*}
+%
+%
+%
+%\StopEventually{^^A
+% \PrintChanges
+% }
+%
+%
+% \iffalse
+%</documentation>
+% \fi
+%
+% ^^A************************************************ [odesandpdes.sty]
+% \newpage
+% \iffalse
+%<*package>
+% \fi
+% \section{Package Implementation}
+%
+% As a fair warning for anyone interested in the implementation
+% of this package, it is documented in what might be considered, \emph{absurd}
+% levels of detail. This comes from the creation of this package being a great
+% learning experience for the author, and the in-depth documentation of
+% that understanding is only beneficial.
+% Futhermore, a lot of the techniques used in this package are not obvious.
+% Some of which, to paraphrase
+% the creator of \TeX, his divine emmisary
+% \emph{Donald E. Knuth} himself in the ever holy \TeX book,
+% were prefaced with
+% ``\emph{Worthy of being known to, at least a few, wizards able to traverse
+% the nether world of \TeX arcana}''.
+%
+%
+%
+%
+% \subsection{Set-up}
+% \iffalse
+%<package>%% ----------------------------------------------------------------
+%<package>%% Package initialize
+%<package>%% ----------------------------------------------------------------
+% \fi
+%
+%
+% Package options are difficult to deal with, so using the |xkeyval| package
+% alleviates much of the \emph{pain} associated with it,
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+%
+% \begin{macro}{\m@xm@rk}\begin{macro}{\exp@c@unt}\begin{macro}{\@detempv@l}
+% \hspace{1em} Being that there are a lot of minor calculations within the package
+% reserving registries for integer counts feels like a good idea
+% \begin{macrocode}
+\newcount\m@xm@rk%
+\newcount\exp@c@unt%
+\countdef\@detempv@l=255%
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\v@rr@t@ks}\begin{macro}{\func@t@ks}\begin{macro}{\@tpost@ks}
+% As well reserving token registries for tossing arguments around
+% the groups and macros,
+% \begin{macrocode}
+\newtoks\v@rr@t@ks%
+\newtoks\func@t@ks%
+\newtoks\@tpost@ks%
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\@dev@rb@x}\begin{macro}{\@defunb@x}\begin{macro}{\@deresb@x}
+% Reserving box registries for the purpose of collecting the components
+% together in \newline a coherent manner,
+% \begin{macrocode}
+\newbox\@dev@rb@x%
+\newbox\@defunb@x%
+\newbox\@deresb@x%
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+%
+% \subsubsection{Package Options}
+% \iffalse
+%<package>%% ----------------------------------------------------------------
+%<package>%% Package Options
+%<package>%% ----------------------------------------------------------------
+% \fi
+%
+%
+% \begin{macro}{\@de@option}
+% \hspace{1em} Defining the package options for notational styles
+% using the \LaTeX\ \cs{providecommand} to reloading times.
+% Important to note that defining the command is not the same
+% as using the command, which is useful in conjunction with \cs{csname}
+% and \cs{endcsname} for macro defintions.
+% \begin{macrocode}
+\providecommand\@de@option{Leib}
+% \end{macrocode}
+%
+% Now using the |keyval| package, it becomes possible to define
+% a family of package options associated with inputing some |notation=#1|.
+% This allows for easily defining the notation for the entire document.
+% The possible options will be defined afterwards,
+% \begin{macrocode}
+\DeclareOptionX{notation}[default]%
+ {\def\@de@option{\csname @de@not@#1\endcsname}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@de@not@Lagrange}
+% \begin{macro}{\@de@not@Leibniz}
+% \begin{macro}{\@de@not@Newton}
+%
+% \hspace{1em} Once the package option has been declared,
+% now the options can be defined. The options take identical form
+% with the exception of the last part of definition.
+% This is because the \cs{@de@option} is not the macro used for
+% the notation definitions. Rather, \cs{@de@option} is an intermediate
+% that expands into one of the defined options, which subsequently
+% expands into one of the four character strings,
+% ``|Lagr|'', ``|Leib|'', or ``|Newt|''
+% \begin{center}\vspace{-0.75em}
+% \makeatletter
+% \tikz[every node/.style={minimum size=1.5em},line width=0.9pt]
+% \graph[no placement,y=0]
+% {\string\@de@option[x=0] ->[bend right,"expands to"']
+% \string\@de@not@``option''[x=3.5] ->[bend left,"expands to"]
+% ``string''[x=6.5]};
+% \makeatother
+% \end{center}
+%
+% \begin{macrocode}
+\def\@de@not@Lagrange{Lagr}
+\def\@de@not@Leibniz{Leib}
+\def\@de@not@Newton{Newt}
+% \end{macrocode}
+% \begin{macro}{\@de@not@default}
+% \hspace{1em} The default option for the notation is defined by
+% pointing to the definition of the |Leibniz| notation option,
+% \begin{macrocode}
+\let\@de@not@default\@de@not@Leibniz
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% A second option is defined to allow freedom in deciding the cut-off point
+% for the Lagrange and Newton notations where it no longer makes more
+% physical marks and uses the symbolic extension instead, with a default
+% of 3 marks before becoming symbolic.
+% \begin{macrocode}
+\DeclareOptionX{maxprimes}[3]{\m@xm@rk=#1\advance\m@xm@rk\@ne}
+% \end{macrocode}
+%
+%
+% To ensure that all other options given to the package will be ignored
+% the star is used to indicate that all undefined options will be directed
+% towrds this declared option,
+% \begin{macrocode}
+\DeclareOptionX*{\PackageWarning{odesandpdes}{`\CurrentOption' ignored}}
+% \end{macrocode}
+% Finally the declared options are executed as to allow the default
+% options to initialize and be processed,
+% \begin{macrocode}
+\ExecuteOptionsX{notation,maxprimes}
+\ProcessOptionsX\relax
+% \end{macrocode}
+%
+% \subsection{Package Configuration}\label{sec:options}
+%
+%
+%\iffalse
+%<package>\define@key[package]{@de}{notation}
+%<package> {\def\@de@option{\csname @de@not@#1\endcsname}}
+%<package>\define@key[package]{@de}{maxprimes}
+%<package> {\m@xm@rk=#1\advance\m@xm@rk\@ne}
+%\fi
+%
+% \begin{macro}{\setDE}
+% \hspace{1em} In addition to being able to use options directly in the
+% \cs{usepackage} package command, one also gets access to the command
+% \cs{setDE}.
+% Which can be used at any point in the document to change the style
+% of notation or max prime count. Functionally done in identical manner
+% to how \cs{DeclareOptionX} is used.
+%
+% \begin{macrocode}
+\newcommand\setDE[1]{\setkeys[package]{@de}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{To not conflict with amsmath}
+%
+% \begin{macro}{\@de@ver}
+% \begin{macro}{\@de@top}
+% \begin{macro}{\@de@bove}
+%
+% \hspace{1em} Purely because amsmath is a bitch and doesn't want
+% anyone enjoying their time in \TeX\ it becomes required to make
+% compatibility checks and work within their abstracted definitions,
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}{
+ \let\@de@ver=\@@over%
+ \let\@de@top=\@@atop%
+ \let\@de@bove=\@@above}%
+% \end{macrocode}
+% Otherwise it just uses the \TeX\ primitive commands for fractions
+% because of increase ease of function and speed of processing,
+% \begin{macrocode}
+ {\let\@de@ver=\over%
+ \let\@de@top=\atop%
+ \let\@de@bove=\above}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Foundational macros}
+% \iffalse
+%<package>%% ----------------------------------------------------------------
+%<package>%% Package Macros
+%<package>%% ----------------------------------------------------------------
+% \fi
+%
+% \begin{macro}{\d@@}\begin{macro}{\d@l}
+% \hspace{1em} Creating protected macro definitions for increase in
+% speed of processes,
+% \begin{macrocode}
+\def\d@@{\mathrm d}
+\let\d@l=\partial
+% \end{macrocode}
+% \begin{macro}{\@dest@red}\begin{macro}{\@den@st@r}
+% \hspace{1em} In the same vein, strings are defined for the starred and
+% unstarred versions of macro commands,
+% \begin{macrocode}
+\def\@dest@red{st@r@d}
+\def\@den@st@r{n@st@r}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \end{macro}\end{macro}
+%
+%
+% \begin{macro}{\ode}\begin{macro}{\pde}
+% \hspace{1em} The macro definitions of the ODE and PDE commands
+% \begin{macrocode}
+\def\ode{\csname \@de@option ODE\endcsname}
+\def\pde{\csname \@de@option PDE\endcsname}
+% \end{macrocode}
+% In essence these two are the same command.
+% This is done for the sake of consistancy in use and effect.
+% As well, in an attempt to not make the alternative notations
+% \emph{inaccesible}, the main macros are themselves stepping stones
+% to the package declared option. As perhaps multiple notational styles
+% might be useful in a single equation, who knows?
+% \end{macro}\end{macro}
+%
+%
+%
+%
+% \begin{macro}{\LagrODE}\begin{macro}{\LeibODE}\begin{macro}{\NewtODE}
+% \hspace{1em} There is unfortunately no way to avoid the process
+% of making an individual macro for each ODE version;
+% \begin{macrocode}
+\def\LagrODE{\let\@de@perat@r\d@@% sets the d
+ \let\@dec@mm@nd\@de@not@Lagrange
+ \@de@ifst@r}
+\def\LeibODE{\let\@de@perat@r\d@@%
+ \let\@dec@mm@nd\@de@not@Leibniz
+ \@de@ifst@r}
+\def\NewtODE{\let\@de@perat@r\d@@%
+ \let\@dec@mm@nd\@de@not@Newton
+ \@de@ifst@r}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+% \begin{macro}{\LagrPDE}\begin{macro}{\LeibPDE}\begin{macro}{\NewtPDE}
+% As well as making a macro for each PDE version;
+% \begin{macrocode}
+\def\LagrPDE{\let\@de@perat@r\d@l% sets the del
+ \let\@dec@mm@nd\@de@not@Lagrange
+ \@de@ifst@r}
+\def\LeibPDE{\let\@de@perat@r\d@l%
+ \let\@dec@mm@nd\@de@not@Leibniz
+ \@de@ifst@r}
+\def\NewtPDE{\let\@de@perat@r\d@l%
+ \let\@dec@mm@nd\@de@not@Newton
+ \@de@ifst@r}
+% \end{macrocode}
+%
+% In terms of usage, these are all the same command, the main
+% differences come from what the operator is defined as,
+% \cs{d@@} or \cs{d@l}, and which notational form that
+% \cs{@dec@mm@nd} points at for further processes down the stream.
+% They are however, given all caps for the \emph{ode} and \emph{pde}
+% in order to enhance visual clarity should one use them.
+%
+% \end{macro}\end{macro}\end{macro}
+%
+%
+% \subsubsection{The `Yoinkers'}
+% \begin{macro}{\@dest@r@rg}
+% \begin{macro}{\@de@ption@l@rg}\begin{macro}{\@de@exponent@rg}
+% \hspace{1em} Now a group of functions are needed for the processing
+% each of the major elements, the star (|*|), for whether to have a function
+% parameter. The option (|[|), for determining the variable
+% being differentiated. And exponent (|^|), for deteriming what order
+% the differential should be. Whether these functions should be used
+% or not, comes from the use of a macro described in section
+% \ref{sec:checkpoints}.
+%
+% Importantly each of these elements, should they appear,
+% require the relevant token to be `yoinked' by the macro in question.
+% Should a star appear, \cs{@dest@r@rg} `gobbles' said star and propmts
+% the next element, an optional argument, to be checked for.
+% \begin{macrocode}
+\def\@dest@r@rg*{\expandafter\@de@ifbr@ck}
+% \end{macrocode}
+%
+% For an optional argument, \cs{@de@option@l@rg} will yoink the argument,
+% as well as the surrounding brackets,
+% \begin{macrocode}
+\def\@de@ption@l@rg[#1]{\expandafter\v@rr@t@ks{#1}\relax \@de@ifexp@n}%
+% \end{macrocode}
+%
+% If an exponent should appear, \cs{@de@exponent@rg} will yoink the |^|,
+% and the integer following it,
+% \begin{macrocode}
+\def\@de@exponent@rg^#1{\exp@c@unt#1\relax \@deifst@rred}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\@dest@r@dy@ink}\begin{macro}{\@den@st@ry@ink}
+%
+% \hspace{1em} Depending on if one is using the starred
+% version of the command,
+% there is a command that yoinks the following function variable
+% and one that ends the compiling here.
+% \begin{macrocode}
+\def\@dest@r@dy@ink{\expandafter\@dec@mpf@rm}
+\def\@den@st@ry@ink{\expandafter\@dey@inkf@rm}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\@de@func@ther}\begin{macro}{\@de@func@Leib}
+% \begin{macro}{\@de@func@Lagr}\begin{macro}{\@de@func@Newt}
+%
+% \hspace{1em} As a consequence of the inherent differences in how
+% the notational styles treat functions,
+% the \cs{@de@func@Leib} macro has to be treated differently.
+% Whereas both
+% the Lagrange and Newton notations will just accept the first token
+% following the call of the function yoinker. The Leibniz varient will
+% attempt to absorb all the tokens untill the first space token is found.
+% This is not done in the traditional way of denoting an explicit space
+% token at the end of the control sequence, but rather through a special
+% macro defined in section \ref{sec:nextchar}.
+% This had to be done as a consequence
+% of getting the `|at|\textvisiblespace |x;|' function to work properly.
+% \begin{macrocode}
+\def\@de@func@ther#1{\expandafter\func@t@ks{#1}\relax
+ \expandafter\@de@if@tpos}
+\def\@de@func@Leib{\expandafter\func@t@ks{}\relax
+ \expandafter\@de@ifbrace}
+\let\@de@func@Lagr\@de@func@ther
+\let\@de@func@Newt\@de@func@ther
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \end{macro}\end{macro}
+%
+%
+% \begin{macro}{\@de@tpos@rg}
+% \hspace{1em} Finally, the last element that can be used, is designed to
+% eat all the tokens between its call and the first semi-colon it sees,
+% to ensure a function can be derived anywhere.
+% \begin{macrocode}
+\def\@de@tpos@rg#1;{\expandafter\@tpost@ks{#1}\relax \@de@tf@rm}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{Macro `Checkpoints'}\label{sec:checkpoints}
+% \begin{macro}{\@de@ifst@r}
+% \begin{macro}{\@de@ifbr@ck}
+% \begin{macro}{\@de@ifexp@n}
+% \hspace{1em} As can be seen in the definitions of the \cs{ode} and \cs{pde},
+% there are no explicitely defined \cs{ode*} or \cs{pde*} macros.
+% A workaround is implemented by making the first step of the macro
+% to check if the first token that appears is a star, or \emph{asterisk},
+% if one would prefer the technical language. These macros make use of an
+% ancilliariy function \cs{@deifch@r},
+% which is defined in the section \ref{sec:nextchar}.
+%
+% \begin{macrocode}
+\def\@de@ifst@r{\@deifch@r *
+ {\@dest@rgument\@dest@red\@dest@r@rg}
+ {\@dest@rgument\@den@st@r\@dest@r@rg*}}
+\def\@de@ifbr@ck{\@deifch@r [
+ \@de@ption@l@rg
+ {\@de@ption@l@rg[t]}}
+\def\@de@ifexp@n{\@deifch@r ^
+ \@de@exponent@rg
+ {\@de@exponent@rg^\@ne}}
+% \end{macrocode}
+% \begin{macro}{\@de@ifbrace}
+% \hspace{1em} \cs{@de@ifbrace} is a bit more special than the other \cs{@deif}
+% conditionals, as it is not a general use conditional. Only the
+% Leibniz notational style function yoinker makes use of it.
+% This is likely not a good long-term solution, but
+% that just means it's going to be this way for at least a few years.
+% \begin{macrocode}
+\def\@de@ifbrace{\@deifch@r \bgroup
+ \@de@func@ther
+ \@de@tilsp@ce}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+%
+% \begin{macro}{\@de@if@tpos}\begin{macro}{\@de@tDoubleCheck}
+% \hspace{1em} In the same way, there also exist a macro to check
+% for the `|at|\textvisiblespace'. The main difference however,
+% is the follow up command that helps
+% \emph{robustify} \cs{@de@if@tpos}. This is done through absorbing all the
+% tokens after the `|a|' until the next space token, if only
+% a single token is absorbed, and that token is a `|t|', then success! Otherwise
+% nothing happens.\footnotemark
+% \begin{macrocode}
+\def\@de@if@tpos{\@deifch@r a \@de@tDoubleCheck \@dec@mpf@rm}
+\def\@de@tDoubleCheck a#1 {\ifx t#1\expandafter\@de@tpos@rg\else
+ \@dec@mpf@rm a#1\fi}%
+% \end{macrocode}
+%
+% \footnotetext{There is a way to make this function in a far more generalized way using
+% \cs{csname} and \cs{endcsname}. However, as this package makes use of
+% this feature exactly \emph{once}, there is no benefit to
+% generalizing the functionality.}
+% \end{macro}\end{macro}
+%
+%
+%
+%
+% \subsection{Ancilliary Functions}
+% There are a lot of macros or command sequences that need to be used
+% in addendum to the main commands that one would download this package for.
+% As a consequence, there are a plethora of ancilliary functions to pull from
+% defined in this section.
+%
+%
+% \iffalse
+%<package>%% ----------------------------------------------------------------
+%<package>%% Ancilliary Package Functions
+%<package>%% ----------------------------------------------------------------
+% \fi
+% \subsubsection{Variable Macronames}
+%
+% \begin{macro}{\@dest@rgument}
+% \begin{macro}{\@deifst@rred}
+% \begin{macro}{\@dec@mpf@rm}
+%
+% \hspace{1em}It becomes useful to be able to freely define which macro
+% to be used when going through the option tree.
+% Subsequently, three macros are defined
+% to fufill that purpose. \cs{@dest@rgument} takes an argument and defines
+% two macros \cs{@deifst@rred} which defines
+% whether the function `yoinker' exists or not, and \cs{@dec@mpf@rm}
+% which works with \cs{@de@option},defined in subsection \ref{sec:options},
+% to define the final ODE or PDE form.
+% \begin{macrocode}
+\def\@dest@rgument#1{%
+ \def\@deifst@rred{\csname @de#1y@ink\endcsname}%
+ \def\@dec@mpf@rm{\csname#1@\@dec@mm@nd\endcsname}}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+%
+%
+%
+%
+% \begin{macro}{\@de@tf@rm}\begin{macro}{\@dey@inkf@rm}
+% \hspace{1em} Additional macros are also defined for determining
+% intermediate forms during the construction
+% process of the resulting ODEs and PDEs
+% \begin{macrocode}
+\def\@de@tf@rm{\csname @de@t@\@dec@mm@nd\endcsname}%
+\def\@dey@inkf@rm{\csname @de@func@\@dec@mm@nd\endcsname}%
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+%
+%
+% \subsubsection{Determing the next token}\label{sec:nextchar}
+% An integral part of the `\emph{mastication}' process
+% is the identification of the proceeding token in the oncoming token stream.
+% Therefore, a macro is defined to streamline this process instead of needing
+% to create a unique \cs{futurelet} sequence for each token type.\par
+% The use of \cs{futurelet} is a strange and arcane process
+% that better described by occult terminology than the proper scientific
+% terms one would use in daily life.
+% However, it is important to understand at least a little bit for the
+% implementation of the \cs{@deifch@r} macro.
+%
+% \begin{macro}{\@deifch@r}\begin{macro}{\@detesttoken}
+%
+% \begin{macro}{\@de@tmpA}\begin{macro}{\@de@tmpB}
+%
+% \hspace{1em} \cs{@deifch@r} takes in three tokens as arguments,
+% the first argument will assign \cs{@detesttoken} and be
+% what the macro looks out for,
+% while the other two arguments are for storage to be executed later.
+% Building off this, there are two main elements that compose the macro,
+% the namesake \cs{@deifch@r}, and its supplement macro
+% \cs{@denext@rg}. This is because \cs{futurelet} is a primitive that will
+% act as the \cs{let} primitive, just one token removed.
+%
+% \begin{minipage}[b]{0.45\textwidth}
+% \tikz \graph[grow right = 1.5cm]{
+% \string\let -!- token1 <- token2 -!- token3 };
+% \end{minipage}~
+% \begin{minipage}[b]{0.45\textwidth}
+% \tikz \graph[grow right = 1.5cm]{
+% \string\futurelet -!- token1 -!- token2 -!- token3,
+% token1 <-[bend left, "\string\let\ token1 token3"] token3 };
+% \end{minipage}
+%
+%
+% The most important consequence is that,
+% should \cs{futurelet} be enacted upon a stream of three
+% tokens, ``\cs{futurelet}| token1 token2 token3|''; |token1| will be \cs{let}
+% to point at |token3| \emph{before}
+% |token2| is expanded. What this means, is one is able to have |token3|
+% \emph{act upon the unexpanded}
+% |token2|.\footnote{If this means something to you, it's too late.
+% You've lost your chance of escaping \TeX.}
+% \begin{macrocode}
+\def\@deifch@r#1#2#3{%
+ \let\@dew@tcht@k=#1\relax
+ \def\@de@tmpA{#2} \def\@de@tmpB{#3}
+ \futurelet\@detesttoken\@denext@rg}
+% \end{macrocode}
+% \hspace{1em} Using this \emph{enlightenment},
+% define the token representing an
+% `|if-then-else|' control sequence \cs{@denext@rg}. In
+% \cs{@deifch@r}, \cs{@dew@tcht@k} becomes a macro for
+% the token we want to check against. Using this to our advantage,
+% before \TeX\ expands \cs{@denext@rg}, it will assign \cs{@detesttoken}
+% to point to a third, currently, unknown token after \cs{@denext@rg}.
+% This is where the magic happens; because \cs{@denext@rg} only expands
+% \emph{after} the assignment of \cs{@detesttoken}, meaning it becomes
+% possible to compare \cs{@detesttoken} and \cs{@dew@tcht@k} against
+% eachother to determine which outcome should be executed.\par
+% \end{macro}\end{macro}
+%
+% \end{macro}\end{macro}
+%
+%
+%
+% \begin{macro}{\@denext@rg}\begin{macro}{\@de@nextact}
+%
+% \hspace{1em} The first half of \cs{@denext@rg} ensures that a
+% space tokens does not get in the way of assignment,
+% as unfortunate as it is, the \cs{futurelet} primitive \emph{does}
+% consider a space token to be a valid token to point to.
+%
+% \begin{macrocode}
+\def\@denext@rg{%
+ \ifx\@detesttoken\@sptoken\relax
+ \let\@de@nextact\@desp@cegobbler\else
+% \end{macrocode}
+% \hspace{1em} The second half of \cs{@denext@rg} is what does
+% the actual comparison. Should the comparison be positive,
+% \cs{@detesttoken} = \cs{@dew@tcht@k}, then the code stored
+% in \cs{@de@tmpA} will be executed, otherwise, \cs{@de@tmpB}
+% will be executed
+% \begin{macrocode}
+ \ifx\@detesttoken\@dew@tcht@k\relax % if
+ \let\@de@nextact\@de@tmpA\else % ifn't
+ \let\@de@nextact\@de@tmpB\fi\fi
+ \@de@nextact}
+% \end{macrocode}
+%
+% \begin{macro}{\@desp@cegobbler}
+% \iffalse
+%<package>\let\@desavedef\<
+% \fi
+%
+% \hspace{1em} Ensuring that the space(s), explicit or implicit, trailing after
+% \cs{@deifch@r} requires some \TeX\ \emph{tomfoolary}.
+% By defining the function with a non-character token, the trailing space
+% will matter for the macro definition, thereby, creating a macro that gobbles
+% one space token on use.
+% \begin{macrocode}
+\def\<{\@desp@cegobbler}
+\expandafter\def\< {\futurelet\@detesttoken\@denext@rg}
+% \end{macrocode}
+% These three macros work together as a three point cycle discarding spaces
+% until the first non-space token is found, in which case the \cs{if}-\cs{else}
+% will be executed.
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@de@tilsp@ce}
+%
+% \hspace{1em} While the previous macro gobbles space tokens until it finds
+% a non-space token \cs{@de@tilsp@ce} gobbles non-space
+% tokens until it finds a space token.
+% There is a difference however, in that \cs{@de@tilsp@ce} stores the
+% gobbled tokens until it finds that space token, subsequently
+% \rlap{ {ejaculating} }\hbox{---------------}
+% \emph{returning} the the tokens as a registry list.
+% \begin{macrocode}
+\def\@de@tilsp@ce#1 {%
+ \beginnext%
+ \toks0={#1}
+ \edef\next{\func@t@ks=\expandafter{\the\toks0}}
+ \endnext \@de@if@tpos}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\beginnext}
+% \begin{macro}{\endnext}
+%
+% \hspace{1em} The \cs{beginnext}, \cs{endnext} construct
+% is a relatively common construct one finds when working with
+% variable macros and subsequently working with \cs{edef} commands.
+% Using the explicit \cs{begingroup} and \cs{endgroup} group denotions
+% means that one can play all sorts of registry based games,
+% that can not be broken by implicit groupings.
+% By \cs{edef}'ing \cs{next} inside this construct, whatever finalized
+% product you have assigned to \cs{next}, will be a fully expanded
+% assortment of values from those registries.
+% \begin{macrocode}
+\def\beginnext{\begingroup
+ \let\next\undefined}
+\def\endnext{\expandafter\endgroup\next}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{Notational Morphology}
+% \iffalse
+%<package>%% ----------------------------------------------------------------
+%<package>%% Package Notations
+%<package>%% ----------------------------------------------------------------
+% \fi
+%
+% There is nothing particularly interesting about the methodology
+% behind preparing the output forms, just using the classical
+% \TeX\ methods of exponents and fractions. So while these macro definitions
+% will be left in, there won't be much commenting on them directly.
+% The follow-up section will be illustrating the macros used
+% \emph{within} the ode replacement text, those will be explained.
+%
+% One thing of note, is that these macros make \emph{heavy} use of the
+% `\cs{the}\cs{registry}' commands to expand registries previously
+% used for storing tokens, and integers. Another hugely important
+% element in these macros are the \cs{box} commands for arranging and
+% subsequently storing said arrangement into a \emph{box} which can
+% then float to the top of the groupings like a message in a bottle.
+%
+% \subsubsection*{Starred Forms}
+% \begin{macro}{\st@r@d@Lagr}
+% Macro for Lagr+star
+% \begin{macrocode}
+\def\st@r@d@Lagr{%
+ \setbox\@deresb@x\hbox{$
+ {f^{\mkern1mu\@dedr@wm@rk\lagr@prime\lagr@prime\br@ced@xpon}
+ _{\m@kep@rtLagr}}\mkern-\tw@ mu\left(\the\v@rr@t@ks\right)
+ $}%
+ \@derele@se}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\st@r@d@Leib}
+% Macro for Leib+star
+% \begin{macrocode}
+\def\st@r@d@Leib{%
+ \setbox\@defunb@x\hbox{$\@de@perat@r^{\@deem@rex}$}%
+ \b@se@Leib}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\st@r@d@Newt}
+% Macro for Newt+star
+% \begin{macrocode}
+\def\st@r@d@Newt{%
+ \setbox\@dev@rb@x\hbox{$\the\v@rr@t@ks$} \b@se@Newt}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection*{Unstarred Forms}
+% \begin{macro}{\n@st@r@Lagr}
+% Macro for Lagr
+% \begin{macrocode}
+\def\n@st@r@Lagr{%
+ \setbox\@deresb@x\hbox{$
+ {\the\func@t@ks
+ ^{\mkern\@ne mu\@dedr@wm@rk\lagr@prime\lagr@prime\br@ced@xpon}
+ _{\m@kep@rtLagr}}\mkern\m@ne mu$}%
+ \@derele@se}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\n@st@r@Leib}
+% Macro for Leib
+% \begin{macrocode}
+\def\n@st@r@Leib{%
+ \setbox\@defunb@x\hbox{$
+ \@de@perat@r^{\@deem@rex}\mkern0.40mu\the\func@t@ks$}
+ \b@se@Leib}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\n@st@r@Newt}
+% Macro for Newt
+% \begin{macrocode}
+\def\n@st@r@Newt{%
+ \setbox\@dev@rb@x\hbox{$\the\func@t@ks$} \b@se@Newt}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection*{``At Position'' Forms}
+% \begin{macro}{\@de@t@Lagr}
+% Macro for Lagr at point
+% \begin{macrocode}
+\def\@de@t@Lagr{%
+ \noexpand\hbox{$
+ \n@st@r@Lagr\mkern-\thr@@ mu\left(\the\@tpost@ks\right)
+ $}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@de@t@Leib}
+% Macro for Leib at point
+% \begin{macrocode}
+\def\@de@t@Leib{%
+ \noexpand\hbox{$
+ \left.\n@st@r@Leib\mkern\@ne mu\right|
+ _{\mkern1mu\displaystyle\the\v@rr@t@ks\mkern2mu
+ \rlap{$\scriptstyle=\mkern\thinmuskip\the\@tpost@ks$}}
+ $}%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@de@t@Newt}
+% Macro for Newton at point
+% \begin{macrocode}
+\def\@de@t@Newt{%
+ \noexpand\hbox{$
+ \n@st@r@Newt\mkern-\tw@ mu\left(\the\@tpost@ks\right)
+ $}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+% \subsubsection*{Foundational forms}
+%
+%
+% \begin{macro}{\m@kep@rtLagr}
+% Macro for Lagr partial notations
+% \begin{macrocode}
+\def\m@kep@rtLagr{\ifx\@de@perat@r\d@l\the\v@rr@t@ks\else\empty\fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\b@se@Leib}
+% Macro for the base Leibniz form
+% \begin{macrocode}
+\def\b@se@Leib{%
+ \setbox\@dev@rb@x\hbox{$
+ \@de@perat@r\mkern0.40mu\the\v@rr@t@ks^{\@deem@rex}$}%
+ \setbox\@deresb@x\hbox{\kern0.5\p@%
+ $\raise2\p@\box\@defunb@x\@de@ver\lower5\p@\box\@dev@rb@x$%
+ \kern0.5\p@}%
+ \@derele@se}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\b@se@Newt}
+% Macro for the base Newton form
+% \begin{macrocode}
+\def\b@se@Newt{%
+ \setbox\@defunb@x\hbox{\vbox{\baselineskip=\z@\lineskip=\m@ne\p@%
+ \@dedr@wm@rk\@de@ned@ts\@detw@d@ts\@denewt@nd@t}}%
+ \setbox\@deresb@x\hbox{\vbox{\baselineskip=\z@\lineskip=-0.5\p@%
+ \hbox to\wd\@dev@rb@x{\hss\raise\z@\box\@defunb@x\hss}%
+ \hbox{\raise\z@\box\@dev@rb@x}}}%
+ \@derele@se}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\m@kep@rtNewt}
+% Macro for Newt partial notations
+% \begin{macrocode}
+\def\m@kep@rtNewt{\ifx\@de@perat@r\d@l\empty\fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+% \subsection{Notational Shaping Tools}
+%
+% Here's where some spice comes back into play.
+% One of the major challenges\footnote{Aside from my mental challenges.}
+% was ensuring that the appropriate number of primes or dots were
+% placed when changing the |maxprimes| option.
+%
+% Did the author realistically need to make it so one could have
+% a procedural number of primes/dots? Nope. Would there ever be a realistic
+% use-case for a derivative of order 3 or higher in
+% which one would use markings? Of course not. Did the author do it anyways?
+% Absolutely.
+%
+%
+% \begin{macro}{\lagr@prime}
+% \begin{macro}{\br@ced@xpon}
+% \hspace{1em} The macro for the Lagrangian prime is very straightforward
+% each time \cs{lagr@prime} is used, a prime mark will be placed,
+% and the exponent count will reduce by one. The function does this
+% repeatedly until the exponent count is reduced to 1.
+% \begin{macrocode}
+\def\lagr@prime{\mkern0.35mu\prime\global\advance\exp@c@unt\m@ne}
+% \end{macrocode}
+%
+% Should the exponent count be greater than the maximum allowed prime
+% markings, \cs{br@ced@xpon} will be used instead, which will display
+% the general form of an integer enclosed by parenthesis.
+% \begin{macrocode}
+\def\br@ced@xpon{\left(\the\exp@c@unt\right)}
+% \end{macrocode}
+%
+%
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@detw@d@ts}
+% \begin{macro}{\@de@ned@ts}
+% \hspace{1em} The dots for the Newtonian notation are more complicated than
+% just incrementing a counter by one for each placed mark.
+% Because Newtonian notation is built with a point at the top, it
+% requires the initial dot to be place prior the rest of the dots as
+% the \cs{vbox} primitive builds top down
+%
+% In order to deal with that, this set of macros, \cs{@detw@d@ts}
+% and \cs{@de@ned@ts}
+% will take the exponent count, and determine if the number is $\equiv|mod2|$
+% if it is congruent. There is no initial dot created, if it is not congruent
+% \emph{and} a greater value than the set maxprimes, an initial dot is
+% placed into the token stream to become the star on top.
+%
+% The reason for these macros to be so complicated, is that \TeX\ only has
+% addition, and multiplication with integer registries. There is no divsion
+% or float value functionality.
+% \begin{macrocode}
+\def\@detw@d@ts{\ifnum\exp@c@unt>\@ne%
+ \advance\exp@c@unt-\tw@\hbox to 5\p@{\hss$\cdot\cdot$\hss}\fi}%
+\def\@de@ned@ts{\@detempv@l=\the\exp@c@unt%
+ \loop\ifnum\@detempv@l>\tw@%
+ \advance\@detempv@l-\tw@\repeat%
+ \ifnum\@detempv@l<\tw@%
+ \advance\exp@c@unt\m@ne\hbox to 5\p@{\hss$\cdot$\hss}\fi}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@denewt@nd@t}
+% \hspace{1em} The generalized form of the the Newtonian derivative notation is
+% is just a glorified fraction, with a dot as the denominator, and a number
+% as the numerator.
+% \begin{macrocode}
+\def\@denewt@nd@t{\hbox{\vbox{%
+ \hbox to 5\p@{\hss\raise\thr@@\p@\hbox{$\scriptstyle\@deem@rex$}\hss}%
+ \hbox to 5\p@{\hss\hbox{$\displaystyle\cdot$}\hss}}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@deem@rex}
+% For the Leibniz notation, there is no reason to display the exponent
+% should it be an integer value less than 2, therefor, any
+% exponent count less than two will be replaced with \cs{empty}.
+% \begin{macrocode}
+\def\@deem@rex{\ifnum\tw@>\exp@c@unt\empty\else\the\exp@c@unt\fi}
+% \end{macrocode}
+%
+% \begin{macro}{\@dedr@wm@rk}
+% \hspace{1em} Because both the Lagrangian and Newtonian notational styles involve
+% a physical marking being repeated, common macro was made that
+% takes 3 arguments, the first will be for the initial placement,
+% the second argument is fed into a follow-up macro \cs{@derepe@tdr@w},
+% and the third argument is what
+% will be placed should the exponent count be higher than the max allowed.
+%
+% Effectively \cs{@dedr@wm@rk} is what checks whether it should be a marking
+% or the more symbolic generalized form.
+% \begin{macrocode}
+\def\@dedr@wm@rk#1#2#3{
+ \ifnum\exp@c@unt<\m@xm@rk
+ #1\@derepe@tdr@w#2\else
+ #3\fi}
+% \end{macrocode}
+% \begin{macro}{\@derepe@tdr@w}
+% While \cs{@derepe@tdr@w} is what provides the
+% conditional looping enviroment to ensure the markings are placed;
+% \begin{macrocode}
+\def\@derepe@tdr@w#1{\loop\ifnum\exp@c@unt>\z@#1\repeat}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@derele@se}
+% Shorthand for allowing the final formed ode or pde to rise to the surface
+% \begin{macrocode}
+\def\@derele@se{\noexpand{\box\@deresb@x}}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+%
+%
+% \iffalse
+%<package>\let\<\@desavedef
+%<package>\endinput
+% \fi
+%
+%
+%
+%
+% \Finale \ No newline at end of file
diff --git a/macros/latex/contrib/odesandpdes/odesandpdes.ins b/macros/latex/contrib/odesandpdes/odesandpdes.ins
new file mode 100644
index 0000000000..ff5285724c
--- /dev/null
+++ b/macros/latex/contrib/odesandpdes/odesandpdes.ins
@@ -0,0 +1,77 @@
+%%
+%% This is file `odesandpdes.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% odesandpdes.dtx (with options: `install')
+%% ----------------------------------------------------------------
+%% odesandpdes --- A package for the streamlining of the use of
+%% odes and pdes in mathematical texts typset by LaTeX
+%%
+%% E-mail: anakin@ruc.dk
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+odesandpdes --- A package for the streamlining of the use of
+odes and pdes in mathematical texts typset by LaTeX
+
+E-mail: anakin@ruc.dk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+\endpreamble
+\postamble
+File: odesandpdes.dtx
+
+Copyright (C) 2024 by Anakin anakin@ruc.dk
+-----------------------------------------------------------
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+ http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Anakin.
+
+This work consists of the file odesandpdes.dtx
+and the derived files odesandpdes.ins,
+ odesandpdes.pdf and
+ odesandpdes.sty.
+
+\endpostamble
+\usedir{tex/latex/odesandpdes}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\endbatchfile
+%% File: odesandpdes.dtx
+%%
+%% Copyright (C) 2024 by Anakin anakin@ruc.dk
+%% -----------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Anakin.
+%%
+%% This work consists of the file odesandpdes.dtx
+%% and the derived files odesandpdes.ins,
+%% odesandpdes.pdf and
+%% odesandpdes.sty.
+%%
+%%
+%% End of file `odesandpdes.ins'.
diff --git a/macros/latex/contrib/odesandpdes/odesandpdes.pdf b/macros/latex/contrib/odesandpdes/odesandpdes.pdf
new file mode 100644
index 0000000000..5f584c3bb4
--- /dev/null
+++ b/macros/latex/contrib/odesandpdes/odesandpdes.pdf
Binary files differ