% % \GetFileInfo{gmdocc.cls} % \title{The \pk{gmdocc} Class For \pk{gmdoc} Driver Files\thfileinfo} % \author{Natror (Grzegorz Murzynowski)} % \maketitle % % \begin{copyrnote} % %% Written by Natror (Grzegorz Murzynowski), %% natror at o2 dot pl %% %% \copyright\,2006, 2007 by Natror (Grzegorz Murzynowski). %% %% This program is subject to the \LaTeX\ Project Public License. %% See ^^A %% \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html} ^^A %% for the details of that license. %% %% LPPL status: "author-maintained".\par %% % %\end{copyrnote} % % \RecordChanges % \ChangesStart{v0.677}{1000/00/00} % % \chschange{v0.69}{06/10/1}{81} % \chschange{v0.70}{06/10/10}{98} % \chschange{v0.71}{06/10/21}{114} % \chschange{v0.72}{06/11/14}{122} % \chschange{v0.73}{06/12/1}{128} % \chschange{v0.75}{2007/3/2}{130} % \chschange{v0.76}{2007/11/13}{257} % \chschange{v0.77}{2007/11/16}{262} % \chschange{v0.78}{2007/11/19}{267} % \chschange{v0.79}{2008/8/3}{271} % \chschange{v0.79}{2008/8/9}{271} % \chschange{v0.80}{2008/8/30}{276} % \chschange{v0.80}{2008/10/8}{275} % \NeedsTeXFormat{LaTeX2e} \ProvidesClass{gmdocc} [2008/10/08 v0.81 a class for gmdoc driver files (GM)] % % \division{Intro} %% %% This file is a~part of \pk{gmdoc} bundle and provides a~document %% class for the driver files documenting \LaTeXpar\ packages \&a.\ %% with my \pk{gmdoc.sty} package. It's not necessary, of course: most %% probably you may use another document class you like. %% %% By default this class loads \pk{mwart} class with a4paper (default) %% option and \pk{lmodern} package with T1 fontencoding. It loads also %% my \pk{gmdoc} documenting package which loads some auxiliary %% packages of mine and the standard ones. %% %% If the \pk{mwart} class is not found, the standard \pk{article} %% class is loaded instead. Similarly, if the \pk{lmodern} is not %% found, the standard Computer Modern font family is used in the %% default font encoding. %% % % \division{Usage} % % For the ideas and details of \pk{gmdoc}ing of the \LaTeXpar\ files % see the \pk{gmdoc.sty} file's documentation (chapter \ref{gmd}). The % r\ocircum le of the \pk{gmdocc} document class is rather auxiliary and % exemplary. Most probably, you may use your favourite document class % with the settings you wish. This class I~wrote to meet my needs of % fine formatting, such as not numbered sections and sans serif demi % bold headings. % % However, with the users other than myself in mind, I~added some % conditional clauses that make this class works also if an \pk{mwcls} % class or the \pk{lmodern} package are unknown. \dekmedskip % % Of rather many options supported by \pk{gmdoc.sty}, this class % chooses my favourite, i.e., the default. An exception is made for % the \TextUsage*{noindex} option, which is provided by this class and % passed to \pk{gmdoc.sty}. This is intended for the case you don't % want to make an index. % % Simili modo, the \TextUsage*{nochanges} option is provided to turn % creating the change history off. % % Both of the above options turn the \emph{writing out to the files} % off. They don't turn off |\PrintIndex| nor |\PrintChanges|. (Those % two commands are no-ops by themselves if there's no \file{.ind} % (n)or \file{.gls} file respectively.) % \dekmedskip % % One more option is \TextUsage*{outeroff}. It's intended for % compiling the documentation of macros defined with the |\outer| % prefix. It |\relax|es this prefix so the `|\outer|' macros' names can % appear in the arguments of other macros, which is necessary to % pretty mark and index them. % % I~decided not to make discarding |\outer| the default because % it seems that \LaTeX\ writers don't use it in general and % \pk{gmdoc.sty} \emph{does} make some use of it. % \dekmedskip % % This class provides also the \TextUsage*{debug} option. It turns the % |\if@debug| Boolean switch True and loads the \pk{trace} package that % was a~great help to me while debugging \pk{gmdoc.sty}. % \dekmedskip % % The default base document class loaded by \pk{gmdocc.cls} is Marcin % Woli\nacute ski \pk{mwart}. If you have not installed it on your % computer, the standard \pk{article} will be used. % % Moreover, if you like MW's classes (as I~do) and need |\chapter| % (for multiple files' input e.g.), you may declare another \pk{mwcls} % with the option homonimic with the class'es name: \TextUsage*{mwrep} % for \pk{mwrep} and \TextUsage*{mwbk} for \pk{mwbk}. For the symmetry % there's also \TextUsage*{mwart} option (equivalent to the default % setting). % % The existence test is done for any MW class option as it is in the % default case. % % Since version 0.99g (November 2007) the bundle goes \XeTeX\ and that % means you can use the system fonts if you wish, just specify the % \TextUsage*{sysfonts} option and the three basic \XeTeX-related % packages (\pk{fontspec}, \pk{xunicode} and \pk{xltxtra}) will be % loaded and then you can specify fonts with the \pk{fontspec} % declarations. For use of them check the driver of this documentation % where the \TeX\ Gyre Pagella font is specified as the default Roman. % % \stanza % The \TextUsage\EOFMark\ in this class typesets like this (of % course, you can redefine it as you wish):\par\EOFMark % % \StopEventually\NoEOF % % \division{The Code} \RequirePackage{xkeyval} % A~shorthands for options processing (I~know \pk{xkeyval} to little % to redefine the default prefix and family). % \HideDefining\DeclareOptionX \newcommand*\gm@DOX{\DeclareOptionX[gmcc]<>} \newcommand*\gm@EOX{\ExecuteOptionsX[gmcc]<>} % \ResumeDefining\DeclareOptionX % \DeclareDefining*[prefix=\bslash gmcc@]\gm@DOX % We define the |class| option. I~prefer the \pk{mwcls}, but you can % choose anything else, then the standard \pk{article} is loaded. % Therefore we'd better provide a~Boolean switch to keep the score of % what was chosen. It's to avoid unused options if \pk{article} is % chosen. \newif\ifgmcc@mwcls % Note that the following option defines |\gmcc@class#1|. \gm@DOX{class}{% the default will be Marcin Woli\nacute ski class % (\pk{mwcls}) analogous to \pk{article}, see line \ref{EOXmwart}. \def\gmcc@CLASS{#1}% \@for\gmcc@resa:=mwart,mwrep,mwbk\do {% \ifx\gmcc@CLASS\gmcc@resa\gmcc@mwclstrue\fi}% } \gm@DOX{mwart}{\gmcc@class{mwart}}% The \pk{mwart} class may also % be declared explicitly. \gm@DOX{mwrep}{\gmcc@class{mwrep}}% If you need % chapters, this option chooses an MW class that corresponds to % \pk{report}, \gm@DOX{mwbk}{\gmcc@class{mwbk}}% and this MW class % corresponds to \pk{book}. \gm@DOX{article}{\gmcc@class{article}}% you can also % \emph{choose} \pk{article}. % A~meta-remark: When I~tried to do the most natural thing, to % |\ExecuteOptionsX| inside such declared option, an error occured: % 'undefined control sequence \inverb|\XKV@resa -> \@nil|'. \gm@DOX{outeroff}{\let\outer\relax}% This option allows % |\outer|-prefixed macros to be \pk{gmdoc}-processed with all the % bells and whistles. \newif\if@debug \gm@DOX{debug}{\@debugtrue}% This option causes \pk{trace} to % be loaded and the Boolean switch of this option may be used to hide % some things needed only while debugging. \gm@DOX{noindex}{% \PassOptionsToPackage{noindex}{gmdoc}}% This % option turns the writing outto \file{.idx} file off. \newif\if@gmccnochanges \gm@DOX{nochanges}{\@gmccnochangestrue}% This option turns the % writing outto \file{.glo} file off. \gm@DOX{gmeometric}{}% The \pk{gmeometric} package % causes the |\geometry| macro provided by \pk{geometry} package % is not restricted to the preamble. % % Since version 0.99g of \pk{gmdoc} the bundle goes \XeTeX\ and that % means \pk{geometry} should be loaded with |dvipdfm| option and the % |\pdfoutput| counter has to be declared and that's what % \pk{gmeometric} does by default if with \XeTeX. And \pk{gmeometric} % has passed enough practical test. Therefore the |gmeometric| option % becomes obsolete and the package is loaded always instead of % original \pk{geometry}. % % \stanza As already mentioned, since version % 0.99g the \pk{gmdoc} bundle goes \XeTeX. That means that if \XeTeX\ % is detected, we may load the \pk{fontspec} package and the other two % of basic three \XeTeX-related, and then we |\fontspec| the fonts. % But the default remains the old way and the new way is given as the % option below. \newif\ifgmcc@oldfonts \gm@DOX{sysfonts}{\gmcc@oldfontsfalse} % Now we define a~key-val option that sets the version of marginpar % typewriter font definition (relevant only with the |sysfonts| % option). 0 for OpenType \acro{LMTT LC} visible for the system (not on my % computer), 1 for \acro{LMTT LC} specially on my computer, any else number to avoid an % error if you don't have OpenType \acro{LMTT LC} installed (and leave the % default \pk{gmdoc}'s definition of |\marginpartt|; all the versions % allow the user to define marginpar typewriter \himher self). \gm@DOX{mptt}[17]{\def\mpttversion{#1}}% the default value (17) works if % the user puts the |mptt| option with no value. In that case leaving % the default \pk{gmdoc}'s definition of marginpar typewriter and % letting the user to redefine it \himher self seemed to me most natural. \def\gmcc@setfont#1{% \gmcc@oldfontsfalse% note that if we are not in \XeTeX, this switch % will be turned true in line \ref{ofstrue} \AtBeginDocument{% \@ifXeTeX{% \defaultfontfeatures{Numbers={OldStyle,Proportional}}% \setmainfont[Mapping=tex-text]{#1}% \setsansfont[Mapping=tex-text, Scale=MatchLowercase]{Latin Modern Sans}% \setmonofont[Scale=MatchLowercase]{Latin Modern Mono}% \let\sl\it \let\textsl\textit }{}}% } \gm@DOX{minion}{\gmcc@setfont{Minion Pro}} \gm@DOX{pagella}{\gmcc@setfont{TeX Gyre Pagella}% \def\gmcc@PAGELLA{1}% } \gm@DOX{fontspec}{\PassOptionsToPackage{#1}{fontspec}} % \changes{v0.80}{2008/08/30}{added} \gm@EOX{class=mwart}% \label{EOXmwart}We set the default basic class to % be \pk{mwart}. \gm@EOX{mptt=0}% We default to set the marginpar typewriter font to % OpenType \acro{LMTT LC}. % \HideDefining\DeclareOptionX \DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{gmdoc}} \ProcessOptionsX[gmcc]<> % \newif\ifSecondClass^^A~to assure \TeX knows ifSecondClass % ^^A switch and therefore it counts the fis properly. % \iffalse It's for cooperation with my another class. (Feature under % construction.) \XKV@ifundefined{ifSecondClass}{% \newif\ifSecondClass}{} %\fi\fi % \skiplines \ifSecondClass\else % \endskiplines \ifgmcc@mwcls \IfFileExists{\gmcc@CLASS.cls}{}{\gmcc@mwclsfalse}% As % announced, we do the ontological test to any \pk{mwcls}. \fi \ifgmcc@mwcls \XKV@ifundefined{XeTeXdefaultencoding}{}{% \XeTeXdefaultencoding "cp1250"}% \pk{mwcls} are encoding-sensitive % because MW uses Polish diacritics in the commentaries. \LoadClass[fleqn, oneside, noindentfirst, 11pt, withmarginpar, sfheadings]{\gmcc@CLASS}% \XKV@ifundefined{XeTeXdefaultencoding}{}{% \XeTeXdefaultencoding "utf-8"}% \else \LoadClass[fleqn, 11pt]{article}% Otherwise the standard \pk{article} is % loaded. \fi % \skiplines \fi % of ifSecondClass'es \cs{else} (a~feature under construction).\endskiplines \RequirePackage{gmutils}[2008/10/08]% we load it early to provide \incs{@ifXeTeX}. \ifgmcc@mwcls\afterfi\ParanoidPostsec\fi \@ifXeTeX{}{\gmcc@oldfontstrue} % \label{ofstrue} \AtBeginDocument{\mathindent=\CodeIndent} % The |fleqn| option makes displayed formul\ae\ be flushed left and % |\mathindent| is their indentation. Therefore we ensure it is always % equal |\CodeIndent| just like |\leftskip| in \env{verbatim}. Thanks % to that and the |\edverbs| declaration below you may display single % verbatim lines with |\[...\]|: % \[\verb+\[|\verbatim\stuff|\]+\,.\] \ifgmcc@oldfonts \IfFileExists{lmodern.sty}{% We also examine the ontological status of % this package \RequirePackage{lmodern}% and if it shows to be satisfactory (the % package shows \emph{to be}), we load it and set the proper % font encoding. \RequirePackage[T1]{fontenc}% }{}% % A~couple of diacritics I~met while \pk{gmdocing} these files and The % Source etc. Somewhy the accents didn't want to work at my \XeTeX\ % settings so below I~define them for \XeTeX\ as respective chars. \def\agrave {\`a}% \def\cacute {\'c}% \def\eacute {\'e}% \def\idiaeres{\"\i}% \def\nacute {\'n}% \def\ocircum {\^o}% \def\oumlaut {\"o}% \def\uumlaut {\"u}% \else% this case happens only with \XeTeX. \let\do\relaxen \do\Finv\do\Game\do\beth\do\gimel\do\daleth% these five caused the % `already defined' error. \let\@zf@euenctrue\zf@euencfalse \XeTeXthree% \def\agrave {\char"00E0 }% \def\cacute {\char"0107 }% Note the space to be sure the number % ends here. \def\eacute {\char"00E9 }% \def\idiaeres{\char"00EF }% \def\nacute {\char"0144 }% \def\oumlaut {\char"00F6 }% \def\uumlaut {\char"00FC }% \def\ocircum {\char"00F4 }% \AtBeginDocument{% \def\ae{\char"00E6 }% \def\l {\char"0142 }% \def\oe{\char"0153 }% }% \fi % Now we set the page layout. \RequirePackage{gmeometric} \def\gmdoccMargins{% \geometry{top=77pt, height=687pt, % =53 lines but the |lines| option % seems not to work 2007/11/15 with \TeX\ Live 2007 and \XeTeX\ % 0.996-patch1 left=4cm, right=2.2cm}} \gmdoccMargins \if@debug% For debugging we load also the \pk{trace} package that was % very helpful to me. \RequirePackage{trace}% \errorcontextlines=100 % And we set an error info parameter. \fi \newcommand*\ifdtraceon{\if@debug\afterfi\traceon\fi} \newcommand*\ifdtraceoff{\if@debug\traceoff\fi} % We load the core package: \RequirePackage{gmdoc} \ifgmcc@oldfonts \@ifpackageloaded{lmodern}{% The Latin Modern font family provides % a~light condensed typewriter font that seems to be the most % suitable for the marginpar CS marking. \def\marginpartt{\normalfont\fontseries{lc}\ttfamily}}{}% \else \def\marginpartt{\fontspec{LMTypewriter10 LightCondensed}}% \fi \ifnum1=0\csname gmcc@PAGELLA\endcsname\relax \RequirePackage{pxfonts,tgpagella,qpxmath}% \fi \raggedbottom \setcounter{secnumdepth}{0}% We wish only the parts and chapters to be % numbered. \renewcommand*\thesection{\arabic{section}}% isn't it redundant at the % above setting? \@ifnotmw{}{% \@ifclassloaded{mwart}{% We set the indentation of Contents: \SetTOCIndents{{}{\quad}{\quad}{\quad}{\quad}{\quad}{\quad}}}{% for \pk{mwart} …\ilrr \SetTOCIndents{{}{\bf9.\enspace}{\quad}{\quad}{\quad}{\quad}{\quad}}}% and for the two other \pk{mwcls}s. \ilrr \pagestyle{outer}}% We set the page numbers to be printed in the % outer and bottom corner of the page. \def\titlesetup{\bfseries\sffamily}% We set the title(s) to be % boldface and sans serif. \if@gmccnochanges\let\RecordChanges\relax\fi% If the |nochanges| % option is on, we discard writing outto the \file{.glo} file. \RecordChanges% We turn the writing the |\changes| outto the % \file{.glo} file if not the above. % \CodeUsgIndex\dekclubs \CodeUsgIndex\smartunder \dekclubs*% We declare the club sign \verb+|+ to be a~shorthand for % |\verb*|\,. % \changes[\edverbs]{v0.74}{2007/01/01}{used to simplify displaying % shortverbs} \edverbs% to redefine |\[| so that it puts a~shortverb in a~|\hbox|. \smartunder% and we declare the |_| char to behave as usual in the % math mode and outside math to be just an uderscore. \exhyphenpenalty\hyphenpenalty% 'cause \pk{mwcls} set it |=10000| due % to Polish customs. %^^A\VerbT1% to ensure T1 font encoding in verbatims (in code). \RequirePackage{amssymb} \def\EOFMark{\rightline{\ensuremath{\square}}} \DoNotIndex{\@nx \@xa %^^A\count \dimen \box \setbox \copy } \endinput % \changes{v0.677}{06/9/23}{Added checkings if \pk{mwart.cls} and % \pk{lmodern.sty} are available and more standard behaviour if they % are not} % % \changes{v0.70}{06/10/10}{Added some options and Latin Modern Light % Condensed to the marginpar CSs.} % % \changes{v0.76}{2007/10/30}{The \cs[]{gmeometric} option made % obsolete and the \pk{gmeometric} package is loaded always, for % \XeTeX-compatibility. And the class options go \pk{xkeyval}.} % % \changes{v0.77}{2007/11/16}{Bug fix of sectioning commands in % \pk{mwcls} and the default font encoding for \TeX ing old way % changed from \acro{QX} to \acro{T1} because of the `corrupted % \acro{NTFS} tables' error} % % \changes{v0.78}{2007/11/19}{Added the \env{pagella} option not to % use Adobe Minion Pro that is not freely licensed} % % \Finale % (For my GNU Emacs:) %%% Local Variables: %%% mode: doctex %%% TeX-master: "../../../../LaTeX/TeXGuru/gmdoc/gmdocDoc" %%% End: