From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/menu/menu.dtx | 606 +++++++++++++++++++++++++++++++++++++ 1 file changed, 606 insertions(+) create mode 100644 macros/latex/contrib/menu/menu.dtx (limited to 'macros/latex/contrib/menu/menu.dtx') 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} +% +% +%<*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} +% -- cgit v1.2.3