summaryrefslogtreecommitdiff
path: root/macros/latex209/contrib/chemtex/chap4.tex
blob: 5e8773701e00f1917c0f4fb554fedc03f991f12a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
 \chapter{Macros for typesetting chemical structure fragments}
\label{ch:frags}
\section{General organization of a structure macro}
 The macro facility in \TeX/\LaTeX\  was used to define mnemonics for
 typesetting frequently occurring structure fragments such as
 common ring structures and branching patterns.
 Chapter~\ref{ch:macros}
 describes the complete system of
 macros designed for this thesis. All of the macros
 are defined with the \LaTeX\  declaration \verb+\newcommand+ which
 has the format
 $$\hbox{\verb+\newcommand{\commandname}[n]{replacement text}+}$$
 (\TeX\  calls these definitions macros, whereas \LaTeX\  just uses the
 more general word ``command.'') In the definition, n is an integer
 from 1 to 9 and gives the number of arguments if any are used.
 The arguments are represented in the replacement text by
 parameters of the form \#1, \#2 etc.
 
 A macroname, like the name of any control sequence in \TeX,
 can contain letters only, not numerals.  Where it was considered
 important in this thesis to indicate a numbering scheme in
 a macroname, either the full word for the number or Roman
 numerals in lower case letters were used. Thus \verb+\hetisix+
 is a mnemonic for a hetero sixring with one hetero atom, and
 \verb+\fuseiv+ indicates a fusing fragment with four atoms. ---
 In some macronames the mnemonic as such is preceded by ``c''
 or ``chem,'' for ``chemistry.'' This was mainly done where the
 mnemonic was already used for a control sequence in \TeX\
 or \LaTeX. Thus, chemical structure fragments that point
 ``right'' or ``left'' are drawn by the macros \verb+\cright+
 and \verb+\cleft+ since \TeX\  employs control sequences
 \verb+\right+ and \verb+\left+ with different meanings.
 
 All the structure-drawing macro definitions in this thesis
 follow the same pattern in their organization. The actual
 structure-drawing \LaTeX\  code is preceded by a ``box''
 declaration.
 The diagrams are produced in a box because it is sometimes
 desirable to move the diagram as a whole.
 In all but one of the macros, the box is the \LaTeX\
 ``picture''; in the macro \verb+\tbranch+,
 which uses the tabbing environment, the box is
 the \LaTeX\  minipage. Box dimensions in the
 macros are made flexible through the use of global variables.
 --- The structure-drawing code itself consists of unconditional
 and of conditional statements.  The macro arguments are used to
 vary parts of the structure diagram, such as substituents
 and multiple bonds. Those features of a structure macro
 that have not been discussed before are described in more
 detail in the following sections.
 
