summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/fancytooltips
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-02-22 19:55:16 +0000
committerKarl Berry <karl@freefriends.org>2007-02-22 19:55:16 +0000
commit2f5894cda3e5c9c65f3a7c15097ccab670381247 (patch)
tree53c749decfdbb74760a33b4861a93d3cc0562458 /Master/texmf-dist/source/latex/fancytooltips
parent7144b710518294eb640d7f28ff4ff08b656fd35d (diff)
new latex package fancytooltips, 19feb07
git-svn-id: svn://tug.org/texlive/trunk@3982 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/fancytooltips')
-rw-r--r--Master/texmf-dist/source/latex/fancytooltips/fancytooltips.dtx474
-rw-r--r--Master/texmf-dist/source/latex/fancytooltips/fancytooltips.ins58
2 files changed, 532 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/fancytooltips/fancytooltips.dtx b/Master/texmf-dist/source/latex/fancytooltips/fancytooltips.dtx
new file mode 100644
index 00000000000..1738def53a6
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fancytooltips/fancytooltips.dtx
@@ -0,0 +1,474 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2004 by Robert Marik <marik@mendelu.cz>
+% -----------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% 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.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{fancytooltips.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{fancytooltips}
+%<*package>
+ [2007/02/20 v1.1 fancytooltips.dtx file]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\usepackage[pdftex]{eforms}
+\usepackage[pdftex]{color}
+\usepackage[filename=tip]{fancytooltips}
+\buttontipwidth=2cm
+\buttontipheight=2cm
+\begin{document}
+\color{black}
+ \DocInput{fancytooltips.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{332}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2007/02/15}{Initial version}
+% \changes{v1.1}{2007/02/20}{Clener code, better documentation, fix
+% for bug with delayinterval macro, support for dvips and DIstiller
+% users.}
+%
+% \GetFileInfo{fancytooltips.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+%
+% \title{The \textsf{fancytooltips} package\thanks{This document
+% corresponds to \textsf{fancytooltips}~\fileversion, dated \filedate.}}
+% \author{Robert Marik \\ \texttt{marik@mendelu.cz}}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% \null\hfill\TooltipHidden\frametip\\
+% The package |fancytooltips| is a package for \LaTeX. The pdf can be
+% created by pdflatex or by latex + dvips +
+% AdobeDistiller\footnote{not free ps2pdf} + Adobe
+% Acrobat\footnote{not free Adobe Reader.}. It allows to create
+% tooltips in a similar way like |cooltooltips| package, but the
+% tooltip is a page from another PDF file. In this way you can use
+% also mathematics, pictures and animations in your tooltips. The
+% resulting PDF file can be used also with free Abobe Reader.
+%
+% The \color{black}tooltips are activated by |MouseOver| action with
+% pressed |Shift| button down or by |MouseDown| action. The tooltips
+% are deactivated after closing page or by moving mouse outside the
+% link. You can try the links \tooltip{here}{1} (Einstein's formula)
+% and also \tooltipanim{here}{2}{7} (animation -- numbers from 1 to
+% 6). Tooltip appears on the right boundary of the first paragraph.
+% You have to use the free Adobe Reader or nonfree Adobe Acrobat to
+% see the effect (xpdf, evince and others fail to work with
+% JavaScripts). For more examples how the presentation may look like
+% see the |example.pdf| and |example-min.pdf| files in the |examples|
+% subdirectory.
+%
+% The buttons are created using |eforms.sty| which is a part of
+% AcroTeX bundle.
+%
+% \section{Usage}
+% \subsection{The file with tooltips}
+% The file with tooltips is an ordinary pdf file, one tooltip per
+% page, tooltips should be in the top right corner at the page, in a
+% colored box and the rest of the page should be
+% transparent\footnote{See the example file \texttt{tooltipy.tex} and
+% \texttt{tooltipy.pdf} which make use of \texttt{geometry.sty}
+% package to set the page dimensions and \texttt{\string\colorbox}
+% and \texttt{minipage} to make the box with tooltip}. We also
+% provide simple cross referencing mechanism to reffer to the
+% tooltips. If the pdf file is created by \LaTeX,
+% \DescribeMacro{\keytip} you can define keywords to reffer to the
+% pages using |\keytip| command. Simply put
+% |\usepackage[createtips]{fancytooltips}| into preamble and write
+% \texttt{\string\keytip}\marg{foo} in document. This writes
+% information about keyword \meta{foo} and the pagenumber into file
+% |fancytips.tex|.
+%
+% \subsection{The file with presentation -- pdf\LaTeX users}
+% In the file with presentation, the user is responsible
+% \begin{itemize}
+% \item to include package |eforms| with |pdftex| option before
+% loading fancytooltips package, and
+% \item input either |color| or |xcolor| package in the
+% preamble.
+% \end{itemize}
+% This is not convenient for the user, but everybody uses different
+% package and from this reason, this part is left to the user. (And
+% among others, the |color| or |xcolor| package is probably inputted
+% by the package which is used to build the presentation.)
+%
+% To input the tooltips from file \meta{foo.pdf} call the package with
+% \meta{filename} option |\usepackage[filename=foo]{fancytooltips}|,
+% input images for tooltips somewhere in the document using
+% \DescribeMacro{\TooltipHidden} macro |\TooltipHidden|
+% \DescribeMacro{\frametip} and put the macro |\frametip| on every
+% page\footnote{In the current document the \texttt{\string\frametip}
+% command was used only once in the first paragraph, since we have
+% tooltips in this paragraph only and the tooltips in the top right
+% corner of the page would be outside of the screen in most cases.}
+% in the right top corner of your document\footnote{See the file
+% \texttt{example.tex} and \texttt{example-min.tex} to know how to
+% achieve this with the \texttt{pdfscrren.sty} presentation bundle
+% and pure \texttt{article.cls} class, respectively.}.
+% \DescribeMacro{\buttontipwidth} \DescribeMacro{\buttontipheight} The
+% dimensions of button with tooltips (created by |\frametip| macro)
+% are stored in the |\buttontipwidth| and |\buttontipheight| length
+% variables. If the page with tooltip is bigger, it is resized to fit
+% into the button. You can change it for example by
+% |\buttontipwidth=4in|. To get expected results (tooltips in the top
+% right corner) these lengths should be equal or constant multiples of
+% the page dimensions of the file with tooltips. The button is inside
+% a box with zero dimensions and hence the box produced by |\frametip|
+% command has zero dimensions.
+%
+%
+% \DescribeMacro{\tooltip} The user can put the tooltip into her or
+% his presentation using the command
+% \texttt{\string\tooltip}{\marg{stuff}\marg{keyword-or-pagenumber}}
+% where \meta{stuff} is the printed text in \meta{tooltipcolor} color
+% and \meta{keyword-or-pagenumber} is either the pagenumber of the
+% tooltip in the external file or the keyword defined by |\keytip|
+% command. \DescribeMacro{\TooltipExtratext} The printed text
+% \meta{stuff} is followed by |\TooltipExtratext| command. The default
+% value is small blue soap in a box with zero dimensions, as you have
+% seen in the second paragraph of this documentation. There is a
+% package option |noextratext| which defines |\TooltipExtratext| to be
+% empty.
+%
+% \DescribeMacro{\tooltipanim} The user can put a series (animation) of
+% tooltips into the presentation by using
+% \texttt{\string\tooltipanim}\marg{stuff}\marg{start}\marg{end}
+% command, where \meta{start} and \meta{end} are keywords defined by
+% |\keytip| command or page numbers. \DescribeMacro{\delayinterval}
+% The delay between two frames is |\delayinterval| milliseconds. The
+% default value is 200, you can change it by command
+% |\def\delayinterval{100}|.
+% \subsection{Changes for dvips users}
+% dvips users have to specify option |dvips| in both |fancytips| and
+% |eforms| packages. They have to use also a |pages| option with the
+% number of pages in the PDF file with tooltips. You have to call the
+% package by
+% something like this:\\
+% |\usepackage[dvips]{eforms}|\\
+% |\usepackage[dvips,filename=tooltipy,pages=27]{fancytooltips}|
+%
+% You have to |latex| and |dvips| your file. This produces
+% |filename.ps| and |Tooltipsdljs.fdf| files. Distill the pdf file
+% into |filename.pdf| and open this file by Adobe Acrobat - this
+% imports macros from |Tooltipsdljs.fdf| file. In Acrobat's JavaScript
+% console (|Crtl+J|) run (|Ctrl+Enter|) the command |ImportIcons();|
+% which is defined for the document and it imports the icons and
+% returns 1. The file with pdf icon must be in the working directory.
+% Then save the file under another name.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+% \begin{macrocode}
+%<*package>
+\RequirePackage{everyshi}
+\RequirePackage{graphicx}
+\RequirePackage{xkeyval}
+
+\newif\ifcreatetips\createtipsfalse
+\DeclareOptionX{createtips}{\createtipstrue}
+
+\newif\ifTooltip@usepdftex\Tooltip@usepdftextrue
+\DeclareOptionX{dvips}{\Tooltip@usepdftexfalse}
+
+\newif\ifextratext\extratexttrue
+\DeclareOptionX{noextratext}{\extratextfalse}
+
+\DeclareOptionX{filename}{\xdef\TooltipFilename{#1}}
+\DeclareOptionX{pages}{\xdef\TooltipPages{#1}}
+
+\ProcessOptionsX
+
+\ifx\TooltipFilename\undefined
+\PackageWarning{fancytooltips}{** The filename with tooltips is not given. **}
+\fi
+
+\ifTooltip@usepdftex
+\def\TooltipExtratext{\hbox to 0 pt{\smash
+ {\raisebox{0.5em}{\includegraphics[width=1em]%
+ {fancytooltipsmark.pdf}}}\hss}}
+\else
+\def\TooltipExtratext{\hbox to 0 pt{\smash
+ {\raisebox{0.5em}{\includegraphics[width=1em]%
+ {fancytooltipsmark.eps}}}\hss}}
+\fi%\ifTooltip@usepdftex
+\ifextratext\else\let\TooltipExtratext\relax\fi
+
+\ifcreatetips
+% \end{macrocode}
+% This part (three lines) is processed if the option |createtips| is
+% used. In the opposite case we process the second part, up to the end
+% of the package.
+% \begin{macrocode}
+\newwrite\tipfile
+\immediate\openout\tipfile fancytips.tex
+\def\keytip#1{\write\tipfile{\string\tooltipname{#1}{\arabic{page}}}}
+\else
+% \end{macrocode}
+% If dvips is used, we define icons by the command |\eqIcon| stolen
+% from |exerquiz.sty|. The following definitions are verbatim copy from
+% |exerquiz.sty|. The definition of |\eqIconDefaults| contains some
+% customizations.
+% \begin{macrocode}
+\ifTooltip@usepdftex\else
+\ifx\everyeqIcon\undefined
+\newcommand\everyeqIcon[1]{\def\every@eqIcon{#1}}
+\def\every@eqIcon{}
+\newcommand\eqIcon[4][]
+{%
+ \push@@Button{#1}{#2}{#3}{#4}{}{\eq@setButtonProps\eq@Button@driver}%
+ {\eqIconDefaults\every@ButtonField\every@eqIcon}%
+}
+\fi%\ifx\everyeqIcon\undefined
+\def\eqIconDefaults
+{%
+ \rawPDF{}\S{}\mkIns{/TP 1 /IF<</A[1.0 1.0]/SW/B>>}\R{270}
+ \CA{}\RC{}\AC{}\BC{}\BG{}\H{B}
+ \textColor{0 g}\Ff{\FfReadOnly}
+}
+\fi%\ifTooltip@usepdftex
+% \end{macrocode}
+% Macro |\frametip| creates button in which tooltips appear. You have
+% to use macro |\frametip| on every page in your presentation in right
+% top corner (see the directory |examples|).
+% \begin{macrocode}
+\def\frametip{\vbox to 0 pt{\hbox to 0 pt{\hss\buttontip}\vss}}
+\newdimen\buttontipwidth \buttontipwidth=5in
+\newdimen\buttontipheight \buttontipheight=5in
+\ifTooltip@usepdftex
+\def\buttontip{%
+\pdfstartlink user{%
+ /Subtype /Widget
+ /F 6
+ /T (ikona)
+ /FT /Btn
+ /Ff 65536
+ /H /N
+ /BS << /W 1 /S /S >>
+ /MK << /TP 1 /IF <</SW /B>> >>
+}%
+\vbox to \buttontipheight {\vss\hbox to \buttontipwidth{\hss}}\pdfendlink}
+\else
+\def\buttontip{%
+ \eqIcon[\BC{}\BG{}\F{\FHidden}]{ikona}{\buttontipwidth}{\buttontipheight}
+ }
+\fi%\ifTooltip@usepdftex
+% \end{macrocode}
+% In the macros |\tooltip| and |\tooltipanim| we print the text into
+% box with zero dimensions and then we build a button which covers
+% this text and has an associated JavaScript action.
+% \begin{macrocode}
+\definecolor{tooltipcolor}{rgb}{0,0,1}
+\def\tooltip#1#2{\checkTipNumber{#2}%
+ \edef\TipNumber{\FindTipNumber{#2}}%
+ \setbox0=\hbox{{\color{tooltipcolor}{#1}}}\hbox to 0 pt{{\copy0\TooltipExtratext\hss}}%
+ \pushButton[\BC{}\BG{}\S{}\AA{
+ \AAMouseExit{\JS{CloseTooltips();}}
+ \AAMouseEnter{\JS{
+ try {app.clearInterval(animace);}catch (e) {}
+ if (event.shift) {this.getField("ikona").hidden=false;
+ this.getField('ikona').buttonSetIcon(this.getField("animtiph\TipNumber").buttonGetIcon());}}}
+ }
+ \A{\JS{this.getField("ikona").hidden=false;
+ try {app.clearInterval(animace);}catch (e) {}
+ this.getField('ikona').buttonSetIcon(this.getField("animtiph\TipNumber").buttonGetIcon());}}]
+ {TooltipField}{\wd0}{\ht0}}
+\def\delayinterval{200}
+\def\tooltipanim#1#2#3{%
+ \checkTipNumber{#2}\edef\TipNumberA{\FindTipNumber{#2}}%
+ \checkTipNumber{#3}\edef\TipNumberB{\FindTipNumber{#3}}%
+ \setbox0=\hbox{{\color{tooltipcolor}{#1}}}\hbox to 0 pt{{\copy0\TooltipExtratext\hss}}%
+ \pushButton[\BC{}\BG{}\S{}\AA{
+ \AAMouseExit{\JS{CloseTooltips();}}
+ \AAMouseEnter{\JS{
+ var cislo=\TipNumberA;
+ try {app.clearInterval(animace);}catch (e) {}
+ function animuj()
+ {
+ if (cislo<\TipNumberB) cislo=cislo+1;
+ this.getField('ikona').buttonSetIcon(this.getField("animtiph"+cislo).buttonGetIcon());
+ };
+ if (event.shift) {
+ this.getField('ikona').buttonSetIcon(this.getField("animtiph"+\TipNumberA).buttonGetIcon());
+ this.getField("ikona").hidden=false;
+ animace=app.setInterval('animuj();', \delayinterval);
+ }
+ }}
+ }
+ \A{\JS{
+ try {app.clearInterval(animace);}catch (e) {}
+ var cislo=\TipNumberA;
+ function animuj()
+ {
+ if (cislo<\TipNumberB) cislo=cislo+1;
+ this.getField('ikona').buttonSetIcon(this.getField("animtiph"+cislo).buttonGetIcon());
+ };
+ this.getField('ikona').buttonSetIcon(this.getField("animtiph"+\TipNumberA).buttonGetIcon());
+ this.getField("ikona").hidden=false;
+ animace=app.setInterval('animuj();', \delayinterval);
+ }}
+ ]{TooltipField}{\wd0}{\ht0}}
+% \end{macrocode}
+% This code for |pdftex| closes tooltip if the page is closed.
+% \begin{macrocode}
+\ifTooltip@usepdftex
+\def\TooltipPageopencloseJS{ \global\pdfpageattr{%
+ /AA << /O << /S /JavaScript /JS (CloseTooltips();) >> >>}%
+}
+\pdfximage{\TooltipFilename.pdf}%
+\edef\TooltipPages{\the\pdflastximagepages}%
+\else
+\def\TooltipPageopencloseJS{
+\literalps@out{%
+ [ {ThisPage} << /AA <<
+ /O << /S /JavaScript /JS (CloseTooltips();) >>
+ >> >> /PUT pdfmark}}
+\OpenAction{/S /JavaScript /JS (CloseTooltips();)}
+\fi%\ifTooltip@usepdftex
+\EveryShipout{\TooltipPageopencloseJS}%
+
+\ifTooltip@usepdftex
+\begin{insDLJS}[clearTooltips]{Tooltipsdljs}{My Private DLJS for Tooltips}
+ var animace;
+ function CloseTooltips()
+ {
+ this.getField("ikona").hidden=true;
+ try {app.clearInterval(animace);}catch (e) {}
+ }
+\end{insDLJS}
+\else
+\begin{insDLJS}[clearTooltips]{Tooltipsdljs}{My Private DLJS for Tooltips}
+ var animace;
+ function CloseTooltips()
+ {
+ this.getField("ikona").hidden=true;
+ try {app.clearInterval(animace);}catch (e) {}
+ }
+ function ImportTooltips()
+ {
+ for (var i=1;i<=\TooltipPages;i++)
+ {this.getField("animtiph"+i).buttonImportIcon("\TooltipFilename.pdf",(i-1));}
+ return(1);
+ }
+\end{insDLJS}
+\fi
+% \end{macrocode}
+% A cycle is used to create hidden buttons. Each button has associated a page
+% from the file with tooltips as icon. These icons are invoked by JavaScripts
+% defined in |\tooltip| and |\tooltipanim| macros.
+% \begin{macrocode}
+\newcount\tooltip@count
+\ifTooltip@usepdftex
+\newcommand*{\TooltipHidden}{%
+ \count@=0
+ \@whilenum\count@<\TooltipPages \do{%
+ \tooltip@count=\count@
+ \advance \tooltip@count by 1
+ \bgroup
+ \immediate\pdfximage
+ width 0 pt height 0 pt depth 0 pt
+ page \the\tooltip@count{\TooltipFilename.pdf}%
+ \mbox{\leavevmode
+ \pdfstartlink user{
+ /Subtype /Widget
+ /F 6
+ /T (animtiph\the\tooltip@count)
+ /FT /Btn
+ /Ff 65536
+ /H /N
+ /BS << /W 1 /S /S >>
+ /MK <<
+ /TP 1
+ /I \the\pdflastximage\space 0 R
+ /IF << /SW /A >>
+ >>
+ }%
+ \pdfendlink}%
+ \egroup
+ \advance\count@\@ne}%
+}
+\else
+\def\TooltipHidden{%
+ \count@=0
+ \@whilenum\count@<\TooltipPages \do{%
+ \tooltip@count=\count@
+ \advance \tooltip@count by 1
+ \bgroup
+ \eqIcon[\BC{}\BG{}\F{\FHidden}]
+ {animtiph\the\tooltip@count}{0cm}{0cm}%
+ \egroup
+ \advance\count@\@ne}%
+}
+\fi
+% \end{macrocode}
+% The keywords for the tooltips can be stored in the file
+% |fancytips.tex|. The topics in this file are created by |\keytip|
+% macro (see the first part of the code).
+% \begin{macrocode}
+\AtBeginDocument{\IfFileExists{fancytips.tex}{\input{fancytips.tex}
+\PackageInfo{fancytooltips}{Inputting fancytips.tex.}}%
+ {\PackageWarning{fancytooltips}{No file fancytips.tex!
+ Your keywords for tooltips will not work!}}}
+
+\def\tooltipname#1#2{\expandafter\xdef\csname FancyToolTip@#1\endcsname{#2}}
+
+\def\FindTipNumber#1{\expandafter\ifx \csname FancyToolTip@#1\endcsname\relax
+ #1\else\csname FancyToolTip@#1\endcsname\fi}
+
+\def\checkTipNumber#1{\expandafter\ifx
+ \csname FancyToolTip@#1\endcsname\relax \PackageWarning{fancytooltips}{No
+ framenumber is assigned to keyword #1. I assume that #1 is the
+ number of the frame.}%
+ \fi}
+
+\fi
+%</package>
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/fancytooltips/fancytooltips.ins b/Master/texmf-dist/source/latex/fancytooltips/fancytooltips.ins
new file mode 100644
index 00000000000..4559bb89318
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fancytooltips/fancytooltips.ins
@@ -0,0 +1,58 @@
+%%
+%% Copyright (C) 2007 by Robert Marik <marik@mendelu.cz>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX version
+%% 1999/12/01 or later.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/fancytooltips}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2007 by Robert Marik <marik@mendelu.cz>
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX version
+1999/12/01 or later.
+
+\endpreamble
+
+\generate{\file{fancytooltips.sty}{\from{fancytooltips.dtx}{package}}
+}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* fancytooltips.sty *}
+\Msg{* fancytooltipsmark.pdf *}
+\Msg{* fancytooltipsmark.eps *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* fancytooltips.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile