A \today macro for Hevea
Philip A. Viton
December 9, 1999
As of Hevea version 1.05, the \today macro is
ignored. This will change in later versions, but meanwhile this note
describes a simple way to implement it. As a by-product, it also provides
the building-blocks for expanded date-and-time identification for your
documents. In keeping with Hevea's spirit, these are in both English and
Here's how it works: before running Hevea we will call a tiny executable (xxdate.exe or xdate.exe, see below for how to choose
between them). This writes a file xdate.hva containing the
necessary information to compute today's date, in the form of nine LATEX
numeric counters and three commands. Note that these are not
necessarily standard counters/commands known to LATEX. Then today.hva reads in the contents of xdate.hva and defines the
output form of \today; if Hevea is started
with the flag -francais then today.hva also reads today_fr.hva, which re-defines \today into
the French form. The result of \today will
- January 1, 2000 or in French, 1er janvier
- January 2, 2000 or in French, 2 janvier 2000
Release History and Updates
December 9, 1999: added counter \time
and command \heveatime for compatibility with
the shell script developed for the Unix version of Hevea. Added instruction
to delete xdate.hva after running Hevea.
- December 6, 1999: today.hva and today_fr.hva are merged
into today.hva. The French rendering of \today is improved: no preceeding ``Le''; months begin with
lowercase letters; no comma between month and year. All these changes are
due to Luc Maranget, to whom many thanks.
- November 11, 1999: added an alternate treatment of time-zones, in
xxdate.exe; documentation revised.
- October 31, 1999: initial ``private'' release announced only on Hevea
First, retrieve hevea-today.zip here. This archive contains the following files: xdate.exe, xdate.c, xxdate.exe, xxdate.cpp, xdate.hva,
today.hva, and a copy of the present paper, as htoday.html.
Unzip the files to your main Hevea directory (typically c:\hevea). If you aren't interested in the programming,
you can delete xdate.c and xxdate.cpp.
We provide two versions of the executables which differ only in the way they
access the time-zone: xdate does it via the TZ environment
variable, and xxdate does it via internal win32 functions. For the
Eastern US in November, xxdate.exe reports the time-zone as
``Eastern Standard Time''. This may not be what you want --- for example,
you may prefer an abbreviation like ``EST'' --- and in this case you should
ensure that the TZ environment variable contains your desired
representation, and use xdate.exe. Note that this may mean manually
setting the TZ variable, since it's not clear that Windows sets it
automatically --- at least it doesn't under NT4. At any rate, you should
decide on which executable to use: if you're interested only in the \today macro, either version will do. In the
remainder of the instructions, I'll assume you pick xxdate.exe.
Using \today with Hevea for win32
To use this system, you must first add a command to the Hevea batch files to
run xxdate.exe, then arrange for Hevea to ``see'' the new \today macro, and finally, remove it. To alter the
The first change runs xxdate.exe and redirects the result
to xdate.hva, all in the directory pointed to by the environment
variable %heveadir%, which you set at the top of the batch file.
Note that the destination file must be xdate.hva
whether you use xxdate.exe or xdate.exe. The scond change deletes the file after Hevea has run, so that if you later
run Hevea without using a batch file, the old --- and incorrect --- date
information won't be present.
Add the following line before the line calling Hevea:
- %heveadir%\xxdate.exe >
- Add the following line after calling Hevea
- del %heveadir%\xdate.hva >nul
Second, you must tell Hevea read today.hva (which defines the
\today macro). You can include a reference to
it in the list of files you provide on the command line when you run Hevea,
or, if you want it always to be available, you can hard-code it into the
batch file itself, on the line calling Hevea.
As supplied, we use the same definition whether producing HTML, text, or
Info output. If you want to customize things, you will have to write
separate versions of today.hva, include them in the appropriate
subdirectories, and remove today.hva from the main Hevea directory.
If you do this, remember that the first line of today.hva should be
If you look at xdate.hva (or you can run xxdate.exe from
the command line with no redirection and the output will be written to the
screen) you'll see that it produces more counters than are used in the
standard \today macro, so you have the
building blocks to construct a more detailed date and time representation.
The counters are:
Note that day and month can be 1-digit
representations: this differs from the way the C function strftime
returns them (which is with a leading 0 if necessary); while all time
components are 2-digits.
- weekday : identifies the day-of-the-week, with Sunday = 0 (0
- day : 1- or 2-digit representation of the day-of-the month
(1 -- 31)
- month : 1- or 2-digit representation of the month, with
January = 1 (1 -- 12)
- year : 4 digits (!)
- hour : 24-hour, 2-digit representation of the current hour
(00 -- 23)
- Hour : 12-hour, 2-digit representation of the current hour
(00 -- 12)
- minute : 2-digit representation of the current minute (00 --
- second : 2-digit representation of the current second (00 --
- time : current time in minutes since midnight
The two macros are:
- \ampm : string, containing either
AM or PM depending on the time (intended for use with
Hour). This command is not redefined in the French version (would one say,
e.g. 04:20:55 du matin in French?).
- \timezone : string, containing an
abbreviation for the current time-zone, or empty if the time-zone is
unknown. As noted above, this is the only difference between xdate.exe and xxdate.exe. The program xdate.exe obtains
the time-zone from the TZ environment variable; if this isn't set,
then the string will be empty. On the other hand, xxdate.exe reads
the time-zone using an internal Window function: I believe this is more
likely to give a non-empty answer, but it's possible, depending on how
Windows is set up, that this too could be empty.
- \heveatime : an approximation to the
standard Unix date routine, for compatibility with Unix Hevea. The
current form of this is Thu Dec 09 23:40:08 1999.
If you want to restore Hevea's default behavior of ignoring \today you can just remove any references to xxdate.exe (or xdate.exe) and today.hva from the batch
This document was translated from LATEX by