\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} % % %<*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} %