\subsection{Box constructions with global variables}
 Integer variables such as the ones used here for box dimensions
 have to be stored in one of \TeX's 256 numerical registers and can
 be given symbolic names with \TeX's \verb+\newcount+ declaration
 (Knuth~84, pp.~118--121). The variables used in the macros of
 this thesis are defined and initialized in the macro
 \verb+\initial+ which should be part of the preamble of an input
 file containing chemistry typesetting using this system (see
 Figure~\ref{fg:preamble}
 for a summary of the preamble). A user can then change the
 variables by simple assignment, e. g. \verb+\xi=400+.
 When several variables have been changed, it is convenient to
 reset all of them, including the unitlength, to their initial
 values with the macro \verb+\reinit+.
 
 The role of the \LaTeX\  picture for line-drawing was discussed
 in Chapter~\ref{ch:txltx},
 but the picture is also a box.
 As such it is processed in horizontal mode, as part of a line.
 Within a horizontal box, line breaks can never occur.
 The macros use variables for all numerical
 parameters in the picture declaration.
 Thus, the picture declaration in the macros has the form \\
 $$\hbox{\verb+\begin{picture}(\pw,\pht)(\-xi,\-yi)+}$$
 The picture width and height, \verb+\pw+ and \verb+\pht+,
 specify the nominal size used by \TeX\  to determine how much
 room to leave for the box. The diagram in the box can extend
 beyond these dimensions, but an adjoining box is typeset next
 to the preceding one according to the specified width.
 The user needs control over the picture width in cases where
 several such boxes are put on one line, especially for the
 horizontal connection of structure fragments.
  Control over the picture height is important because
 some chemical structures take up more vertical space than
 others. The picture width and height are initialized to 400
 and 900 respectively, which is about $1.4\times 3.2\hbox{cm}$ with
 the unitlength of 0.1points.
 
 Variables are used for the coordinates of the
 lower left corner, \verb+\xi+ and \verb+\yi+, so that the
 user can change the placement of the diagram within the
 picture window. This is not often necessary for individual
 structures since they can be conveniently centered by
 the display mechanisms discussed later in this chapter;
 and also the whole picture can be shifted horizontally by
 adding horizontal space in front of it with the
 \verb+\hspace+ command.
 It was considered to be most convenient to put the minus
 signs in front of \verb+\xi+ and \verb+\yi+ in the declaration,
 since one thinks of the lower left corner of a coordinate
 system as having negative coordinates. With this declaration,
 an increase in the absolute \verb+\xi+ and \verb+\yi+ values
 shifts the diagram to the right and up. The coordinates
 \verb+\xi+ and \verb+\yi+ are initialized to 0 and 300
 respectively, which places the coordinate origin about 1cm
 above the bottom of the picture window with the unitlength
 of 0.1points.
 
 The minipage, the box used in the macro \verb+\tbranch+,
 is a paragraph box, which allows line breaks. Only the width
 is specified for a paragraph box since the height is
 controlled by the number of lines that will be produced by
 a given amount of text. The variable used in this system
 for the width of paragraph boxes is \verb+\xbox+. The number
 value assigned to \verb+\xbox+ is interpreted as printer
 points.
 
