From 46f8a5bc71e55825e922495dc0483469fb37b8d6 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 30 May 2018 21:18:26 +0000 Subject: texdate (30may18) git-svn-id: svn://tug.org/texlive/trunk@47878 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/generic/texdate/CHANGES | 1 + Master/texmf-dist/doc/generic/texdate/README | 26 + Master/texmf-dist/doc/generic/texdate/lppl.txt | 416 ++++++ Master/texmf-dist/doc/generic/texdate/texdate.pdf | Bin 0 -> 246866 bytes .../texmf-dist/source/generic/texdate/texdate.dtx | 1546 ++++++++++++++++++++ .../texmf-dist/source/generic/texdate/texdate.ins | 65 + Master/texmf-dist/tex/generic/texdate/texdate.sty | 856 +++++++++++ Master/tlpkg/bin/tlpkg-ctan-check | 3 +- Master/tlpkg/libexec/ctan2tds | 3 + Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc | 1 + Master/tlpkg/tlpsrc/texdate.tlpsrc | 0 11 files changed, 2916 insertions(+), 1 deletion(-) create mode 100644 Master/texmf-dist/doc/generic/texdate/CHANGES create mode 100644 Master/texmf-dist/doc/generic/texdate/README create mode 100644 Master/texmf-dist/doc/generic/texdate/lppl.txt create mode 100644 Master/texmf-dist/doc/generic/texdate/texdate.pdf create mode 100644 Master/texmf-dist/source/generic/texdate/texdate.dtx create mode 100644 Master/texmf-dist/source/generic/texdate/texdate.ins create mode 100644 Master/texmf-dist/tex/generic/texdate/texdate.sty create mode 100644 Master/tlpkg/tlpsrc/texdate.tlpsrc diff --git a/Master/texmf-dist/doc/generic/texdate/CHANGES b/Master/texmf-dist/doc/generic/texdate/CHANGES new file mode 100644 index 00000000000..1dd95cbda9f --- /dev/null +++ b/Master/texmf-dist/doc/generic/texdate/CHANGES @@ -0,0 +1 @@ +26 May 1202 (30 May 2018): Initial release. diff --git a/Master/texmf-dist/doc/generic/texdate/README b/Master/texmf-dist/doc/generic/texdate/README new file mode 100644 index 00000000000..6cb3f02178c --- /dev/null +++ b/Master/texmf-dist/doc/generic/texdate/README @@ -0,0 +1,26 @@ ++AMDG + +This document is copyright 2018 by Donald P. Goodman, and is +released publicly under the LaTeX Project Public License. The +distribution and modification of this work is constrained by the +conditions of that license. See + http://www.latex-project.org/lppl.txt +for the text of the license. This document is released +under version 1.3(c) of that license, and this work may be distributed +or modified under the terms of that license or, at your option, any +later version. + +This work has the LPPL maintenance status 'maintained'. + +The Current Maintainer of this work is Donald P. Goodman +(dgoodmaniii@gmail.com). + +This work consists of the files texdate.ins and +texdate.dtx, along with derived files texdate.sty and +texdate.pdf. + +The texdate package provides plain-TeX-compatible commands +for printing and manipulating dates. + +This package should run properly on any properly running TeX +or LaTeX system. diff --git a/Master/texmf-dist/doc/generic/texdate/lppl.txt b/Master/texmf-dist/doc/generic/texdate/lppl.txt new file mode 100644 index 00000000000..22443139013 --- /dev/null +++ b/Master/texmf-dist/doc/generic/texdate/lppl.txt @@ -0,0 +1,416 @@ +The LaTeX Project Public License +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +LPPL Version 1.3c 2008-05-04 + +Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + +PREAMBLE +======== + +The LaTeX Project Public License (LPPL) is the primary license under +which the LaTeX kernel and the base LaTeX packages are distributed. + +You may use this license for any work of which you hold the copyright +and which you wish to distribute. This license may be particularly +suitable if your work is TeX-related (such as a LaTeX package), but +it is written in such a way that you can use it even if your work is +unrelated to TeX. + +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', +below, gives instructions, examples, and recommendations for authors +who are considering distributing their works under this license. + +This license gives conditions under which a work may be distributed +and modified, as well as conditions under which modified versions of +that work may be distributed. + +We, the LaTeX3 Project, believe that the conditions below give you +the freedom to make and distribute modified versions of your work +that conform with whatever technical specifications you wish while +maintaining the availability, integrity, and reliability of +that work. If you do not see how to achieve your goal while +meeting these conditions, then read the document `cfgguide.tex' +and `modguide.tex' in the base LaTeX distribution for suggestions. + + +DEFINITIONS +=========== + +In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + +CONDITIONS ON DISTRIBUTION AND MODIFICATION +=========================================== + +1. Activities other than distribution and/or modification of the Work +are not covered by this license; they are outside its scope. In +particular, the act of running the Work is not restricted and no +requirements are made concerning any offers of support for the Work. + +2. You may distribute a complete, unmodified copy of the Work as you +received it. Distribution of only part of the Work is considered +modification of the Work, and no right to distribute such a Derived +Work may be assumed under the terms of this clause. + +3. You may distribute a Compiled Work that has been generated from a +complete, unmodified copy of the Work as distributed under Clause 2 +above, as long as that Compiled Work is distributed in such a way that +the recipients may install the Compiled Work on their system exactly +as it would have been installed if they generated a Compiled Work +directly from the Work. + +4. If you are the Current Maintainer of the Work, you may, without +restriction, modify the Work, thus creating a Derived Work. You may +also distribute the Derived Work without restriction, including +Compiled Works generated from the Derived Work. Derived Works +distributed in this manner by the Current Maintainer are considered to +be updated versions of the Work. + +5. If you are not the Current Maintainer of the Work, you may modify +your copy of the Work, thus creating a Derived Work based on the Work, +and compile this Derived Work, thus creating a Compiled Work based on +the Derived Work. + +6. If you are not the Current Maintainer of the Work, you may +distribute a Derived Work provided the following conditions are met +for every component of the Work unless that component clearly states +in the copyright notice that it is exempt from that condition. Only +the Current Maintainer is allowed to add such statements of exemption +to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + +7. If you are not the Current Maintainer of the Work, you may +distribute a Compiled Work generated from a Derived Work, as long as +the Derived Work is distributed to all recipients of the Compiled +Work, and as long as the conditions of Clause 6, above, are met with +regard to the Derived Work. + +8. The conditions above are not intended to prohibit, and hence do not +apply to, the modification, by any method, of any component so that it +becomes identical to an updated version of that component of the Work as +it is distributed by the Current Maintainer under Clause 4, above. + +9. Distribution of the Work or any Derived Work in an alternative +format, where the Work or that Derived Work (in whole or in part) is +then produced by applying some process to that format, does not relax or +nullify any sections of this license as they pertain to the results of +applying that process. + +10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + +11. This license places no restrictions on works that are unrelated to +the Work, nor does this license place any restrictions on aggregating +such works with the Work by any means. + +12. Nothing in this license is intended to, or may be used to, prevent +complete compliance by all parties with all applicable laws. + + +NO WARRANTY +=========== + +There is no warranty for the Work. Except when otherwise stated in +writing, the Copyright Holder provides the Work `as is', without +warranty of any kind, either expressed or implied, including, but not +limited to, the implied warranties of merchantability and fitness for a +particular purpose. The entire risk as to the quality and performance +of the Work is with you. Should the Work prove defective, you assume +the cost of all necessary servicing, repair, or correction. + +In no event unless required by applicable law or agreed to in writing +will The Copyright Holder, or any author named in the components of the +Work, or any other party who may distribute and/or modify the Work as +permitted above, be liable to you for damages, including any general, +special, incidental or consequential damages arising out of any use of +the Work or out of inability to use the Work (including, but not limited +to, loss of data, data being rendered inaccurate, or losses sustained by +anyone as a result of any failure of the Work to operate with any other +programs), even if the Copyright Holder or said author or said other +party has been advised of the possibility of such damages. + + +MAINTENANCE OF THE WORK +======================= + +The Work has the status `author-maintained' if the Copyright Holder +explicitly and prominently states near the primary copyright notice in +the Work that the Work can only be maintained by the Copyright Holder +or simply that it is `author-maintained'. + +The Work has the status `maintained' if there is a Current Maintainer +who has indicated in the Work that they are willing to receive error +reports for the Work (for example, by supplying a valid e-mail +address). It is not required for the Current Maintainer to acknowledge +or act upon these error reports. + +The Work changes from status `maintained' to `unmaintained' if there +is no Current Maintainer, or the person stated to be Current +Maintainer of the work cannot be reached through the indicated means +of communication for a period of six months, and there are no other +significant signs of active maintenance. + +You can become the Current Maintainer of the Work by agreement with +any existing Current Maintainer to take over this role. + +If the Work is unmaintained, you can become the Current Maintainer of +the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + +A change in the Current Maintainer does not, of itself, alter the fact +that the Work is distributed under the LPPL license. + +If you become the Current Maintainer of the Work, you should +immediately provide, within the Work, a prominent and unambiguous +statement of your status as Current Maintainer. You should also +announce your new status to the same pertinent community as +in 2b) above. + + +WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE +====================================================== + +This section contains important instructions, examples, and +recommendations for authors who are considering distributing their +works under this license. These authors are addressed as `you' in +this section. + +Choosing This License or Another License +---------------------------------------- + +If for any part of your work you want or need to use *distribution* +conditions that differ significantly from those in this license, then +do not refer to this license anywhere in your work but, instead, +distribute your work under a different license. You may use the text +of this license as a model for your own license, but your license +should not refer to the LPPL or otherwise give the impression that +your work is distributed under the LPPL. + +The document `modguide.tex' in the base LaTeX distribution explains +the motivation behind the conditions of this license. It explains, +for example, why distributing LaTeX under the GNU General Public +License (GPL) was considered inappropriate. Even if your work is +unrelated to LaTeX, the discussion in `modguide.tex' may still be +relevant, and authors intending to distribute their works under any +license are encouraged to read it. + +A Recommendation on Modification Without Distribution +----------------------------------------------------- + +It is wise never to modify a component of the Work, even for your own +personal use, without also meeting the above conditions for +distributing the modified component. While you might intend that such +modifications will never be distributed, often this will happen by +accident -- you may forget that you have modified that component; or +it may not occur to you when allowing others to access the modified +version that you are thus distributing it and violating the conditions +of this license in ways that could have legal implications and, worse, +cause problems for the community. It is therefore usually in your +best interest to keep your copy of the Work identical with the public +one. Many works provide ways to control the behavior of that work +without altering any of its licensed components. + +How to Use This License +----------------------- + +To use this license, place in each of the components of your work both +an explicit copyright notice including your name and the year the work +was authored and/or last substantially modified. Include also a +statement that the distribution and/or modification of that +component is constrained by the conditions in this license. + +Here is an example of such a notice and statement: + + %% pig.dtx + %% Copyright 2005 M. Y. Name + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License, either version 1.3 + % of this license or (at your option) any later version. + % The latest version of this license is in + % http://www.latex-project.org/lppl.txt + % and version 1.3 or later is part of all distributions of LaTeX + % version 2005/12/01 or later. + % + % This work has the LPPL maintenance status `maintained'. + % + % The Current Maintainer of this work is M. Y. Name. + % + % This work consists of the files pig.dtx and pig.ins + % and the derived file pig.sty. + +Given such a notice and statement in a file, the conditions +given in this license document would apply, with the `Work' referring +to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being +generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' +referring to any `LaTeX-Format', and both `Copyright Holder' and +`Current Maintainer' referring to the person `M. Y. Name'. + +If you do not want the Maintenance section of LPPL to apply to your +Work, change `maintained' above into `author-maintained'. +However, we recommend that you use `maintained', as the Maintenance +section was added in order to ensure that your Work remains useful to +the community even when you can no longer maintain and support it +yourself. + +Derived Works That Are Not Replacements +--------------------------------------- + +Several clauses of the LPPL specify means to provide reliability and +stability for the user community. They therefore concern themselves +with the case that a Derived Work is intended to be used as a +(compatible or incompatible) replacement of the original Work. If +this is not the case (e.g., if a few lines of code are reused for a +completely different task), then clauses 6b and 6d shall not apply. + + +Important Recommendations +------------------------- + + Defining What Constitutes the Work + + The LPPL requires that distributions of the Work contain all the + files of the Work. It is therefore important that you provide a + way for the licensee to determine which files constitute the Work. + This could, for example, be achieved by explicitly listing all the + files of the Work near the copyright notice of each file or by + using a line such as: + + % This work consists of all files listed in manifest.txt. + + in that place. In the absence of an unequivocal list it might be + impossible for the licensee to determine what is considered by you + to comprise the Work and, in such a case, the licensee would be + entitled to make reasonable conjectures as to which files comprise + the Work. + diff --git a/Master/texmf-dist/doc/generic/texdate/texdate.pdf b/Master/texmf-dist/doc/generic/texdate/texdate.pdf new file mode 100644 index 00000000000..b620c7dc210 Binary files /dev/null and b/Master/texmf-dist/doc/generic/texdate/texdate.pdf differ diff --git a/Master/texmf-dist/source/generic/texdate/texdate.dtx b/Master/texmf-dist/source/generic/texdate/texdate.dtx new file mode 100644 index 00000000000..4ceee291453 --- /dev/null +++ b/Master/texmf-dist/source/generic/texdate/texdate.dtx @@ -0,0 +1,1546 @@ +% \iffalse +% +AMDG This document was begun on 1 May 1202, the +% feast of St. Joseph the Worker, and it +% is humbly dedicated to him and to the Immaculate Heart of +% Mary for their prayers, and to the Sacred Heart of Jesus +% for His mercy. +% +% This document is copyright 2018 by Donald P. Goodman, and is +% released publicly under the LaTeX Project Public License. The +% distribution and modification of this work is constrained by the +% conditions of that license. See +% http://www.latex-project.org/lppl.txt +% for the text of the license. This document is released +% under version 1.3(c) of that license, and this work may be distributed +% or modified under the terms of that license or, at your option, any +% later version. +% +% This work has the LPPL maintenance status 'maintained'. +% +% The Current Maintainer of this work is Donald P. Goodman +% (dgoodmaniii@gmail.com). +% +% This work consists of texdate.dtx, texdate.ins, and +% derived files texdate.sty and texdate.pdf. +% \fi + +% \iffalse +%\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%\ProvidesPackage{texdate}[2018/05/30 v1.0 Print and manipulate dates in plain TeX] +%<*driver> +\documentclass{ltxdoc} + +\usepackage{doc} +\usepackage{modulus} +\usepackage{multicol} +\usepackage{texdate} +\usepackage{fancyvrb} +\usepackage{fvrb-ex} +\usepackage{booktabs} +\usepackage[typeone]{dozenal} +\def\x{\noexpand{\TextOrMath{\protect\doz{{X}}}{\doz@X}}}% +\def\e{\noexpand{\TextOrMath{\protect\doz{{E}}}{\doz@E}}}% +\usepackage{longtable} +\usepackage{xellipsis} + +\begin{document} +\DocInput{texdate.dtx} +\end{document} +% \fi +% +% \title{The |texdate| Package, v1.0} +% \author{Donald P.\ Goodman III} +% \date{\today} +% +% \maketitle +% +% \begin{abstract} +% \noindent +% \TeX\ and \LaTeX\ provide few facilities for dates by +% default, though many packages have filled this gap. +% |texdate| fills it, as well, with a pure \TeX-primitive +% implementation. It can print dates, advance them by +% numbers of days, weeks, or months, determine the weekday +% automatically, and print them in (mostly) arbitrary +% format. It can also print calendars (monthly and yearly) +% automatically, and can be easily localized for non-English +% languages. +% \end{abstract} +% +% \tableofcontents +% +% \section{Introduction: The State of the \TeX} +% \label{sect:intro} +% +% \TeX\ by default contains very little facilities for +% dealing with dates, and \LaTeX\ follows suit. As far as +% primitives go, \TeX\ just offers the counters |\day|, +% |\month|, and |\year|, which give the current values of +% those units of time; e.g., |\the\year-\the\month-\the\day| +% will yield ``\the\year-\the\month-\the\day'' (which is the +% date on which this document was compiled). \LaTeX\ also +% has |\today|, which will produce the current date in the +% default American style: ``\today''. But that's +% really about all there is. +% +% Many packages have attempted to fill up this gap, some +% with excellent success; |datetime2| certain deserves +% special mention here, particularly as it goes beyond what +% |texdate| offers, given that |texdate| contains no +% facilities for \emph{times} at all. |texdate| tries to fill the gap, +% as well; but it does it using only \TeX-primitives, in the +% hope that the solution will be (a) pretty fast, (b) +% pretty portable, and (c) not requiring the loading of +% massive packages, only a fraction of the capabilities of +% which will actually be used. +% +% For comparison, |datetime2| uses |pgfcalendar|, which of +% course requires |pgf|, which is a huge package. Our +% modern computers make loading such packages often a +% negligible overhead; but with large and complex documents, +% it's not always trivial. Also, it's an enjoyable +% challenge to write a usable package in \TeX\ for something +% for which \TeX\ was not designed; and some of us enjoy +% \emph{just knowing} that we're using a lean package, even +% it makes little practical difference. +% +% This document is numbered in \emph{dozenal}, or base +% twelve; numbering proceeds 1, 2, 3, 4, 5, 6, 7, 8, 9, \x, +% \e, 10, 11, 12\xelip It uses the |dozenal| \LaTeX\ +% package to do this. For more information, see +% \url{http://www.dozenal.org}. +% +% \section{Printing and Setting the Date} +% \label{sect:basic} +% +% |texdate| works with an \emph{internal date}, which is the +% current setting of all the date variables. When +% initiated, the internal date is 1 January of the current +% year. We can print that date with +% \DescribeMacro{\printdate}|\printdate|: +% +% \bigskip +% \hrule +% \begin{Example} +% \printdate +% \end{Example} +% \hrule +% \bigskip +% +% We can easily set the internal date to the current date by +% running the macro \DescribeMacro{\initcurrdate}|\initcurrdate|: +% +% \bigskip +% \hrule +% \begin{Example} +% \initcurrdate +% \printdate +% \end{Example} +% \hrule +% \bigskip +% +% (This is the current date at the time this document was +% compiled.) +% +% You can also easily \emph{set} the internal date, by +% running the \DescribeMacro{\initdate}|\initdate| macro: +% +% \begin{quote} +% \cmd{\initdate} \marg{year} \marg{month} \marg{day-of-month} +% \end{quote} +% +% The elements of the date must be supplied to |\initdate| +% in that order, or |texdate| will become confused. It's +% obvious why; what should |texdate| do if the month is +% entered as |2019|? +% +% \bigskip +% \hrule +% \begin{Example} +% \initdate{2019}{6}{24} +% \printdate +% \end{Example} +% \hrule +% \bigskip +% +% While internally dates are kept as zero-indexed, these +% dates are received by |\initdate| as one-indexed; that is, +% |24| will mean the twenty-fourth, not the twenty-fifth, +% because we count starting at 1 rather than 0. +% +% +% \section{Date Formats} +% \label{sect:dateforms} +% +% The date format we've seen so far is the default, which is +% designed primarily to demonstrate several of the possible +% variables that can be in a date format. Naturally, you'll +% want to change it; and it can be changed, almost +% arbitrarily, simply by redefining a command, or by using +% one of several presets. +% +% \subsection{Preset Formats} +% \label{sub:presetforms} +% +% |texdate| provides a number of preset formats that can be +% easily selected without having to design a format string +% (for which see Section \ref{sub:customforms}, on page +% \pageref{sub:customforms}). +% +% \DescribeMacro{\printfdate\{ISO\}}|\printfdate{ISO}| +% will print the current date in the default +% ISO 8601 format, which is \emph{|yyyymmdd|}. In +% |texdate|'s formatting strings, this is |Ymd|; you'll +% learn more about these in Section \ref{sub:customforms}. +% There is also the ``ISO extended'' form, |Y-m-d|. +% +% \bigskip +% \hrule +% \begin{Example} +% \initdate{2019}{6}{24} +% \printfdate{ISO} +% +% \printfdate{ISOext} +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% For Americans fond of our curious customary format, you +% can use +% \DescribeMacro{\printfdate\{american\}}|\printfdate{american}|; +% in |texdate| format strings, this is |B\ d, Y|. There is +% also +% \DescribeMacro{\printfdate\{shamerican\}}|\printfdate{shamerican}|, +% which is the abbreviated form, using slashes rather than +% hyphens. +% +% \bigskip +% \hrule +% \begin{Example} +% \initdate{2019}{6}{24} +% \printfdate{american} +% +% \printfdate{shamerican} +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% The British also have their own ways of writing dates, +% which correspond largely to the way the American military +% writes them (which are consequently sometimes called +% ``military dates,'' in the same way that twenty-four-hour +% time readings are sometimes called ``military time''). +% These are +% \DescribeMacro{\printfdate\{british\}}|\printfdate{british}| +% and +% \DescribeMacro{\printfdate\{shbritish\}}|\printfdate{shbritish}|, +% along with alternate form +% \DescribeMacro{\printfdate\{shbritishdots\}}|\printfdate{shbritishdots}|, +% +% \bigskip +% \hrule +% \begin{Example} +% \initdate{2019}{6}{24} +% \printfdate{british} +% +% \printfdate{shbritish} +% +% \printfdate{shbritishdots} +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% This is enough to cover the standards of most places in +% the world. However, if you want something different, you +% can easily create it with format strings. +% +% \subsection{Custom Date Formats} +% \label{sub:customforms} +% +% All the custom formats described in Section +% \ref{sub:presetforms} and printed with |\printfdate| are +% created using the same general mechanism described in this +% section. We will begin by discussing a way to generically +% change the presentation of all dates called with the basic +% |\printdate|, then move on to creating custom date formats +% that can be printed by name with |\printfdate|. +% +% The macro \DescribeMacro{\setdateformat}|\setdateformat| +% holds the formatting string for the date. It's not +% \emph{completely} arbitrary, because none of the +% characters used to produce specific parts of the date can +% be used in the string itself; however, it's pretty +% flexible despite that limitation. +% +% The default date format string, quite unsuitable for real +% work, includes most of the possible control characters, +% and is |A{ }(a),\ B\ (b){ }d,\ Y|. Note that spaces +% have to be preserved by either \emph{bracing} them or +% \emph{escaping} them; that is, to put a space in your +% format string, use either ``|\ |'' or ``|{ }|''. +% +% Table \ref{tab:lets} on page \pageref{tab:lets} shows +% the control characters, an +% explanation of their meaning, and an example of each. +% They assume the date 4 June 2019, selected by +% |\initdate{2019}{6}{4}|. +% \initdate{2019}{6}{4} +% +% \begin{table}[htp] +% \centering +% \begin{tabular}{lp{3in}l} +% \toprule +% \itshape Let. & \itshape Result & \itshape Ex. \\ +% \midrule +% d & Numeric day of the month; 0-padded to two digits if +% necessary & \printfdate{d} \\ +% e & Numeric day of the month; space-padded to two spaces +% if necessary & \printfdate{e} \\ +% B & Full name of the month & \printfdate{B} \\ +% b & Abbreviated name of the month & \printfdate{b} \\ +% h & Abbreviated name of the month; same as |b| & \printfdate{h} \\ +% m & Number of month, with January as 1; 0-padded to two +% digits if necessary & \printfdate{m} \\ +% A & Full name of the weekday & \printfdate{A} \\ +% a & Abbreviated name of the weekday & \printfdate{a} \\ +% w & Numeric value of weekday, with Sunday as 0 & \printfdate{w} \\ +% u & ISO numeric value of weekday, with Monday as 1 and +% Sunday as 7 & \printfdate{u} \\ +% Y & Number of the current year & \printfdate{Y} \\ +% j & Numeric day of the year, starting on a constant count +% from 1 Jan; 0-padded to three digits if necessary & \printfdate{j} \\ +% C & Century; essentially, the first two digits of the year & +% \printfdate{C} \\ +% y & The year, in only two digits & \printfdate{y} \\ +% U & Week number of the year, starting at 0, with the week +% starting on Sunday; 0-padded to two digits if +% necessary & \printfdate{U} \\ +% V & ISO week number of the year, starting at 1, with the week +% starting on Monday; 0-padded to two digits if +% necessary & \printfdate{V} \\ +% W & Week number of the year, starting at 0, with the week +% starting on Monday; 0-padded to two digits if necesary & +% \printfdate{W} \\ +% \bottomrule +% \end{tabular} +% \caption{Control codes for date formats} +% \label{tab:lets} +% \end{table} +% +% For folks not familiar with the \emph{control characters} +% concept, the essential idea is that you format some +% information with a certain ``string,'' called the ``format +% string.'' The format string contains some characters +% which are meaningless as far as formatting goes, and are +% passed through unchanged; and some characters which will +% be replaced with certain information. In other words, +% assume that we have a format string consisting of the +% following characters: |a b c d e|. |c| is a control +% character, and represents the information ``zzz''; the other +% characters are not control characters. +% +% \begin{quote} +% |a b c d e| $\rightarrow$ a b zzz d e +% \end{quote} +% +% Anyone who has used GNU +% |date| or BSD |date| will recognize these control +% characters, though of course in those programs a |%| +% character would be necessary, as well. |texdate| +% duplicates the behavior of these programs as closely as +% my \TeX-pertise allows. +% +% \bigskip +% \hrule +% \begin{Example} +% \initcurrdate +% \advancebyweeks{6} +% \def\setdateformat{d\ B\ Y} +% |d\ B\ Y|: \printdate\par +% \def\setdateformat{Y-m-d} +% |Y-m-d|: \printdate\par +% \def\setdateformat{a,\ d\ b\ Y} +% |a,\ d\ b\ Y|: \printdate\par +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% We can meddle with this however we like, except that these +% control characters (the ones that turn into elements of +% the date) cannot be included literally. +% +% You can also define \emph{named date formats}: +% \DescribeMacro{\nameddateformat} +% +% \begin{quote} +% \cmd{\nameddateformat} \marg{name} \marg{format-string} +% \end{quote} +% +% Perhaps I want a peculiar date format, with the month, +% followed by the year, followed by the day of the month, +% followed by the day of the year in parentheses. My format +% string should be |m-Y-d\ (j)|. I'll then want to use the +% \DescribeMacro{\printfdate}|\printfdate| command with its single +% argument, which is the name of the date format I want to +% use. +% +% \bigskip +% \hrule +% \begin{Example} +% \initcurrdate +% \nameddateformat{weird}{m-Y-d\ (j)} +% \printfdate{weird}\par +% \printdate +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% It's worth nothing that all of the control characters also +% have a formatted print string that can be called by name. +% So one could duplicate the above |weird| date format the +% hard way, by using these each individually: +% +% \bigskip +% \hrule +% \begin{Example} +% \initcurrdate +% \printfdate{m}-\printfdate{Y}-\printfdate{d} (\printfdate{j}) +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% These seems a bit convoluted, but perhaps you want to wrap +% it in a macro? +% +% \subsection{Number Format} +% \label{sub:numforms} +% +% Any command which will work on a \TeX\ count register can +% be inserted into the +% \DescribeMacro{\texdatenumformat}|\texdatenumformat| +% command, which will be applied to all the numbers which +% |texdate| outputs. For example, if you are using the +% |dozenal| package: +% +% \bigskip +% \hrule +% \begin{Example} +% \def\texdatenumformat#1{\dozens{#1}} +% \initdate{2018}{12}{25} +% \printfdate{ISOext} +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% +% \section{Manipulating Dates} +% \label{sect:manipdate} +% +% |texdate| goes well beyond merely printing and setting +% dates; you can manipulate them in many ways. The original +% purpose of the package was to allow \LaTeX\ to print +% calendar sheets and things of that nature without +% resorting to an external program, or loading some enormous +% package, so it needed the ability to move forward and +% backward by given increments. So we have that. +% +% \subsection{Moving Dates Forward and Backward} +% \label{sub:movedate} +% +% You can advance the date by a certain number of days, +% weeks, or months. The macros are named, unsurprisingly, +% \DescribeMacro{\advancebydays}|\advancebydays|, +% \DescribeMacro{\advancebyweeks}|\advancebyweeks|, and +% \DescribeMacro{\advancebymonths}|\advancebymonths|, each +% of which takes one argument, which is the number of that +% unit you wish to advance the date by. The corresponding +% commands \DescribeMacro{\regressbydays}|\regressbydays|, +% \DescribeMacro{\regressbyweeks}|\regressbyweeks|, and +% \DescribeMacro{\regressbymonths}|\regressbymonths| also +% exist. +% +% \bigskip +% \hrule +% \begin{Example} +% \initcurrdate +% Current date: \printdate\par +% \advancebydays{8} +% 8 days later: \printdate\par +% \advancebyweeks{4} +% 4 weeks later: \printdate\par +% \advancebymonths{4} +% 4 months later: \printdate\par +% \regressbydays{14} +% 14 days earlier: \printdate\par +% \regressbyweeks{8} +% 8 weeks earlier: \printdate\par +% \regressbymonths{2} +% 2 months earlier: \printdate\par +% \end{Example} +% \nobreak\medskip\nobreak +% \hrule +% \bigskip +% +% Note that |\advancebymonths| does not validate the date, +% so it's possible that you'll end up with something +% impossible, such as 31 September. It's best to watch the +% results of this one carefully. +% +% Both the |\advanceby|s and the |\regressby|s should be +% given positive numbers; negative numbers will just confuse +% them. +% +% \subsection{Saving and Restoring Dates} +% \label{sub:savedate} +% +% Sometimes you may wish to save a date, change the internal +% date, use that internal date for a while, then restore the +% old date. |texdate| makes it possible to save and use as +% many dates as you want (or, at any rate, as many as \TeX\ +% will tolerate). +% +% \DescribeMacro{\savedate}|\savedate| takes a single +% argument, the \emph{name} you'd like to give your saved +% date. This can be anything that \TeX\ allows in a control +% sequence; best to stick with normal, seven-bit ASCII +% letters. You then access the saved date with +% \DescribeMacro{\restoredate}|\restoredate|, which takes +% that same name as its argument. +% +% \bigskip +% \hrule +% \begin{Example} +% \initcurrdate +% \printdate\par +% \savedate{current} +% \advancebyweeks{12} +% \printdate\par +% \savedate{advanced} +% \restoredate{current} +% \printdate\par +% \advancebydays{3} +% \printdate\par +% \restoredate{advanced} +% \printdate\par +% \restoredate{current} +% \printdate\par +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% You can also retrieve your saved date directly; rather +% than calling |\restoredate|, you can call +% |\savedate|, without the angle brackets. That's the +% name that |texdate| uses internally, and calls with +% |\restoredate| to get your information back. +% +% +% \section{Convenience Macros} +% \label{sect:convmacs} +% +% |texdate| offers a few macros for tasks which its author +% anticipates will likely be common. For example, to +% produce a small monthly calendar, consider using the +% |\texdcal| macro, which takes two arguments: the year and +% the month of the calendar you're seeking to create: +% +% \bigskip +% \hrule +% \begin{Example} +% \begin{center} +% \begin{tabular}{cc} +% \texdcal{2018}{5} & +% \texdcal{2018}{6} \\ +% \texdcal{2018}{8} & +% \texdcal{2018}{9} \\ +% \end{tabular} +% \end{center} +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% Notice that |\texdcal| does the right thing when there a +% month goes into an extra week: it simply prints another +% week. It also correctly refuses to print the days of a +% week which do not belong to the requested month. +% +% \DescribeMacro{\texdcalyear}|\texdcalyear| will produce +% one of these calendars for an entire year, in three +% columns; the year chosen is the argument given to the +% macro. Because the margins of the \LaTeX\ standard +% classes are much too large (or rather, the paper sizes are +% much too large; the text blocks are rather nicely +% proportioned), |\texdcalyear| prints this calendar in a +% small size, with very small space between columns. +% +% \bigskip +% \hrule +% \begin{Example} +% \footnotesize% +% \begin{center} +% \texdcalyear{2018} +% \end{center} +% \end{Example} +% \medskip +% \hrule +% \bigskip +% +% Obviously, it uses |\texdcal| internally to do this, so +% the definition of |\texdcalyear| is much simpler than that +% of |\texdcal|. +% +% Just as obviously, these yearly calendars +% could easily be formatted in many different ways; so many, +% in fact, that attempting to make the macros flexible +% enough for meaningful customization would be prohibitively +% difficult. More fruitful results can be obtained by +% reading the macros themselves (they are truly not very +% difficult) and customizing them oneself. +% +% \section{Language Specification} +% \label{sect:lang} +% +% |texdate| does understand \LaTeX\ language specifications, +% using Heiko Oberdiek's |iflang| package, which should work +% for both |babel| and |polyglossia|. Built-in are +% only English (the default), Spanish, French, and German. +% However, it's pretty simple to customize the +% month name and weekday name strings by defining a few +% commands, so if you need a different language, you just +% need to redefine a few strings. +% +% Each string begins with the prefix |\texd@|, then the +% English ordinal string for the order in which it comes, +% with January being the first month and Sunday being the +% first weekday; e.g., |\texd@first|. Then comes |sh| if +% it's an abbreviation; e.g., |\texd@firstsh|. Finally +% comes the string |mon| if it's a month, or |name| if +% it's a weekday name. Below is the complete list, for +% German. +% +% \begin{quote} +% |\makeatletter|\\ +% |\def\texd@firstmon{Januar}|\\ +% |\def\texd@firstshmon{Jan}|\\ +% |\def\texd@secondmon{Februar}|\\ +% |\def\texd@secondshmon{Feb}|\\ +% |\def\texd@thirdmon{März}|\\ +% |\def\texd@thirdshmon{März}|\\ +% |\def\texd@fourthmon{April}|\\ +% |\def\texd@fourthshmon{Apr}|\\ +% |\def\texd@fifthmon{Mai}|\\ +% |\def\texd@fifthshmon{Mai}|\\ +% |\def\texd@sixthmon{Juni}|\\ +% |\def\texd@sixthshmon{Juni}|\\ +% |\def\texd@seventhmon{Juli}|\\ +% |\def\texd@seventhshmon{Juli}|\\ +% |\def\texd@eighthmon{August}|\\ +% |\def\texd@eighthshmon{Aug}|\\ +% |\def\texd@ninthmon{September}|\\ +% |\def\texd@ninthshmon{Sept}|\\ +% |\def\texd@tenthmon{Oktober}|\\ +% |\def\texd@tenthshmon{Okt}|\\ +% |\def\texd@eleventhmon{November}|\\ +% |\def\texd@eleventhshmon{Nov}|\\ +% |\def\texd@twelfthmon{Dezember}|\\ +% |\def\texd@twelfthshmon{Dez}|\\ +% |\def\texd@firstdayname{Sonntag}|\\ +% |\def\texd@firstdayshname{So}|\\ +% |\def\texd@seconddayname{Montag}|\\ +% |\def\texd@seconddayshname{Mo}|\\ +% |\def\texd@thirddayname{Dienstag}|\\ +% |\def\texd@thirddayshname{Di}|\\ +% |\def\texd@fourthdayname{Mittwoch}|\\ +% |\def\texd@fourthdayshname{Mi}|\\ +% |\def\texd@fifthdayname{Donnerstag}|\\ +% |\def\texd@fifthdayshname{Do}|\\ +% |\def\texd@sixthdayname{Freitag}|\\ +% |\def\texd@sixthdayshname{Fr}|\\ +% |\def\texd@seventhdayname{Samstag}|\\ +% |\def\texd@seventhdayshname{Sa}|\\ +% |\makeatother| +% \end{quote} +% +% Doing something like this for your desired language, +% \emph{after} you've loaded |texdate|, will localize all +% the strings involved. +% +% \section{Implementation} +% +% \begin{macrocode} +\RequirePackage{modulus}% +\RequirePackage{padcount}% +\RequirePackage{iflang}% +\newcount\texd@loopi\texd@loopi=0% +\newcount\texd@mon\texd@mon=0% +\newcount\texd@dow\texd@dow=0% +\newcount\texd@dom\texd@dom=0% +\newcount\texd@yr\texd@yr=\year% +\newcount\texd@rdom\texd@rdom=\texd@dom\advance\texd@rdom by1% +\newcount\texd@rmon% +%% taken from dayofweek.tex, by Martin Minow of DEC; +%% included in TeXLive +\def\texd@nextdow#1#2#3{% + \newcount\texd@dow% Gets day of the week + \newcount\texd@leap% Leap year fingaler + \newcount\texd@x% Temp register + \newcount\texd@y% Another temp register + \global\texd@leap=#2% + \global\advance\texd@leap by-14% + \global\divide\texd@leap by12% + \global\advance\texd@leap by#3% + \global\texd@dow=#2% + \global\advance\texd@dow by10% + \global\texd@y=\texd@dow% + \global\divide\texd@y by13% + \global\multiply\texd@y by12% + \global\advance\texd@dow by-\texd@y% + \global\multiply\texd@dow by13% + \global\advance\texd@dow by-1% + \global\divide\texd@dow by5% + \global\advance\texd@dow by#1% + \global\advance\texd@dow by77% + \global\texd@x=\texd@leap% + \global\texd@y=\texd@x% + \global\divide\texd@y by100% + \global\multiply\texd@y by100% + \global\advance\texd@x by-\texd@y% + \global\multiply\texd@x by5% + \global\divide\texd@x by4% + \global\advance\texd@dow by\texd@x% + \global\texd@x=\texd@leap% + \global\divide\texd@x by400% + \global\advance\texd@dow by\texd@x% + \global\texd@x=\texd@leap% + \global\divide\texd@x by100% + \global\multiply\texd@x by2% + \global\advance\texd@dow by-\texd@x% + \global\texd@x=\texd@dow% + \global\divide\texd@x by7% + \global\multiply\texd@x by7% + \global\advance\texd@dow by-\texd@x% +} +%% end taken from dayofweek.tex, by Martin Minow of DEC; +%% included in TeXLive +\def\texd@leapyear{% +}% +\def\texd@downame{% + \ifcase\texd@dow + \texd@firstdayname% + \or% + \texd@seconddayname% + \or% + \texd@thirddayname% + \or% + \texd@fourthdayname% + \or% + \texd@fifthdayname% + \or% + \texd@sixthdayname% + \or% + \texd@seventhdayname% + \fi% +}% +\def\texd@shdowname{% + \ifcase\texd@dow + \texd@firstdayshname% + \or% + \texd@seconddayshname% + \or% + \texd@thirddayshname% + \or% + \texd@fourthdayshname% + \or% + \texd@fifthdayshname% + \or% + \texd@sixthdayshname% + \or% + \texd@seventhdayshname% + \fi% +}% +\def\texd@nextmonth{% + \ifnum\texd@mon<11\global\advance\texd@mon by1\fi% + \ifnum\texd@mon=11\global\texd@mon=0\fi% +}% +\def\texd@lastmonth{% + \ifnum\texd@mon=0% + \global\texd@mon=11% + \global\advance\texd@yr by-1% + \fi% + \ifnum\texd@mon>0\global\advance\texd@mon by-1\fi% +}% +\def\texd@nextdate{% + \ifnum\texd@mon=11% + \ifnum\texd@dom=30% + \global\advance\texd@yr by1% + \global\texd@mon=0% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<30% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=10% + \ifnum\texd@dom=29% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<29% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=9% + \ifnum\texd@dom=30% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<30% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=8% + \ifnum\texd@dom=29% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<29% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=7% + \ifnum\texd@dom=30% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<30% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=6% + \ifnum\texd@dom=30% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<30% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=5% + \ifnum\texd@dom=29% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<29% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=4% + \ifnum\texd@dom=30% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<30% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=3% + \ifnum\texd@dom=29% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<29% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=2% + \ifnum\texd@dom=30% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi + \ifnum\texd@dom<30% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@mon=1% + \ifnum\texd@leapyear=0% + \ifnum\texd@dom=27% + \global\advance\texd@mon by1% + \global\texd@dom=0% + \fi + \ifnum\texd@dom<27% + \global\advance\texd@dom by1% + \fi% + \else\ifnum\texd@leapyear=1% + \ifnum\texd@dom=28% + \global\advance\texd@mon by1% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<28% + \global\advance\texd@dom by1% + \fi% + \fi\fi% + \else\ifnum\texd@mon=0% + \ifnum\texd@dom=30% + \global\advance\texd@mon by1%% + \global\texd@dom=0% + \fi% + \ifnum\texd@dom<30% + \global\advance\texd@dom by1% + \fi% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% + \global\texd@rdom=\texd@dom\global\advance\texd@rdom by1% + \global\texd@rmon=\texd@mon\global\advance\texd@rmon by1% + \texd@setjnum% + \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +\def\texd@lastdate{% + \global\advance\texd@dom by-1% + \ifnum\texd@dom=0% + \global\advance\texd@mon by-1% + \ifnum\texd@mon=11% + \global\texd@dom=30% + \fi% + \ifnum\texd@mon=0% + \global\texd@mon=11% + \global\advance\texd@yr by-1% + \global\texd@dom=30% + \fi% + \ifnum\texd@mon=10% + \global\texd@dom=29% + \fi% + \ifnum\texd@mon=9% + \global\texd@dom=30% + \fi% + \ifnum\texd@mon=8% + \global\texd@dom=29% + \fi% + \ifnum\texd@mon=7% + \global\texd@dom=30% + \fi% + \ifnum\texd@mon=6% + \global\texd@dom=30% + \fi% + \ifnum\texd@mon=5% + \global\texd@dom=29% + \fi% + \ifnum\texd@mon=4% + \global\texd@dom=30% + \fi% + \ifnum\texd@mon=3% + \global\texd@dom=29% + \fi% + \ifnum\texd@mon=2% + \global\texd@dom=30% + \fi% + \ifnum\texd@mon=1% + \ifnum\texd@leapyear=0% + \global\texd@dom=27% + \else\ifnum\texd@leapyear=1% + \global\texd@dom=28% + \fi\fi% + \fi% + \ifnum\texd@mon=0% + \global\texd@dom=30% + \fi% + \fi% + \global\texd@rdom=\texd@dom\global\advance\texd@rdom by1% + \global\texd@rmon=\texd@mon\global\advance\texd@rmon by1% + \texd@setjnum% + \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +\def\texd@setrdom{\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1}% +\def\texd@setrmon{\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1}% +% \end{macrocode} +% We have to deal with leap years somehow. We have the +% counter |\texd@leapyear|, which is 0 if it's not a leap +% year and 1 if it is. Then we have |\texd@isleapyear|, +% which sets the counter appropriately. +% \begin{macrocode} +\newcount\texd@leapyear\texd@leapyear=0% +\def\texd@isleapyear{% + \global\texd@leapyear=0% + \modulo{\texd@yr}{4}% + \ifnum\remainder=0% + \modulo{\texd@yr}{100}% + \ifnum\remainder=0% + \global\texd@leapyear=0% + \fi\ifnum\remainder>0% + \global\texd@leapyear=1% + \fi% + \fi% +}% +% \end{macrocode} +% Print the month names. +% \begin{macrocode} +\def\texd@monthname{% + \ifnum\texd@mon=0% + \texd@firstmon% + \fi% + \ifnum\texd@mon=1% + \texd@secondmon% + \fi% + \ifnum\texd@mon=2% + \texd@thirdmon% + \fi% + \ifnum\texd@mon=3% + \texd@fourthmon% + \fi% + \ifnum\texd@mon=4% + \texd@fifthmon% + \fi% + \ifnum\texd@mon=5% + \texd@sixthmon% + \fi% + \ifnum\texd@mon=6% + \texd@seventhmon% + \fi% + \ifnum\texd@mon=7% + \texd@eighthmon% + \fi% + \ifnum\texd@mon=8% + \texd@ninthmon% + \fi% + \ifnum\texd@mon=9% + \texd@tenthmon% + \fi% + \ifnum\texd@mon=10% + \texd@eleventhmon% + \fi% + \ifnum\texd@mon=11% + \texd@twelfthmon% + \fi% +}% +\def\texd@shmonthname{% + \ifnum\texd@mon=0% + \texd@firstshmon% + \fi% + \ifnum\texd@mon=1% + \texd@secondshmon% + \fi% + \ifnum\texd@mon=2% + \texd@thirdshmon% + \fi% + \ifnum\texd@mon=3% + \texd@fourthshmon% + \fi% + \ifnum\texd@mon=4% + \texd@fifthshmon% + \fi% + \ifnum\texd@mon=5% + \texd@sixthshmon% + \fi% + \ifnum\texd@mon=6% + \texd@seventhshmon% + \fi% + \ifnum\texd@mon=7% + \texd@eighthshmon% + \fi% + \ifnum\texd@mon=8% + \texd@ninthshmon% + \fi% + \ifnum\texd@mon=9% + \texd@tenthshmon% + \fi% + \ifnum\texd@mon=10% + \texd@eleventhshmon% + \fi% + \ifnum\texd@mon=11% + \texd@twelfthshmon% + \fi% +}% +% \end{macrocode} +% Here we define the |\advanceby|s, so that you can add move +% the internal date forward by a given number of units. Does +% \emph{not} print the date. +% \begin{macrocode} +\def\advancebydays#1{% + \texd@loopi=0% + \loop% + \ifnum\texd@loopi<#1% + \texd@nextdate% + \advance\texd@loopi by1% + \repeat% +}% +\def\regressbydays#1{% + \texd@loopi=0% + \loop% + \ifnum\texd@loopi<#1% + \texd@lastdate% + \advance\texd@loopi by1% + \repeat% +}% +\newcount\texd@loopj% +\def\advancebyweeks#1{% + \texd@loopi=0% + \texd@loopj=#1% + \multiply\texd@loopj by7% + \loop% + \ifnum\texd@loopi<\texd@loopj% + \texd@nextdate% + \advance\texd@loopi by1% + \repeat% +}% +\def\regressbyweeks#1{% + \texd@loopi=0% + \texd@loopj=#1% + \multiply\texd@loopj by7% + \loop% + \ifnum\texd@loopi<\texd@loopj% + \texd@lastdate% + \advance\texd@loopi by1% + \repeat% +}% +\def\advancebymonths#1{% + \texd@loopi=0% + \loop% + \ifnum\texd@loopi<#1% + \texd@nextmonth% + \advance\texd@loopi by1% + \repeat% + \texd@setrmon% + \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}% +}% +\def\regressbymonths#1{% + \texd@loopi=0% + \loop% + \ifnum\texd@loopi<#1% + \texd@lastmonth% + \advance\texd@loopi by1% + \repeat% + \texd@setrmon% + \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}% +}% +% \end{macrocode} +% Print the date, either with the default format or a named +% format. +% \begin{macrocode} +\def\printdate{% + \texd@dateformat% +}% +\def\printfdate#1{% + \texd@formatdateformat{#1}% +}% +% \end{macrocode} +% This defines the date format. We need some helper macros +% to flip through each character one at a time. +% \begin{macrocode} +\def\texd@expandloop#1{% + \texd@xloop#1\relax +} +\def\texdatenumformat#1{#1} +\def\texd@xloop#1{% + \ifx\relax#1% + \else% + \ifx#1d% + \setpadnum{2}\setpadchar{0}% + \padnum{\texdatenumformat{\the\texd@rdom}}% + \else\ifx#1e% + \setpadnum{2}\setpadchar{\hskip1ex}% + \padnum{\texdatenumformat{\the\texd@rdom}}% + \else\ifx#1a% + \texd@shdowname% + \else\ifx#1A% + \texd@downame% + \else\ifx#1b% + \texd@shmonthname% + \else\ifx#1h% + \texd@shmonthname% + \else\ifx#1B% + \texd@monthname% + \else\ifx#1w% + \the\texd@dow% + \else\ifx#1u% + \ifnum\texd@dow>0\leavevmode\texdatenumformat{\the\texd@dow}\fi% + \ifnum\texd@dow=0 7\fi% + \else\ifx#1Y% + \setpadnum{2}\setpadchar{0}% + \padnum{\texdatenumformat{\the\texd@yr}}% + \else\ifx#1m% + \texd@setrmon% + \setpadnum{2}\setpadchar{0}% + \leavevmode\padnum{\texdatenumformat{\the\texd@rmon}}% + \else\ifx#1j% + \texd@setjnum% + \setpadnum{3}\setpadchar{0}% + \leavevmode\padnum{\texdatenumformat{\the\texd@jnum}}% + \else\ifx#1C% + \quotient{\texd@yr}{100}% + \leavevmode\texdatenumformat{\the\intquotient}% + \else\ifx#1y% + \modulo{\texd@yr}{100}% + \leavevmode\texdatenumformat{\the\remainder}% + \else\ifx#1U% + \quotient{\texd@jnum}{7} + \setpadnum{2}\setpadchar{0}% + \leavevmode\padnum{\texdatenumformat{\the\intquotient}}% + \else\ifx#1V% + \quotient{\texd@jnum}{7} + \ifnum\texd@dow>0\advance\intquotient by1\fi% + \setpadnum{2}\setpadchar{0}% + \leavevmode\padnum{\texdatenumformat{\the\intquotient}}% + \else\ifx#1W% + \quotient{\texd@jnum}{7} + \ifnum\texd@dow=0\advance\intquotient by-1\fi% + \setpadnum{2}\setpadchar{0}% + \leavevmode\padnum{\texdatenumformat{\the\intquotient}}% + \else% + #1% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% + \expandafter\texd@xloop% + \fi% +}% +\def\texd@dateformat{% + \expandafter\expandafter\texd@expandloop{\setdateformat}% +}% +\def\texd@formatdateformat#1{% + \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\texd@expandloop{\csname texd@df#1\endcsname}% +}% +\def\setdateformat{A{ }(a),\ B\ (b){ }d,\ Y} +\def\nameddateformat#1#2{% + \expandafter\def\csname texd@df#1\endcsname{#2}% +}% +\nameddateformat{american}{B\ d,\ Y} +\nameddateformat{shamerican}{m/d/Y} +\nameddateformat{ISO}{Ymd} +\nameddateformat{ISOext}{Y-m-d} +\nameddateformat{shbritish}{d/m/Y} +\nameddateformat{shbritishdots}{d.m.Y} +\nameddateformat{british}{d\ B\ Y} +\nameddateformat{d}{d} +\nameddateformat{e}{e} +\nameddateformat{B}{B} +\nameddateformat{b}{b} +\nameddateformat{h}{h} +\nameddateformat{m}{m} +\nameddateformat{A}{A} +\nameddateformat{a}{a} +\nameddateformat{w}{w} +\nameddateformat{u}{u} +\nameddateformat{Y}{Y} +\nameddateformat{j}{j} +\nameddateformat{C}{C} +\nameddateformat{y}{y} +\nameddateformat{U}{U} +\nameddateformat{V}{V} +\nameddateformat{W}{W} +% \end{macrocode} +% Initialize the date to the current date, or to an +% arbitrary date, entered in the order year, month, and day +% of month. +% \begin{macrocode} +\def\initcurrdate{% + \global\texd@mon=\month% + \global\advance\texd@mon by-1% + \global\texd@dom=\day% + \global\advance\texd@dom by-1% + \global\texd@yr=\year% + \texd@isleapyear% + \texd@setrdom% + \texd@setrmon% + \texd@setjnum% + \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +\def\initdate#1#2#3{% + \global\texd@yr=#1% + \global\texd@mon=#2% + \global\advance\texd@mon by-1% + \global\texd@dom=#3% + \global\advance\texd@dom by-1% + \global\texd@setrdom% + \global\texd@setrmon% + \texd@setjnum% + \texd@isleapyear% + \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +% \end{macrocode} +% Now we define the macros for saving and restoring dates. +% \begin{macrocode} +\def\savedate#1{% + \expandafter\edef\csname savedate#1\endcsname{\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}}% +}% +\def\restoredate#1{% + \csname savedate#1\endcsname% +}% +% \end{macrocode} +% Convenience macros. First, |\texdcal|. +% \begin{macrocode} +\newcount\texd@looptmp\texd@looptmp=0% +\def\texdcal#1#2{% + \global\texd@mon=#2% + \global\advance\texd@mon by-1% + \global\texd@yr=#1% + \global\texd@dom=0% + \texd@setrmon\texd@setrdom% + \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}% + \def\setdateformat{B\ Y}% + \begin{tabular}{rrrrrrr} + \multicolumn{7}{c}{\printdate} \\ + \loop\ifnum\texd@dow>0\texd@lastdate\repeat% + \def\setdateformat{d}% + \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi\\ + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate \\ + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate \\ + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate & + \def\setdateformat{d}\advancebydays{1}\printdate \\ + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\ + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& + \def\setdateformat{d}\advancebydays{1}% + \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\ + \end{tabular} +}% +\def\texdcalyear#1{% + \texd@yr=#1% + \texd@mon=0% + \texd@dom=0% + \texd@setrmon% + \texd@setrdom% + {\tabcolsep=3pt% + \begin{tabular}{ccc} + \texdcal{#1}{1} & \texdcal{#1}{2} & \texdcal{#1}{3} \\ + \texdcal{#1}{4} & \texdcal{#1}{5} & \texdcal{#1}{6} \\ + \texdcal{#1}{7} & \texdcal{#1}{8} & \texdcal{#1}{9} \\ + \texdcal{#1}{10} & \texdcal{#1}{11} & \texdcal{#1}{12} \\ + \end{tabular} + }% +}% +% \end{macrocode} +% Calculate the day of the year (|%j|). +% \begin{macrocode} +\newcount\texd@jnum\texd@jnum=0% +\def\texd@setjnum{% + \texd@jnum=0% + \ifnum\texd@mon>0\global\advance\texd@jnum by31\fi% + \ifnum\texd@mon>1% + \global\advance\texd@jnum by28% + \fi% + \ifnum\texd@mon>2\global\advance\texd@jnum by31\fi% + \ifnum\texd@mon>3\global\advance\texd@jnum by30\fi% + \ifnum\texd@mon>4\global\advance\texd@jnum by31\fi% + \ifnum\texd@mon>5\global\advance\texd@jnum by30\fi% + \ifnum\texd@mon>6\global\advance\texd@jnum by31\fi% + \ifnum\texd@mon>7\global\advance\texd@jnum by31\fi% + \ifnum\texd@mon>8\global\advance\texd@jnum by30\fi% + \ifnum\texd@mon>9\global\advance\texd@jnum by31\fi% + \ifnum\texd@mon>10\global\advance\texd@jnum by30\fi% + \global\advance\texd@jnum by\the\texd@dom% + \global\advance\texd@jnum by1% +}% +% \end{macrocode} +% Language strings. I've only got English here right now, but +% additiona languages would be trivial to add, either in a +% particular document, or in a separate package. +% \begin{macrocode} +\def\texd@firstmon{January}% +\def\texd@firstshmon{Jan}% +\def\texd@secondmon{February}% +\def\texd@secondshmon{Feb}% +\def\texd@thirdmon{March}% +\def\texd@thirdshmon{Mar}% +\def\texd@fourthmon{April}% +\def\texd@fourthshmon{Apr}% +\def\texd@fifthmon{May}% +\def\texd@fifthshmon{May}% +\def\texd@sixthmon{June}% +\def\texd@sixthshmon{Jun}% +\def\texd@seventhmon{July}% +\def\texd@seventhshmon{Jul}% +\def\texd@eighthmon{August}% +\def\texd@eighthshmon{Aug}% +\def\texd@ninthmon{September}% +\def\texd@ninthshmon{Sep}% +\def\texd@tenthmon{October}% +\def\texd@tenthshmon{Oct}% +\def\texd@eleventhmon{November}% +\def\texd@eleventhshmon{Nov}% +\def\texd@twelfthmon{December}% +\def\texd@twelfthshmon{Dec}% +\def\texd@firstdayname{Sunday}% +\def\texd@firstdayshname{Sun}% +\def\texd@seconddayname{Monday}% +\def\texd@seconddayshname{Mon}% +\def\texd@thirddayname{Tuesday}% +\def\texd@thirddayshname{Tue}% +\def\texd@fourthdayname{Wednesday}% +\def\texd@fourthdayshname{Wed}% +\def\texd@fifthdayname{Thursday}% +\def\texd@fifthdayshname{Thu}% +\def\texd@sixthdayname{Friday}% +\def\texd@sixthdayshname{Fri}% +\def\texd@seventhdayname{Saturday}% +\def\texd@seventhdayshname{Sat}% +\AtBeginDocument{% + \IfLanguageName{spanish}{% + \def\texd@firstmon{enero}% + \def\texd@firstshmon{ene}% + \def\texd@secondmon{febrero}% + \def\texd@secondshmon{feb}% + \def\texd@thirdmon{marzo}% + \def\texd@thirdshmon{mar}% + \def\texd@fourthmon{abril}% + \def\texd@fourthshmon{abr}% + \def\texd@fifthmon{mayo}% + \def\texd@fifthshmon{may}% + \def\texd@sixthmon{junio}% + \def\texd@sixthshmon{jun}% + \def\texd@seventhmon{julio}% + \def\texd@seventhshmon{jul}% + \def\texd@eighthmon{agosto}% + \def\texd@eighthshmon{ago}% + \def\texd@ninthmon{septiembre}% + \def\texd@ninthshmon{sep}% + \def\texd@tenthmon{octubre}% + \def\texd@tenthshmon{oct}% + \def\texd@eleventhmon{noviembre}% + \def\texd@eleventhshmon{nov}% + \def\texd@twelfthmon{diciembre}% + \def\texd@twelfthshmon{dic}% + \def\texd@firstdayname{domingo}% + \def\texd@firstdayshname{dom}% + \def\texd@seconddayname{lunes}% + \def\texd@seconddayshname{lun}% + \def\texd@thirddayname{martes}% + \def\texd@thirddayshname{mar}% + \def\texd@fourthdayname{miercoles}% + \def\texd@fourthdayshname{mie}% + \def\texd@fifthdayname{jueves}% + \def\texd@fifthdayshname{jue}% + \def\texd@sixthdayname{viernes}% + \def\texd@sixthdayshname{vie}% + \def\texd@seventhdayname{sabado}% + \def\texd@seventhdayshname{sab}% + }{}% + \IfLanguageName{french}{% + \def\texd@firstmon{janvier}% + \def\texd@firstshmon{janv}% + \def\texd@secondmon{février}% + \def\texd@secondshmon{févr}% + \def\texd@thirdmon{mars}% + \def\texd@thirdshmon{mars}% + \def\texd@fourthmon{avril}% + \def\texd@fourthshmon{avr}% + \def\texd@fifthmon{mai}% + \def\texd@fifthshmon{mai}% + \def\texd@sixthmon{juin}% + \def\texd@sixthshmon{juin}% + \def\texd@seventhmon{juil}% + \def\texd@seventhshmon{juil}% + \def\texd@eighthmon{août}% + \def\texd@eighthshmon{août}% + \def\texd@ninthmon{septembre}% + \def\texd@ninthshmon{sept}% + \def\texd@tenthmon{octobre}% + \def\texd@tenthshmon{oct}% + \def\texd@eleventhmon{novembre}% + \def\texd@eleventhshmon{nov}% + \def\texd@twelfthmon{décembre}% + \def\texd@twelfthshmon{déc}% + \def\texd@firstdayname{dimanche}% + \def\texd@firstdayshname{dim}% + \def\texd@seconddayname{lundi}% + \def\texd@seconddayshname{lun}% + \def\texd@thirddayname{mardi}% + \def\texd@thirddayshname{mar}% + \def\texd@fourthdayname{mercredi}% + \def\texd@fourthdayshname{mer}% + \def\texd@fifthdayname{jeudi}% + \def\texd@fifthdayshname{jeu}% + \def\texd@sixthdayname{vendredi}% + \def\texd@sixthdayshname{ven}% + \def\texd@seventhdayname{samedi}% + \def\texd@seventhdayshname{sam}% + }{}% + \IfLanguageName{german}{% + \def\texd@firstmon{Januar}% + \def\texd@firstshmon{Jan}% + \def\texd@secondmon{Februar}% + \def\texd@secondshmon{Feb}% + \def\texd@thirdmon{März}% + \def\texd@thirdshmon{März}% + \def\texd@fourthmon{April}% + \def\texd@fourthshmon{Apr}% + \def\texd@fifthmon{Mai}% + \def\texd@fifthshmon{Mai}% + \def\texd@sixthmon{Juni}% + \def\texd@sixthshmon{Juni}% + \def\texd@seventhmon{Juli}% + \def\texd@seventhshmon{Juli}% + \def\texd@eighthmon{August}% + \def\texd@eighthshmon{Aug}% + \def\texd@ninthmon{September}% + \def\texd@ninthshmon{Sept}% + \def\texd@tenthmon{Oktober}% + \def\texd@tenthshmon{Okt}% + \def\texd@eleventhmon{November}% + \def\texd@eleventhshmon{Nov}% + \def\texd@twelfthmon{Dezember}% + \def\texd@twelfthshmon{Dez}% + \def\texd@firstdayname{Sonntag}% + \def\texd@firstdayshname{So}% + \def\texd@seconddayname{Montag}% + \def\texd@seconddayshname{Mo}% + \def\texd@thirddayname{Dienstag}% + \def\texd@thirddayshname{Di}% + \def\texd@fourthdayname{Mittwoch}% + \def\texd@fourthdayshname{Mi}% + \def\texd@fifthdayname{Donnerstag}% + \def\texd@fifthdayshname{Do}% + \def\texd@sixthdayname{Freitag}% + \def\texd@sixthdayshname{Fr}% + \def\texd@seventhdayname{Samstag}% + \def\texd@seventhdayshname{Sa}% + }{}% +}% +% \end{macrocode} +% Happy \TeX{}ing! diff --git a/Master/texmf-dist/source/generic/texdate/texdate.ins b/Master/texmf-dist/source/generic/texdate/texdate.ins new file mode 100644 index 00000000000..79ff625b30e --- /dev/null +++ b/Master/texmf-dist/source/generic/texdate/texdate.ins @@ -0,0 +1,65 @@ +% +AMDG +% This document was begun on 12 Apr 1202, the feast of St. +% Justin Martyr, and it is humbly dedicated to him and to +% the Immaculate Heart of Mary, for their prayers, and to +% the Sacred Heart of Jesus, for His mercy. +% +% This document is copyright 2018 by Donald P. Goodman, and is +% released publicly under the LaTeX Project Public License. The +% distribution and modification of this work is constrained by the +% conditions of that license. See +% http://www.latex-project.org/lppl.txt +% for the text of the license. This document is released +% under version 1.3(c) of that license, and this work may be distributed +% or modified under the terms of that license or, at your option, any +% later version. +% +% This work has the LPPL maintenance status 'maintained'. +% +% The Current Maintainer of this work is Donald P. Goodman +% (dgoodmaniii@gmail.com). +% +% This work consists of texdate.dtx, texdate.ins, and +% derived files texdate.sty and texdate.pdf. + +\input docstrip.tex + +\preamble +This is a generated file. + +This document is copyright 2018 by Donald P. Goodman, and is +released publicly under the LaTeX Project Public License. The +distribution and modification of this work is constrained by the +conditions of that license. See + http://www.latex-project.org/lppl.txt +for the text of the license. This document is released +under version 1.3(c) of that license, and this work may be distributed +or modified under the terms of that license or, at your option, any +later version. + +This work has the LPPL maintenance status 'maintained'. + +The Current Maintainer of this work is Donald P. Goodman +(dgoodmaniii@gmail.com). + +This work consists of texdate.dtx, texdate.ins, and +derived files texdate.sty and texdate.pdf. +\endpreamble + +\keepsilent +\generate{\file{texdate.sty}{\from{texdate.dtx}{package}}} + +\Msg{******************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the} +\Msg{* following file into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space texdate.sty} +\Msg{*} +\Msg{* To produce the documentation run the file texdate.dtx} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{******************************************************} + +\endbatchfile diff --git a/Master/texmf-dist/tex/generic/texdate/texdate.sty b/Master/texmf-dist/tex/generic/texdate/texdate.sty new file mode 100644 index 00000000000..6119e3e830f --- /dev/null +++ b/Master/texmf-dist/tex/generic/texdate/texdate.sty @@ -0,0 +1,856 @@ +%% +%% This is file `texdate.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% texdate.dtx (with options: `package') +%% This is a generated file. +%% +%% This document is copyright 2018 by Donald P. Goodman, and is +%% released publicly under the LaTeX Project Public License. The +%% distribution and modification of this work is constrained by the +%% conditions of that license. See +%% http://www.latex-project.org/lppl.txt +%% for the text of the license. This document is released +%% under version 1.3(c) of that license, and this work may be distributed +%% or modified under the terms of that license or, at your option, any +%% later version. +%% +%% This work has the LPPL maintenance status 'maintained'. +%% +%% The Current Maintainer of this work is Donald P. Goodman +%% (dgoodmaniii@gmail.com). +%% +%% This work consists of texdate.dtx, texdate.ins, and +%% derived files texdate.sty and texdate.pdf. + +\NeedsTeXFormat{LaTeX2e}[1999/12/01] +\ProvidesPackage{texdate}[2018/05/30 v1.0 Print and manipulate dates in plain TeX] +\RequirePackage{modulus}% +\RequirePackage{padcount}% +\RequirePackage{iflang}% +\newcount\texd@loopi\texd@loopi=0% +\newcount\texd@mon\texd@mon=0% +\newcount\texd@dow\texd@dow=0% +\newcount\texd@dom\texd@dom=0% +\newcount\texd@yr\texd@yr=\year% +\newcount\texd@rdom\texd@rdom=\texd@dom\advance\texd@rdom by1% +\newcount\texd@rmon% +%% taken from dayofweek.tex, by Martin Minow of DEC; +%% included in TeXLive +\def\texd@nextdow#1#2#3{% +\newcount\texd@dow% Gets day of the week +\newcount\texd@leap% Leap year fingaler +\newcount\texd@x% Temp register +\newcount\texd@y% Another temp register +\global\texd@leap=#2% +\global\advance\texd@leap by-14% +\global\divide\texd@leap by12% +\global\advance\texd@leap by#3% +\global\texd@dow=#2% +\global\advance\texd@dow by10% +\global\texd@y=\texd@dow% +\global\divide\texd@y by13% +\global\multiply\texd@y by12% +\global\advance\texd@dow by-\texd@y% +\global\multiply\texd@dow by13% +\global\advance\texd@dow by-1% +\global\divide\texd@dow by5% +\global\advance\texd@dow by#1% +\global\advance\texd@dow by77% +\global\texd@x=\texd@leap% +\global\texd@y=\texd@x% +\global\divide\texd@y by100% +\global\multiply\texd@y by100% +\global\advance\texd@x by-\texd@y% +\global\multiply\texd@x by5% +\global\divide\texd@x by4% +\global\advance\texd@dow by\texd@x% +\global\texd@x=\texd@leap% +\global\divide\texd@x by400% +\global\advance\texd@dow by\texd@x% +\global\texd@x=\texd@leap% +\global\divide\texd@x by100% +\global\multiply\texd@x by2% +\global\advance\texd@dow by-\texd@x% +\global\texd@x=\texd@dow% +\global\divide\texd@x by7% +\global\multiply\texd@x by7% +\global\advance\texd@dow by-\texd@x% +} +%% end taken from dayofweek.tex, by Martin Minow of DEC; +%% included in TeXLive +\def\texd@leapyear{% +}% +\def\texd@downame{% + \ifcase\texd@dow +\texd@firstdayname% +\or% +\texd@seconddayname% +\or% +\texd@thirddayname% +\or% +\texd@fourthdayname% +\or% +\texd@fifthdayname% +\or% +\texd@sixthdayname% +\or% +\texd@seventhdayname% +\fi% +}% +\def\texd@shdowname{% + \ifcase\texd@dow +\texd@firstdayshname% +\or% +\texd@seconddayshname% +\or% +\texd@thirddayshname% +\or% +\texd@fourthdayshname% +\or% +\texd@fifthdayshname% +\or% +\texd@sixthdayshname% +\or% +\texd@seventhdayshname% +\fi% +}% +\def\texd@nextmonth{% +\ifnum\texd@mon<11\global\advance\texd@mon by1\fi% +\ifnum\texd@mon=11\global\texd@mon=0\fi% +}% +\def\texd@lastmonth{% +\ifnum\texd@mon=0% +\global\texd@mon=11% +\global\advance\texd@yr by-1% +\fi% +\ifnum\texd@mon>0\global\advance\texd@mon by-1\fi% +}% +\def\texd@nextdate{% +\ifnum\texd@mon=11% +\ifnum\texd@dom=30% +\global\advance\texd@yr by1% +\global\texd@mon=0% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<30% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=10% +\ifnum\texd@dom=29% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<29% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=9% +\ifnum\texd@dom=30% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<30% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=8% +\ifnum\texd@dom=29% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<29% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=7% +\ifnum\texd@dom=30% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<30% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=6% +\ifnum\texd@dom=30% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<30% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=5% +\ifnum\texd@dom=29% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<29% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=4% +\ifnum\texd@dom=30% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<30% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=3% +\ifnum\texd@dom=29% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<29% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=2% +\ifnum\texd@dom=30% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi +\ifnum\texd@dom<30% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@mon=1% +\ifnum\texd@leapyear=0% +\ifnum\texd@dom=27% +\global\advance\texd@mon by1% +\global\texd@dom=0% +\fi +\ifnum\texd@dom<27% +\global\advance\texd@dom by1% +\fi% +\else\ifnum\texd@leapyear=1% +\ifnum\texd@dom=28% +\global\advance\texd@mon by1% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<28% +\global\advance\texd@dom by1% +\fi% +\fi\fi% +\else\ifnum\texd@mon=0% +\ifnum\texd@dom=30% +\global\advance\texd@mon by1%% +\global\texd@dom=0% +\fi% +\ifnum\texd@dom<30% +\global\advance\texd@dom by1% +\fi% +\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% +\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1% +\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1% +\texd@setjnum% +\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +\def\texd@lastdate{% +\global\advance\texd@dom by-1% +\ifnum\texd@dom=0% +\global\advance\texd@mon by-1% +\ifnum\texd@mon=11% +\global\texd@dom=30% +\fi% +\ifnum\texd@mon=0% +\global\texd@mon=11% +\global\advance\texd@yr by-1% +\global\texd@dom=30% +\fi% +\ifnum\texd@mon=10% +\global\texd@dom=29% +\fi% +\ifnum\texd@mon=9% +\global\texd@dom=30% +\fi% +\ifnum\texd@mon=8% +\global\texd@dom=29% +\fi% +\ifnum\texd@mon=7% +\global\texd@dom=30% +\fi% +\ifnum\texd@mon=6% +\global\texd@dom=30% +\fi% +\ifnum\texd@mon=5% +\global\texd@dom=29% +\fi% +\ifnum\texd@mon=4% +\global\texd@dom=30% +\fi% +\ifnum\texd@mon=3% +\global\texd@dom=29% +\fi% +\ifnum\texd@mon=2% +\global\texd@dom=30% +\fi% +\ifnum\texd@mon=1% +\ifnum\texd@leapyear=0% +\global\texd@dom=27% +\else\ifnum\texd@leapyear=1% +\global\texd@dom=28% +\fi\fi% +\fi% +\ifnum\texd@mon=0% +\global\texd@dom=30% +\fi% +\fi% +\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1% +\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1% +\texd@setjnum% +\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +\def\texd@setrdom{\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1}% +\def\texd@setrmon{\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1}% +\newcount\texd@leapyear\texd@leapyear=0% +\def\texd@isleapyear{% +\global\texd@leapyear=0% +\modulo{\texd@yr}{4}% +\ifnum\remainder=0% +\modulo{\texd@yr}{100}% +\ifnum\remainder=0% +\global\texd@leapyear=0% +\fi\ifnum\remainder>0% +\global\texd@leapyear=1% +\fi% +\fi% +}% +\def\texd@monthname{% +\ifnum\texd@mon=0% +\texd@firstmon% +\fi% +\ifnum\texd@mon=1% +\texd@secondmon% +\fi% +\ifnum\texd@mon=2% +\texd@thirdmon% +\fi% +\ifnum\texd@mon=3% +\texd@fourthmon% +\fi% +\ifnum\texd@mon=4% +\texd@fifthmon% +\fi% +\ifnum\texd@mon=5% +\texd@sixthmon% +\fi% +\ifnum\texd@mon=6% +\texd@seventhmon% +\fi% +\ifnum\texd@mon=7% +\texd@eighthmon% +\fi% +\ifnum\texd@mon=8% +\texd@ninthmon% +\fi% +\ifnum\texd@mon=9% +\texd@tenthmon% +\fi% +\ifnum\texd@mon=10% +\texd@eleventhmon% +\fi% +\ifnum\texd@mon=11% +\texd@twelfthmon% +\fi% +}% +\def\texd@shmonthname{% +\ifnum\texd@mon=0% +\texd@firstshmon% +\fi% +\ifnum\texd@mon=1% +\texd@secondshmon% +\fi% +\ifnum\texd@mon=2% +\texd@thirdshmon% +\fi% +\ifnum\texd@mon=3% +\texd@fourthshmon% +\fi% +\ifnum\texd@mon=4% +\texd@fifthshmon% +\fi% +\ifnum\texd@mon=5% +\texd@sixthshmon% +\fi% +\ifnum\texd@mon=6% +\texd@seventhshmon% +\fi% +\ifnum\texd@mon=7% +\texd@eighthshmon% +\fi% +\ifnum\texd@mon=8% +\texd@ninthshmon% +\fi% +\ifnum\texd@mon=9% +\texd@tenthshmon% +\fi% +\ifnum\texd@mon=10% +\texd@eleventhshmon% +\fi% +\ifnum\texd@mon=11% +\texd@twelfthshmon% +\fi% +}% +\def\advancebydays#1{% +\texd@loopi=0% +\loop% +\ifnum\texd@loopi<#1% +\texd@nextdate% +\advance\texd@loopi by1% +\repeat% +}% +\def\regressbydays#1{% +\texd@loopi=0% +\loop% +\ifnum\texd@loopi<#1% +\texd@lastdate% +\advance\texd@loopi by1% +\repeat% +}% +\newcount\texd@loopj% +\def\advancebyweeks#1{% +\texd@loopi=0% +\texd@loopj=#1% +\multiply\texd@loopj by7% +\loop% +\ifnum\texd@loopi<\texd@loopj% +\texd@nextdate% +\advance\texd@loopi by1% +\repeat% +}% +\def\regressbyweeks#1{% +\texd@loopi=0% +\texd@loopj=#1% +\multiply\texd@loopj by7% +\loop% +\ifnum\texd@loopi<\texd@loopj% +\texd@lastdate% +\advance\texd@loopi by1% +\repeat% +}% +\def\advancebymonths#1{% +\texd@loopi=0% +\loop% +\ifnum\texd@loopi<#1% +\texd@nextmonth% +\advance\texd@loopi by1% +\repeat% +\texd@setrmon% +\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}% +}% +\def\regressbymonths#1{% +\texd@loopi=0% +\loop% +\ifnum\texd@loopi<#1% +\texd@lastmonth% +\advance\texd@loopi by1% +\repeat% +\texd@setrmon% +\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}% +}% +\def\printdate{% +\texd@dateformat% +}% +\def\printfdate#1{% +\texd@formatdateformat{#1}% +}% +\def\texd@expandloop#1{% +\texd@xloop#1\relax +} +\def\texdatenumformat#1{#1} +\def\texd@xloop#1{% +\ifx\relax#1% +\else% +\ifx#1d% +\setpadnum{2}\setpadchar{0}% +\padnum{\texdatenumformat{\the\texd@rdom}}% +\else\ifx#1e% +\setpadnum{2}\setpadchar{\hskip1ex}% +\padnum{\texdatenumformat{\the\texd@rdom}}% +\else\ifx#1a% +\texd@shdowname% +\else\ifx#1A% +\texd@downame% +\else\ifx#1b% +\texd@shmonthname% +\else\ifx#1h% +\texd@shmonthname% +\else\ifx#1B% +\texd@monthname% +\else\ifx#1w% +\the\texd@dow% +\else\ifx#1u% +\ifnum\texd@dow>0\leavevmode\texdatenumformat{\the\texd@dow}\fi% +\ifnum\texd@dow=0 7\fi% +\else\ifx#1Y% +\setpadnum{2}\setpadchar{0}% +\padnum{\texdatenumformat{\the\texd@yr}}% +\else\ifx#1m% +\texd@setrmon% +\setpadnum{2}\setpadchar{0}% +\leavevmode\padnum{\texdatenumformat{\the\texd@rmon}}% +\else\ifx#1j% +\texd@setjnum% +\setpadnum{3}\setpadchar{0}% +\leavevmode\padnum{\texdatenumformat{\the\texd@jnum}}% +\else\ifx#1C% +\quotient{\texd@yr}{100}% +\leavevmode\texdatenumformat{\the\intquotient}% +\else\ifx#1y% +\modulo{\texd@yr}{100}% +\leavevmode\texdatenumformat{\the\remainder}% +\else\ifx#1U% +\quotient{\texd@jnum}{7} +\setpadnum{2}\setpadchar{0}% +\leavevmode\padnum{\texdatenumformat{\the\intquotient}}% +\else\ifx#1V% +\quotient{\texd@jnum}{7} +\ifnum\texd@dow>0\advance\intquotient by1\fi% +\setpadnum{2}\setpadchar{0}% +\leavevmode\padnum{\texdatenumformat{\the\intquotient}}% +\else\ifx#1W% +\quotient{\texd@jnum}{7} +\ifnum\texd@dow=0\advance\intquotient by-1\fi% +\setpadnum{2}\setpadchar{0}% +\leavevmode\padnum{\texdatenumformat{\the\intquotient}}% +\else% +#1% +\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% +\expandafter\texd@xloop% +\fi% +}% +\def\texd@dateformat{% +\expandafter\expandafter\texd@expandloop{\setdateformat}% +}% +\def\texd@formatdateformat#1{% +\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\texd@expandloop{\csname texd@df#1\endcsname}% +}% +\def\setdateformat{A{ }(a),\ B\ (b){ }d,\ Y} +\def\nameddateformat#1#2{% +\expandafter\def\csname texd@df#1\endcsname{#2}% +}% +\nameddateformat{american}{B\ d,\ Y} +\nameddateformat{shamerican}{m/d/Y} +\nameddateformat{ISO}{Ymd} +\nameddateformat{ISOext}{Y-m-d} +\nameddateformat{shbritish}{d/m/Y} +\nameddateformat{shbritishdots}{d.m.Y} +\nameddateformat{british}{d\ B\ Y} +\nameddateformat{d}{d} +\nameddateformat{e}{e} +\nameddateformat{B}{B} +\nameddateformat{b}{b} +\nameddateformat{h}{h} +\nameddateformat{m}{m} +\nameddateformat{A}{A} +\nameddateformat{a}{a} +\nameddateformat{w}{w} +\nameddateformat{u}{u} +\nameddateformat{Y}{Y} +\nameddateformat{j}{j} +\nameddateformat{C}{C} +\nameddateformat{y}{y} +\nameddateformat{U}{U} +\nameddateformat{V}{V} +\nameddateformat{W}{W} +\def\initcurrdate{% +\global\texd@mon=\month% +\global\advance\texd@mon by-1% +\global\texd@dom=\day% +\global\advance\texd@dom by-1% +\global\texd@yr=\year% +\texd@isleapyear% +\texd@setrdom% +\texd@setrmon% +\texd@setjnum% +\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +\def\initdate#1#2#3{% +\global\texd@yr=#1% +\global\texd@mon=#2% +\global\advance\texd@mon by-1% +\global\texd@dom=#3% +\global\advance\texd@dom by-1% +\global\texd@setrdom% +\global\texd@setrmon% +\texd@setjnum% +\texd@isleapyear% +\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}% +}% +\def\savedate#1{% +\expandafter\edef\csname savedate#1\endcsname{\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}}% +}% +\def\restoredate#1{% +\csname savedate#1\endcsname% +}% +\newcount\texd@looptmp\texd@looptmp=0% +\def\texdcal#1#2{% +\global\texd@mon=#2% +\global\advance\texd@mon by-1% +\global\texd@yr=#1% +\global\texd@dom=0% +\texd@setrmon\texd@setrdom% +\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}% +\def\setdateformat{B\ Y}% +\begin{tabular}{rrrrrrr} +\multicolumn{7}{c}{\printdate} \\ +\loop\ifnum\texd@dow>0\texd@lastdate\repeat% +\def\setdateformat{d}% +\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi\\ +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate \\ +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate \\ +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate & +\def\setdateformat{d}\advancebydays{1}\printdate \\ +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\ +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi& +\def\setdateformat{d}\advancebydays{1}% +\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\ +\end{tabular} +}% +\def\texdcalyear#1{% +\texd@yr=#1% +\texd@mon=0% +\texd@dom=0% +\texd@setrmon% +\texd@setrdom% +{\tabcolsep=3pt% +\begin{tabular}{ccc} +\texdcal{#1}{1} & \texdcal{#1}{2} & \texdcal{#1}{3} \\ +\texdcal{#1}{4} & \texdcal{#1}{5} & \texdcal{#1}{6} \\ +\texdcal{#1}{7} & \texdcal{#1}{8} & \texdcal{#1}{9} \\ +\texdcal{#1}{10} & \texdcal{#1}{11} & \texdcal{#1}{12} \\ +\end{tabular} +}% +}% +\newcount\texd@jnum\texd@jnum=0% +\def\texd@setjnum{% +\texd@jnum=0% +\ifnum\texd@mon>0\global\advance\texd@jnum by31\fi% +\ifnum\texd@mon>1% +\global\advance\texd@jnum by28% +\fi% +\ifnum\texd@mon>2\global\advance\texd@jnum by31\fi% +\ifnum\texd@mon>3\global\advance\texd@jnum by30\fi% +\ifnum\texd@mon>4\global\advance\texd@jnum by31\fi% +\ifnum\texd@mon>5\global\advance\texd@jnum by30\fi% +\ifnum\texd@mon>6\global\advance\texd@jnum by31\fi% +\ifnum\texd@mon>7\global\advance\texd@jnum by31\fi% +\ifnum\texd@mon>8\global\advance\texd@jnum by30\fi% +\ifnum\texd@mon>9\global\advance\texd@jnum by31\fi% +\ifnum\texd@mon>10\global\advance\texd@jnum by30\fi% +\global\advance\texd@jnum by\the\texd@dom% +\global\advance\texd@jnum by1% +}% +\def\texd@firstmon{January}% +\def\texd@firstshmon{Jan}% +\def\texd@secondmon{February}% +\def\texd@secondshmon{Feb}% +\def\texd@thirdmon{March}% +\def\texd@thirdshmon{Mar}% +\def\texd@fourthmon{April}% +\def\texd@fourthshmon{Apr}% +\def\texd@fifthmon{May}% +\def\texd@fifthshmon{May}% +\def\texd@sixthmon{June}% +\def\texd@sixthshmon{Jun}% +\def\texd@seventhmon{July}% +\def\texd@seventhshmon{Jul}% +\def\texd@eighthmon{August}% +\def\texd@eighthshmon{Aug}% +\def\texd@ninthmon{September}% +\def\texd@ninthshmon{Sep}% +\def\texd@tenthmon{October}% +\def\texd@tenthshmon{Oct}% +\def\texd@eleventhmon{November}% +\def\texd@eleventhshmon{Nov}% +\def\texd@twelfthmon{December}% +\def\texd@twelfthshmon{Dec}% +\def\texd@firstdayname{Sunday}% +\def\texd@firstdayshname{Sun}% +\def\texd@seconddayname{Monday}% +\def\texd@seconddayshname{Mon}% +\def\texd@thirddayname{Tuesday}% +\def\texd@thirddayshname{Tue}% +\def\texd@fourthdayname{Wednesday}% +\def\texd@fourthdayshname{Wed}% +\def\texd@fifthdayname{Thursday}% +\def\texd@fifthdayshname{Thu}% +\def\texd@sixthdayname{Friday}% +\def\texd@sixthdayshname{Fri}% +\def\texd@seventhdayname{Saturday}% +\def\texd@seventhdayshname{Sat}% +\AtBeginDocument{% +\IfLanguageName{spanish}{% +\def\texd@firstmon{enero}% +\def\texd@firstshmon{ene}% +\def\texd@secondmon{febrero}% +\def\texd@secondshmon{feb}% +\def\texd@thirdmon{marzo}% +\def\texd@thirdshmon{mar}% +\def\texd@fourthmon{abril}% +\def\texd@fourthshmon{abr}% +\def\texd@fifthmon{mayo}% +\def\texd@fifthshmon{may}% +\def\texd@sixthmon{junio}% +\def\texd@sixthshmon{jun}% +\def\texd@seventhmon{julio}% +\def\texd@seventhshmon{jul}% +\def\texd@eighthmon{agosto}% +\def\texd@eighthshmon{ago}% +\def\texd@ninthmon{septiembre}% +\def\texd@ninthshmon{sep}% +\def\texd@tenthmon{octubre}% +\def\texd@tenthshmon{oct}% +\def\texd@eleventhmon{noviembre}% +\def\texd@eleventhshmon{nov}% +\def\texd@twelfthmon{diciembre}% +\def\texd@twelfthshmon{dic}% +\def\texd@firstdayname{domingo}% +\def\texd@firstdayshname{dom}% +\def\texd@seconddayname{lunes}% +\def\texd@seconddayshname{lun}% +\def\texd@thirddayname{martes}% +\def\texd@thirddayshname{mar}% +\def\texd@fourthdayname{miercoles}% +\def\texd@fourthdayshname{mie}% +\def\texd@fifthdayname{jueves}% +\def\texd@fifthdayshname{jue}% +\def\texd@sixthdayname{viernes}% +\def\texd@sixthdayshname{vie}% +\def\texd@seventhdayname{sabado}% +\def\texd@seventhdayshname{sab}% +}{}% +\IfLanguageName{french}{% +\def\texd@firstmon{janvier}% +\def\texd@firstshmon{janv}% +\def\texd@secondmon{février}% +\def\texd@secondshmon{févr}% +\def\texd@thirdmon{mars}% +\def\texd@thirdshmon{mars}% +\def\texd@fourthmon{avril}% +\def\texd@fourthshmon{avr}% +\def\texd@fifthmon{mai}% +\def\texd@fifthshmon{mai}% +\def\texd@sixthmon{juin}% +\def\texd@sixthshmon{juin}% +\def\texd@seventhmon{juil}% +\def\texd@seventhshmon{juil}% +\def\texd@eighthmon{août}% +\def\texd@eighthshmon{août}% +\def\texd@ninthmon{septembre}% +\def\texd@ninthshmon{sept}% +\def\texd@tenthmon{octobre}% +\def\texd@tenthshmon{oct}% +\def\texd@eleventhmon{novembre}% +\def\texd@eleventhshmon{nov}% +\def\texd@twelfthmon{décembre}% +\def\texd@twelfthshmon{déc}% +\def\texd@firstdayname{dimanche}% +\def\texd@firstdayshname{dim}% +\def\texd@seconddayname{lundi}% +\def\texd@seconddayshname{lun}% +\def\texd@thirddayname{mardi}% +\def\texd@thirddayshname{mar}% +\def\texd@fourthdayname{mercredi}% +\def\texd@fourthdayshname{mer}% +\def\texd@fifthdayname{jeudi}% +\def\texd@fifthdayshname{jeu}% +\def\texd@sixthdayname{vendredi}% +\def\texd@sixthdayshname{ven}% +\def\texd@seventhdayname{samedi}% +\def\texd@seventhdayshname{sam}% +}{}% +\IfLanguageName{german}{% +\def\texd@firstmon{Januar}% +\def\texd@firstshmon{Jan}% +\def\texd@secondmon{Februar}% +\def\texd@secondshmon{Feb}% +\def\texd@thirdmon{März}% +\def\texd@thirdshmon{März}% +\def\texd@fourthmon{April}% +\def\texd@fourthshmon{Apr}% +\def\texd@fifthmon{Mai}% +\def\texd@fifthshmon{Mai}% +\def\texd@sixthmon{Juni}% +\def\texd@sixthshmon{Juni}% +\def\texd@seventhmon{Juli}% +\def\texd@seventhshmon{Juli}% +\def\texd@eighthmon{August}% +\def\texd@eighthshmon{Aug}% +\def\texd@ninthmon{September}% +\def\texd@ninthshmon{Sept}% +\def\texd@tenthmon{Oktober}% +\def\texd@tenthshmon{Okt}% +\def\texd@eleventhmon{November}% +\def\texd@eleventhshmon{Nov}% +\def\texd@twelfthmon{Dezember}% +\def\texd@twelfthshmon{Dez}% +\def\texd@firstdayname{Sonntag}% +\def\texd@firstdayshname{So}% +\def\texd@seconddayname{Montag}% +\def\texd@seconddayshname{Mo}% +\def\texd@thirddayname{Dienstag}% +\def\texd@thirddayshname{Di}% +\def\texd@fourthdayname{Mittwoch}% +\def\texd@fourthdayshname{Mi}% +\def\texd@fifthdayname{Donnerstag}% +\def\texd@fifthdayshname{Do}% +\def\texd@sixthdayname{Freitag}% +\def\texd@sixthdayshname{Fr}% +\def\texd@seventhdayname{Samstag}% +\def\texd@seventhdayshname{Sa}% +}{}% +}% +\endinput +%% +%% End of file `texdate.sty'. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index f76f43f8b54..96ff74fc360 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -618,7 +618,8 @@ my @TLP_working = qw( tex-ewd tex-font-errors-cheatsheet tex-gyre tex-gyre-math tex-ini-files tex-label tex-overview tex-ps tex-refs tex-virtual-academy-pl tex4ebook texapi texbytopic texcount - texdef texdiff texdirflatten texdraw texfot texilikechaps texilikecover + texdate texdef texdiff texdirflatten texdraw + texfot texilikechaps texilikecover texliveonfly texloganalyser texlogos texmate texments texosquery texpower texproposal texshade textualicomma texvc textcase textfit textglos textgreek textmerg textopo textpath textpos diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 77050c585c7..59558b49986 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -1513,6 +1513,7 @@ $standarddest = "texmf-dist"; 'systeme', 'generic', 'tabto-generic', 'generic', 'tap', 'generic', + 'texdate', 'generic', 'texdraw', 'generic', 'texsis', 'texsis', 'textmerg', 'generic', @@ -2158,6 +2159,7 @@ $standardtex 'tex-virtual-academy-pl', 'generic', 'texbytopic', 'plain', 'texcount', 'support', + 'texdate', 'generic', 'texdiff', 'support', 'texdirflatten', 'support', 'texdraw', 'support', @@ -2297,6 +2299,7 @@ $standarddocfmt='latex'; 'startex', 'startex', 'stix', 'fonts', 't2', 'generic', + 'texdate', 'generic', 'textmerg', 'generic', 'trajan', 'fonts', 'universa', 'fonts', diff --git a/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc b/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc index d234e7b0a79..a50f2ffb3e1 100644 --- a/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc @@ -82,6 +82,7 @@ depend termmenu depend tex-ps depend tex4ht depend texapi +depend texdate depend texinfo depend timetable depend tracklang diff --git a/Master/tlpkg/tlpsrc/texdate.tlpsrc b/Master/tlpkg/tlpsrc/texdate.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d -- cgit v1.2.3