% \iffalse meta-comment % % Copyright (C) 2011 by Andr\'e Miede, http://www.miede.de % ------------------------------------------------------- % % This file may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % 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.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % \fi % % \iffalse %<*driver> \ProvidesFile{gamebook.dtx} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{gamebook} %<*package> [2011/11/29 v1.0 Style for gamebooks/interactive novels] % % %<*driver> \documentclass{ltxdoc} \usepackage[debug]{gamebook}[2011/11/29] \usepackage{hyperref} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{gamebook.dtx} \PrintChanges \PrintIndex \end{document} % % \fi % % \CheckSum{0} % % \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}{2011/06/12}{Initial version} % % \GetFileInfo{gamebook.dtx} % % \DoNotIndex{\newcommand,\newenvironment} % % % \title{The \textsf{gamebook} package\thanks{This document % corresponds to \textsf{gamebook}~\fileversion, dated \filedate.}} % \author{Andr\'e Miede \\ \url{http://www.miede.de}} % % \maketitle % % \section*{Introduction} % % This package provides the means to layout gamebooks with \LaTeX. % If you do not know what a gamebook is, just have a look at the informative % Wikipedia article \url{http://en.wikipedia.org/wiki/Gamebook} or check % out Demian's very good overview website, where you can find tons of information % about gamebooks: \url{http://www.gamebooks.org}. % % A simple gamebook example is included with this package, teaching you how to % use the package in no time. % % If you created a gamebook using this package, please drop me an e-mail % (ideally, send an PDF of the gamebook along). Thanks in advance. % % % \section*{Package Loading} % % You can load the |gamebook| package easily together with the typical % \LaTeX-classes: % \begin{center} % |\usepackage|\oarg{optional arguments}|{gamebook}| % \end{center} % With respect to the \emph{optional arguments}, you have the following ones % available: % \begin{itemize} % \item\texttt{debug}: Print the label ids of the referenced sections each % time you refer to a section. % \item\texttt{draft}: Print drafting information (time etc.) on each page. % \end{itemize} % % The available commands and environments are described in the following. % % \section*{Usage} % \DescribeMacro{\gbsection} % The |\gbsection|\marg{id} macro is the core of the package, defining the different % (numbered) sections of the gamebook. It takes one mandatory argument that % specifies the reference id (just as you would with a |\label| command. % % \DescribeMacro{\gbturn} % \noindent The |\gbturn|\marg{id} macro prints a link to a numbered section of the % gamebook. % It takes one mandatory argument that specifies the reference id of the respective % section (as defined using the |\gbsection| macro). By default, there is a text % before the link: ``turn~to''. You can change this text to your liking by using the % following: % \begin{center} % |\renewcommand{\gbturntext}|\marg{my new text} % \end{center} % % \DescribeEnv{gbturnoptions} % \noindent If there are many options for the reader at the end of one section, you % can use the environment |gbturnoptions| for printing an indented list of these % options. Please note that the items of such a list are declared by using the % \DescribeMacro{\gbitem} |\gbitem| macro. % % \DescribeMacro{\gbvillain} % As in any good gamebook, there is the need for villains and opponents. These are % typeset using the following command: %\begin{center} %|\gbvillain|\marg{villain's name}\marg{skill}\marg{skill level}\marg{life}\marg{life level} %\end{center} % % \DescribeMacro{\gbheader} % In order to have both the first and the last numbered section in the headline of the % page, use the command |\gbheader|. This changes the page style accordingly. It is also % possible to put some text at the opposite side of the header (default ``Gamebook''): %\begin{center} % |\renewcommand{\gbheadtext}|\marg{my new text} %\end{center} % % This is only the formal documentation of the commands, a live example is included with % the package. Please refer to this for details. % % \section*{Todo} % It would be nice to have random figures in the text or fixed figures on a whole left % page (belonging to a certain section on the right page). % % Also, it would be good to customize the layout of sections and references to them % (|\fbox| etc.). % % % \StopEventually{} % \section*{Implementation} % This describes the source code for |gamebook.sty|. The first snippet deals with % the available options and how to process them. % \begin{macrocode} \RequirePackage{ifthen} \newboolean{@debug} \newboolean{@drafting} \DeclareOption{debug}{\setboolean{@debug}{true}} \DeclareOption{draft}{\setboolean{@drafting}{true}} \ProcessOptions\relax % \end{macrocode} % % \begin{macro}{\gbheader} % The packages |fancyhdr| and |extramarks| are used to get the headlines % right, i.e., to print both the first and last numbered section for % navigation within the gamebook. |extramarks| is an add-on for % |fancyhdr| providing commands such as |\firstmark| etc. % |\gbheadtext| is printed on the opposite side of the section numbers % and can be changed as shown in the documentation above. % \begin{macrocode} \RequirePackage{fancyhdr} \RequirePackage{extramarks} \newcommand{\gbheadtext}{Gamebook} \newcommand{\gbheader}{% \pagestyle{fancy}% \renewcommand{\sectionmark}[1]{\markboth{\thesection}{\thesection}}% \fancyhead{}% clear all header fields \fancyhead[LO,RE]{\small\gbheadtext} \fancyhead[RO,LE]{\small\ifthenelse{\equal{\firstleftmark}% {\leftmark}}{\leftmark}{\firstleftmark~--~\leftmark}}% %\fancyfoot{} % clear all footer fields } % \end{macrocode} % \end{macro} % % % For debugging purposes, the reference ids of each section or % reference can be printed (using the |debug| option). This command % should only be used internally, |\gbdebugx| for section headers, % printing the reference id in the margin and |\gbdebug| for all % other places. % \begin{macrocode} \newcommand{\gbdebug}[1]{\protect{\ifthenelse{\boolean{@debug}}% {~\texttt{\scriptsize(#1)}}{\relax}}} \newcommand{\gbdebugx}[1]{\protect{\ifthenelse{\boolean{@debug}}% {\marginpar{\texttt{\scriptsize(#1)}}}{\relax}}} % \end{macrocode} % % % \begin{macro}{\gbsection} % The layout of the numbered sections is achieved using the |titlesec| % package. A section then starts with a boxed, bold number. If you would % like to change this, redefine |\titleformat{\section}| accordingly. % % Based on this, the command |\gbsection| is defined, consisting of an % empty, but numbered section that contains a label (which is the % mandatory parameter of |\gbsection|). % \begin{macrocode} \RequirePackage{titlesec} \titleformat{\section}[block]{% \centering\bfseries}{\fbox{\thesection}}{1em}{\relax} \newcommand{\gbsection}[1]{\section{\label{#1}}\gbdebugx{#1}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\gbturn} % References to numbered sections are typeset using |\gbturn|, which puts the % text defined in |\gbturntext| before the reference. Change |\gbturntext| % for having a different or no text before the reference. The layout of these % references can be changed by redefining |\gbturn|. % \begin{macrocode} \newcommand{\gbturntext}{turn~to~} \newcommand{\gbturn}[1]{\gbturntext{\bfseries\ref{#1}}\gbdebug{#1}}%\fbox % \end{macrocode} % \end{macro} % % % \begin{macro}{\gbvillain} % Villains and other kinds of opponents are typeset within a special % tabbing environment. % \begin{macrocode} \newenvironment{gbtabbing} {\setlength{\topsep}{0pt}% \setlength{\tabbingsep}{0pt}% \setlength{\partopsep}{0pt}% \tabbing}% {\endtabbing} \newcommand{\gbvillain}[5]{% \hfill\begin{gbtabbing}% \hspace{\parindent}\= Sehr sehr langer Name % \= Sehr langer Skill + Wert \= Sehr langer Skill + Wert \kill% \> \textsc{#1} \> #2~#3 \> #4~#5 \\% \end{gbtabbing}% }% % \end{macrocode} % \end{macro} % % % \begin{environment}{gbturnoptions} % In order to offer multiple options as some kind of itemized list, a % special environment (including a dedicated item macro) is created. % \begin{macrocode} \RequirePackage{enumitem} \newlist{gbturnoptions}{itemize}{1} \setlist[gbturnoptions]{% leftmargin=\parindent,labelindent=\parindent,label=} % noitemsep \newcommand{\gbitem}[2]{\item #1\hfill\gbturn{#2}} % \end{macrocode} % \end{environment} % % % In order to print drafting information on each page (if the option |draft| is % enabled, certain configurations are made here. This is probably not useful % for most users and is likely to be removed in future versions. % \begin{macrocode} \ifthenelse{\boolean{@drafting}}{% \RequirePackage{draftwatermark}% \SetWatermarkLightness{0.9} \SetWatermarkScale{.5} % \SetWatermarkText{\today\ at \thistime} \SetWatermarkText{Draft} \RequirePackage{scrtime} % time access \PassOptionsToPackage{draft}{prelim2e} \RequirePackage{prelim2e} \renewcommand{\PrelimWords}{\relax} \renewcommand{\PrelimText}% {\footnotesize[\,\today\ at \thistime\,]}}{\relax} % \end{macrocode} % That's all, folks. % \Finale \endinput