\subsection{Use of \TeX's conditional facility}
 \TeX's conditional facility is very similar to those of other
 high-level languages; it has the form:
 $$\hbox
 {\verb+\if+\(\langle\)condition\(\rangle\langle\)true text\(\rangle\)
  \verb+\else+\(\langle\)false text\(\rangle\)\verb+\fi+}
 $$
 (Knuth~84, p.~207ff.).  Nesting is possible.
 The \TeX\  \verb+\if+ primitive has over ten different forms
 for testing numbers, processing modes, or tokens.
 The form used in the chemical structure macros is
 \verb+\ifx+${\rm \langle token_{1}\rangle \langle
 token_{2}\rangle}$, which tests for the equality of the
 (character code, category code) pair of two tokens.
 
 In the structure macros, the \verb+\ifx+ tests the
 arguments. When the arguments are single characters,
 such as ``S'', ``D'', or ``C'' for single bond, double
 bond, and circle, respectively, the application is
 straightforward.  The character ``Q'' is used as argument
 where ``no action'' --- no substituent, no additional bond
 --- is a desired option at a particular place in a structure
 diagram. Thus, the coding for ring positions where substituents
 are an option is:
 
 \begin{tabbing}
  move in some\= $\backslash $ifx\#nQ\= print the substituent \#n
                                        $\backslash $fi\+ \kill
                 \verb+\ifx+\#nQ\>                           \\
                 \verb+\else+   \> draw a bond line \+  \\
                 print the substituent \#n \verb+\fi+
  \end{tabbing}
 
 The parameter n represents the substituent formula. ---
 The explicit no-action symbol makes it possible to distinguish
 three different cases at a particular ring position: no action,
 just a bond line extending from the ring, and a bond line with
 a substituent at the position. As an example, the purine macro
 was used with an argument of Q for the 9-position in the
 left-hand diagram and with an empty set argument in the
 right-hand diagram:
 \[ \purine{Q}{D}{Q}{D}{Q}{$NH_{2}$}{Q}{D}{Q}
    \hspace{3cm}\purine{Q}{D}{Q}{D}{Q}{$NH_{2}$}{Q}{D}{}  \]
 One would use the bond-line-only option in cases where another
 structure fragment in a picture is to be attached to the bond.
 --- The character Q was chosen because it is not part of any
 element symbol and is not commonly used as a structural symbol
 otherwise.
 
 When the parameter after the \verb+\ifx+ is substituted by a
 text string representing a multi-character substituent, \TeX\
 actually compares the first character of the string with its
 second character, since these are the first two tokens
 encountered. Thus, a substituent that begins with two identical
 characters always makes the condition true. In such cases,
 one has to ensure that the string as a whole is compared by
 enclosing it in a box, {\it e.g.,\/}
 \verb+\mbox{$\rm NNHC_{6}H_{5}$}+.
 
 \TeX's conditional facility can also be used to impart some
 chemical intelligence to a macro by causing screen messages
 to be generated when the user supplies a combination of
 arguments that is chemically not possible. Such a combination
 would be a ring double bond (argument 7=``D'') and a
 circle denoting aromaticity (argument 9=``C'') for the
 carbon sixring. A section of code
 
 \begin{tabbing}
  move in \= $\backslash $ifx\#7D  $\backslash $ifx\#9C
          \= $\backslash $message\{Error: $\ldots $\}\+ \kill
          \verb+\ifx+\#7D \verb+\ifx+\#9C \> \+ \\
          \verb+\message{Error:+ $\ldots $\verb+}+ \- \\
          \verb+\fi \fi+
  \end{tabbing}
 
 will produce the message on the screen while the input
 file is processed by \TeX\  to give the DVI file. The user
 can then correct the mistake and reprocess the input file
 before sending the DVI file to the output device.
 Error messages were not placed into all macros, just into
 the \verb+\sixring+ macro to demonstrate this feature.
 
 In addition to the simple \verb+\if+ statements \TeX\  has
 an \verb+\ifcase+ construction of the form \\
 \indent \verb+\ifcase+(number)(text for case 0) \verb+\or+
         (text for case 1) \verb+\or+ $\ldots $ \\
 \indent \ \ \ \verb+\or+ (text for case n) \verb+\else+
         (text for all other cases)  \verb+\fi+  \\
 (Knuth~84, p.~210). When the \verb+\ifcase+ statement
 is used in a macro and the case number is passed as an
 argument, many different actions can be requested
 through one argument. For a larger number of cases, the
 \TeX\  code with \verb+\ifcase+ is somewhat more elegant
 than a series of individual \verb+\if+ statements.
 A suitable application for the chemical structure
 macros is the placement of double bonds in various
 positions of a structure, where the position number,
 or a numeric code for a combination of positions,
 is passed as the case number.  One version of the
 sixring macro, \verb+\sixringb+, contains an
 \verb+\ifcase+ construct.
 
\section{Use of structure macros}
\subsection{Invoking the structure macros}
 In order to typeset a chemical structure through invoking one
 of the macros in this system, the user must know how the structure
 will be oriented on  the page, besides knowing, of course,
 the function of each argument. The structures in this system can
 not be rotated; they are oriented according to common practices
 in chemistry, but occasionally the user will have to adapt
 a model structure to the given orientation. Chapter~\ref{ch:macros}
 shows
 for each macro a typical structure produced by it, to illustrate
 the orientation and the position numbers. In this section it
 will be demonstrated with two representative macros how this
 information is to be used.
 
 The macro \verb+\cright+ typesets structures or structure
 fragments of the general form
 $$\pht=600\cright{$R^{1}$}{S}{$Z$}{S}{$R^{5}$}{S}{$R^{7}$} \hspace{1cm}
    \mbox{.}$$
 The arguments~1, 3, 5, and~7 are the substituents or groups
 $R^{1}$, $Z$, $R^{5}$, and $R^{7}$. Arguments 2, 4, and 6 trigger
 the drawing of bonds between $R^{1}$ and $Z$, between $Z$ and $R^{5}$,
 and between $Z$ and $R^{7}$, respectively. The bonds can be single
 or double bonds, from arguments ``S'' and ``D'' respectively,
 and the bond between $R^{1}$ and $Z$ does not have to be present.
 A typical structure is shown in Figure~\ref{fg:crightexample};
 it was drawn using \verb+\cright{$CH_3$}{Q}{$CH$}{S}{$COOCH_3$}S{$COOCH_3$}+.
 Since the second argument for Figure+\ref{fg:crightexample}
 is ``Q,'' no bond is drawn between ${\rm R^{1}}$ and Z; and
 ${\rm R^{1}}$, which is in a \verb+\makebox+ (see Section~\ref{sc:fragments}),
 is moved next to Z. Figure~\ref{fg:crighttwo}
 shows two additional structures
 drawn with the \verb+\cright+ macro.
 
 \begin{figure}\centering
  \cright{$CH_{3}$}{Q}{$CH$}{S}{$COOCH_{3}$}{S}{$COOCH_{3}$}
  \caption{Figure drawn using \tt\char"5C{}cright}
\label{fg:crightexample}
  \end{figure}
 
 
 \begin{figure}                % figure 3.2
  \hspace{3cm}
  \cright{$CH_{3}CH$}{D}{$C$}{S}{$CH_{3}$}{S}{$CH_{3}$}
  \hspace{3cm}
  \cright{$R$}{S}{$C$}{S}{$O^{-}$}{D}{${NH_{2}}^{+}$}
  \caption{Structures drawn with the {\tt\char"5C{}cright} macro}
\label{fg:crighttwo}
 \end{figure}
 
 The macro \verb+\sixring+ typesets the very common carbon sixring.
 For this structure and all the ring structures, the user has to
 know how the system of macros assigns position numbers to the
 ring atoms. The assignment follows chemical nomenclature rules
 where applicable. However in the case of single-ring structures
 where all ring atoms are carbons,
 the assignment of position
 number~1 is arbitrary. In this system of macros, the sixring is
 numbered as follows:
 \pht=900
 \[ \sixring{$R^{1}$}{$R^{2}$}{$R^{3}$}{$R^{4}$}{$R^{5}$}{$R^{6}$}
    {S}{S}{S} \hspace{2cm}  \mbox{.}  \]
 The first six arguments are the formulas for the optional
 substituents in the respective positions. The user has to
 refer to the position assignment to supply the text strings
 in the correct form, e. g. a sulfonic acid group for positions
 4 and~5 would be typed in as $HO_{3}S$, whereas it would be
 $SO_{3}H$ for all other positions.  The remaining three
 arguments can produce alternating ring double bonds, but each
 of them has a second function. Argument~7 can produce a second
 substituent at position~1, argument~8 an outside double bond
 with substituent in position~3, and argument~9 a circle inside
 the ring denoting aromaticity. Where arguments have two
 functions in this way, the different structural features
 generated are of course mutually exclusive chemically.
 Figure~\ref{fg:sixexample}
 shows a sixring structure typeset with the command
\verb+\sixring{$OH$}{Q}{Q}{Q}{$NC$}{Q}{$CH_{3}$}{$NH$}{D}+.
 The substituent in position~3 is passed
 as argument~8 since it is not the regular single-bonded
 substituent represented by argument~3.
 
 \begin{figure}\centering
  \sixring{$OH$}{Q}{Q}{Q}{$NC$}{Q}{$CH_{3}$}{$NH$}{D}
  \caption{Structure typeset using \tt\char"5C{}sixring}
\label{fg:sixexample}
 \end{figure}
 
\subsection{Displaying macro-generated diagrams
    within a document}
 Since the macro-generated diagrams constitute \TeX\  boxes, the
 code for a diagram can be included anywhere in the input file
 and \TeX\  will try to find a place for the diagram as a whole
 in the line and on the page. The diagrams, however, take up
 more space horizontally and vertically than a box of text;
 therefore \TeX's line- and page breaking mechanisms would be
 strained, sometimes to such a degree that text squeezing or
 spreading would be apparent on the printed page.
 
 A convenient way to display one or several structures on one
 line by themselves and centered, is the math display environment,
 enclosed by \LaTeX\  with brackets in the form \verb+\[+$\ldots $\verb+\]+.
 A modification of this environment puts
 consecutive equation numbers at the right edge of the line.
 When using math display one has to remember that the only
 spacing in math mode is around math operators, space inserted
 by the user is ignored. Also, a new
 paragraph can not be started in math display. ---
 The diagrams in math display are printed at the place in
 the document where they are coded in the input file.
 Thus the display can still cause problems with pagebreaking,
 especially since the diagrams usually take up more vertical
 space than a math equation for which the environment is
 designed.
 
 The \LaTeX\  figure environment was specially designed for larger
 displays, such as the structure diagrams (Lamport 86, pp.~59, 60,
 176, 177). A figure will usually not appear at the place in the
 document where the user has coded it; instead \LaTeX\  finds space
 for it on the current page or the next one in such a way that
 an overfull page is never produced. The user has some control
 over the placement of figures with optional parameters such as
 top or bottom of a page, but \LaTeX\  still makes the final
 decision, often producing surprising results.
 Since a figure is moved to a convenient place by
 \LaTeX\ , the figure is called a ``float.''  In addition to the
 automatic space-finding, the figure environment has the
 advantage that it makes captions possible. Furthermore,
 several displayed objects, each with a caption, can be included
 in one figure environment; Figures~\ref{fg:lactics} and~\ref{fg:lacticr}
 present an
 example, produced by the \LaTeX\  code in Figure~\ref{fg:lacticc}
 The code shows that each picture with its caption is enclosed in
 a \verb+\parbox+.
 
 \begin{figure}
 \parbox{.4\textwidth}{\centering
 \begin{picture}(\pw,\pht)(-\xi,-\yi)
   \put(90,0)    {\circle{180}}
   \put(90,90)   {\line(0,1)   {70}}         % behind and up
   \put(60,170)  {$COOH$}
   \thicklines
   \put(30,10)   {\line(-5,2)  {140}}        % in front
   \put(-415,30) {\makebox(300,87)[r]{$HO$}} %  and left
   \put(150,10)  {\line(5,2)   {140}}        % in front
   \put(300,30)  {$H$}                       %  and right
   \thinlines
   \put(90,-90)  {\line(0,-1) {90}}          % behind and
   \put(60,-260) {$CH_{3}$}                  %  down
 \end{picture}
 \caption{${\rm (S)-}$lactic acid}   }
 \label{fg:lactics}
 \hfill
 \parbox{.4\textwidth}{\centering
 \begin{picture}(\pw,\pht)(-\xi,-\yi)
   \put(90,0)    {\circle{180}}
   \put(90,90)   {\line(0,1)   {70}}         % behind and up
   \put(60,170)  {$COOH$}
   \thicklines
   \put(30,10)   {\line(-5,2)  {140}}        % in front
   \put(-415,30) {\makebox(300,87)[r]{$H$}}  %  and left
   \put(150,10)  {\line(5,2)   {140}}        % in front
   \put(300,30)  {$OH$}                      %  and right
   \thinlines
   \put(90,-90)  {\line(0,-1) {90}}          % behind and
   \put(60,-260) {$CH_{3}$}                  %  down
 \end{picture}
 \caption{${\rm (R)-}$lactic acid}  }
 \label{fg:lacticr}
 \end{figure}
 
 \begin{figure}\centering
 \begin{verbatim}
    \begin{figure}
      \parbox{.4\textwidth}{\centering
        \ccirc{$COOH$}{$HO$}{$H$}{$CH_{3}$}
        %ccirc is a macro
      \caption{${\rm (S)-lactic acid}$}}
      \hfill
      \parbox{.4\textwidth}{\centering
        \ccirc{$COOH$}{$H$}{$OH$}{$CH_{3}$}
      \caption{${\rm (R)-lactic acid}$}}
    \end{figure}
 \end{verbatim}
 \caption{\LaTeX\  code for two captions in one figure}
 \label{fg:lacticc}
 \end{figure}
 
 It should also be mentioned that all the display mechanisms
 discussed above can be used in a two-column document style
 which is the format of most scientific chemistry journals.
 
 If the same structure is to be printed many times in a
 document, processing time can be saved by storing it in a
 \LaTeX\  \verb+\savebox+. The structure-drawing code then has to
 be processed once only. Applied to the chemistry macros,
 a statement
 $$\hbox{\verb+\savebox1{\macroname{arg+$_1$\verb+}{arg+$_2$\verb+}+}$$
 will process the code and save the typeset structure.
 A \verb+\usebox1+ statement, enclosed in a math display or
 figure environment, is then placed into the input file
 whereever the structure is to be printed. A \verb+\savebox+
 can also be given a symbolic name (Lamport~86, p.~101).