summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/menu
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/menu
Initial commit
Diffstat (limited to 'macros/latex/contrib/menu')
-rw-r--r--macros/latex/contrib/menu/README28
-rw-r--r--macros/latex/contrib/menu/menu.dtx606
-rw-r--r--macros/latex/contrib/menu/menu.ins31
-rw-r--r--macros/latex/contrib/menu/menu.pdfbin0 -> 132906 bytes
4 files changed, 665 insertions, 0 deletions
diff --git a/macros/latex/contrib/menu/README b/macros/latex/contrib/menu/README
new file mode 100644
index 0000000000..11db49132c
--- /dev/null
+++ b/macros/latex/contrib/menu/README
@@ -0,0 +1,28 @@
+Name of contribution: menu
+Name and email: Knut Lickert <knut@lickert.net>
+Location on CTAN: tex-archive/macros/latex/contrib/menu
+Summary description: Typeset menu
+License type: LaTeX Project Public License
+
+Menu.sty define a command \menu{Programm!!Menu1!Command} and
+expand it to something like Programm=>Menu1->Command.
+You can use it for documentations of programs.
+
+====================================
+Provided Files:
+*menu.dtx
+*menu.ins
+*menu.pdf
+*readme
+
+For more information visit
+ http://tex.lickert.net/packages/menu/index.html (German)
+ http://tex.lickert.net/packages/menu/index_en.html (English)
+
+====================================
+Related packages:
+keystroke
+ A LaTeX package which provides macros for the graphical
+ representation of the keys on a computer keyboard.
+ Example: Ctrl, Shift AltGr
+CTAN: tex-archive/macros/latex/contrib/keystroke/
diff --git a/macros/latex/contrib/menu/menu.dtx b/macros/latex/contrib/menu/menu.dtx
new file mode 100644
index 0000000000..e850c3ff8a
--- /dev/null
+++ b/macros/latex/contrib/menu/menu.dtx
@@ -0,0 +1,606 @@
+\def\fileversion{v0.994}
+\def\filedate{2007/11/18}
+% ^^A For index and changes, run:
+% ^^A makeindex -s gglo -o Menu.gls Menu.glo
+% ^^A makeindex -s gind -o Menu.ind Menu.idx
+%
+% \CheckSum{237}
+%%
+%% \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 \~}
+%%
+% \DoNotIndex{\" , \-, \flqq,\frqq, \ ,\def, \begin, \end}
+% \DoNotIndex{\csname,\endcsname, \expandafter, \global, \newcommand}
+% \DoNotIndex{\advance, \filedate, \fileversion, \MessageBreak}
+% \DoNotIndex{\newcount, \newcounter, \newif, \or}
+% \DoNotIndex{\if, \else, \fi, \ifcase, \ifdefined, \ifnum, \ifx, \loop, \repeat}
+% \DoNotIndex{\heartsuit}
+% \DoNotIndex{\NeedsTeXFormat, \providecommand, \ProvidesPackage, \relax, \RequirePackage}
+% \DoNotIndex{\par, \chapter, \section, \subsection, \subsubsection, \paragraph, }
+% \DoNotIndex{\selectlanguage, \stepcounter, \ss, \space, \setcounter}
+% \DoNotIndex{\value, \typeout, \long, \renewcommand}
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{menu}
+\usepackage{makeidx}
+\usepackage[draft]{fixme}
+%\IfFileExists{hyperref.sty}{\usepackage{hyperref}}{}
+\IfFileExists{keystroke.sty}{
+ \usepackage{keystroke}
+ }{
+ \newcommand{\keystroke}[1]{\fbox{##1}}
+ }
+\CodelineIndex
+\makeindex
+%\OnlyDescription
+\begin{document}
+ \DocInput{menu.dtx}
+\end{document}
+%</driver>
+%
+%<*package>
+% \fi
+% \title{Menu.sty: Typesetting menus}
+% \author{Knut Lickert}
+% \maketitle
+%
+%\begin{abstract}
+% Menu.sty define a command |\menu{Programm!!Menu1!Command}| and
+% expand it to something like \menu{Programm!!Menu1!Command}. You
+% can use it for documentations of programs.
+%\end{abstract}
+%
+% \section{Where to use the style}
+% If you write a documentation of a program you have to define
+% things like "Push button \keystroke{F1} or go to the Menu to
+% \menu{Help!Help} and you get help". This style help you to write
+% the menu entry.
+%
+% \subsection{Other packages}
+% I have not found a package to typeset menus (that's why this style
+% was written). If you find one, please contact me
+% (knut@lickert.net).
+%
+% \begin{description}
+% \item[keystroke]
+% A \LaTeX\ package which provides macros for the graphical
+% representation of the keys on a computer keyboard.\par
+% Example: \Ctrl, \Shift \AltGr
+% \end{description}
+%
+%
+% \section{How to use the style}
+% \subsection{Inline-Menu}
+%
+% \DescribeMacro{\menu}
+% |\menu| has one parameter. The macro is used to typeset a path in a
+% menu. Like |\index| different levels are separated with a "!"
+% inside the parameter. Instead a "!" you can use two "!!" and so you
+% can define bigger steps in the menu. I use programs, where a menu
+% is starting another menu (e.g.\ in a popup). So instead of saying
+% "Goto \menu{Menu1!Entry1!Menu2} and then from
+% \menu{Menu2!Menu3!Entry3}" I write "Goto
+% \menu{Menu1!Entry1!Menu2!!Menu3!Entry3}.
+%
+% Example:
+% \verb|\menu{File!Save!!Filename}|: \menu{File!Save!!Filename}
+%
+% This is only to show one path in a menu.
+% This command may not be used to show a complete menu.
+% I recommand to make a snapshot of your programm and include the picture
+% via \verb|includegraphics| (Package graphicx)
+%
+%
+% \subsection{Menu-Figure}
+% \fixme{Description}
+%\DescribeEnv{menufolder}
+%Number of parameter: 2
+%
+%\DescribeMacro{\menuitem}
+%Number of parameter: 2
+%
+%\DescribeMacro{\menuitemactive}
+%Number of parameter: 2
+%
+%\DescribeMacro{\menuseparator}
+% Add a separator line. An optional length can be defined.
+%
+% Example:
+%\begin{verbatim}
+%\settowidth{\menuitemlength}{Close and d\underline on't save}
+%\begin{menufolder}{\underline Menu}%
+% \menuitem{Close and d\underline on't save}
+% \menuitem{Close and sa\underline ve}
+% \menuitemactive{I\underline tem}
+%\end{menufolder}
+%}
+%\end{verbatim}
+
+%\settowidth{\menuitemlength}{Close and d\underline on't save}
+%\begin{menufolder}{\underline Menu}%
+% \menuitem{Close and d\underline on't save}
+% \menuitem{Close and sa\underline ve}
+% \menuitemactive{I\underline tem}
+%\end{menufolder}
+%
+%\subsubsection{Options}
+%There are different options to modify the look of menus.
+%
+%\begin{description}
+% \item[hand] The hand point to the active menu item.
+% Requires bbding.
+% \item[framed] The menu entries are framed
+% \item[grey] framed and background values.\fixme{change
+% option name}
+%\end{description}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Changing the look}
+% \DescribeMacro{\menutext}
+% A step of a menu is written with this macro, default is
+% |\texttt|. You can change it with |\renewcommand|, e.g.\
+% |\renewcommand{\menutext}[1]{\emph{#1}|
+%
+% \subsection{Inline-Menus}
+% \DescribeMacro{\menumathsymbols}
+% If you want to replace the symbols, you can use |\menusymbols|.
+% Parameter one is the flag for "!", Parameter for "!!"
+% (Default is \(\rightarrow\) and \(\Rightarrow\)).
+%
+% \DescribeMacro{\menusymbols}
+% Like |\menumathsymbols| with two differences:
+% \begin{itemize}
+% \item There is no math-environment (if you need it, you can
+% guarantee it with |\ensuremath|)
+% \item There are two optional parameters, defining a start and
+% end command of a menu.
+% \end{itemize}
+% This command gives you a flexible possibility to change the look
+% of menus.
+%
+% \begin{description}
+% \item[$\backslash$menusymbols] Define a style with the parameters:
+% \item[{[Start]}] How should a menu start.\par
+% A |\par| is not allowed, but you can use a |\\|. If a paragraph
+% ends before the |\menu|, you must use |~\\| instead.
+% \item[\{\}] The look/actions for a "!" in a menu.
+% \item[\{\}] The look/actions for a "!!" in a menu.
+% \item[{[End]}] How should a menu end.
+% \end{description}
+%
+% \subsubsection{Examples}
+% \newcommand{\example}[1]{\texttt{$\backslash$menu\{#1\}} & \menu{#1}\\}
+%
+% \paragraph{Predefined look}~\par
+%
+% \begin{tabular}{ll}
+% Coding & Result\\\hline
+% \example{Menu!Menu}
+% \example{Menu!!Menu}
+% \example{Menu!!Next Menu!Entry}
+% \end{tabular}
+%
+% \paragraph{Changed symbols}
+%
+% After |\menumathsymbols{>}{\gg}| you get\par
+% \menumathsymbols{>}{\gg}
+% \begin{tabular}{ll}
+% Coding & Result\\\hline
+% \example{Menu!Menu}
+% \example{Menu!!Menu}
+% \example{Menu!!Next Menu!Entry}
+% \end{tabular}
+%
+% Attention: If you want to change it local, you must define a
+% block.
+%
+% \paragraph{Define your own styles}
+%
+% You can define your own "styles", |\menu{Menu!!Next Menu!Entry}|
+% makes an entry like:
+%
+% \begin{minipage}[t]{0.5\textwidth}
+%\begin{verbatim}
+%\newlength{\menusep}
+%\menusymbols[
+% \setlength{\menusep}{0em}~\\
+% ]{
+% \\
+% \addtolength{\menusep}{1em}
+% \hspace*{\menusep}
+% }{
+% $\wr$\\
+% \addtolength{\menusep}{2em}
+% \hspace*{\menusep}
+% }[
+% \ensuremath{\Leftarrow}
+% ]
+%\end{verbatim}
+% \end{minipage}
+% \begin{minipage}[t]{0.4\textwidth}
+% Example for a new style
+% \menusymbols[\setlength{\menusep}{0em}~\\]{
+% \\
+% \addtolength{\menusep}{1em}
+% \hspace*{\menusep}
+% }{
+% $\wr$\\
+% \addtolength{\menusep}{2em}
+% \hspace*{\menusep}
+% }[
+% \ensuremath{\Leftarrow}
+% ]
+% \menu{Menu!!Next Menu!Entry}
+% \end{minipage}
+%
+% \subsection{Layout of Menu-figures}
+%
+% The macros can be replaced. See the implementation for examples.
+%
+% \fixme{describe length}
+%
+%\DescribeMacro{\menufolderentry}
+% Defines the look of the entry of a menu.
+% Parameters are length (optional) and text.
+%
+%\DescribeMacro{\menuitem}
+% Defines the look of one item in the menu.
+% Parameters are length (optional) and text.
+%
+%\DescribeMacro{\menuitemactive}
+% Defines the look of an active item in the menu.
+% Parameters are length (optional) and text.
+%
+%\DescribeMacro{\menuitemactivesymbol}
+% This symbol is used to show to the active item.
+%
+% \subsubsection{Examples}
+% \fixme{Examples}
+%
+% \section{Ideas for the future}
+% \begin{itemize}
+% \item Create Index entries for menus (optional)\par
+% If I do it, it would be an additional index (style multind).
+% I think this would be wrong in the normal index.
+% \item An optional parameter: |\menu[Programm]{Menu!...}|\par
+% Does anybody need it? At the moment I think there is no need.
+% When there is the possibility of index entries, then it could be sensefull
+% (Index is sorted by Programm, Menu1, Menu2\ldots).
+% \item A command |\popup| or |\rightmouse| to define a click on the
+% right mouse button. |\click[Feld]{menu!entry}|.
+% This function could be a feature of the package keystroke.
+% %^^A use mousesymbols.tex
+% \end{itemize}
+%
+% Any comments? Up to now I don't need this features, so I will not
+% implement them. If you need it, or think you have a better idea,
+% send me a mail to knut@lickert.net.
+%
+% If you built your own "fancy" style, or have another idea to use
+% "!!" and "!", please send me your idea.
+%
+% \StopEventually\relax
+% \part*{Implementation}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{menu}[
+ \filedate\space\fileversion\space menu-Package]
+\typeout{menu.sty: Support of typeout menus}
+\RequirePackage{xspace}
+%\RequirePackage{keystroke}[2003/08/15 v1.5]
+% \end{macrocode}
+%
+% \section{Commands}
+% \begin{macro}{\menu}
+% Take the parameter and send it with an endflag ("\(<\)") to |\@menu|.
+% \begin{macrocode}
+\newcommand{\menu}[1]{\@menusymbolStart\@menu #1!<\@menusymbolEnd}
+% \end{macrocode}
+% \end{macro}%^^A{\menu}
+%
+% \begin{macro}{\menutext}
+% How to write one step of the menu?
+% \begin{macrocode}
+\newcommand{\menutext}[1]{\texttt{#1}}
+% \end{macrocode}
+% \end{macro}%^^A{\menu}
+%
+% \begin{macro}{\@menu}
+% Get two parameters, separated with "!".
+% Parameter one can be:
+% \begin{macrocode}
+\def\@menu#1!#2<{%
+\def\@menuParOne{#1}%
+\def\@menuParTwo{#2}%
+\def\gt{!}%
+% \end{macrocode}
+% Check if the first parameter has content.
+%
+% \begin{macrocode}
+\ifx\@empty\@menuParOne%
+{\ifx\@menuParTwo\gt%
+ \else\expandafter\@menuTo\@menuParTwo <\@menu#2<%
+ \fi}%
+\else%
+% \end{macrocode}
+% \changes{v0.994}{2007-11-18}{No separator for direct menu entries}
+% First parameter has content, so let's print it.
+% \begin{macrocode}
+\menutext{#1}%
+% \end{macrocode}
+% Add a \verb|\@menuto| and the second part,
+% but only if there is a second part.
+% \begin{macrocode}
+ \ifx\@menuParTwo\@empty%
+ \else%
+ \expandafter\@menuto\@menuParTwo <\@menu#2!<%
+ \fi%
+\fi%
+}
+% \end{macrocode}
+% \end{macro}%^^A{\@menu}
+% \begin{macro}{\@menuto}
+% \begin{macrocode}
+\def\@menuto#1#2<{\ifx!#1\else\@menusymbolOne\allowbreak\fi}
+% \end{macrocode}
+% \end{macro}%^^A{\menuto}
+% \begin{macro}{\@menuTo}
+% \begin{macrocode}
+\def\@menuTo#1#2<{\ifx!#1\else\@menusymbolTwo\allowbreak\fi}
+% \end{macrocode}
+% \end{macro}%^^A{\menuTo}
+%
+% \section{The different symbols}
+% \begin{macro}{\@menusymbolStart}
+% The symbol, printed on start of |\menu|.
+% \begin{macrocode}
+\newcommand*\@menusymbolStart{}
+\newcommand*\@menusymbolEnd{}
+% \end{macrocode}
+% \end{macro}%^^A{\@menusymbolOne}
+%
+% \begin{macro}{\@menusymbolOne}
+% The symbol, printed when a "!" occurs in |\menu|.
+% \begin{macrocode}
+\newcommand*\@menusymbolOne{\ensuremath{\rightarrow}}
+% \end{macrocode}
+% \end{macro}%^^A{\@menusymbolOne}
+% \begin{macro}{\@menusymbolTwo}
+% The symbol, printed when a "!!" occurs in |\menu|.
+% \begin{macrocode}
+\newcommand*\@menusymbolTwo{\ensuremath{\Rightarrow}}
+% \end{macrocode}
+% \end{macro}%^^A{\@menusymbolTwo}
+%
+% \begin{macro}{\menusymbol}
+% Possibility to redefine the symbols for "!" and "!!".
+% \begin{macrocode}
+\newcommand*\menusymbols[3][]{%
+\renewcommand*\@menusymbolStart{#1}%
+\renewcommand*\@menusymbolOne{#2}%
+\renewcommand*\@menusymbolTwo{#3}%
+\@menusymbols%
+}
+% \end{macrocode}
+% \end{macro}%^^A{\@menusymbols}
+%
+% \begin{macro}{\@menusymbol}
+% Define the End-Makro for a menu.
+% \begin{macrocode}
+\newcommand*\@menusymbols[1][]{%
+\renewcommand*\@menusymbolEnd{#1}%
+}
+% \end{macrocode}
+% \end{macro}%^^A{\@menusymbols}
+% \begin{macro}{\menumathsymbols}
+% Possibility to redefine the symbols for "!" and "!!".
+% \begin{macrocode}
+\newcommand*\menumathsymbols[3][]{
+\renewcommand*\@menusymbolStart{\ensuremath{#1}}
+\renewcommand*\@menusymbolOne{\ensuremath{#2}}
+\renewcommand*\@menusymbolTwo{\ensuremath{#3}}
+}
+% \end{macrocode}
+% \end{macro}%^^A{\@menumathsymbol}
+%
+% \section{The Predefined Layouts}
+%
+% \subsection{Standard}
+% \begin{macrocode}
+\menumathsymbols{\rightarrow}{\Rightarrow}
+% \end{macrocode}
+%
+% \section{Menu-Drawings}
+% \begin{macrocode}
+\newlength{\menuitemlength}
+\newlength{\menusep}
+\setlength{\menuitemlength}{6em}
+\setlength{\menusep}{3em}
+% \end{macrocode}
+% \begin{macro}{\menuitemactivesymbol}
+% \begin{macrocode}
+\newcommand\menuitemactivesymbol{\ensuremath{\Leftarrow}}%
+% \end{macrocode}
+% \end{macro}%^^A\menuitemactivesymbol
+%
+% \begin{environment}{menufolder}
+% \fixme{parameter 1 must be a length (2cm results in 22cm)}
+% A negative parskip results in an overlapping menu.
+% \begin{macrocode}
+\newenvironment{menufolder}[2][\menuitemlength]{%
+ \begin{minipage}{2#1}%
+ \setlength{\parskip}{0pt}%
+ \menufolderentry[#1]{#2}\par%
+ \addtolength{\leftskip}{\menusep}%
+ }{%
+ \end{minipage}%
+}
+% \end{macrocode}
+% \end{environment}%^^Amenufolder
+% \begin{macro}{\menufolderentry}
+% \begin{macrocode}
+\newcommand\menufolderentry[2][\menuitemlength]{%
+ \makebox[#1][l]{\menutext{#2}\hfill}%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menufolderentry
+% \begin{macro}{\menuitem}
+% \begin{macrocode}
+\newcommand\menuitem[2][\menuitemlength]{%
+ \makebox[#1][l]{\menutext{#2}\hfill}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menuitem
+% \begin{macro}{\menuitemactive}
+% \begin{macrocode}
+\newcommand\menuitemactive[2][\menuitemlength]{%
+ \makebox[#1][l]{\menutext{\emph{#2}}\hfill\menuitemactivesymbol}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menuitemactive
+%
+% \begin{macro}{\menuseparator}
+%\fixme{besser positionieren (raisebox?)}
+% \begin{macrocode}
+\newcommand\menuseparator[1][\menuitemlength]{%
+ \makebox[#1][l]{~\hrulefill~}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menuseparator
+%
+%\subsection{Options}
+% \begin{macrocode}
+\newif\ifmenuoptionhand
+\DeclareOption{hand}{
+\menuoptionhandtrue
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifmenuoptionframed
+\DeclareOption{framed}{
+\menuoptionframedtrue
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifmenuoptiongrey
+\DeclareOption{grey}{
+\menuoptiongreytrue
+}
+% \end{macrocode}
+%
+% Process the options to set the flags.
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+%\subsubsection{Option hand}
+% Activate the hand-option.
+% \begin{macrocode}
+\ifmenuoptionhand
+\RequirePackage{bbding}%fuer \HandLeftUp
+% \end{macrocode}
+% \begin{macro}{\menuitemactivesymbol}
+% \begin{macrocode}
+\renewcommand\menuitemactivesymbol{\HandLeftUp}%
+% \end{macrocode}
+% \end{macro}%^^A{\menuitemactivesymbol}
+% \begin{macrocode}
+\fi%ifmenuoptionhand
+% \end{macrocode}
+%
+%\subsubsection{Option framed}
+% Activate the framed-option.
+% \begin{macrocode}
+\ifmenuoptionframed
+\RequirePackage{fancybox}%fuer shadowbox
+% \end{macrocode}
+% \begin{macro}{\menufolderentry}
+% \begin{macrocode}
+\renewcommand\menufolderentry[2][\menuitemlength]{%
+ \framebox[#1][l]{\menutext{#2}\hfill}%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menufolderentry
+% \begin{macro}{\menuitem}
+% \begin{macrocode}
+\renewcommand\menuitem[2][\menuitemlength]{%
+ \framebox[#1][l]{\menutext{#2}\hfill}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menuitem
+% \begin{macro}{\menuitemactive}
+% \begin{macrocode}
+\renewcommand\menuitemactive[2][\menuitemlength]{%
+ \shadowbox to #1{\menutext{\emph{#2}}\hfill\menuitemactivesymbol}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menuitemactive
+% \begin{macrocode}
+\fi%Option framed
+% \end{macrocode}
+%
+%\subsubsection{Option grey}
+% Activate the grey-option.
+% \begin{macrocode}
+\ifmenuoptiongrey
+\RequirePackage{fancybox}%fuer shadowbox
+\RequirePackage{color}%fuer farbige Boxen
+\definecolor{menugrey}{rgb}{0.9,0.9,0.9}
+% \end{macrocode}
+% \begin{macro}{\menufolderentry}
+% \begin{macrocode}
+\renewcommand\menufolderentry[2][\menuitemlength]{%
+ \fcolorbox{white}{black}{\makebox[#1]{\menutext{\textcolor{white}{#2}}}}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menufolderentry
+% \begin{macro}{\menuitem}
+% \begin{macrocode}
+\renewcommand\menuitem[2][\menuitemlength]{%
+ \fcolorbox{black}{menugrey}{\makebox[#1]{\menutext{\textcolor{white}{#2\hfill}}}}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menuitem
+% \begin{macro}{\menuitemactive}
+%\fixme{offset 1ex}
+% \begin{macrocode}
+\renewcommand\menuitemactive[2][\menuitemlength]{%
+ \textsf{\hspace*{1ex}\shadowbox to #1 {\menutext{#2}\hfill\menuitemactivesymbol}}\par%fixme
+}
+% \end{macrocode}%
+% \end{macro}%^^A\menuitemactive
+%
+%
+% \begin{macro}{\menuseparator}
+%\fixme{verbessern}
+% \begin{macrocode}
+\renewcommand\menuseparator[1][\menuitemlength]{%
+ \makebox[#1][l]{~\hrulefill~}\par%
+}
+% \end{macrocode}
+% \end{macro}%^^A\menuseparator
+% \begin{macrocode}
+\fi%Option grey
+% \end{macrocode}
+%
+% \Finale
+% \PrintIndex
+% \end{document}
+%</package>
diff --git a/macros/latex/contrib/menu/menu.ins b/macros/latex/contrib/menu/menu.ins
new file mode 100644
index 0000000000..3fd0eae748
--- /dev/null
+++ b/macros/latex/contrib/menu/menu.ins
@@ -0,0 +1,31 @@
+\def\batchfile{menu.ins}
+\input docstrip.tex
+\keepsilent
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\preamble
+----------------------------------------------------------------------
+Name of contribution: Menu
+Name and email: Knut Lickert <knut@lickert.net>
+Location on CTAN: tex-archive/macros/latex/contrib/menu
+More details: http://www.lickert.net/tex/menu
+Summary description: Package for writing menus
+
+Announcement text:
+Menu.sty provide a command
+ \string\menu{Programm!!Menu1!Command}
+and expand it to something like Programm=>Menu1->Command
+----------------------------------------------------------------------
+\endpreamble
+
+\generateFile{menu.sty}{f}{\from{menu.dtx}{package}}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{*\space\space *.sty, *.cfg into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/macros/latex/contrib/menu/menu.pdf b/macros/latex/contrib/menu/menu.pdf
new file mode 100644
index 0000000000..888ac4c3a1
--- /dev/null
+++ b/macros/latex/contrib/menu/menu.pdf
Binary files differ