% \iffalse meta-comment % % Copyright (C) 2007-08 by % Joseph Wright % % This work 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 2003/12/01 or later. % % This work has the LPPL maintenance status `maintained.' % % The current maintainer of this work is Joseph Wright. % % This work consists of the source file chemscheme.dtx and % chemscheme.cdx % and the derived files chemscheme.ins, % chemscheme.sty, % chemscheme.pdf, % chemscheme-manual.pdf, % chemscheme-demo.ltx, % scheme-one.eps, % scheme-two.eps, % jawltxdoc.sty and % % TDS-ready files: % The compressed file chemscheme.tds.zip contains an unpacked % version of all of the files included here, and pre-compiled % documentation in PDF format. Simply decompress % chemscheme.tds.dtx in your local TeX directory, run your hash % program (texhash, initexmf --update-fndb, etc.) and everything % will be ready to go. The user documentation for the package is % called chemscheme-manual.pdf; the file chemscheme.pdf includes % the user manual and the fully-indexed source code. % % Unpacking: % (a) If chemscheme.ins is present: % tex chemscheme.ins % (b) Without chemscheme.ins: % tex chemscheme.dtx % (c) If you use LaTeX to generate files: % latex \let\install=y\input{chemscheme.dtx} % % Documentation: % (a) Without write18 enabled: % latex chemscheme.dtx % (Comment out "inactive" line in driver where indicated) % latex chemscheme.dtx % dvips -o chemscheme-pics.ps chemscheme.dvi % ps2pdf chemscheme-pics.ps % bibtex8 --wolfgang chemscheme.aux % makeindex -s gind.ist chemscheme.idx % makeindex -s gglo.ist -o chemscheme.gls chemscheme.glo % pdflatex chemscheme.dtx % pdflatex chemscheme.dtx % (b) With write18 enabled: % latex chemscheme.dtx % (Comment out "inactive" line in driver where indicated) % latex chemscheme.dtx % pdflatex chemscheme.dtx % pdflatex chemscheme.dtx % pdflatex chemscheme.dtx % % Installation: % Copy chemscheme.sty and the various .cfg files to a location % searched by TeX, and if required by your TeX installation, run % the appropriate command to build a hash of files (texhash, % initexmf --update-fndb, etc.) % % Note: % The jawltxdoc.sty file is not needed for installation, % only for building the documentation; it may be deleted % after producing the documentation (if necessary). % %<*ignore> % This is all taken verbatim from Heiko Oberdiek's packages \begingroup \def\x{LaTeX2e}% \expandafter\endgroup \ifcase 0\ifx\install y1\fi\expandafter \ifx\csname processbatchFile\endcsname\relax\else1\fi \ifx\fmtname\x\else 1\fi\relax \else\csname fi\endcsname % %<*install> \input docstrip.tex \keepsilent \askforoverwritefalse \preamble ---------------------------------------------------------------- The chemstyle bundle --- Schemes and style for chemistry Maintained by Joseph Wright E-mail: joseph.wright@morningstar2.co.uk Released under the LaTeX Project Public License v1.3 or later See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- \endpreamble \Msg{Generating chemscheme files:} \generate{\file{jawltxdoc.sty}{\from{\jobname.dtx}{jawltxdoc}} } \usedir{tex/latex/chemstyle} \generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}} } \usedir{source/latex/chemstyle} \generate{\file{\jobname.ins}{\from{\jobname.dtx}{install}} } \nopreamble \usedir{doc/latex/chemstyle} \generate{\file{\jobname.bib}{\from{\jobname.dtx}{refs}} } \nopreamble\nopostamble \usedir{doc/latex/chemstyle} \generate{\file{scheme-one.eps}{\from{\jobname.dtx}{scheme}} \file{scheme-two.eps}{\from{\jobname.dtx}{scheme,labels}} \file{chemscheme-demo.ltx}{\from{\jobname.dtx}{demo}} } \endbatchfile % %<*ignore> \fi % Will Robertson's trick \immediate\write18{bibtex8 --wolfgang \jobname} \immediate\write18{makeindex -s gind.ist -o \jobname.ind \jobname.idx} \immediate\write18{makeindex -s gglo.ist -o \jobname.gls \jobname.glo} \immediate\write18{dvips -o \jobname-pics.ps \jobname.dvi} \immediate\write18{ps2pdf \jobname-pics.ps} % %<*driver> \PassOptionsToClass{a4paper}{article} \documentclass[german,english,UKenglish]{ltxdoc} \EnableCrossrefs \CodelineIndex \RecordChanges %\OnlyDescription \usepackage{jawltxdoc} % A bit of one-off trickery for this package % Use the method described in the documentation if you % want to compile this DTX using PDFLaTeX \usepackage[final % Comment out the next line when using PDFLaTeX after the initial % LaTeX run! % ,inactive ]{pst-pdf} \begin{document} \DocInput{\jobname.dtx} \end{document} % % \fi % %\CheckSum{404} % % \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 \~} % % \GetFileInfo{\jobname.sty} % % \changes{v1.0}{2007/07/21}{Initial public release} % \changes{v1.1}{2007/08/05}{Added float centring code} % \changes{v1.2}{2007/08/18}{Removed \texttt{chapter} option} % \changes{v1.2}{2007/08/18}{Improved emulation of standard float % types} %\changes{v1.2a}{2007/09/19}{License changed from GPL to LPPL} %\changes{v1.2a}{2007/09/19}{Documentation for PDF use added} %\changes{v1.3}{2007/10/04}{Improved French and German % \texttt{babel} support} %\changes{v1.4}{2008/06/24}{Added support for \pkg{floatrow}} % %\setkeys{lst}{language=[LaTeX]{TeX},moretexcs={}} % %\DoNotIndex{\@arabic,\@chapter,\@ifclassloaded,\@ifnextchar} %\DoNotIndex{\@ifpackageloaded,\@ifundefined,\@ne,\@tempa,\@tempb} %\DoNotIndex{\@undefined,\‘,\addto,\addtocontents,\addtodef} %\DoNotIndex{\addvspace,\advance,\AtBeginDocument,\backmatter} %\DoNotIndex{\begin,\c@chapter,\caption,\captionsfrench} %\DoNotIndex{\captionsfrenchb,\captionsgerman,\captionsngerman} %\DoNotIndex{\centering,\cftsetindents,\CNlabel,\CNlabelsub} %\DoNotIndex{\compound,\counterwithin,\counterwithout,\csname} %\DoNotIndex{\DeclareNewFloatType,\DeclareVoidOption,\def} %\DoNotIndex{\define@key,\documentclass,\edef,\else,\end,\endcsname} %\DoNotIndex{\expandafter,\FB@makecaption,\fi,\floatname,\floatsetup} %\DoNotIndex{\ifartopt,\IfLanguageName,\ifnum,\ifx,\includegraphics} %\DoNotIndex{\insertchapterspace,\kill@lastcounter,\label} %\DoNotIndex{\languagename,\let,\listof,\lowercase,\MessageBreak} %\DoNotIndex{\NeedsTeXFormat,\newcommand,\newcount,\newcounter} %\DoNotIndex{\newfloat,\newif,\newlistentry,\newlistof,\p@} %\DoNotIndex{\PackageError,\PackageInfo,\PackageWarning} %\DoNotIndex{\ProcessKeyvalOptions,\protect,\ProvidesPackage} %\DoNotIndex{\psfrag,\raggedleft,\relax,\renewcommand} %\DoNotIndex{\RequirePackage,\scshape,\selectlanguage,\setcounter} %\DoNotIndex{\SetupKeyvalOptions,\space,\string,\textsf,\the} %\DoNotIndex{\thechapter,\usepackage,\z@} % % \title{\texttt{chemscheme} --- Support for chemical schemes% % \thanks{This file describes version \fileversion, last revised % \filedate.}} % \author{Joseph Wright% % \thanks{E-mail: joseph.wright@morningstar2.co.uk}} % \date{Released \filedate} % % \maketitle % %\newcommand*{\flttype}[1]{\texttt{#1}} %\begin{abstract} % The \currpkg package consists of two parts, both related to % chemical schemes. The package adds a \flttype{scheme} float type % to the \LaTeX\ default types \flttype{figure} and \flttype{table}. % The \flttype{scheme} float type acts in the same way as those % defined by the \LaTeX\ kernel, but is intended for chemical % schemes. The package also provides a method for adding automatic % chemical numbering to schemes. %\end{abstract} % %\begin{multicols}{2} %\tableofcontents %\end{multicols} % %\section{Introduction} % By default, \LaTeX\ defines two float types, \flttype{figure} and % \flttype{table}. Synthetic chemists make heavy use of schemes, % which need a \flttype{scheme} float type. This is provided by % \currpkg, in a manner consistent with the kernel floats. % % Synthetic chemists also number compounds for ease of reference. % There are a number of \LaTeX\ packages which cover this area, most % notably \pkg{bpchem} and \pkg{chemcompounds}. However, adding % numbers automatically to schemes is not covered by any existing % package. The \currpkg package seeks to rectify this. %\floatcontentscentre % %\section{Floating schemes} %\subsection{Basic use} %\DescribeEnv{scheme} % The package provides a new float type, scheme, accessed in the % usual way. %\begin{LaTeXexample}[float] % \begin{scheme}[ht] % \includegraphics{scheme-one} % \caption{A scheme with no compound numbers.} % \end{scheme} %\end{LaTeXexample} % The \flttype{scheme} float is designed to behave in the same way as % the standard \LaTeX\ float environments \flttype{figure} and % \flttype{table}. Thus schemes will be placed at the top of a page, % where possible. As shown in the example, the use of positional % modifiers is allowed. Labelling and referencing schemes also % follows the \LaTeX\ conventions. \currpkg works hard to emulate % the document class in use, and so the exact behaviour will depend % on whether the standard classes, \textsc{koma}-Script or % \pkg{memoir} are being used. % %\DescribeMacro{\listofschemes} %\DescribeMacro{\listschemename} % To match the \cs{listoffigures} and \cs{listoftables} macros % provided by the \LaTeX\ kernel, \currpkg provides a % \cs{listofschemes} command. This works in the same way as the % kernel commands, with the default text stored in the macro % \cs{listschemename}. Users upgrading from version 1.1 should note % the change of macro name (from \cs{listscheme}). This is to bring % \currpkg into line with the \LaTeX\ kernel naming convention. Also % notice that \cs{listofschemes} no longer accepts an optional % argument. The standard output is illustrated below. %\begin{LaTeXexample}[resultonly] % \listofschemes %\end{LaTeXexample} % %\subsection{Altering the defaults} %\DescribeOption{floats} % There are a number of methods available to generate new float % types. The \pkg{memoir} class can do this internally, or the % \pkg{float} or \pkg{floatrow} packages can be loaded to provide the % necessary system. When \pkg{memoir} is used, \currpkg uses the % internal systems for generating new floats; for the standard % classes, \pkg{floatrow} is used by default. The \opt{floats} % package option can be used to control which method is employed. % This uses the key--value system, can can be given the values % \opt{float}, \opt{floatrow} or \opt{memoir}: %\begin{LaTeXexample}[noexample] % \usepackage[floats=float]{chemscheme} %\end{LaTeXexample} % or %\begin{LaTeXexample}[noexample] % \usepackage[floats=floatrow]{chemscheme} %\end{LaTeXexample} % or %\begin{LaTeXexample}[noexample] % \usepackage[floats=memoir]{chemescheme} %\end{LaTeXexample} % The package will use the specified method if available (so % \opt{memoir} only works if using the \pkg{memoir} class!). If % either \pkg{float} or \pkg{floatrow} is loaded before \currpkg, % this forces the choice. % %\DescribeMacro{\schemename} % \cs{schemename} contains the text used in scheme captions (by % default \schemename). This is used in the same manner as % \cs{figurename} or \cs{tablename} to set up the text used in scheme % captions. %\begin{LaTeXexample}[float] % \renewcommand*{\schemename}{Illustration} % \begin{scheme}[ht] % \includegraphics{scheme-one} % \caption{A scheme that is not a Scheme!} % \end{scheme} %\end{LaTeXexample} % % %\subsection{\pkg{babel} support} % Schemes are provided with some support for \pkg{babel}. Currently, % in addition to English, \currpkg provides alternatives for % \cs{schemename} and \cs{listschemename} in French and German. Users % of other languages are encouraged to supply suitable translations % for inclusion in future versions of \currpkg. % %\section{Horizontal positioning of all floats} %\DescribeMacro{\floatcontentscentre} %\DescribeMacro{\floatcontentscenter} %\DescribeMacro{\floatcontentsleft} %\DescribeMacro{\floatcontentsright} % The \LaTeX\ default is to position all float contents flush-left. % There is no ``hook'' provided to alter this. The \currpkg packages % therefore provides commands to align all float contents % automatically. As the macro names make clear, % \cs{floatcontentscentre} will make all floats centred (for users % speaking U.S.~English, the alternative spelling % \cs{floatcontentscenter} is also available). The default behaviour % is restored using the command \cs{floatcontentsleft}. Finally, % \cs{floatcontentsright} is provided for use if needed. Notice that % the float positioning commands should be given \emph{outside} % floating environments, and apply to all subsequent floats. %\begin{LaTeXexample}[float] % \floatcontentsleft % \begin{scheme}[ht] % \includegraphics{scheme-one} % \caption{A flush-left scheme.} % \end{scheme} % \floatcontentsright % \begin{scheme}[ht] % \includegraphics{scheme-one} % \caption{A flush-right scheme.} % \end{scheme} % \floatcontentscentre %\end{LaTeXexample} % % It is important to note that the positioning mechanism used here % relies on a low-level hack of the \LaTeX\ kernel. This has been % tested with the standard \LaTeX\ classes, the \pkg{memoir} class % and the \textsc{koma}-Script bundled. Other document classes may % not give the desired behaviour. % %\section{Reference numbers in graphics} %\subsection{Background} % There are a number of packages available on \CTAN\ for tracking % compound reference numbers. The two with the most up to date and % comprehensive features are \pkg{bpchem} and \pkg{chemcompounds}. % Both allow in-text numbering to be handled automatically. However, % neither will allow the use of these numbers directly in schemes, % figures, \etc. Both leave it to the user to manually adapt schemes % to match any changes in numbering. % % The \currpkg package provides a mechanism for rectifying this % issue. The package makes use of the \pkg{psfrag} package, which % means that it can only directly produce DVI output (using \LaTeX). % However, direct PDF output using PDF\LaTeX\ is possible: see % Section~\ref{subsec:pdf}. % %\DescribeMacro{\chemschemeref} %\DescribeMacro{\chemschemerefsub} % Users upgrading from v1.2 should note that ``\texttt{chem}'' has % been removed from the start of most macro names. The main % referencing commands \cs{chemschemeref} and \cs{chemschemerefsub} % are retained for backward compatibility. % %\subsection{Usage} % Getting automated numbers into schemes is a two step procedure. In % the first step, schemes (or other graphics) should be prepared as % normal and saved as encapsulated postscript (EPS) files The most % popular chemistry drawing package, \textsc{ChemDraw}, is able to do % this from the \texttt{Save As \ldots} dialog. %\DescribeMacro{\schemerefmarker} % The positions where the auto-labels should be have to be marked in % the EPS file. The marker should consist of an ``indicator'' that % the text is to be replaced, followed by a reference number or % letter. For automated substitution, the ``indicator'' text should % be the same in all graphics; the value it is stored in % \cs{schemerefmarker}, and has default value % \textsf{\schemerefmarker}. Thus the graphics should contain labels % \textsf{\schemerefmarker1}, \textsf{\schemerefmarker2}, \etc. A % suitable unmodified graphic is shown in in the next example. %\begin{LaTeXexample}[float] % \begin{scheme}[ht] % \includegraphics{scheme-two} % \caption{A scheme with temporary compound numbers.} % \end{scheme} %\end{LaTeXexample} % The value of \cs{schemerefmarker} may be altered as normal, % so for example to use \textsf{XXX} as the indicator for % replacement in all graphics, you would execute: %\begin{LaTeXexample}[noexample] % \renewcommand*{\chemeschemerefmarker}{XXX} %\end{LaTeXexample} % %\DescribeMacro{\schemeref} % In the second step, the command \cs{schemeref} is used to indicate % the mapping of the temporary markers to the automatically-managed % numbering. The syntax of the command is % \cs{chemschemeref}\oarg{temp-marker}\marg{label}, where % \meta{temp-marker} is the marker used in the graphic, and % \meta{label} is the name assigned to the compound by the user. By % default, \currpkg will assume that \meta{temp-marker} consists of % the marker plus a number, beginning at 1 and incrementing by 1 for % each additional structure inside one float. Each replacement % requires a separate \cs{chemschemeref}, all of which should appear % before the relevant \cs{includegraphics} command. % % An example will make usage clearer. In the example used in this % document, the starting material is given label \texttt{IMesHCl} and % the product is called \texttt{IMes}. As is shown in the next % example, in the EPS file these are labelled \textsf{TMP1} and % \textsf{TMP2}, respectively. The automated package defaults are % used. %\begin{LaTeXexample}[float] % \begin{scheme}[ht] % \schemeref{IMesHCl} % \schemeref{IMes} % \includegraphics{scheme-two} % \caption{A scheme with automated compound numbers.} % \end{scheme} %\end{LaTeXexample} % With user-specified information on the text to be replaced, the % entire text to be matched must be given.\footnote{In this example, % this is redundant as the automated system will work fine.} %\begin{LaTeXexample}[float] % \begin{scheme}[ht] % \schemeref[TMP1]{IMesHCl} % \schemeref[TMP2]{IMes} % \includegraphics{scheme-two} % \caption{A scheme with explicitly numbered temporary labels.} % \end{scheme} %\end{LaTeXexample} % Notice that the new label is centred on the middle of the temporary % marker, with the same baseline. This should allow the user to % obtain good alignment of labels and structures. % %\DescribeMacro{\schemerefsub} % As described in Section~\ref{packages}, \currpkg supports % \pkg{bpchem}, which allows tracking of sub-labels (\textbf{1a}, % \textbf{1b}, \etc). To allow use of these in schemes, the % \cs{schemerefsub} command is provided. This takes an additional % argument \marg{sub-label}, which is used to generate the % appropriate text. When used with \pkg{chemcompounds}, this command % will gobble its arguments and issue a warning; no substitution will % take place. % %\DescribeMacro{\schemerefformat} % The format of chemical references is controlled by the underlying % package, \pkg{bpchem} or \pkg{chemcompounds}. However, it is % useful to be able to specify additional formatting for schemes. By % default, \currpkg formats all reference numbers in a sans serif % font. This is controlled by \cs{schemerefformat}. %\begin{LaTeXexample}[float] % % This needs the color or xcolor package loaded % \renewcommand*{\schemerefformat} % {\color{magenta}\textit} % \begin{scheme}[ht] % \schemeref{IMesHCl} % \schemeref{IMes} % \includegraphics{scheme-two} % \caption{A scheme with altered label formatting.} % \end{scheme} %\end{LaTeXexample} % The additional formatting applied within schemes may be altered by % redefining \cs{schemerefformat}. By careful choice of the % font commands given here, good visual matching should be obtained % between the automatically-generated labels and other text in the % scheme. In this document, the \textsc{ChemDraw} source uses 10 % point Arial, with the \LaTeX\ sans serif font provided by the % \pkg{helvet} package, loaded scaled to 95\,\%, \ie: %\begin{LaTeXexample}[noexample] % \usepackage[scaled=0.95]{helvet} %\end{LaTeXexample} % The \textsc{ChemDraw} file used to generate the example schemes is % included with the package as \file{chemscheme.cdx}. % %\iffalse %<*demo> %\fi %\subsection{\currpkg and % \texorpdfstring{PDF\LaTeX}{PDFLaTeX}\label{subsec:pdf}} % The automatic substitution of numbers in graphics relies on the the % \pkg{psfrag} package. This works with \textsc{PostScript} files, % and cannot therefore be used with PDF\LaTeX. However, all is not % lost as the \pkg{pst-pdf} package provides a method for including % \textsc{PostScript} files in a PDF\LaTeX\ run. However, this is % not automatic and some effort is needed by the user.\footnote{The % rest of this section is based closely on an example by Stefan % Pinnow.} The example below shows a example for using PDF\LaTeX\ % with \currpkg. % \begin{macrocode} \documentclass{article} \usepackage[T1]{fontenc} \usepackage{graphicx,chemscheme} % Remove `inactive' after the first LaTeX run \usepackage[inactive,final]{pst-pdf} \begin{document} \floatcontentscentre An example file for PDFLaTeX use. \begin{scheme} \schemeref{IMesHCl} \schemeref{IMes} \includegraphics{scheme-two} \caption{A scheme with automated compound numbers.} \label{sc:scheme-one} \end{scheme} \end{document} % \end{macrocode} %\iffalse % %\fi % % First you need to run the file through \LaTeX, so your package can % make the replacements in the picture. Then you need another run % through \LaTeX\ with the \opt{inactive} option \pkg{pst-pdf} % removed so that the modified pictures are extracted.\footnote{You % can simply do the first \LaTeX\ run without loading \pkg{pst-pdf} % at all, if you prefer.} Do not worry that you end up with a very % odd looking DVI! Then you have to convert the extracted pictures to % PDF by the following commands %\begin{verbatim} % dvips -o \jobname-pics.ps \jobname.dvi % ps2pdf \jobname-pics.ps %\end{verbatim} % This converts the modified graphics into PDF format. After this, % you can use PDF\LaTeX\ as normal for your schemes. Notice that you % will have to repeat the process if you need to modify the schemes % or numbering in any way. % %\subsection{Managing chemical numbering\label{packages}} %\DescribeOption{bpchem} %\DescribeOption{chemcompounds} %\DescribeOption{tracking} % The \currpkg package can use one of two packages for management of % chemical numbering: \pkg{bpchem} and \pkg{chemcompounds}. As of % v1.3, \pkg{chemcompounds} is the default package for managing % reference numbers.\footnote{The change from \pkg{bpchem} is due to % issues with \pkg{hyperref} support. The method used by % \pkg{bpchem} to generate compound labels means that they are made % into hyperlinks by \pkg{hyperref}, and therefore end up coloured % when using the \opt{colorlinks} option. This is unlikely to be the % desired effect, and \pkg{chemcompounds} does not behave in this % way.} Both packages have advantages: \pkg{bpchem} allows the % tracking of sub-references (very common in organic chemistry), % whilst \pkg{chemcompounds} has a very well thought-out interface. % It is technically feasible to support both simultaneously, but this % is unlikely to have wide application. For this reason, \currpkg % loads only one package, and uses this package to provide numbering % management. The \currpkg package recognises the \opt{bpchem} and % \opt{chemcompounds} to control this; the key--value version % \opt{tracking=\ldots} can also be given. % %\section{Generating chemical schemes} % %\subsection{Overview} % There are a number of ways of generating the graphical content of % schemes. The choice of method will depend on what is available to % the user, and how complex the schemes desired are. In this section, % an overview of several approaches is given.\footnote{Thanks to % Norwid-R.\ Behrnd for suggesting this section and giving a number % of useful examples and tips.} The package author, who is a % research worker in a university, favours using \textsc{ChemDraw} as % it is regarded by many synthetic chemists as the best tool for this % job. However, this is clearly overkill for users requiring a % single diagram on a one-off basis. \textsc{ChemDraw} is also a % commercial package running only under Windows and the MacOS. The % following is necessarily somewhat brief and selective. For a % thorough overview of graphics in \LaTeX, see Goossens % \etal~\cite{Goossens2007}. % %\subsection{Macro-based methods} % At the most basic, a chemical scheme is simply a collection of % lines and symbols, as with any vector diagram. Hence, it is % possible to construct schemes directly using packages such as % PSTricks or \pkg{pgf}/Ti\emph{k}z. This is a complex method, and % cannot be recommended for anyone except the very experienced and % brave. % % At a more practical level, there are two packages available which % allow typesetting of chemical structures in (La)\TeX, using % specialised commands: XyM\TeX\ and ppch\TeX. Recent versions of % the XyM\TeX\ package have not been made available on \CTAN, and the % version held there is therefore considered to be obsolete. On the % other hand, the ppch\TeX\ system, developed originally for % Con\TeX{}t, is available. Both systems suffer from the lack of % chemical logic in the input: it is very hard to tell from the code % what is being represented. Drawing items such as ``curly arrows'', % or making subtle alterations to positioning, is very challenging in % purely macro-based systems. For these reasons, it is usually much % more sensible to examine the available graphical methods. % %\subsection{Graphical methods} % Moving to graphical systems, there is no reason that % general-purpose vector drawing packages cannot be used for schemes. % There are obviously several commercial (\textsc{CorelDraw}, % \textsc{Adobe Illustrator}, \etc) and freeware (for example % the \textsc{gimp}) drawing packages that can be used in this way. % Simply rings and lines can easily be constructed, although in % general-purpose programs the user has to watch that all bonds % are the same length. % % For producing a large number of complex schemes, the particular % abilities of dedicated software become a necessity. As well as the % already-mentioned \textsc{ChemDraw}, programs such as \textsc{ISIS % Draw} and \textsc{ChemSketch} are available free for personal % use;\footnote{``Free'' as in without charge, not as in open % source.} these programs are all Windows specific. In the % open-source arena, there are a number of packages such as % \textsc{XDrawChem} and \textsc{BKchem}, which offer cross-platform % functionality. The differences between the various packages are in % the ease of use, and ability to generate well-formattd output (for % example, aligning structures). % % One which deserves mention for the \TeX\ user is TpX. This is a % general purpose Windows graphics program specifically aimed at % producing \TeX-friendly output (such as PSTricks and \pkg{tikz} % code) from a graphical interface. TpX can accept clipboard data % from other programs, so can be used to produce EPS files from % programs which do not have native export facilities (such as % \textsc{ISIS Draw}). % %\section{Known issues} % % The interaction of the different document classes, with options, % plus the \pkg{babel} system means ensuring every possibility is % covered is impossible. Users are asked to report any problems with % compatibility with other packages or emulation of the standard % float types. Additional \pkg{babel} stings are also welcome, as % are improvements to those already provided. % % \StopEventually{\bibliographystyle{unsrt}\bibliography{chemscheme}} % % \iffalse %<*package> % \fi % % \section{Implementation} % % \subsection{Setup code} %\begin{macro}{\csh@id} % The initial code goes through the usual steps of identifying the % package. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \def\csh@id$#1: #2.#3 #4 #5-#6-#7 #8 #9${% #5/#6/#7\space v1.4\space} \ProvidesPackage{chemscheme} [\csh@id $Id: chemscheme.dtx 36 2008-07-17 07:39:53Z joseph $ Support for chemical schemes] % \end{macrocode} %\end{macro} %\changes{v1.4}{2008/06/19}{Option handling completely re-written} %\begin{macro}{\ifcsh@bpchem} % Package options are handled using the key--value method, with % \pkg{kvoptions} providing the back-end. Most of the code here is % pretty basic; the aim is to set up the correct handling of % float-creation and compound tracking. % \begin{macrocode} \RequirePackage{kvoptions,psfrag,iflang} \SetupKeyvalOptions{ family=csh, prefix=csh@} \newif\ifcsh@bpchem \define@key{csh}{tracking} {\csh@bpchemtrue \lowercase{\edef\@tempa{#1}}% \def\@tempb{bpchem}% \ifx\@tempa\@tempb\else \def\@tempb{chemcompounds}% \ifx\@tempa\@tempb \csh@bpchemfalse \else \PackageError{chemscheme} {Unknown value `#1' for option numbers} {The `tracking' option accepts values `bpchem' and `chemcompounds'}% \fi \fi} \DeclareVoidOption{chemcompounds}{\csh@bpchemfalse} \DeclareVoidOption{bpchem}{\csh@bpchemtrue} \DeclareVoidOption{chapter} {\PackageInfo{chemscheme} {Ignoring obsolete option `chapter'}} % \end{macrocode} %\end{macro} %\begin{macro}{\csh@fltpkg} % The provision of floats can be handled by \pkg{floatrow}, % \pkg{float} or \pkg{memoir}. The user is given an option, but if % one of the packages is already loaded then this has to be taken % into account. % \begin{macrocode} \define@key{csh}{floats} {\lowercase{\renewcommand*{\csh@fltpkg}{#1}}% \def\@tempa{floatrow}% \ifx\csh@fltpkg\@tempa\else \def\@tempa{float}% \ifx\csh@fltpkg\@tempa\else \def\@tempa{memoir}% \ifx\csh@fltpkg\@tempa \@ifclassloaded{memoir}{} {\PackageWarning{chemscheme} {You asked for floats to be created using memoir, \MessageBreak but have used a different document class\MessageBreak Using floatrow instead}% \renewcommand*{\csh@fltpkg}{floatrow}}% \else \PackageError{chemscheme} {Unknown value `#1' for option numbers} {The `floats' option accepts values `float', `floatrow' and `memoir'}% \fi \fi \fi} \@ifpackageloaded{floatrow} {\newcommand*{\csh@fltpkg}{floatrow}% \define@key{csh}{floats} {\PackageInfo{chemscheme}{Package floatrow already loaded\MessageBreak Option `floats' disabled}}} {\@ifpackageloaded{float} {\newcommand*{\csh@fltpkg}{float}% \define@key{csh}{floats} {\PackageInfo{chemscheme}{Package float already loaded\MessageBreak Option `floats' disabled}}} {\@ifclassloaded{memoir} {\newcommand*{\csh@fltpkg}{memoir}} {\newcommand*{\csh@fltpkg}{floatrow}}}} \ProcessKeyvalOptions{csh} % \end{macrocode} %\end{macro} %\changes{v1.4}{2008/06/20}{Float creation rewritten} %\begin{macro}{\csh@load@memoir} %\begin{macro}{\csh@load@float} %\begin{macro}{\csh@load@floatrow} % The necessary support is loaded by using an appropriately-named % macro. For \pkg{memoir}, nothing actually has to be done. % \begin{macrocode} \newcommand*{\csh@load@memoir}{} \newcommand*{\csh@load@float}{% \@ifpackageloaded{float}{} {\let\newfloat\@undefined} \RequirePackage{float,caption}} \newcommand*{\csh@load@floatrow}{% \@ifpackageloaded{floatrow}{} {\let\newfloat\@undefined} \RequirePackage{floatrow,caption}} \csname csh@load@\csh@fltpkg\endcsname % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % %\subsection{Support for schemes} %\begin{macro}{\schemename} %\begin{macro}{\listschemename} %\changes{v1.2}{2007/08/18}{Replaces \cs{listschemes}} % The default name for a scheme, and the default title for the list % of schemes, are provided. Both command names follow the kernel % conventions for figures and tables; unlike the kernel versions, % however, these macros are not \cs{long}. % \begin{macrocode} \newcommand*{\schemename}{Scheme} \newcommand*{\listschemename}{List of Schemes} % \end{macrocode} %\end{macro} %\end{macro} %\begin{environment}{scheme} %\begin{macro}{\listofschemes} %\begin{macro}{\csh@makesch@memoir} %\begin{macro}{\csh@mksch@memoir} %\begin{macro}{\csh@makesch@float} %\begin{macro}{\csh@mksch@float} %\begin{macro}{\csh@makesch@floatrow} % As with package loading, three different macros are defined here to % create the new float type. As well as the basics of creating the % float, some work is needed as adjustments must be made to match the % style of the kernel floats. For the \pkg{floatrow} package, things % have to be done in the preamble, whereas for the others everything % happens later. % \begin{macrocode} \newcommand*{\csh@makesch@memoir}{% \AtBeginDocument{\csh@mksch@memoir}} \newcommand*{\csh@mksch@memoir}{% \newfloat[chapter]{scheme}{los}{\schemename} \kill@lastcounter{losdepth} \renewcommand*{\thescheme}{\thechapter.\@arabic\c@scheme} \addtodef{\@smemfront}{}{\counterwithout{scheme}{chapter}} \addtodef{\@smemmain}{}{% \ifartopt\else \counterwithin{scheme}{chapter} \fi} \addtodef{\backmatter}{}{% \ifartopt\else \counterwithout{scheme}{chapter}% \setcounter{scheme}{0}% \fi} \ifartopt \counterwithout{scheme}{chapter}% \fi \newlistof{listofschemes}{los}{\listschemename} \kill@lastcounter{losdepth} \newlistentry[chapter]{scheme}{los}{0} \cftsetindents{scheme}{0em}{2.3em} \addtodef{\insertchapterspace}{}% {\addtocontents{los}{\protect\addvspace{10pt}}} \@ifundefined{c@losdepth}% {\newcounter{losdepth}\setcounter{losdepth}{1}}{}} \newcommand*{\csh@makesch@float}{% \AtBeginDocument{\csh@mksch@float}} \newcommand*{\csh@mksch@float}{% \@ifundefined{chapter} {\newfloat{scheme}{tbp}{los}} {\newfloat{scheme}{tbp}{los}[chapter]% \csh@fixchapter}% \floatname{scheme}{\schemename} \newcommand*{\listofschemes}{% \listof{scheme}{\listschemename}}} \newcommand*{\csh@makesch@floatrow}{% \DeclareNewFloatType{scheme} {fileext=los,placement=tbp,name=Scheme} \@ifundefined{chapter}{} {\floatsetup[scheme]{within=chapter}% \csh@fixchapter}% \newcommand*{\listofschemes}{% \listof{scheme}{\listschemename}}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\begin{macro}{\csh@fixchapter} %\begin{macro}{\csh@chapter} %\begin{macro}{\@chapter} % When not using \pkg{memoir}, chapters may or may not be defined. % This means a little extra work. % \begin{macrocode} \newcommand*{\csh@fixchapter}{% \@ifundefined{KOMAScriptVersion} {\renewcommand*{\thescheme}{% \ifnum\c@chapter>\z@ \thechapter.\fi \@arabic\c@scheme}} {}% \let\csh@chapter\@chapter \renewcommand{\@chapter}{% \addtocontents{los}{\protect\addvspace{10\p@}}% \csh@chapter}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % The appropriate creation macro is now called. % \begin{macrocode} \csname csh@makesch@\csh@fltpkg\endcsname % \end{macrocode} %\end{macro} %\end{environment} % %\subsection{Positioning float contents} %\begin{macro}{\floatcontentscentre} %\begin{macro}{\floatcontentscenter} %\begin{macro}{\floatcontentsleft} %\begin{macro}{\floatcontentsright} % When using \pkg{floatrow}, centring all floats is easy. This is % not the case for other methods, and so some macros are provided. % The definitions depend on whether \pkg{floatrow} is in use. % \begin{macrocode} \def\@tempa{floatrow} \ifx\@tempa\csh@fltpkg \newcommand*{\floatcontentscentre}{% \floatsetup{objectset=centering}} \newcommand*{\floatcontentscenter}{% \floatsetup{objectset=centering}} \newcommand*{\floatcontentsright}{% \floatsetup{objectset=raggedleft}} \newcommand*{\floatcontentsleft}{% \floatsetup{objectset=raggedright}} % \end{macrocode} %\begin{macro}{\csh@floatboxreset} %\begin{macro}{\@floatboxreset} %\begin{macro}{\csh@everyfloat} % When \pkg{floatrow} is not in use, then a low-level hack of % \cs{@floatboxtreset} is used. % \begin{macrocode} \else \let\csh@floatboxreset\@floatboxreset \renewcommand*{\@floatboxreset}{% \csh@everyfloat \csh@floatboxreset} \newcommand*{\floatcontentscentre}{% \let\csh@everyfloat\centering} \newcommand*{\floatcontentscenter}{% \let\csh@everyfloat\centering} \newcommand*{\floatcontentsleft}{% \let\csh@everyfloat\relax} \newcommand*{\floatcontentsright}{% \let\csh@everyfloat\raggedleft} \fi \floatcontentsleft % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\subsection{\pkg{babel} support} %\begin{macro}{\ifcsh@babel} % To make the new float type work with \pkg{babel}, some alternative % text is provided for non-English users. First, we need to know if % \pkg{babel} is loaded \emph{before} \currpkg or after, as this % affects one if the hacks needed for French. % \begin{macrocode} \newif\ifcsh@babel \@ifpackageloaded{babel} {\csh@babeltrue} {} % \end{macrocode} %\end{macro} %\begin{macro}{\floatc@plain} % There is then one hack to be made for French which has to be made % before the beginning of the document \emph{if} \pkg{babel} is % loaded before \currpkg. This is only needed when \pkg{memoir} is % not in use. So there is a run of tests to see if the conditions % for the hack are met. \pkg{babel} support for French needs two % name checks, \emph{zut alors}! % \begin{macrocode} \@ifclassloaded{memoir}{} {\@ifpackageloaded{babel} {\IfLanguageName{french} {\let\floatc@plain\FB@makecaption} {\IfLanguageName{frenchb} {\let\floatc@plain\FB@makecaption} {}}} {}} % \end{macrocode} %\end{macro} % The definition of new stings is delayed until the beginning of the % document, so that things work if \pkg{babel} is loaded after % \currpkg. The multiple language names mean quite a bit of % repetition here. % \begin{macrocode} \AtBeginDocument{ \@ifpackageloaded{babel} {\addto{\captionsngerman}{% \renewcommand*{\schemename}{Schema}} \addto{\captionsngerman}{% \renewcommand*{\listschemename}{Schemenverzeichnis}} \addto{\captionsgerman}{% \renewcommand*{\schemename}{Schema}} \addto{\captionsgerman}{% \renewcommand*{\listschemename}{Schemenverzeichnis}} % \end{macrocode} % French settings. \pkg{babel} also changes some style parameters here, % so \currpkg tries to match this. % \begin{macrocode} \addto{\captionsfrench}{% \renewcommand*{\schemename}{\scshape Sch\`eme}} \addto{\captionsfrench}{% \renewcommand*{\listschemename}{Table des sch\`emes}} \addto{\captionsfrenchb}{% \renewcommand*{\schemename}{\scshape Sch\`eme}} \addto{\captionsfrenchb}{% \renewcommand*{\listschemename}{Table des sch\`emes}} % \end{macrocode} % To make these changes, \pkg{babel} has to be instructed to reload the current % language. % \begin{macrocode} \expandafter\selectlanguage\expandafter{\languagename} % \end{macrocode} % If \pkg{babel} was loaded after \currpkg, and the document is in % French, then the non-\pkg{memoir} patch for floats is needed here. % This is the same one described earlier, which cannot be delayed to % here if \pkg{babel} is loaded first. % \begin{macrocode} \@ifclassloaded{memoir}{} {\IfLanguageName{french} {\ifcsh@babel\else \let\floatc@plain\FB@makecaption \fi} {\IfLanguageName{frenchb} {\ifcsh@babel\else \let\floatc@plain\FB@makecaption \fi} {}}} {}}{}} % \end{macrocode} % %\subsection{Reference numbers in graphics} %\begin{macro}{\schemerefmarker} %\changes{v1.3}{2007/10/04}{Name change} %\begin{macro}{\schemerefformat} %\changes{v1.3}{2007/10/04}{Name change} % The two macros \cs{schemerefmarker} and \cs{schemerefformat} % are used to allow customisation of the behaviour of the package. % Here defaults are provided. % \begin{macrocode} \newcommand*{\schemerefmarker}{TMP} \newcommand*{\schemerefformat}{\textsf} % \end{macrocode} %\end{macro} %\end{macro} %\begin{macro}{\csh@label} % Depending on the user options provided, either \pkg{bpchem} or % \pkg{chemcompounds} is loaded to manage chemical citations. The macro % \cs{chemsch@label} is defined as the labelling command of the % appropriate package. % \begin{macrocode} \ifcsh@bpchem \RequirePackage{bpchem} \let\csh@label\CNlabel \else \RequirePackage{chemcompounds} \let\csh@label\compound \fi % \end{macrocode} %\end{macro} %\begin{macro}{\csh@num} % A counter is needed for automatic substitution of reference % numbers. This has to be a \TeX\ count, rather than a \LaTeX\ % counter, as it has to be local. % \begin{macrocode} \newcount\csh@num % \end{macrocode} %\end{macro} %\begin{macro}{\schemeref} %\changes{v1.3}{2007/10/04}{New macro} % The user macro for referencing a compound in a graphic. First the % automatic counter is incremented. % \begin{macrocode} \newcommand*{\schemeref}{% \advance\csh@num\@ne % \end{macrocode} % Now the presence of an optional argument is tested for. If there % is not one, the value of the automatic counter is used. % \begin{macrocode} \@ifnextchar[%] {\csh@schemeref} {\csh@schemeref[\schemerefmarker\the\csh@num]}} % \end{macrocode} %\end{macro} %\begin{macro}{\csh@schemeref} % The internal command to substitute the temporary marker by % the automatic label text. The use of |[b][b]| ensures that % the new text is centred on the position of the marker. % \begin{macrocode} \def\csh@schemeref[#1]#2{% \psfrag{#1}[b][b] {\schemerefformat{\csh@label{#2}}}} % \end{macrocode} %\end{macro} %\begin{macro}{\csh@schemerefsub} % For sub-referencing using \pkg{bpchem}, a similar macro is needed % using the \cs{CNlabelsub} command. This is defined here, with the % user macro later. % \begin{macrocode} \def\csh@schemerefsub[#1]#2#3{% \psfrag{#1}[b][b] {\schemerefformat{\CNlabelsub{#2}{#3}}}} % \end{macrocode} %\end{macro} %\begin{macro}{\chemschemeref} %\changes{v1.3}{2007/10/04}{Converted to a wrapper for % \cs{schemeref}} % The \cs{chemschemeref} is now a backward-compatibility wrapper for % \cs{schemeref}. % \begin{macrocode} \newcommand*{\chemschemeref}[1]{\schemeref[#1]} % \end{macrocode} %\end{macro} %\begin{macro}{\schemerefsub} %\changes{v1.3}{2007/10/04}{New macro} %\begin{macro}{\chemschemerefsub} %\changes{v1.3}{2007/10/04}{Now a wrapper for \cs{schemerefsub}} % The user sub-referencing macro is defined in a package-dependent % manner. If \pkg{bpchem} is loaded, then \cs{schemerefsub} works in % the same way as \cs{schemeref}, but calling the |sub| version of % the internal macro. % \begin{macrocode} \ifcsh@bpchem \newcommand*{\schemerefsub}{% \advance\csh@num\@ne \@ifnextchar[%] {\csh@schemerefsub} {\csh@schemerefsub[\schemerefmarker\the\csh@num]}} \newcommand*{\chemschemerefsub}[1]{\schemerefsub[#1]} % \end{macrocode} % If \pkg{chemcompounds} is in use, then the sub-reference commands % gobble the arguments given. The automatic counter is still % incremented, so that things stay (reasonably) logical. % \begin{macrocode} \else \newcommand*{\schemerefsub}[3][]{% \advance\csh@num\@ne \PackageWarning{chemscheme} {`chemcompound' option active\MessageBreak Command \string\chemschemerefsub\space not used \MessageBreak Please alter your source to \MessageBreak \string\chemschemeref}} \newcommand*{\chemschemerefsub}{\schemerefsub} \fi % \end{macrocode} %\end{macro} %\end{macro} % \iffalse % % \fi % \PrintChanges % \PrintIndex % \Finale %\iffalse %<*scheme> %!PS-Adobe-2.0 EPSF-1.2 %%Creator: ChemDraw Std(tm) 10.0 %%%Title: scheme-one.eps %%%Title: scheme-two.eps %%CreationDate: 21/07/2007 12:00 %%DocumentSuppliedProcSets: chemdict30 24 13 %%DocumentFonts: Helvetica Helvetica-Oblique %%BoundingBox: 30 78 288 144 %%EndComments %%BeginProcSet: chemdict30 24 13 % ChemDraw Laser Prep % Copyright © 1985-2005 CambridgeSoft Corp., All Rights Reserved userdict/chemdict30 210 dict put chemdict30 begin/version 24 def/sv 13 def /b{bind def}bind def/L{load def}b/R{null def}b/d/def L/a/add L/al/aload L /as/astore L/at/atan L/cp/closepath L/cv/curveto L/cw/currentlinewidth L /cpt/currentpoint L/dv/div L/D/dup L/e/exch L/F/false L/f/fill L/fa/forall L /g/get L/gi/getinterval L/gr/grestore L/gs/gsave L/ie/ifelse L/ix/index L /l/lineto L/mt/matrix L/M/moveto L/m/mul L/n/neg L/np/newpath L/pb/pathbbox L /P/pop L/r/roll L/rl/rlineto L/rm/rmoveto L/ro/rotate L/rp/repeat L /ru/round L/sc/scale L/sl/setlinewidth L/sm/setmatrix L/st/stroke L /sp/strokepath L/sq/sqrt L/s/sub L/T/true L/tr/transform L/xl/translate L /xc/exec L/A R/N R/St R/X R/Y R/aL R/bL R/bS R/bd R/bs R/cX R/cY R/ch R/co R /fB R/fI R/fS R/fZ R/fl R/ft R/iX R/iY R/idx R/lh R/llx R/lly R/lp R/nH R /nSq R/newdict R/ps R/rad R/rev R/sL R/sba R/sbl R/sbs R/sn R/spa R/tB R /typ R/urx R/ury R/w R/wF R/xX R/xY R/rBg R/gBg R/bBg R/gry R/rDst R/gDst R /bDst R/cpd R/Aeq R/Ath R/Aos R/Ach R/ed R/sf 20 d/cW 20 d/lW 20 d/bW 75 d /wF 1.5 d/aF 11.875 d/aR 0.263 d/aA 50 d/hS 54 d/pA 32 d/sh F d/S{sf m}b /dL{[hS] 0 setdash}b/o{1 ix}b/rot{3 -1 r}b/x{e d}b/CMT mt d/TM mt d /SM{CMT sm}b/XY{X D m Y D m a sq}b/s1 1 string d/fp{T charpath flattenpath}b /p{tr ru 0.25 a e ru 0.25 a e itransform}b/Wd{65536. dv}b /C{Wd rot Wd rot Wd rot setrgbcolor}b /setcmykcolor where{P/sk/setcmykcolor L}{/sk{4 1 r 3{3 ix a D 0 lt{P 0}if D 1\ gt{P 1}if 1 e s 3 1 r}rp setrgbcolor P}b}ie/sg{D currenthsbcolor P rot seths\ bcolor currenthsbcolor e P e P o s D m .001 gt{setgray}{P}ie}b /sBg{65535 dv/bBg x 65535 dv/gBg x 65535 dv/rBg x}b /sRmp{currentrgbcolor bBg e s/bDst x gBg e s/gDst x rBg e s/rDst x}b /dD{np 2 1 r 4 2 r xl 2 dv D sc -1 0 M 0 -1 l 1 0 l 0 1 l cp SM 0 ne{f}{lW 0.\ 8 m sl st}ie}b /dM{gs np 3 1 r xl D sc 0 4 M 0 -8 rl 3.5 2 rm -7 4 rl 0 -4 rm 7 4 rl SM st g\ r}b/dQ{gs np 0 360 arc 0.5 sg f gr}b /dR{lW 0.8 m sl 2 ix s/Y x 2 ix s/X x xl Rr SM st}b /dT{fp pb 3 1 r s 3 2 r s 2 1 r rm f}b/N 0 d/db{array/bs x/N 0 d}b /B{bs N rot put/N N 1 a d}b /SpA{gs np o o xl rot s e rot s o 0 ne o 0 ne or{at ro}{P P}ie aR aL m n D aL a 0 M 0 o n aA n aA arc cp f gr}b /SpH{gs np o o xl rot s e rot s o 0 ne o 0 ne or{at ro}{P P}ie 0 cw 2 dv xl aR aL m n D aL a 0 M 0 o n aA n 0 arc cp f gr}b/Sp{/St x 0.316/aR x gs aF lW m 0.8 m St 4 and 0 ne{bW m lW dv bW sl}if/aL x St 8 and 0 ne{8 ix 8 ix 3 ix 3 ix SpA}if St 16 and 0 ne{2 ix 6 m 1 a D ix e D ix e D ix e D ix e P SpA}if St 32 and 0 ne{8 ix 8 ix 3 ix 3 ix SpH}if St 64 and 0 ne{2 ix 6 m 1 a D ix e D ix e D ix e D ix e P SpH}if St 2 and 0 ne{St 4 and 0 ne{[hS bW m lW dv] 0 setdash}{dL}ie}if np M{cv}rp St 128 and 0 ne{f}{st}ie gr}b/Ha{gs np 3 1 r xl D sc -.7 1.4 M 0.7 1.4 l -.7 2.4 M 0.7 2.4 l SM st gr}b /OP{3 ix 3 ix xl 3 -1 r s 3 1 r e s o o at ro D m e D m a sq}b /OB{/bS x OP D bS dv D lW 2 m lt{P lW 2 m}if/bd x}b /DA{np 0 0 M aL 0 aR aL m 180 aA s 180 aA a arc cp f}b /OA{np 0 cw -2 dv M aL 0 aR aL m 180 aA s 180 arc 0 cw -2 dv rl cp f}b /Ast{SM cw 0.8 m sl st}b/SA{aF m lW m/aL x 0.263/aR x aL 1 aR s m np 0 M rad 0 l gs Ast gr}b /CA{aF lW m 0.8 m/aL x 0.316/aR x aL 1 aR s m 2 dv rad D m o D m s D 0 le{P P P}{sq at 2 m np rad 0 rad 180 6 -1 r s 180 6 -1 r s arc gs Ast gr cpt e at ro}ie}b/AA{np rad 0 rad 180 180 6 -1 r a arc gs SM st gr}b /RA{lW m/w x np rad w M w .7 dv w l rad w n M w .7 dv w n l w .35 dv w 2 m M 0 0 l w .35 dv w -2 m l st}b /HA{lW m/w x np 0 0 M w 2 m D l w 2 m w l rad w l rad w n l w 2 m w n l w 2 m D n l cp st}b /Ar1{gs 5 1 r OP/rad x{{2.25 SA DA}{1.5 SA DA}{1 SA DA}{lW 4 m sl 4.5 SA DA} {lW 4 m sl 3 SA DA}{lW 4 m sl 2 SA DA}{270 CA DA}{180 CA DA}{120 CA DA}{90 CA DA}{2.5 RA}{2.5 HA}{1 -1 sc 270 CA DA}{1 -1 sc 180 CA DA}{1 -1 sc 120 CA DA}{1 -1 sc 90 CA DA}{5 RA}{5 HA}{dL 2.25 SA DA}{dL 1.5 SA DA}{dL 1 SA DA}{2.25 SA OA}{1.5 SA OA}{1 SA OA}{1 -1 sc 2.25 SA OA}{1 -1 sc 1.5 SA OA} {1 -1 sc 1 SA OA}{270 CA OA}{180 CA OA}{120 CA OA}{90 CA OA}{1 -1 sc 270 CA OA}{1 -1 sc 180 CA OA}{1 -1 sc 120 CA OA}{1 -1 sc 90 CA OA}{1 -1 sc 270 AA}{1 -1 sc 180 AA}{1 -1 sc 120 AA}{1 -1 sc 90 AA}}e g xc gr}b/ac{arcto 4{P}rp}b/rO{4 cw m}b/Cr{0 0 1 0 360 arc}b/Ac{XY D sc Cr SM}b /OrA{Y X at ro XY D rev{neg}if sc}b/Ov{OrA 1 0.4 sc Cr SM}b /Asc{OrA 1 27 dv D sc}b/LB{9 -6 M 21 -10 27 -8 27 0 cv 27 8 21 10 9 6 cv -3 2 -3 -2 9 -6 cv cp}b/DLB{0 0 M 0 0 -9.51 9.65 -9.51 18.02 cv -9.51 23.22 -6.75 27 0 27 cv 6.75 27 9.51 23.22 9.51 18.02 cv 9.51 9.65 0 0 0 0 cv cp}b/ZLB{LB}b /dt{gs np M SM cpt np rot 4.5 dv 0 360 arc f gr}b /whf{gs 1 setgray f gr SM st}b/blf{gs f gr SM st}b/Rr{0 rO M 0 Y X Y rO ac X Y X 0 rO ac X 0 0 0 rO ac 0 0 0 Y rO ac cp}b/Rc{0 0 M 0 Y l X Y l X 0 l cp}b/grf{gs 0.5 sg f gr SM st}b/gG{D 32 dv D m 1 e s/gry x currentrgbcolor bDst gry m a 3 1 r gDst gry m a 3 1 r rDst gry m a 3 1 r setrgbcolor}b/gS{dtransform CMT idtransform m D 0 lt{n}if sq n D CMT dtransform idtransform e 2 m e xl 7 m 32 a 256 dv D sc}b/gLB{sh{sRmp 32 -0.5 0.5{gs gG 13.5 0 xl D 32 s 64 dv 13.5 m D 7 m 24 dv gS -13.5 0 xl LB f gr}for LB SM st}{LB grf}ie}b/gOv{sh{sRmp 32 -0.5 0.5{gs gG D 32 s 64 dv 0.65 m D gS Cr f gr}for Cr SM st}{Cr grf}ie}b/gAc{sh{sRmp 32 -0.5 0.5{gs gG D 32 s 64 dv D gS Cr f gr}for Cr SM st}{Cr grf}ie}b /gDLB{sh{sRmp 32 -0.5 0.5{gs gG 0 13.5 xl D 32 s 64 dv 13.5 m D 7 m 24 dv e gS 0 -13.5 xl DLB f gr}for DLB SM st}{DLB grf}ie}b/gRr{sh{sRmp 32 -0.5 0.5{gs gG X 2 dv Y 2 dv xl D 32 s 64 dv X Y lt{X}{Y}ie m 0.25 m D gS X -2 dv Y -2 dv xl Rr f gr}for Rr SM st}{Rr grf}ie}b/gRc{sh{sRmp 32 -0.5 0.5{gs gG X 2 dv Y 2 dv xl D 32 s 64 dv X Y lt{X}{Y}ie m 0.25 m D gS X -2 dv Y -2 dv xl Rc f gr}for Rc SM st}{Rc grf}ie}b/gZLB{gLB}b/Ath{Y X at ro XY 2 dv/rad x gs D SA DA gr rad 2 m 0 xl 180 ro SA DA}b/Aeq{Y X at ro XY/rad x rev{1 -1 sc}if gs 0 lW 2 m xl D SA OA gr rad 0 xl 180 ro 0 lW 2 m xl SA OA}b/Aos{X Y M SM cpt xl XY e dv lW 1.667 m o o lt{e}if P D sc}b/Ach{5 Aos gs/Helvetica findfont[1 0 0 -1 0 0]makefont 5.5 scalefont setfont D stringwidth P 2 dv D 1 a/rad x n 0 M show gr rad 2 s -5 M rad n -5 rad n 1 2 ac rad n 1 rad 1 2 ac rad 1 rad -5 2 ac rad -5 rad n -5 2 ac cp Ast}b/Ar{D 39 lt{Ar1} {gs 5 1 r o o xl 3 -1 r e s 3 1 r s e o 0 lt o 0 lt ne/rev x D 0 lt{1 -1 sc neg}if/Y x D 0 lt{-1 1 sc neg} if/X x np{{Y 16 div D 2 S lt{P 2 S}if/lp x lp 0 M 0 0 l 0 Y l lp Y l X lp s 0 M X 0 l X Y l X lp s Y l SM st}{Y 16 div D 2 S lt{P 2 S}if/lp x lp 0 M 0 0 0 Y lp ac 0 Y 2 dv lp neg o lp ac 0 Y 2 dv 0 Y lp ac 0 Y lp Y lp ac X lp s 0 M X 0 X Y lp ac X Y 2 dv X lp a o lp ac X Y 2 dv X Y lp ac X Y X lp s Y lp ac SM st}{Y D 2 dv Y 180 pA s 180 pA a arc st np X Y s Y 2 dv Y pA D neg arcn st}{Rc SM st}{X lW 2 dv a lW -2 dv M rO D rl X lW 2 dv a rO a Y lW 2 dv a rO a l rO lW -2 dv a Y lW 2 dv a rO a l lW -2 dv Y lW 2 dv a l 0 Y l X Y l X 0 l cp f 0 0 M 0 Y l X Y l X 0 l cp SM st}{Rr SM st}{rO Y M rO rO xl 0 Y X Y rO ac X Y X 0 rO ac X 0 0 0 rO ac rO neg D xl X Y 0 Y rO ac cp f Rr st}{Ac st}{OrA gAc}{Ov st}{OrA 1 .4 sc gOv}{Asc LB whf}{Asc gLB} {Asc gs gLB gr -1 -1 sc LB whf}{Asc gs gLB gr -0.4 -0.4 sc LB whf}{Asc LB gs whf gr np -0.4 -0.4 sc gLB}{Asc DLB -1 -1 sc DLB gs whf gr np 90 ro gs gDLB gr -1 -1 sc gDLB}{Asc gs -1 -1 sc ZLB whf gr gs 3.6 12 sc gOv gr ZLB whf}{Asc gs -1 -1 sc gZLB gr gs 3.6 12 sc Cr whf gr gZLB}{0 0 M X Y l SM st}{bW sl 0 0 M X Y l SM st} {dL 0 0 M X Y l SM st}{OrA 1 16 dv D sc 0 -1 M 0 0 1 0 1 ac 8 0 8 1 1 ac 8 0 16 0 1 ac 16 0 16 -1 1 ac SM st}{XY D 0 0 dt X Y dt}{XY 2 dv X Y dt}{XY D X Y dt 0 0 M SM cpt xl 2 dv D sc 1 0 M -1 0 l 0 1 M 0 -1 l Ast}{XY D X Y dt 0 0 M SM cpt xl 2 dv D sc 1 0 M -1 0 l Ast}{4.5 Aos 1 0 M -1 0 l 0 1 M 0 -1 l 2 0 M 0 0 2 0 360 arc Ast}{4.5 Aos 1 0 M -1 0 l 2 0 M 0 0 2 0 360 arc Ast}{2.25 Ath}{1.5 Ath}{1 Ath}{2.25 Aeq}{1.5 Aeq}{1 Aeq}{OrA 1 16 dv D sc 0 -1 M 0 0 l 16 0 l 16 -1 l SM st}{5 Aos 1 -1 M -1 -1 l 0 2 M 0 -2 l Ast}{5 Aos 1 -1 M -1 -1 l 1 1 M -1 1 l 0 2 M 0 -2 l Ast}{4.5 Aos 1 0 M -1 0 l 0 1 M 0 -1 l Ast}{4.5 Aos 1 0 M -1 0 l Ast}{gRc}{gRr}{Rc blf}{Rr blf}{Ac blf}{Ov blf}{Asc DLB -1 -1 sc DLB gs whf gr np 90 ro DLB -1 -1 sc DLB blf}{Asc gs -1 -1 sc ZLB blf gr gs 3.6 12 sc Cr whf gr ZLB blf}{Asc gs -1 -1 sc ZLB whf gr gs 3.6 12 sc Cr blf gr ZLB whf}{Asc LB gs whf gr np -0.4 -0.4 sc LB blf}{Asc LB gs f gr gs SM st gr np -0.4 -0.4 sc LB whf}{Asc LB blf}{Asc LB gs f gr gs SM st gr np -1 -1 sc LB whf}{Ac whf}{OrA gAc}{Ac blf}{Ov whf} {OrA 1 .4 sc gOv}{Ov blf}{(Rac)Ach}{(Abs)Ach}{(Rel)Ach} }e 39 s g xc gr}ie}b/DS{np M l st}b /DD{gs dL DS gr}b/DB{gs 12 OB bW sl np 0 0 M 0 l st gr}b/ap{e 3 ix a e 2 ix a}b/PT{D 2 4 gi al P OP D 1 sc o length 6 gt{P 6 g}{e P 8 dv}ie D lW 2 m lt{P lW 2 m}if 0 e 0 0 3 -1 r s 3 1 r e s e 0 0 M 1 0 l 0 0 ap M 1 0 ap l e n e n 0 0 ap M 1 0 ap l P P}b/DT{gs np PT SM st gr}b /NH{lW s D hS dv ru cvi D 0 eq{P 1}if/nH x D hS nH m s D 0 lt{P .1 s nH dv}{nH 2 a dv D 0 xl 2 m s nH dv}ie}b /Bd{D type/arraytype ne{bs e g}if{{P}{{{DS}{DD}{gs 12 OB np bW 2 dv/bd x lW 2 dv e D NH e{D bd M bd n l}for st gr}{gs 12 OB np lW 2 dv 0 xl NH 1 sc bW 2 dv wF m nH 1 a dv/bd x 0 1 nH {D 1 a bd m o o M n l}for SM st gr}{P}{DB}{gs 12 OB np 0 lW 2 dv o o n M l bW 2 dv wF m o o l n l cp f gr}{P}{gs 12 OB/bL x bW 2 dv D lW lt{P lW}if/bd x np 0 0 M bL bd 4 m dv ru 2 o o lt{e}if P cvi/nSq x bL nSq 2 m dv D sc nSq{.135 .667 .865 .667 1 0 rcurveto .135 -.667 .865 -.667 1 0 rcurveto}rp SM st gr}{gs 12 OB np 0 lW 2 dv o o n M l bW 2 dv wF m o o l n l cp SM lW 0.8 m sl st gr}{P}{4 2 r gs OP/rad x 1 SA DA gr}{P} }o 1 g 1 s g e 2 4 gi al P 5 -1 r xc}{al P 8 ix 1 eq{DD}{DS}ie 5 -1 r 2 eq{DB}{DS}ie P}{DT}}o 0 g g xc}b /ed{gs cpt np cw 2 dv 0 360 arc f gr}b /SPe{gs 0 e xl 1 1 S dv D n sc CMT currentmatrix P lW sl 4.0 setmiterlimit np}b/ws{Wd 0 32 4 -1 roll widthshow}b/blank/Times-Roman findfont/CharStrings g/space g d/mv 256 array d/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT /FF/CR/SO/SI /DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US mv 0 32 gi as P mv 32/Times-Roman findfont/Encoding get 32 96 gi putinterval mv 39/quotesingle put mv 96/grave put/unknown/unknown/quotesinglbase/florin/quotedblbase/ellipsis /dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/unknown/unknown/unknown /unknown/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash /emdash /tilde/trademark/scaron/guilsinglright/oe/unknown/unknown/Ydieresis /blank/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered /macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph /periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf /threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis mv 128 128 gi as P/fSt 50 string d(ChemDraw)fSt copy P/fD{D/Symbol eq{ findfont[1 0 0 -1 0 0]makefont}{D {findfont}stopped{/Helvetica findfont}if D length dict/newdict x{ 1 index/FID ne{1 index/FontMatrix eq{[1 0 0 -1 0 0]matrix concatmatrix}if newdict 3 1 r put}{P P}ie}forall newdict/Encoding mv put fSt 8 fSt length 8 sub gi cvs length 8 add fSt 0 rot gi cvn newdict definefont}ie}b/ts{gs xl ro 0 0 M}b /nl{0 e xl 0 0 M}b/tx{ft e g e sf m rot D 96 and 0 ne{ 64 and 0 ne{-0.5}{0.25}ie e 0.75 m}{P 0 e}ie D 4 -1 r e scalefont setfont m cpt P e M}b end %%EndProcSet %%EndProlog chemdict30 begin /cW 24 def /bW 48 def /lW 12 def /hS 32 def /sh true def 222 SPe[ /Helvetica fD /Helvetica-Oblique fD]/ft x 600 1560 M 5760 1560 l 5760 2880 l 600 2880 l cp clip np 65535 65535 65535 sBg 0 1640 2178 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx (N)show gr 0 1182 2178 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx (N)show gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1619 2364 M 1627 2376 l 1335 2376 l 1344 2364 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1598 2330 M 1598 2342 l 1364 2342 l 1364 2330 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1669 2208 M 1681 2212 l 1627 2376 l 1619 2364 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1481 1941 M 1481 1926 l 1629 2034 l 1622 2043 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1343 2041 M 1336 2032 l 1481 1926 l 1481 1941 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1363 2069 M 1356 2059 l 1478 1971 l 1485 1981 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1344 2364 M 1335 2376 l 1282 2212 l 1293 2209 l cp f gr 0 1033 2091 ts 0.0000 0.0000 0.0000 1.0000 sk -377 0 M 0 10 0 tx (Mes)show gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1055 2043 M 1059 2031 l 1167 2066 l 1163 2078 l cp f gr 0 1897 2091 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx (Mes)show gr gs 0.0000 0.0000 0.0000 1.0000 sk np 1878 2040 M 1882 2051 l 1802 2077 l 1798 2066 l cp f gr gs 12 D sl/lW x 24 /cW x 48 /bW x 32 /hS x 0.0000 0.0000 0.0000 1.0000 sk 10 D sl/lW x 1228 1973 M 1295 1973 l st 1261 1940 M 1261 2006 l st gr 0 2085 2400 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx (Br)show 64 10 0 tx (\226)show gr 0 5084 2247 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx (N)show gr 0 4625 2247 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx (N)show gr gs 0.0000 0.0000 0.0000 1.0000 sk np 5062 2433 M 5071 2445 l 4778 2445 l 4787 2433 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 5042 2399 M 5042 2411 l 4808 2411 l 4808 2399 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 5113 2277 M 5124 2281 l 5071 2445 l 5062 2433 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 4925 2010 M 4925 1995 l 5072 2102 l 5065 2112 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 4787 2110 M 4779 2101 l 4925 1995 l 4925 2010 l cp f gr gs 0.0000 0.0000 0.0000 1.0000 sk np 4787 2433 M 4778 2445 l 4725 2281 l 4737 2278 l cp f gr 0 4476 2160 ts 0.0000 0.0000 0.0000 1.0000 sk -377 0 M 0 10 0 tx (Mes)show gr gs 0.0000 0.0000 0.0000 1.0000 sk np 4498 2112 M 4502 2100 l 4610 2135 l 4606 2147 l cp f gr 0 5340 2160 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx (Mes)show gr gs 0.0000 0.0000 0.0000 1.0000 sk np 5321 2109 M 5325 2120 l 5246 2146 l 5243 2134 l cp f gr gs 12 D sl/lW x 24 /cW x 48 /bW x 32 /hS x 0.0000 0.0000 0.0000 1.0000 sk np 4962 1946 17 0 360 arc cp f np 4887 1946 17 0 360 arc cp f gr 0 3236 1785 ts 0.0000 0.0000 0.0000 1.0000 sk -364.5 0 M 0 10 0 tx (KO-)show 2 10 1 tx (t)show 0 10 0 tx (-Bu)show 201 nl -114.5 0 M 0 10 0 tx (thf)show gr gs 12 D sl/lW x 24 /cW x 48 /bW x 32 /hS x 0.0000 0.0000 0.0000 1.0000 sk 10 D sl/lW x 3597 2130 M 2771 2130 l st gs 3581 2161 3701 2130 3701 2130 3596 2143 3581 2161 3581 2161 3581 2098 3596 2116 3596 2130 3701 2130 3581 2098 3581 2098 4 3701 2130 0 Sp gr gr 0 1215 2805 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx %(TMP1)show gr 0 4642 2805 ts 0.0000 0.0000 0.0000 1.0000 sk 0 10 0 tx %(TMP2)show gr gr end %%Trailer showpage % %<*refs> @book{Goossens2007, author = {Michel Goossens and Frank Mittelbach and Sebastian Rahtz and Denis Roegel}, title = {The LaTeX Graphics Companion}, subtitle = {Illustrating Documents with TeX and Postscript}, publisher = {Addison Wesley}, year = {2007}, series = {Tools and Techniques for Computer Typesetting}, edition = {2}, } % %<*jawltxdoc> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{jawltxdoc} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage[final]{listings,graphicx,microtype} \usepackage[scaled=0.95]{helvet} \usepackage[version=3]{mhchem} \usepackage[osf]{mathpazo} \usepackage{booktabs,array,url,courier,xspace,etoolbox,varioref} \usepackage{upgreek,ifpdf,float,caption,longtable,babel} \floatstyle{plaintop} \restylefloat{table} \labelformat{figure}{\figurename~#1} \labelformat{table}{\tablename~#1} \ifpdf \usepackage{embedfile} \embedfile[% stringmethod=escape,% mimetype=plain/text,% desc={LaTeX docstrip source archive for package `\jobname'}% ]{\jobname.dtx} \fi \IfFileExists{\jobname.sty} {\usepackage{\jobname}}{} \usepackage[numbered]{hypdoc} \setcounter{IndexColumns}{2} \newlength\LaTeXwidth \newlength\LaTeXoutdent \newlength\LaTeXgap \setlength\LaTeXgap{1em} \setlength\LaTeXoutdent{-0.15\textwidth} \newbox\lst@samplebox \edef\LaTeXexamplefile{\jobname.tmp} \lst@RequireAspects{writefile} \lstnewenvironment{LaTeXexample}[1][example]{% \global\let\lst@intname\@empty \ifcsname LaTeXcode#1\endcsname \expandafter\let\expandafter\LaTeXcode \csname LaTeXcode#1\endcsname \expandafter\let\expandafter\LaTeXcodeend \csname LaTeXcode#1end\endcsname \else \PackageError{jawltxdoc} {Undefined example type `#1'} \@ehd \let\LaTeXcode\relax \let\LaTeXcodeend\relax \fi \LaTeXcode} {\lst@EndWriteFile \LaTeXcodeend} \newcommand*{\LaTeXcodeexample}{% \setbox\lst@samplebox=\hbox\bgroup \LaTeXcodefloat} \let\LaTeXcoderesultonly\LaTeXcodeexample \newcommand*{\LaTeXcodeexampleend}{% \egroup \setlength\LaTeXwidth{\wd\lst@samplebox}% \begin{list}{}{% \setlength\itemindent{0pt} \setlength\leftmargin\LaTeXoutdent \setlength\rightmargin{0pt}}% \item \setlength\LaTeXoutdent{-0.15\textwidth} \begin{minipage}[c]{% \textwidth-\LaTeXwidth-\LaTeXoutdent-\LaTeXgap} \LaTeXcodefloatend \end{minipage}% \hfill \begin{minipage}[c]{\LaTeXwidth}% \hbox to\linewidth{\box\lst@samplebox\hss}% \end{minipage}% \end{list}} \let\LaTeXcodenoexample\LaTeXcodeexample \newcommand*{\LaTeXcodenoexampleend}{% \egroup \setlength\LaTeXwidth{\wd\lst@samplebox}% \begin{list}{}{% \setlength\itemindent{0pt} \setlength\leftmargin{0pt} \setlength\rightmargin{0pt}}% \item \begin{minipage}[c]{\LaTeXwidth} \hbox to\linewidth{\box\lst@samplebox\hss}% \end{minipage}% \end{list}} \newcommand*{\LaTeXcodefloat}{% \setkeys{lst}{tabsize=4,gobble=3,breakindent=0pt, basicstyle=\small\ttfamily,basewidth=0.51em, keywordstyle=\color{blue}}% \lst@BeginAlsoWriteFile{\LaTeXexamplefile}} \newcommand*{\LaTeXcodefloatend}{% \MakePercentComment\catcode`\^^M=10\relax \small {\setkeys{lst}{SelectCharTable=\lst@ReplaceInput{\^\^I}% {\lst@ProcessTabulator}}% \leavevmode \input{\LaTeXexamplefile}}% \MakePercentIgnore} \newcommand*{\LaTeXcoderesultonlyend}{\egroup\LaTeXcodefloatend} \lstnewenvironment{BibTeXexample}{% \global\let\lst@intname\@empty \setbox\lst@samplebox=\hbox\bgroup \setkeys{lst}{tabsize=4,gobble=3,breakindent=0pt, basicstyle=\small\ttfamily,basewidth=0.51em, keywordstyle=\color{black}} \lst@BeginAlsoWriteFile{\LaTeXexamplefile}} {\lst@EndWriteFile \LaTeXcodeexampleend} \newcommand*{\DescribeOption}{% \leavevmode\@bsphack\begingroup\MakePrivateLetters \Describe@Option} \newcommand*{\Describe@Option}[1]{\endgroup \marginpar{\raggedleft\PrintDescribeEnv{#1}}% \SpecialOptionIndex{#1}\@esphack\ignorespaces} \newcommand*{\SpecialOptionIndex}[1]{\@bsphack \index{#1\actualchar{\protect\ttfamily#1} (option)\encapchar usage}% \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}% \encapchar usage}\@esphack} \newcommand*{\indexopt}[1]{\DescribeOption{#1}\opt{#1}} \newcommand*{\DescribeOptionInfo}[2]{% \DescribeOption{#1}% \opt{#1=\meta{#2}}\xspace} \newcommand*{\ofixarg}[1]{% {\ttfamily[}% \ifmmode \expandafter \nfss@text \fi {% \meta@font@select \edef\meta@hyphen@restore{% \hyphenchar\the\font\the\hyphenchar\font}% \hyphenchar\font\m@ne \language\l@nohyphenation #1\/% \meta@hyphen@restore }% {\ttfamily]}} \newcommand*{\pkg}[1]{\textsf{#1}} \newcommand*{\currpkg}{\pkg{\jobname}\xspace} \newcommand*{\opt}[1]{\texttt{#1}} \newcommand*{\defaultopt}[1]{\opt{\textbf{#1}}} \newcommand*{\file}[1]{\texttt{#1}} \newcommand*{\ext}[1]{\file{.#1}} \newcommand*{\latin}[1]{\emph{#1}} \newcommand*{\etc}{% \@ifnextchar. {\latin{etc}} {\latin{etc}.\xspace}} \newcommand*{\eg}{% \@ifnextchar. {\latin{e.g}} {\latin{e.g}.\xspace}} \newcommand*{\ie}{% \@ifnextchar. {\latin{i.e}} {\latin{i.e}.\xspace}} \newcommand*{\etal}{% \@ifnextchar. {\latin{et~al.}} {\latin{et~al}.\xspace}} \newcommand*{\AMS}{{\protect\usefont{OMS}{cmsy}{m}{n}% A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} \providecommand*{\eTeX}{\ensuremath{\varepsilon}-\TeX} \DeclareRobustCommand*{\XeTeX} {X\kern-.125em\lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\TeX} \providecommand*{\CTAN}{\textsc{ctan}} \patchcmd{\@addmarginpar} {\@latex@warning@no@line {Marginpar on page \thepage\space moved}} {\relax}{}{} \newcounter{argument} \g@addto@macro\endmacro{\setcounter{argument}{0}} \newcommand*\darg[1]{% \stepcounter{argument}% {\ttfamily\char`\#\theargument~:~}#1\par\noindent\ignorespaces} \newcommand*\doarg[1]{% \stepcounter{argument}% {\ttfamily\makebox[0pt][r]{[}% \char`\#\theargument]:~}#1\par\noindent\ignorespaces} % %\fi