aboutsummaryrefslogblamecommitdiffstats
path: root/include/dsf
blob: e9927954eaac26254652d89b822cacb21d35785d (plain) (tree)
1
2
3
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
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259

                                                                               
                                                                               












                                                                               
                                                                               






















                                                                               
                         
 


                                                                   
 






                                                                   




















                                                                                      



                                                                                      

                                                                                       
                                             


                                                                                      
                                                                        























                                                                                       

                                                                                
                                                                             


                                                                                      
                                                                            
                                                                                      



































































































                                                                                       
                              
























                                                                       















                                                                                      
                                                                                 
                                                                              

                                                                                                       





                                                                               





                                                                                 


                                                         

                                                                                   





                                                                                  




                                                                                    
                                                                                   
                                                                              

                                                                                                         





                                                                                





                                                                                 


                                                         

                                                                                     





                                                                                  




                                                                                      
                                                                                   
                                                                              

                                                                                                         





                                                                                





                                                                                 


                                                         

                                                                                     





                                                                                  




                                                                                      




                                                                                      























































































































































































































































































































































































                                                                                                            
                                    




















                                         
                                    

























































                                                         


























                                                                               



                                                                          
                                                     

                                                                      









                                           


                                                                          
                                                     

                                                                      







                                                                               
                                                                               




















                                                                               
                                          








































































































































































































































































































































































                                                                               
                                           


                                           
                                           



























































































































































































                                                                               




                                                                                           













                                                                                       




                                                                                           









































































































                                                                               
                                                                               





















                                                                               
                                                  


                                              
                                                  







                                        
                                                  


                                              
                                                  


         









                                                                                     












                                                               







                                                              








                                                                             

                                                             















                                                                            






                                                              








                                                                  

                                                               























                                                                                  
                                                                                                   




















                                                                            
                                                                                                        


                                                                    







                                                                   












                                                                                                   






                                                                   




































                                                                                             






                                                                   













                                                                       
                                                                                                        


                                                                    







                                                                   









































                                                                            







                                                              


































                                                                           





                                                     









































                                                                           






                                                                  


































                                                                              


                                                         



























                                                                                  
                                                                                                   

















                                                                            
                                                                                                        


















                                                                           







                                                                 
































                                                                           






                                                                   


































                                                                            
                                                               


























                                                       
                                                                    
































                                                                               
                         






                                     


                                                                                 
 







                                                     


                                       
                                                           


             









                                                                        

                 
                                                                        
                                    







                                              


                                      







                                        
                                                           




               
                                                                       




               
                                                                     







                           
                         








                                                          
                                                        












                                                      
                         








                                                                
                                                        












                                                      
                         








                                                               
                                                        












                                                      
                         








                                                          
                                                        







































































                                                                               
                         






                                                 
                                                     











                                                                           
                         






                                                 
                                                     











                                                                         
                         






                                                 
                                                     











                                                                    
                         






                                                 
                                                     











































































































                                                                                             
                               



                                                                               













                                                                                 
             
                               



                                                                               













                                                                                 






























































                                                                                                         
                                                                  

























































                                                                               
                                                                     





















































                                                                               
                                                                





















































                                                                               
                                                                      





















































                                                                               
                                                                





















































                                                                               
                                                                    





















































                                                                               
                                                                  






















































































                                                                               
                                     





































































































                                                                               






                                                                        











                                                                         

                             
















































































































































                                                                               
                                                 
                                                                





















































































































                                                                               
                         
                                  








                             
                                             











































































































































































                                                                                          
                                     



                                                                         
                        
                                 













































































































































































































































                                                                                       
                                     



                                                                         
                        
                                 





































































































                                                                                




















































                                                                               










                                                                               
                                              

                                
             


                                               



                                                                               
     








                                                

                            
                                   
 
                              




                                             
                                                                                




                                                      
                              




                                               
                                                                                







                             
                                         
         
                                                       
             

                                                                    

             

         




                                                                 


                 


                         

                          
                                                                



                             

                                                   

              
                  
                     
                                                  
                         
                   
                   
     




                                    










                                                    
                    
         

                    
                                       


                                          
                                                            
                                                                                           


                     


                          
                        
                                
                                                                                



                             

                                             











                                                                   





































                                                                           

























                                                                               




                                                


                                                 



                                                                                
     








                                                 

                            
                                    
 
                              




                                             
                                                                                  




                                                      
                              




                                               
                                                                                  







                             
                                         
         
                                                       
             

                                                                    
             
 

         




                                                                 


                  


                         

                           
                                                                 



                             

                                                     

               
                  
                     
                                                  
                         
                   
                   
     




                                    










                                                     
                    
         

                    
                                       


                                          
                                                            
                                                                                            


                     


                           
                        
                                
                                                                                 



                             

                                               











                                                                       





































                                                                               

























                                                                               




                                                


                                                 



                                                                                
     








                                                 

                            
                                    
 
                              




                                             
                                                                                  




                                                      
                              




                                               
                                                                                  







                             
                                         
         
                                                       
             

                                                                    
             
 

         




                                                                 


                  


                         

                           
                                                                 



                             

                                                     

               
                  
                     
                                                  
                         
                   
                   
     




                                    










                                                     
                    
         

                    
                                       


                                          
                                                            
                                                                                            


                     


                           
                        
                                
                                                                                 



                             

                                               











                                                                       





































                                                                               















                                                                               
















                                                                               











                                                                                
                                                                                  




                                                            
                                                      

















































                                                                                   














                                                                                      




















































                                                                   
                                            






                                                                                        
                                            






                                                                     

                                                                







                                 


                        
                              

                                                                               
                                         
                                    
                                   


                                                                        
                                


                                                                        
                                         
                                    
                                   
                     

                 
                                                   


                                                                            
                                         
                                    
                                   
                     



                 








                                                                             
                                                                       
                                    
                              
                                                          










                                                         
###############################################################################
#                                                                             #
#  Lout @DocumentSetup package                                                #
#                                                                             #
#  Version 1.0 by Jeffrey H. Kingston, 17 July 1991.                          #
#  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
#  Version 3.0 by Jeffrey H. Kingston, 19 April 1994.                         #
#  Version 3.03 by Jeffrey H. Kingston, 6 May 1995.                           #
#  Versions 3.04 and 3.05 by Jeffrey H. Kingston, 11 June 1995.               #
#  Version 3.05 by Jeffrey H. Kingston, 25 July 1995.                         #
#  Version 3.07 by Jeffrey H. Kingston, February 1996.                        #
#  Version 3.10 by Jeffrey H. Kingston, September 1996.                       #
#  Version 3.11 by Jeffrey H. Kingston, December 1996.                        #
#  Version 3.13 by Jeffrey H. Kingston, October 1998.                         #
#  Version 3.16 by Jeffrey H. Kingston, May 1999.                             #
#  Version 3.17 by Jeffrey H. Kingston, September 1999.                       #
#  Version 3.21 by Jeffrey H. Kingston, May 2000.                             #
#                                                                             #
#  This Lout package contains the general definitions used by all types of    #
#  documents.  It needs to be extended (see docf, reportf, bookf, slidesf,    #
#  etc.) with definitions for particular document types.  Consult "A User's   #
#  Guide to the Lout Document Formatting System" for user information.        #
#                                                                             #
###############################################################################

extend @BasicSetup

export

    @Runner
	
    @Figure @Table
    @FootNote @AnotherFootNote @EndNote
    @LeftNote @RightNote @OuterNote @InnerNote @Place
    @Theorem @Proof @EndProof
    @Definition @Claim @Proposition @Lemma @Corollary @Example
    @Reference @RefStyle @RefPrint
    @Ref @NoRef @ChapRef @NoChapRef
    @Cite @NoCite @ChapCite @NoChapCite

    @Glossary @InGlossary

    @IndexA @SubIndexA @SubSubIndexA
    @RawIndexA @RawSubIndexA @RawSubSubIndexA
    @IndexABlanks @IndexASpacer @InitialIndexASpacer @IndexALetters

    @IndexB @SubIndexB @SubSubIndexB
    @RawIndexB @RawSubIndexB @RawSubSubIndexB
    @IndexBBlanks @IndexBSpacer @InitialIndexBSpacer @IndexBLetters

    @Index @SubIndex @SubSubIndex
    @RawIndex @RawSubIndex @RawSubSubIndex
    @IndexBlanks @IndexSpacer @InitialIndexSpacer @IndexLetters

    @BypassContentsEntry @BypassMajorContentsEntry
    @BypassFigureContentsEntry @BypassTableContentsEntry
    @BypassReference @BypassChapReference
    @BypassBeginIndex @BypassRawIndex @BypassEndIndex
    @BypassBeginIndexA @BypassRawIndexA @BypassEndIndexA
    @BypassBeginIndexB @BypassRawIndexB @BypassEndIndexB


def @DocumentSetup
    named @PageType		{ A4    @OrIfPlain Other} # page type (width, height)
    named @PageWidth		{ 80s			} # page width if type Other
    named @PageHeight		{ 66f			} # page height if type Other
    named @PageOrientation	{ Portrait		} # Portrait, Landscape, etc.
    named @PageBackground	{			} # background of each page
    named @TopMargin		{ 2.50c  @OrIfPlain 6f	} # top margin of all pages
    named @FootMargin		{ 2.50c  @OrIfPlain 6f	} # bottom margin of all pages
    named @OddLeftMargin	{ 2.50c  @OrIfPlain 10s	} # left margin of odd pages
    named @OddRightMargin	{ 2.50c  @OrIfPlain 10s	} # right margin of odd pages
    named @EvenLeftMargin	{ 2.50c  @OrIfPlain 10s	} # left margin of even pages
    named @EvenRightMargin	{ 2.50c  @OrIfPlain 10s	} # right margin of even pages
    named @OddLeftBodyMargin	{ 0c			} # extra margin for page body
    named @OddRightBodyMargin	{ 0c			} # extra margin for page body
    named @EvenLeftBodyMargin	{ 0c			} # extra margin for page body
    named @EvenRightBodyMargin	{ 0c			} # extra margin for page body
    named @PageBoxType		{ None			} # None Box CurveBox ShadowBox
    named @PageBoxMargin	{ 1.00c			} # page box margin
    import @PSLengths named @PageBoxLineWidth
				{			} # page box line thickness
    named @PageBoxPaint		{  none			} # page box paint
    named @PageBoxShadow	{  0.60c		} # shadow margin if ShadowBox
    named @PageEnclose right @Body { @Body		} # page enclose
    named @ColumnNumber		{  1			} # number of columns (1 to 10)
    named @ColumnGap		{  1.00c @OrIfPlain 6s	} # column gap
    named @FigureLocation	{  PageTop		} # default figure location
    named @TableLocation	{  PageTop		} # default table location
    named @FigureFormat
    	named @II right x { |@DisplayIndent x |      }
    	named @QQ right x { |@DisplayIndent x |@DisplayIndent }
    	named @CC right x { |0.5rt x |      }
    	named @RR right x { |1.0rt x |      }
	right @Body
				{  @CC @Body		} # default figure format
    named @TableFormat
    	named @II right x { |@DisplayIndent x |      }
    	named @QQ right x { |@DisplayIndent x |@DisplayIndent }
    	named @CC right x { |0.5rt x |      }
    	named @RR right x { |1.0rt x |      }
	right @Body
				{  @CC @Body		} # default table format
    named @FigureWord		{  figure		} # "Figure" word else anything
    named @TableWord		{  table		} # "Table" word else anything
    named @FigureNumbers	{  Arabic		} # method of numbering figures
    named @TableNumbers		{  Arabic		} # method of numbering tables
    named @FigureCaptionPos	{  Below		} # Above or Below
    named @TableCaptionPos	{  Below		} # Above or Below
    named @FigureCaptionFont    {  -2p 			} # figure caption font
    named @FigureCaptionBreak   {  adjust hyphen 1.2fx	} # figure caption break
    named @FigureCaptionFormat named word {} named number {} named caption {}
				{  {@B { word @NumSep number. &2s }} @Insert caption }
    named @TableCaptionFont     {  -2p			} # figure caption font
    named @TableCaptionBreak    {  adjust hyphen 1.2fx	} # figure caption break
    named @TableCaptionFormat named word {} named number {} named caption {}
				{  {@B { word @NumSep number. &2s }} @Insert caption }
    named @MakeFigureContents   {  No			} # list of figures at start
    named @MakeTableContents    {  No			} # list of tables at start
    named @MakeContents		{  No			} # make contents? Yes or No
    named @ContentsGap		{  0.20v @OrIfPlain 0f	} # extra gap above minor entry
    named @ContentsGapAbove	{  0.80v @OrIfPlain 1f	} # extra gap above major entry
    named @ContentsGapBelow	{  0.00v @OrIfPlain 0f	} # extra gap below major entry
    named @ContentsFont    	{  Bold                 } # font for major entry
    named @ContentsPartGapAbove	{  1.00v @OrIfPlain 1f  } # extra gap above part entry
    named @ContentsPartGapBelow	{  0.00v @OrIfPlain 0f  } # extra gap below part entry
    named @ContentsFormat
	left number
	right title
				{  number @Sep title } # contents format
    named @ContentsLeader	{  ..			} # leader symbol in contents
    named @ContentsLeaderGap	{  4s    @OrIfPlain 2s	} # gap between leaders
    named @ContentsRightWidth	{  3f    @OrIfPlain 6s	} # page numbers column width

    named @MakeReferences	{  Yes			} # make references? Yes or No
    named @RefCiteStyle right cite {  [cite]		} # citation style
    named @RefCiteLabels
	named @RefNum       {}
	named @Tag          {}
	named @Type         {}
	named @Abstract     {}
	named @Address      {}
	named @Annote       {}
	named @Author       {}
	named @Day          {}
	named @Edition      {}
	named @HowPublished {}
	named @InAuthor     {}
	named @InTitle      {}
	named @Institution  {}
	named @Journal      {}
	named @Keywords     {}
	named @Label        {}
	named @Month        {}
	named @Note         {}
	named @Number       {}
	named @Organization {}
	named @Page         {}
	named @Pages        {}
	named @Pinpoint     {}
	named @Publisher    {}
	named @Title        {}
	named @TitleNote    {}
	named @TRType       {}
	named @Volume       {}
	named @Year         {}
				{  @RefNum		} # citation items
    named @RefNumbers		{  Arabic		} # reference numbers

    named @RefListFormat	{  Labels		} # NoLabels, Labels,
						  	# DropLabels, IntegrateLabels
    named @RefListLabels
	named @RefNum       {}
	named @Tag          {}
	named @Type         {}
	named @Abstract     {}
	named @Address      {}
	named @Annote       {}
	named @Author       {}
	named @Day          {}
	named @Edition      {}
	named @HowPublished {}
	named @InAuthor     {}
	named @InTitle      {}
	named @Institution  {}
	named @Journal      {}
	named @Keywords     {}
	named @Label        {}
	named @Month        {}
	named @Note         {}
	named @Number       {}
	named @Organization {}
	named @Page         {}
	named @Pages        {}
	named @Pinpoint     {}
	named @Publisher    {}
	named @Title        {}
	named @TitleNote    {}
	named @TRType       {}
	named @Volume       {}
	named @Year         {}
				{  [@RefNum]		} # ref list label format
    named @RefListTitle		{  references		} # title of reference list
    named @ChapRefListTitle	{  references		} # title of chapter ref list
    named @RefListIndent	{  0s			} # indent to left of labels
    named @RefListRightIndent	{  0s			} # indent to right of items
    named @RefListGap		{  @ListGap		} # gap between ref list items
    named @RefListFont		{			} # font used in reference list
    named @RefListBreak		{			} # break style of ref list
    named @RefListLabelWidth 	{  @ListLabelWidth	} # numeric labels column width
    named @RefListSortKey
	named @Tag          {}
	named @Type         {}
	named @Abstract     {}
	named @Address      {}
	named @Annote       {}
	named @Author       {}
	named @CiteOrder    {}
	named @Day          {}
	named @Edition      {}
	named @HowPublished {}
	named @InAuthor     {}
	named @InTitle      {}
	named @Institution  {}
	named @Journal      {}
	named @Keywords     {}
	named @Label        {}
	named @Month        {}
	named @Note         {}
	named @Number       {}
	named @Organization {}
	named @Page         {}
	named @Pages        {}
	named @Pinpoint     {}
	named @Publisher    {}
	named @Title        {}
	named @TitleNote    {}
	named @TRType       {}
	named @Volume       {}
	named @Year         {}
	named ":"	    { "\037" }
				{  @Tag			} # sorting key

    named @MakeGlossary		{  No			} # make glossary? Yes or No
    named @GlossaryText		{  @Null		} # initial glossary text
    named @GlossaryFont		{			} # font for glossary
    named @GlossaryBreak	{			} # break style for glossary
    named @GlossaryFormat				  # format for glossary
	named @Name {}
	named @PageNum {}
	named @Body {}
				{  +3p @Font @S @Name
				   @Right @I { @Word&&page @PageNum }
				   @DP @RawIndentedDisplay @Body }
    named @GlossaryGap		{  @DisplayGap		} # gap between glossary items
    named @GlossaryColumnNumber	{  2			} # glossary columns (1 to 10)
    named @GlossaryColumnGap	{  1.00c @OrIfPlain 6s	} # glossary column gap
    named @InGlossaryFont	{  smallcaps		} # font for @InGlossary
    named @InGlossaryFormat right @Body { @Body	}	# format for @InGlossary
    named @MakeIndex		{  No			} # make index? Yes or No
    named @IndexText		{  @Null		} # initial index text
    named @IndexFont		{			} # index entries font
    named @IndexBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx}	} # index entries break
    named @IndexFormat
	right @Body		{  @Body		} # @Index format
    named @SubIndexFormat
	right @Body		{  {1f @Wide}@Body	} # @SubIndex format
    named @SubSubIndexFormat
	right @Body		{  {2f @Wide}@Body	} # @SubSubIndex format
    named @IndexTypeOrdinary
	right @PageNum		{  @PageNum		} # ordinary page numbers
    named @IndexTypeMain
	right @PageNum		{  @B @PageNum		} # main page numbers
    named @IndexTypeSpecial
	right @PageNum		{  @I @PageNum		} # special page numbers
    named @IndexRangeFormat
	left @From
	right @To		{  @From--@To		}
    named @IndexColumnNumber	{  2			} # index columns (1 to 10)
    named @IndexColumnGap	{  1.00c @OrIfPlain 6s	} # index column gap
    named @IndexCtd		{  Yes			} # include (ctd.) lines
    named @IndexCtdWord		{  continued		} # "ctd." in current lang
    named @IndexCtdFormat
	left @Body
	right @CtdWord
				{  @Body @I (@CtdWord)	} # (ctd.) format
    named @IndexSpacerAbove	{  2v			} # space above index spacer
    named @IndexSpacerBelow	{  1v			} # space below index spacer
    named @IndexSpacerFont	{  +3p 			} # font of index spacer
    named @IndexSpacerFormat
	right @Body		{  @Body		} # format of index spacer
    named @MakeIndexA		{  No			} # make index A? Yes or No
    named @IndexAText		{  @Null		} # initial index text
    named @IndexAFont		{			} # index A entries font
    named @IndexABreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx}	} # index A entries break
    named @IndexAFormat
	right @Body		{  @Body		} # @IndexA format
    named @SubIndexAFormat
	right @Body		{  {1f @Wide}@Body	} # @SubIndexA format
    named @SubSubIndexAFormat
	right @Body		{  {2f @Wide}@Body	} # @SubSubIndexA format
    named @IndexATypeOrdinary
	right @PageNum		{  @PageNum		} # ordinary page numbers
    named @IndexATypeMain
	right @PageNum		{  @B @PageNum		} # main page numbers
    named @IndexATypeSpecial
	right @PageNum		{  @I @PageNum		} # special page numbers
    named @IndexARangeFormat
	left @From
	right @To		{  @From--@To		}
    named @IndexAColumnNumber	{  2			} # index A columns (1 to 10)
    named @IndexAColumnGap	{  1.00c @OrIfPlain 6s	} # index A column gap
    named @IndexACtd		{  Yes			} # include (ctd.) lines
    named @IndexACtdWord	{  continued		} # "ctd." in current lang
    named @IndexACtdFormat
	left @Body
	right @CtdWord
				{  @Body @I (@CtdWord)	} # (ctd.) format
    named @IndexASpacerAbove	{  2v			} # space above index A spacer
    named @IndexASpacerBelow	{  1v			} # space below index A spacer
    named @IndexASpacerFont	{  +3p 			} # font of index A spacer
    named @IndexASpacerFormat
	right @Body		{  @Body		} # format of index A spacer
    named @MakeIndexB		{  No			} # make index B? Yes or No
    named @IndexBText		{  @Null		} # initial index text
    named @IndexBFont		{			} # index B entries font
    named @IndexBBreak		{ {oragged 1.2fx} @OrIfPlain {oragged 1fx}	} # index B entries break
    named @IndexBFormat
	right @Body		{  @Body		} # @IndexB format
    named @SubIndexBFormat
	right @Body		{  {1f @Wide}@Body	} # @SubIndexB format
    named @SubSubIndexBFormat
	right @Body		{  {2f @Wide}@Body	} # @SubSubIndexB format
    named @IndexBTypeOrdinary
	right @PageNum		{  @PageNum		} # ordinary page numbers
    named @IndexBTypeMain
	right @PageNum		{  @B @PageNum		} # main page numbers
    named @IndexBTypeSpecial
	right @PageNum		{  @I @PageNum		} # special page numbers
    named @IndexBRangeFormat
	left @From
	right @To		{  @From--@To		}
    named @IndexBColumnNumber	{  2			} # index B columns (1 to 10)
    named @IndexBColumnGap	{  1.00c @OrIfPlain 6s	} # index B column gap
    named @IndexBCtd		{  Yes			} # include (ctd.) lines
    named @IndexBCtdWord	{  continued		} # "ctd." in current lang
    named @IndexBCtdFormat
	left @Body
	right @CtdWord
				{  @Body @I (@CtdWord)	} # (ctd.) format
    named @IndexBSpacerAbove	{  2v			} # space above index B spacer
    named @IndexBSpacerBelow	{  1v			} # space below index B spacer
    named @IndexBSpacerFont	{  +3p 			} # font of index B spacer
    named @IndexBSpacerFormat
	right @Body		{  @Body		} # format of index B spacer
    named @MakeColophon		{  No			} # make colophon? Yes or No
    named @ColophonFont		{			} # font for colophon
    named @ColophonBreak	{			} # break style for colophon
    named @ColophonColumnNumber	{  1			} # colophon columns (1 to 10)
    named @ColophonColumnGap	{  1.00c @OrIfPlain 6s	} # colophon column gap
    named @TopGap		{  0.75c @OrIfPlain 2f	} # gap between figures
    named @MidGap		{  0.75c @OrIfPlain 2f	} # gap above/below body text

    named @FootNoteNumbers	{  Arabic		} # footnote numbers
    named @FootNoteThrough	{  No			} # numbered through chapter?
    named @FootNoteLocation	{  ColFoot		} # where the footnote appears
    named @FootNoteFont		{  0.80f		} # font for footnotes
    named @FootNoteBreak	{  1.2fx @OrIfPlain 1fx	} # break for footnotes
    named @FootNoteFormat left number right body
				{  { number &0.05f } @Insert body } # break for footnotes
    named @FootLen		{  2.00c @OrIfPlain 10s	} # length of footnote line
    named @FootAboveGap		{  @DisplayGap		} # gap above footnote line
    named @FootGap		{  0.20c @OrIfPlain 1fx	} # gap between footnotes

    named @MarginNoteFont	{  0.80f		} # font of margin notes
    named @MarginNoteBreak	{  ragged 1.10fx	} # break style of margin notes
    named @MarginNoteHGap	{  0.5c			} # horizontal gap to notes
    named @MarginNoteVGap	{  @DisplayGap		} # min vertical gap between
    named @MarginNoteWidth	{  1.50c		} # width of margin notes

    named @EndNoteNumbers	{  Arabic		} # endnote numbers
    named @EndNoteFont		{  0.80f		} # font of endnotes
    named @EndNoteBreak		{  1.2fx @OrIfPlain 1fx	} # break for endnotes
    named @EndNoteFormat left number right body
				{  { number &0.05f } @Insert body } # break for endnotes
    named @EndNoteGap		{  0.20c @OrIfPlain 1f	} # gap between endnotes

    named @TheoremWord		{  theorem		} # "Theorem" word, etc.
    named @TheoremTitleFormat right title
				{  (title)              } # Theorem title format if present
    named @TheoremFormat named word {} named number {} named title {} named body {} # theorem format
				{  { @B { word @NumSep number title: } &2s } @Insert body }
    named @DefinitionWord	{  definition		} # "Definition" word, etc.
    named @DefinitionTitleFormat{  (title)              } # Definition title format if present
    named @DefinitionFormat named word {} named number {} named title {} named body {} # definition format
				{  { @B { word @NumSep number title: } &2s } @Insert body }
    named @ClaimWord		{  claim		} # "Claim" word, etc.
    named @ClaimTitleFormat	{  (title)              } # Claim title format if present
    named @ClaimFormat named word {} named number {} named title {} named body {} # claim format
				{  { @B { word @NumSep number title: } &2s } @Insert body }
    named @PropositionWord	{  proposition		} # "Proposition" word, etc.
    named @PropositionTitleFormat{  (title)             } # Proposition title format if present
    named @PropositionFormat named word {} named number {} named title {} named body {} # proposition format
				{  { @B { word @NumSep number title: } &2s } @Insert body }
    named @LemmaWord		{  lemma		} # "Lemma" word, etc.
    named @LemmaTitleFormat	{  (title)              } # Lemma title format if present
    named @LemmaFormat named word {} named number {} named title {} named body {} # lemma format
				{  { @B { word @NumSep number title: } &2s } @Insert body }
    named @CorollaryWord	{  corollary		} # "Corollary" word, etc.
    named @CorollaryTitleFormat	{  (title)              } # Corollary title format if present
    named @CorollaryFormat named word {} named number {} named title {} named body {} # corollary format
				{  { @B { word @NumSep number title: } &2s } @Insert body }
    named @ExampleWord		{  example		} # "Example" word, etc.
    named @ExampleTitleFormat	{  (title)              } # Example title format if present
    named @ExampleFormat named word {} named number {} named title {} named body {} # example format
				{  { @B { word @NumSep number title: } &2s } @Insert body }
    named @ProofWord		{  proof		} # "Proof" word, etc.

    named @PageHeaders		{  Simple		} # None Simple Titles NoTitles
    named @PageNumbers		{  Arabic		} # page numbers
    named @FirstPageNumber	{  1			} # number of first page 
    named @IntroPageNumbers	{  Roman		} # intro page numbers
    named @IntroFirstPageNumber	{  1			} # number of first intro page 
    named @StructPageNums	{  No			} # structured page numbers

    named @OddTop	      right @PageNum { @Centre { - @PageNum - }	}
    named @OddFoot	      right @PageNum { @Null                    }
    named @EvenTop	      right @PageNum { @Centre { - @PageNum - }	}
    named @EvenFoot	      right @PageNum { @Null                    }
    named @StartOddTop	      right @PageNum { @Null                    }
    named @StartOddFoot	      right @PageNum { @Null                    }
    named @StartEvenTop	      right @PageNum { @Null                    }
    named @StartEvenFoot      right @PageNum { @Null                    }

    named @IntroOddTop	      right @PageNum { @Null                    }
    named @IntroOddFoot	      right @PageNum { @Centre @PageNum         }
    named @IntroEvenTop	      right @PageNum { @Null                    }
    named @IntroEvenFoot      right @PageNum { @Centre @PageNum         }
    named @IntroStartOddTop   right @PageNum { @Null                    }
    named @IntroStartOddFoot  right @PageNum { @Null                    }
    named @IntroStartEvenTop  right @PageNum { @Null                    }
    named @IntroStartEvenFoot right @PageNum { @Null                    }

    named @RunningOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @I { @MinorNum @Sep @MinorTitle } @Right @B @PageNum }

    named @RunningOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @B @PageNum @Right @I { @MajorNum @Sep @MajorTitle } }

    named @RunningEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningStartOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningStartOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Centre { Bold 0.8f } @Font @PageNum }

    named @RunningStartEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningStartEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Centre { Bold 0.8f } @Font @PageNum }


    named @RunningIntroOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Right @PageNum  }

    named @RunningIntroEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @PageNum }

    named @RunningIntroStartOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroStartOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroStartEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroStartEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }


@Begin


    ###########################################################################
    #                                                                         #
    #  @Protect x                                                             #
    #                                                                         #
    #  Like @CNP, this reserves space on the current page or else makes sure  #
    #  x appears on the following page.  Lookahead is proportional to font    #
    #  size.                                                                  #
    #                                                                         #
    ###########################################################################

    def @Protect right x { 3.0f @High //0io // x }


    ###########################################################################
    #                                                                         #
    #   @HLine                                                                #
    #                                                                         #
    #   Draws a horizontal line to fill available space.                      #
    #                                                                         #
    ###########################################################################

    def @HLine
    {
	@BackEnd @Case {
	   PlainText @Yield { "-" @PlainGraphic 1f @High }
	   PostScript @Yield { {0 0 moveto xsize 0 lineto stroke} @Graphic {} }
	   PDF @Yield { {0 0 m __xsize 0 l S} @Graphic {} }
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @WordVal y                                                           #
    #                                                                         #
    #  Returns @Word&&x if x == y, otherwise y.                               #
    #                                                                         #
    ###########################################################################

    def @WordVal
	left x
	right y
    {
	y @Case {
	    x    @Yield @Word&&x
	    else @Yield y
	}
    }

    ###########################################################################
    #                                                                         #
    #  x @Dft y                                                               #
    #                                                                         #
    #  This returns x unless its value is "dft", in which case it returns y.  #
    #  Useful for defaulting the value of one parameter to another.           #
    #                                                                         #
    ###########################################################################

    def @Dft
	left x
	right y
    {
	x @Case {
	    dft  @Yield y
	    else @Yield x
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @Do y                                                                #
    #                                                                         #
    #  This returns @Null if x is No or None, otherwise y.                    #
    #                                                                         #
    ###########################################################################

    def @Do
	left x
	right y
    {
	x @Case {
	    { No None } @Yield @Null
	    else        @Yield y
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @NoDo y                                                              #
    #                                                                         #
    #  Negation of @Do: This returns y if x is No or None, otherwise @Null.   #
    #                                                                         #
    ###########################################################################

    def @NoDo
	left x
	right y
    {
	x @Case {
	    { No None } @Yield y
	    else        @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @Then y                                                              #
    #                                                                         #
    #  This returns the empty object if x is No or None, otherwise y.         #
    #                                                                         #
    ###########################################################################

    def @Then
	left x
	right y
    {
	x @Case {
	    { No None } @Yield {}
	    else        @Yield y
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @NoThen y                                                            #
    #                                                                         #
    #  Negation of @Then: returns y if x is No or None, otherwise empty.      #
    #                                                                         #
    ###########################################################################

    def @NoThen
	left x
	right y
    {
	x @Case {
	    { No None } @Yield y
	    else        @Yield {}
	}
    }


    ###########################################################################
    #                                                                         #
    #  Number markers.                                                        #
    #                                                                         #
    ###########################################################################

    def @Num
	left numtype
	right num
    {
	numtype @Case {
	    None    @Yield {}
	    Arabic  @Yield num
	    Roman   @Yield @Roman&&num
	    UCRoman @Yield @UCRoman&&num
	    Alpha   @Yield @Alpha&&num
	    UCAlpha @Yield @UCAlpha&&num
	}
    }


    ###########################################################################
    #                                                                         #
    #   @MakePageNum                                                          #
    #                                                                         #
    #   Make a page number.                                                   #
    #                                                                         #
    ###########################################################################

    def @MakePageNum
	named numbers {}
	named rawnum {}
	named prefix {}
	named owner {}
    {
	def @OwnerNum { @PageMarker&&owner @Open { rawnum } }

	def @StructNum { @FirstPageNumber @Plus rawnum @Minus @OwnerNum }

	@PageHeaders.@StructPageNums @Case {
	    { Titles.Yes NoTitles.Yes } @Yield {
		prefix @Join { numbers @Num @StructNum } }
	    else @Yield { numbers @Num rawnum }
	}
    }


    ###########################################################################
    #                                                                         #
    #  Page size, margins, and boxes.  This code culminates in @OddPage x     #
    #  and @EvenPage x, which produce one odd or even page containing x.      #
    #                                                                         #
    ###########################################################################

    def @Width
    {
	@PageType @Case {
	    Letter      @Yield  612p
	    Tabloid     @Yield  792p
	    Ledger      @Yield 1224p
	    Legal       @Yield  612p
	    Statement   @Yield  396p
	    Executive   @Yield  540p
	    A2          @Yield 1190p
	    A3          @Yield  842p
	    A4          @Yield  595p
	    A5          @Yield  420p
	    B4          @Yield  729p
	    B5          @Yield  516p
	    Folio       @Yield  612p
	    Quarto      @Yield  610p
	    10x14       @Yield  720p
	    Other	@Yield @PageWidth
	}
    }

    def @Height
    {
	@PageType @Case {
	    Letter      @Yield  792p
	    Tabloid     @Yield 1224p
	    Ledger      @Yield  792p
	    Legal       @Yield 1008p
	    Statement   @Yield  612p
	    Executive   @Yield  720p
	    A2          @Yield 1684p
	    A3          @Yield 1190p
	    A4          @Yield  842p
	    A5          @Yield  595p
	    B4          @Yield 1032p
	    B5          @Yield  729p
	    Folio       @Yield  936p
	    Quarto      @Yield  780p
	    10x14       @Yield 1008p
	    Other       @Yield @PageHeight
	}
    }

    def @OrientedWidth right @Orient
    {
	@Orient @Case {
	    { Portrait ReversePortrait }   @Yield @Width
	    { Landscape ReverseLandscape } @Yield @Height
	}
    }

    def @OrientedHeight right @Orient
    {
	@Orient @Case {
	    { Portrait ReversePortrait }   @Yield @Height
	    { Landscape ReverseLandscape } @Yield @Width
	}
    }

    def @OrientationAngle right @Orient
    {
	@Orient @Case {
	    Portrait         @Yield 0d
	    Landscape        @Yield 90d
	    ReversePortrait  @Yield 180d
	    ReverseLandscape @Yield 270d
	}
    }

    def @PageBox right x
    {
	@PageBoxType @Case {
	    None      @Yield x
	    Box       @Yield @Box
			margin { @PageBoxMargin }
			paint { @PageBoxPaint }
			linewidth { @PageBoxLineWidth } x
	    CurveBox  @Yield @CurveBox
			margin { @PageBoxMargin }
			paint { @PageBoxPaint }
			linewidth { @PageBoxLineWidth } x
	    ShadowBox @Yield @ShadowBox
			margin { @PageBoxMargin }
			paint { @PageBoxPaint }
			linewidth { @PageBoxLineWidth }
			shadow { @PageBoxShadow } x
	}
    }

    def @PageSet right x
    {	
#     "LoutPageSet" @Graphic	# VT: case PDF produces nothing
      { @BackEnd @Case {
          PostScript @Yield "LoutPageSet"
          else @Yield "% @DoBackground/LoutPageSet UNIMPLEMENTED"
        }
      } @Graphic x
    }

    def @MargSet
	left parity
	right x
    {
#	{ parity "LoutMargSet" } @Graphic x	# VT: case PDF produces nothing
	{ @BackEnd @Case {
	    PostScript @Yield { parity "LoutMargSet" }
	    else @Yield "% @MargSet/LoutMargSet UNIMPLEMENTED"
	  }
	} @Graphic x
    }

    def @OddPage
	left extra
	named @Orient {}
	right x
    {
	@PageSet
	{ @OrientationAngle @Orient } @Rotate
	{ @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High
	{   //@TopMargin ||@OddLeftMargin
		{ // || @PageBackground } @Background
	        # 1 @MargSet
		@PageEnclose @PageBox @HExpand { extra // @VExpand x }
	    ||@OddRightMargin //@FootMargin
	}
    }

    def @EvenPage
	left extra
	named @Orient {}
	right x
    {
	@PageSet
	{ @OrientationAngle @Orient } @Rotate
	{ @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High
	{   //@TopMargin ||@EvenLeftMargin
		{ // || @PageBackground } @Background
	        # 0 @MargSet
		@PageEnclose @PageBox @HExpand { extra // @VExpand x }
	    ||@EvenRightMargin //@FootMargin
	}
    }


    ###########################################################################
    #                                                                         #
    #  Definitions for page headers and footers.  There are 16 symbols here,  #
    #  in the following arrangement:                                          #
    #                                                                         #
    #     @(- | Running)(- | Intro)(Odd | Even)(Top | Foot)Header             #
    #                                                                         #
    #  Running means that running headers are to be used.                     #
    #  Intro means that the header is destined for an introductory page.      #
    #  Odd or Even means whether the page number will be odd or even.         #
    #  Top or Foot means whether the header is for the top or foot of page.   #
    #                                                                         #
    ###########################################################################

    export @Start @MajorNum @MajorTitle @MinorNum @MinorTitle @Owner @Prefix
    def @Runner
	left  @Start
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	named @Owner      {}
	named @Prefix     {}
	named @Tag        {}
    { @Null
      # "(@Runner:"@Start":"@MajorTitle")"
    }

    def @DupRunner # duplicate previous runner
    {
	@Runner&&preceding @Open {
	    NonStart @Runner
		@MajorNum { @MajorNum }
		@MajorTitle { @MajorTitle }
		@MinorNum { @MinorNum }
		@MinorTitle { @MinorTitle }
		@Owner { @Owner }
		@Prefix { @Prefix }
	}
    }

    def @OddTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartOddTop @PageNum
	    Simple.NonStart @Yield @OddTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @OddFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartOddFoot @PageNum
	    Simple.NonStart @Yield @OddFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @EvenTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartEvenTop @PageNum
	    Simple.NonStart @Yield @EvenTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @EvenFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartEvenFoot @PageNum
	    Simple.NonStart @Yield @EvenFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroOddTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartOddTop @PageNum
	    Simple.NonStart @Yield @IntroOddTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroOddFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartOddFoot @PageNum
	    Simple.NonStart @Yield @IntroOddFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroEvenTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartEvenTop @PageNum
	    Simple.NonStart @Yield @IntroEvenTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroEvenFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartEvenFoot @PageNum
	    Simple.NonStart @Yield @IntroEvenFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }


    def @RunningOddTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningStartOddTop @PageNum
	    NoTitles.NonStart @Yield @RunningOddTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningStartOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningOddFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningStartOddFoot @PageNum
	    NoTitles.NonStart @Yield @RunningOddFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningStartOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningEvenTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningStartEvenTop @PageNum
	    NoTitles.NonStart @Yield @RunningEvenTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningStartEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningEvenFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningStartEvenFoot @PageNum
	    NoTitles.NonStart @Yield @RunningEvenFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningStartEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroOddTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningIntroStartOddTop @PageNum
	    NoTitles.NonStart @Yield @RunningIntroOddTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningIntroStartOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroOddFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningIntroStartOddFoot @PageNum
	    NoTitles.NonStart @Yield @RunningIntroOddFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningIntroStartOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroEvenTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningIntroStartEvenTop @PageNum
	    NoTitles.NonStart @Yield @RunningIntroEvenTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningIntroStartEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroEvenFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningIntroStartEvenFoot @PageNum
	    NoTitles.NonStart @Yield @RunningIntroEvenFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningIntroStartEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  Helper definitions for laying out pages.                               #
    #                                                                         #
    ###########################################################################

    def @PageTopPlace		{ @Galley }
    def @PageFootAndTopPlace	{ @Galley }
    def @PageFootNotePlace	{ @Galley }
    def @FullPlace		{ @Galley }
    def @OddFullPlace		{ @Galley }
    def @EvenFullPlace		{ @Galley }
    def @FullPagePlace		{ @Galley }
    def @EvenFullPagePlace	{ @Galley }
    def @EvenPagePlace		{ @Galley }
    def @OddFullPagePlace	{ @Galley }
    def @ColTopPlace		{ @Galley }
    def @ColFootAndTopPlace	{ @Galley }
    def @ColPlace		{ @Galley }
    def @ColFootNotePlace	{ @Galley }
    def @IntroFullPlace		{ @Galley }
    def @IntroOddFullPlace	{ @Galley }
    def @IntroEvenFullPlace	{ @Galley }
    def @IntroColPlace		{ @Galley }
    def @GlossaryPlace		{ @Galley }
    def @IndexPlace		{ @Galley }
    def @IndexAPlace		{ @Galley }
    def @IndexBPlace		{ @Galley }
    def @ColophonPlace		{ @Galley }
    def @AfterLinePlace		{ @ForceGalley }

    def @TryAfterLinePlace right x
    {
	x @Case {
	    noforce @Yield @Galley
	    force   @Yield @ForceGalley
	}
    }

    def @EvenFullPageSection
    {
		  @OneRow @EvenFullPagePlace
	//	  @FullPagePlace
	//@MidGap @EvenFullPageSection
    }

    def @OddFullPageSection
    {
		  @OneRow @OddFullPagePlace
	//	  @FullPagePlace
	//@MidGap @OddFullPageSection
    }

    def @EvenPageTopSect
    {
		  @OneRow @EvenPagePlace
	//	  @PageTopPlace
	//@MidGap @PageFootAndTopPlace
	//@MidGap @EvenPageTopSect
    }

    def @OddPageTopSect
    {
		  @PageTopPlace
	//@MidGap @PageFootAndTopPlace
	//@MidGap @OddPageTopSect
    }

    def @PageOddTopSection right @Orient
    {
	@OddPageTopSect ||{@OrientedWidth @Orient} @FullPlace
			||{@OrientedWidth @Orient} @OddFullPlace
    }

    def @PageEvenTopSection right @Orient
    {
	@EvenPageTopSect ||{@OrientedWidth @Orient} @FullPlace
			 ||{@OrientedWidth @Orient} @EvenFullPlace
    }

    def @PageIntroOddTopSection right @Orient
    {
	@OddPageTopSect ||{@OrientedWidth @Orient} @IntroFullPlace
			||{@OrientedWidth @Orient} @IntroOddFullPlace
    }

    def @PageIntroEvenTopSection right @Orient
    {
	@EvenPageTopSect
	||{@OrientedWidth @Orient} @IntroFullPlace
	||{@OrientedWidth @Orient} @IntroEvenFullPlace
    }

    def @PageFootNoteList
    {
		    @PageFootNotePlace
	//@FootGap  @PageFootNoteList
    }

    def @PageFootNoteSection
    {
	            @FootLen @Wide @HLine
	//@FootGap  @PageFootNoteList
    }

    def @PageFootAndTopSect
    {
		  @PageFootAndTopPlace
	//@MidGap @PageFootAndTopSect
    }

    def @PageFootSection
    {
	//@MidGap       @PageFootAndTopSect
	//@FootAboveGap @PageFootNoteSection
    }

    def @ColTopSection
    {
		  @ColTopPlace
	//@MidGap @ColFootAndTopPlace
	//@MidGap @TryAfterLinePlace noforce
	//@MidGap @ColTopSection
    }

    def @RestOfColSection
    {
	          @AfterLinePlace
	//@MidGap @TryAfterLinePlace force
	//@MidGap @ColPlace @NotRevealed
	//@MidGap @RestOfColSection
    }

    def @IntroRestOfColSection
    {
	          @AfterLinePlace
	//@MidGap @TryAfterLinePlace force
	//@MidGap @IntroColPlace @NotRevealed
	//@MidGap @IntroRestOfColSection
    }

    def @ColFootAndTopList { @ColFootAndTopPlace //@TopGap @ColFootAndTopList }

    def @ColFootNoteList
    {
		    @ColFootNotePlace
	//@FootGap  @ColFootNoteList
    }

    def @ColFootNoteSection
    {
	           @FootLen @Wide @HLine
	//@FootGap @ColFootNoteList
    }

    def @ColFootSection
    {
	//@TopGap       @ColFootAndTopList
	//@FootAboveGap @ColFootNoteSection
    }

    def @ColsOf
	left num
	named gap { @ColumnGap }
	right x
    {
	def @Two { x ||gap x }
	def @Four { @Two ||gap @Two }
	def @Eight { @Four ||gap @Four }

	num @Case {
	    1  @Yield { x				}
	    2  @Yield { @Two				}
	    3  @Yield { @Two  ||gap x			}
	    4  @Yield { @Four				}
	    5  @Yield { @Four ||gap x			}
	    6  @Yield { @Four ||gap @Two		}
	    7  @Yield { @Four ||gap @Two  ||gap x	}
	    8  @Yield { @Four ||gap @Four		}
	    9  @Yield { @Four ||gap @Four ||gap x	}
	   10  @Yield { @Four ||gap @Four ||gap @Two	}
	}
    }

    def @EqualWidth right x { 50c @Wide x }	# believe it or not

    def @ColList right num
    {
	@HExpand num @ColsOf @EqualWidth @VExpand
	{
	    @ColTopSection //@TopGap
	    @ColPlace //@MidGap @RestOfColSection // //1rt
	    @OneRow { @ColFootSection }

	}
    }
    
    def @IntroColList right num
    {
	@HExpand num @ColsOf @EqualWidth @VExpand
	{
	    @ColTopSection //@TopGap
	    @IntroColPlace //@MidGap @IntroRestOfColSection // //1rt
	    @OneRow { @ColFootSection }
	}
    }
    
    def @ZeroColList right num
    {
	@HExpand num @ColsOf @EqualWidth 0c @High @ColPlace
    }
    
    def @ZeroIntroColList right num
    {
	@HExpand num @ColsOf @EqualWidth 0c @High @IntroColPlace
    }
    
    def @GlossaryColList right num
    {
	@HExpand num @ColsOf gap { @GlossaryColumnGap } @EqualWidth @VExpand @GlossaryPlace
    }
    
    def @IndexColList right num
    {
	@HExpand num @ColsOf gap { @IndexColumnGap } @EqualWidth @VExpand @IndexPlace
    }
    
    def @IndexAColList right num
    {
	@HExpand num @ColsOf gap { @IndexAColumnGap } @EqualWidth @VExpand @IndexAPlace
    }
    
    def @IndexBColList right num
    {
	@HExpand num @ColsOf gap { @IndexBColumnGap } @EqualWidth @VExpand @IndexBPlace
    }
    
    def @ColophonColList right num
    {
	@HExpand num @ColsOf gap { @ColophonColumnGap } @EqualWidth @VExpand @ColophonPlace
    }


    ###########################################################################
    #                                                                         #
    #  Footnotes.                                                             #
    #                                                                         #
    ###########################################################################

    export @Tag count
    def @FootNoteCounterMarker
	named @Tag {}
	named count {}
    {
	@Null
    }

    def @FootNoteNum right tag
    {
	@FootNoteCounterMarker&&tag @Open { @Next count }
    }

    def @FootNoteCounterIncrement
	right tag
    {
	   @FootNoteCounterMarker&&preceding @Tagged tag
	// @FootNoteCounterMarker count { @FootNoteNum tag }
	// @NumberMarker @Tag { tag }
		@Value { @FootNoteNumbers @Num @FootNoteNum tag }
    }

    def @BeginFootNoteCounter
    {
	@FootNoteCounterMarker count { 0 }
    }

    def @FootNote
	named @Tag {}
	named @Location { @FootNoteLocation }
	named @Another { No }
	named @Label { Numbered }
	right x
    {

	def @FootLabelFmt
	    right x
	{
	    @FootNoteFont @Font @FootNoteBreak @Break
	    +0.3v @VShift { Base 0.8f } @Font x
	}

	def @FootExtra
	{
            @BackEnd @Case {
	        PlainText @Yield ","
	        else @Yield @FootLabelFmt ","
            }
	}

	def @FootLabel
	{
	    @Label @Case {
		"Numbered" @Yield { @BackEnd @Case {
		    PlainText @Yield { ({@NumberOf @Tag}) }
		    else @Yield @FootLabelFmt @NumberOf @Tag
		} }
		else @Yield { @BackEnd @Case {
		    PlainText @Yield @Label
		    else @Yield @FootLabelFmt @Label
		} }
            }
	}

	def @LongFootLabel
	{
	    @Another @Case {
		No  @Yield {                 @FootLabel }
		Yes @Yield { @FootExtra &0iu @FootLabel }
	    }
	}

	def @FootVal
	{
	    @FootNoteFont @Font @FootNoteBreak @Break @Label @Case {
		"Numbered" @Yield {
		    { @FootNoteCounterIncrement @Tag & @FootLabel }
		      @FootNoteFormat x
		}
		else @Yield { @FootLabel @FootNoteFormat x }
	    }
	}

	def @PageFootNote into { @PageFootNotePlace&&following } { @FootVal }
	def @ColFootNote  into { @ColFootNotePlace&&following  } { @FootVal }

	@Location @Case {
	    ColFoot  @Yield { @Null &0iu @LongFootLabel & @ColFootNote  }
	    PageFoot @Yield { @Null &0iu @LongFootLabel & @PageFootNote }
	}
    }

    macro @AnotherFootNote { @FootNote @Another { Yes } }


    ###########################################################################
    #                                                                         #
    #  Definitions for page lists.  There are four symbols here, in the       #
    #  following arrangement:                                                 #
    #                                                                         #
    #    @(Simple | Running)(- | Intro)PageList                               #
    #                                                                         #
    #  Running means that the page list is to support running headers.        #
    #  Intro means that the page list is an introductory page list.           #
    #  These are then packaged into @PageList and @IntroPageList.             #
    #                                                                         #
    ###########################################################################

    def @SStart right @PageNum
    {
	@PageNum @Case {
	    { 1 0 } @Yield Start
	    else    @Yield NonStart
	}
    }

    def @ChooseColList right colnum
    {
	@OneOf
	{
	    @ColList colnum
	    @GlossaryColList @GlossaryColumnNumber
	    @IndexAColList @IndexAColumnNumber
	    @IndexBColList @IndexBColumnNumber
	    @IndexColList  @IndexColumnNumber
	    @ColophonColList @ColophonColumnNumber
	}
    }

    def @ChooseIntroColList right colnum
    {
	@OneOf
	{
	    @IntroColList colnum
	    @GlossaryColList @GlossaryColumnNumber
	    @IndexAColList @IndexAColumnNumber
	    @IndexBColList @IndexBColumnNumber
	    @IndexColList  @IndexColumnNumber
	    @ColophonColList @ColophonColumnNumber
	}
    }

    def @OddBodyMargins right x
    {
	@OddLeftBodyMargin @Wide {} || 1 @MargSet x || @OddRightBodyMargin @Wide {}
    }

    def @EvenBodyMargins right x
    {
	@EvenLeftBodyMargin @Wide {} || 0 @MargSet x || @EvenRightBodyMargin @Wide {}
    }

    def @SimplePageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @Orient {}
	named @AtTop { @Null }
	right @PageNum
    {

	def @OrdinaryOddPage
	{
		{@PageHeaders.{@SStart @PageNum}} @OddTopHeader
		    { @PageNumbers @Num @PageNum }
		//@MidGap
		@OddBodyMargins {
			@AtTop
			//@MidGap @PageOddTopSection @Orient
			//@MidGap @ChooseColList @ColumnNumber
		}
		//1rt @OneRow
		{  //         @OddBodyMargins @PageFootSection
		   //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader
				 { @PageNumbers @Num @PageNum }
		}
	}

	def @FullPageOddPage
	{
		{@PageHeaders.{@SStart @PageNum}} @OddTopHeader
		    { @PageNumbers @Num @PageNum }
		//@MidGap @OddBodyMargins @OddFullPageSection
		//1rt @OneRow
		{ //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader
				 { @PageNumbers @Num @PageNum }
		}
	}

        def @SimpleEvenPageList
	    named @ColumnNumber {}
	    named @PageHeaders {}
	    named extra { No }
	    right @PageNum
        {

	    def @OrdinaryEvenPage
	    {
		@PageHeaders.NonStart @EvenTopHeader
		    { @PageNumbers @Num @PageNum }
		//@MidGap
		@EvenBodyMargins {
			@PageEvenTopSection @Orient
			//@MidGap @ChooseColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @EvenBodyMargins @PageFootSection
		   //@MidGap @PageHeaders.NonStart @EvenFootHeader
			     { @PageNumbers @Num @PageNum }
		}
	    }

	    def @FullPageEvenPage
	    {
		@PageHeaders.NonStart @EvenTopHeader
		    { @PageNumbers @Num @PageNum }
		//@MidGap @EvenBodyMargins @EvenFullPageSection
		//1rt @OneRow
		{ //@MidGap @PageHeaders.NonStart @EvenFootHeader
			     { @PageNumbers @Num @PageNum }
		}
	    }

	        @PageMarker
		    rawnum { @PageNum }
		    num { @PageNumbers @Num @PageNum }
	    //  @FootNoteThrough @NoDo @BeginFootNoteCounter
	    //  {} @EvenPage @Orient { @Orient }
	        {
		    @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage
	        }
	    //  @SimplePageList
		    @ColumnNumber { @ColumnNumber }
		    @PageHeaders { @PageHeaders }
		    @Orient { @Orient }
		@Next @PageNum
        }

	    @PageMarker
		rawnum { @PageNum }
		num { @PageNumbers @Num @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @OddBodyMargins @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient }
	    {
		@OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage
	    }
	//  @SimpleEvenPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
	    @Next @PageNum
    }

    def @SimpleIntroPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named @Orient {}
	named extra { No }
	named @AtTop { @Null }
	right @PageNum
    {
	    @PageMarker
		num { @IntroPageNumbers @Num @PageNum }
		rawnum { @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient }
	    {
		{@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader
		    { @IntroPageNumbers @Num @PageNum }
		//@MidGap
		@OddBodyMargins {
			@AtTop
			//@MidGap @PageIntroOddTopSection @Orient
			//@MidGap @ChooseIntroColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @OddBodyMargins @PageFootSection
		   //@MidGap
		       {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader
			   { @IntroPageNumbers @Num @PageNum }
		}
	    }
	//  @PageMarker
		num { @IntroPageNumbers @Num @Next @PageNum }
		rawnum { @Next @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  {} @EvenPage @Orient { @Orient }
	    @Runner&&following @Open
	    {
		@PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @Next @PageNum }
		//@MidGap
		@EvenBodyMargins {
			@PageIntroEvenTopSection @Orient
			//@MidGap @ChooseIntroColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @EvenBodyMargins @PageFootSection
		   //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader
				{ @IntroPageNumbers @Num @Next @PageNum }
		}
	    }
	//  @SimpleIntroPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
		@Orient { @Orient }
	    @Next @Next @PageNum
    }

    def @SimpleOddOrEvenIntroPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named @Orient {}
	named extra { No }
	named @AtTop { @Null }
	right @PageNum
    {

        def @SimpleEvenIntroPageList
	    named @ColumnNumber {}
	    named @PageHeaders {}
	    named @Orient {}
	    named extra { No }
	    named @AtTop { @Null }
	    right @PageNum
       {

	    @PageMarker
		num { @IntroPageNumbers @Num @PageNum }
		rawnum { @PageNum }
	 // @FootNoteThrough @NoDo @BeginFootNoteCounter
	 // {} @EvenPage @Orient { @Orient }
	    @Runner&&following @Open
	    {
		@PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @PageNum }
		//@MidGap
		@EvenBodyMargins {
			@PageIntroEvenTopSection @Orient
			//@MidGap @ChooseIntroColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @EvenBodyMargins @PageFootSection
		   //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader
				{ @IntroPageNumbers @Num @PageNum }
		}
	    }
	 // @SimpleOddOrEvenIntroPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
		@Orient { @Orient }
	    @Next @PageNum
       }
	    @PageMarker
		num { @IntroPageNumbers @Num @PageNum }
		rawnum { @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient }
	    {
		{@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader
		    { @IntroPageNumbers @Num @PageNum }
		//@MidGap
		@OddBodyMargins {
			@AtTop
			//@MidGap @PageIntroOddTopSection @Orient
			//@MidGap @ChooseIntroColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @OddBodyMargins @PageFootSection
		   //@MidGap
		       {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader
			   { @IntroPageNumbers @Num @PageNum }
		}
	    }
	//  @SimpleEvenIntroPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
		@Orient { @Orient }
		@Next @PageNum
    }

    def @RunningPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @Orient {}
	named @AtTop { @Null }
	right @PageNum
    {

	def @OrdinaryOddPage
	{
	    @Runner&&following @Open
	    {
		@PageMarker
		    num { @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner } }
		    rawnum { @PageNum }
		// @PageHeaders.@Start @RunningOddTopHeader
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    {
			@MakePageNum
			    numbers { @PageNumbers }
			    rawnum  { @PageNum }
			    prefix  { @Prefix }
			    owner   { @Owner }
		    }
		//@MidGap
		@OddBodyMargins {
			@AtTop
			//@MidGap @PageOddTopSection @Orient
			//@MidGap @ChooseColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @OddBodyMargins @PageFootSection
		   //@MidGap @PageHeaders.@Start @RunningOddFootHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		}
	    }
	}

	def @FullPageOddPage
	{
	    @Runner&&following @Open
	    {
		@PageMarker
		    num { @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner } }
		    rawnum { @PageNum }
		// @PageHeaders.@Start @RunningOddTopHeader
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    {
			@MakePageNum
			    numbers { @PageNumbers }
			    rawnum  { @PageNum }
			    prefix  { @Prefix }
			    owner   { @Owner }
		    }
		//@MidGap
		@OddBodyMargins {
			@AtTop
			//@MidGap @OddFullPageSection
		}
		//1rt @OneRow
		{
		   //@MidGap @PageHeaders.@Start @RunningOddFootHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		}
	    }
	}

        def @RunningEvenPageList
	    named @ColumnNumber {}
	    named @PageHeaders {}
	    right @PageNum
        {

	    def @OrdinaryEvenPage
	    {
	        @Runner&&following @Open
	        {
		    @PageMarker
			num { @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner } }
			rawnum { @PageNum }
		    // @PageHeaders.@Start @RunningEvenTopHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		    //@MidGap
		    @EvenBodyMargins {
			@PageEvenTopSection @Orient
		    	//@MidGap @ChooseColList @ColumnNumber
		    }
		    //1rt @OneRow
		    {  //        @EvenBodyMargins @PageFootSection
		       //@MidGap @PageHeaders.@Start @RunningEvenFootHeader
			   @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			   @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			   {
				@MakePageNum
				    numbers { @PageNumbers }
				    rawnum  { @PageNum }
				    prefix  { @Prefix }
				    owner   { @Owner }
			   }
		    }
	        }
	    }

	    def @FullPageEvenPage
	    {
	        @Runner&&following @Open
	        {
		    @PageMarker
			num { @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner } }
			rawnum { @PageNum }
		    // @PageHeaders.@Start @RunningEvenTopHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @PageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		    //@MidGap
		    @EvenBodyMargins @EvenFullPageSection
		    //1rt @OneRow
		    {
		       //@MidGap @PageHeaders.@Start @RunningEvenFootHeader
			   @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			   @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			   {
				@MakePageNum
				    numbers { @PageNumbers }
				    rawnum  { @PageNum }
				    prefix  { @Prefix }
				    owner   { @Owner }
			   }
		    }
	        }
	    }

		@FootNoteThrough @NoDo @BeginFootNoteCounter
	    //  {} @EvenPage @Orient { @Orient }
	        {
		    @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage
	        }
	    //  @RunningPageList
		    @ColumnNumber { @ColumnNumber }
		    @PageHeaders { @PageHeaders }
		    @Orient { @Orient }
		@Next @PageNum
        }

	    @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @OddBodyMargins @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient }
	    {
		@OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage
	    }
	//  @RunningEvenPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
	    @Next @PageNum
    }

    def @RunningIntroPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named @AtTop { @Null }
	named @Orient {}
	named extra { No }
	right @PageNum
    {
	    @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @OddBodyMargins @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient }
	    @Runner&&following @Open
	    {
		@PageMarker
		    num { @MakePageNum
			    numbers { @IntroPageNumbers }
			    rawnum  { @PageNum }
			    prefix  { @Prefix }
			    owner   { @Owner } }
		    rawnum { @PageNum }
		// @PageHeaders.@Start @RunningIntroOddTopHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @IntroPageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		//@MidGap
		@OddBodyMargins {
			@AtTop
			//@MidGap @PageIntroOddTopSection @Orient
			//@MidGap @IntroColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @OddBodyMargins @PageFootSection
		   //@MidGap @PageHeaders.@Start @RunningIntroOddFootHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @IntroPageNumbers }
				rawnum  { @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		}
	    }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  {} @EvenPage @Orient { @Orient }
	    @Runner&&following @Open
	    {
		@PageMarker
		    num { @MakePageNum
			    numbers { @IntroPageNumbers }
			    rawnum  { @Next @PageNum }
			    prefix  { @Prefix }
			    owner   { @Owner } }
		    rawnum { @Next @PageNum }
		// @PageHeaders.@Start @RunningIntroEvenTopHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @IntroPageNumbers }
				rawnum  { @Next @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		//@MidGap
		@EvenBodyMargins {
			@PageIntroEvenTopSection @Orient
			//@MidGap @ChooseIntroColList @ColumnNumber
		}
		//1rt @OneRow
		{  //        @EvenBodyMargins @PageFootSection
		   //@MidGap @PageHeaders.@Start @RunningIntroEvenFootHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{
			    @MakePageNum
				numbers { @IntroPageNumbers }
				rawnum  { @Next @PageNum }
				prefix  { @Prefix }
				owner   { @Owner }
			}
		}
	    }
	//  @RunningIntroPageList
		@PageHeaders { @PageHeaders }
		@ColumnNumber { @ColumnNumber }
		@Orient { @Orient }
	    @Next @Next @PageNum
    }

    def @PageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @Orient {}
	named @AtTop { @Null }
	right @FirstPageNum
    {
	@PageHeaders @Case {
	    { None Simple } @Yield @SimplePageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  @Orient { @Orient }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	    { Running Titles NoTitles } @Yield @RunningPageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  @Orient { @Orient }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	}
	//
	@PageMark last.page
    }

    def @IntroPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named @Orient {}
	named extra { No }
	named @AtTop { @Null }
	right @FirstPageNum
    {
	@PageHeaders @Case {
	    { None Simple } @Yield @SimpleIntroPageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  @Orient { @Orient }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	    { Running Titles NoTitles } @Yield @RunningIntroPageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  @Orient { @Orient }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	}
    }

    def @ContinuousPageList
	named @Orient {}
    {
	{@OrientedWidth @Orient} @Wide
	{   //@TopMargin ||@EvenLeftMargin
	    {
				@BeginFootNoteCounter
		//		@ColPlace
		//@FootAboveGap	@ColFootNoteSection
		//@FootAboveGap	@PageFootNoteSection
	    }
	    ||@EvenRightMargin //@FootMargin
	}
    }


    ###########################################################################
    #                                                                         #
    #  Table of contents (including lists of figures and tables).             #
    #                                                                         #
    ###########################################################################

    def @ContentsItem
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
	named protect { No }
    {
#	def @Leaders { @ContentsLeader &@ContentsLeaderGap @Leaders }

	def @Leaders { @ContentsLeaderGap @Wide {} & @ContentsLeader & @Leaders }

	def @OptionalCrossLink right x
	{
	    crosstag @Case {
		""   @Yield x
		else @Yield { crosstag @CrossLink x }
	    }
	}

	def @RightPart
	{
	    @ContentsRightWidth @Wide {
		&1rt { @OptionalCrossLink pagenum //0.5vx }
	    }
	}

#	def @Item
#	{
#	    |indent @OptionalCrossLink number @ContentsFormat @HExpand {
#	        title & @ContentsLeaderGap @Wide &1rt @OneCol {
#		    @Leaders & @RightPart &0io
#	        }
#	    }
#	    |@ContentsRightWidth
#	}

	def @Item
	{
	    |indent @OptionalCrossLink number @ContentsFormat @HExpand {
	        title &1rt @OneCol {
		    @Leaders & @RightPart &0io
	        }
	    }
	    |@ContentsRightWidth
	}

	//pregap
	//0.5vx
	protect @Case {
	   No    @Yield @Item
	   Yes   @Yield @Protect @Item
	}
	//postgap
    }

    def @ContentsPlace { @Galley }
    def @FigureContentsPlace { @Galley }
    def @TableContentsPlace { @Galley }

    def @SendContents into { @ContentsPlace&&foll_or_prec }
	right x
    {
	x
    }

    def @SendFigureContents into { @FigureContentsPlace&&foll_or_prec }
	right x
    {
	x
    }

    def @SendTableContents into { @TableContentsPlace&&foll_or_prec }
	right x
    {
	x
    }

    def @ContentsEntry
	left  wanted
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
    {
	@MakeContents.wanted @Case {
	    Yes.Yes   @Yield { @SendContents @ContentsItem
				   indent { indent }
				   crosstag { crosstag }
				   number { number }
				   title { title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
			     }
	    else      @Yield @Null
	}
    }

    def @FigureContentsEntry
	left  wanted
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
    {
	@MakeFigureContents.wanted @Case {
	    Yes.Yes   @Yield { @SendFigureContents @ContentsItem
				   indent { indent }
				   crosstag { crosstag }
				   number { number }
				   title { title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
			     }
	    else      @Yield @Null
	}
    }

    def @TableContentsEntry
	left  wanted
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
    {
	@MakeTableContents.wanted @Case {
	    Yes.Yes   @Yield { @SendTableContents @ContentsItem
				   indent { indent }
				   crosstag { crosstag }
				   number { number }
				   title { title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
			     }
	    else      @Yield @Null
	}
    }

    def @MajorContentsEntry
	left  wanted
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGapAbove }
	named postgap { @ContentsGapBelow }
    {
	@MakeContents.wanted @Case {
	    Yes.Yes   @Yield { @SendContents @ContentsItem
				   indent { indent }
				   crosstag { crosstag }
				   number { @ContentsFont @Font number }
				   title { @ContentsFont @Font title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
				   protect { Yes }
			     }
	    else      @Yield @Null
	}
    }

    def @VeryMajorContentsEntry
	left  wanted
	named indent { 0.5rt }
	named title {}
	named pregap { @ContentsPartGapAbove }
	named postgap { @ContentsPartGapBelow }
    {
	def item
	{
	    //pregap
	    //0.5vx
	    |indent @ContentsFont @Font @OneCol title |
	    //0.5vx
	    //postgap
	}

	@MakeContents.wanted @Case {
	    Yes.Yes   @Yield @SendContents item
	    else      @Yield @Null
	}

    }

    def @ContentsSection
    {
	def @ContentsList { @ContentsPlace // @ContentsList }

	@MakeContents @Case {
	    { Yes Bypass }  @Yield @ContentsList
	    else	    @Yield @Null
	}
    }

    def @FigureContentsSection
    {
	def @FigureContentsList { @FigureContentsPlace // @FigureContentsList }

	@MakeFigureContents @Case {
	    { Yes Bypass }  @Yield @FigureContentsList
	    else	    @Yield @Null
	}
    }

    def @TableContentsSection
    {
	def @TableContentsList { @TableContentsPlace // @TableContentsList }

	@MakeTableContents @Case {
	    { Yes Bypass }  @Yield @TableContentsList
	    else	    @Yield @Null
	}
    }

    ###########################################################################
    #                                                                         #
    #  Bypass table of contents.                                              #
    #                                                                         #
    ###########################################################################

    def @BypassContentsEntry into { @ContentsPlace&&preceding }
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				crosstag { crosstag }
				number { number }
				title { title }
				pagenum { pagenum }
				pregap { @ContentsGap }
				postgap { 0c }
			  }
	    else  @Yield  @Null
	}
    }

    def @BypassFigureContentsEntry into { @FigureContentsPlace&&preceding }
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeFigureContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				crosstag { crosstag }
				number { number }
				title { title }
				pagenum { pagenum }
				pregap { @ContentsGap }
				postgap { 0c }
			  }
	    else  @Yield  @Null
	}
    }

    def @BypassTableContentsEntry into { @TableContentsPlace&&preceding }
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeTableContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				crosstag { crosstag }
				number { number }
				title { title }
				pagenum { pagenum }
				pregap { @ContentsGap }
				postgap { 0c }
			  }
	    else  @Yield  @Null
	}
    }

    def @BypassMajorContentsEntry into { @ContentsPlace&&preceding }
	named indent { 0f }
	named crosstag {}
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				crosstag { crosstag }
				number { @B number }
				title { @B title }
				pagenum { pagenum }
				pregap { @ContentsGapAbove }
				postgap { @ContentsGapBelow }
			  }
	    else  @Yield  @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  Endnotes.                                                              #
    #                                                                         #
    ###########################################################################

    export num
    def @EndNoteList
	named @Tag {}
	right num
    {
	@Galley //@EndNoteGap @EndNoteList @Next num
    }

    def endtag right num
    {
        @BackEnd @Case {
	    PlainText @Yield {
	        ({@EndNoteNumbers @Num num})
	    }
	    else @Yield {
	        +0.3v @VShift 0.8f @Font @EndNoteNumbers @Num num
	    }
        }
    }

    def @EndNote
	named @Tag {}
	right x
    {
	def ftag
	{
	    @EndNoteFont @Font @EndNoteList&&@Tag @Open { endtag num }
	}

	def @ENote into { @EndNoteList&&following }
	{
	    @EndNoteFont @Font @EndNoteBreak @Break
	    { { @EndNoteList&&preceding @Tagged @Tag ftag } @EndNoteFormat x }
	}

	@Null & @EndNoteFont @Font ftag & @ENote
    }


    ###########################################################################
    #                                                                         #
    #  Margin Notes.                                                          #
    #                                                                         #
    ###########################################################################

    def @ZeroSize right x
    {
	@HContract @VContract { ^/0io |0io @OneCol @OneRow x |0io /0io }
    }

    def @MargPut
	left parity
	right x
    {
	@MarginNoteFont @Font @MarginNoteBreak @Break @ZeroSize {
	  @BackEnd @Case {
	    PlainText @Yield ""
	    PostScript @Yield {
	    { parity "LoutMargShift gsave" // "grestore" } @Graphic
	    {
		|@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x
		|@MarginNoteHGap //@MarginNoteVGap
	    }
	    }
	    PDF @Yield { "% @MargPut/LoutMargShift UNIMPLEMENTED" @Graphic {
		  |@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x
		  |@MarginNoteHGap //@MarginNoteVGap
	      }	# VT: PDF currently has no output
	    }
	  }
	}
    }

    def @LeftNote  right x { @Null & 0 @MargPut x }
    def @RightNote right x { @Null & 1 @MargPut x }
    def @OuterNote right x { @Null & 2 @MargPut x }
    def @InnerNote right x { @Null & 3 @MargPut x }


    ###########################################################################
    #                                                                         #
    #  @Place: places an object at an arbitrary point on the page.            #
    #                                                                         #
    ###########################################################################

#
# VT: the expressions in the braces will work for PostScript but not for PDF
# they should be modified in the way the "named c { " cm" }" blocks were modified above
# but since the point of @Place is to output a matrix (?), I have not implemented this change
#
    def @Place
      import @PSLengths named x
	named "+" precedence 96 associativity left left a right b { a b "add" }
	named "-" precedence 96 associativity left left a right b { a b "sub" }
	named "/" precedence 97 associativity left left a right b { a b "div" }
	named "*" precedence 98 associativity left left a right b { a b "mul" }
	# named c   precedence 99                    left a         { a "cm"    }
	# named i   precedence 99                    left a         { a "in"    }
	# named e   precedence 99                    left a         { a "em"    }
	# named p   precedence 99                    left a         { a "pt"    }
	# named f   precedence 99                    left a         { a "ft"    }
	# named s   precedence 99                    left a         { a "sp"    }
	# named v   precedence 99                    left a         { a "vs"    }
	# named cm  precedence 99                    left a         { a "cm"    }
	# named in  precedence 99                    left a         { a "in"    }
	# named em  precedence 99                    left a         { a "em"    }
	# named pt  precedence 99                    left a         { a "pt"    }
	# named ft  precedence 99                    left a         { a "ft"    }
	# named sp  precedence 99                    left a         { a "sp"    }
	# named vs  precedence 99                    left a         { a "vs"    }
	{ 0 }
      import @PSLengths named y
	named "+" precedence 96 associativity left left a right b { a b "add" }
	named "-" precedence 96 associativity left left a right b { a b "sub" }
	named "/" precedence 97 associativity left left a right b { a b "div" }
	named "*" precedence 98 associativity left left a right b { a b "mul" }
	# named c   precedence 99                    left a         { a "cm"    }
	# named i   precedence 99                    left a         { a "in"    }
	# named e   precedence 99                    left a         { a "em"    }
	# named p   precedence 99                    left a         { a "pt"    }
	# named f   precedence 99                    left a         { a "ft"    }
	# named s   precedence 99                    left a         { a "sp"    }
	# named v   precedence 99                    left a         { a "vs"    }
	# named cm  precedence 99                    left a         { a "cm"    }
	# named in  precedence 99                    left a         { a "in"    }
	# named em  precedence 99                    left a         { a "em"    }
	# named pt  precedence 99                    left a         { a "pt"    }
	# named ft  precedence 99                    left a         { a "ft"    }
	# named sp  precedence 99                    left a         { a "sp"    }
	# named vs  precedence 99                    left a         { a "vs"    }
	{ 0 }
      right val
    {
	@ZeroSize {
	  @BackEnd @Case {
	    PlainText @Yield ""
	    PostScript @Yield {
		{ "LoutPageDict begin matr setmatrix" x y "translate end gsave"
		  // "grestore" } @Graphic val
	    }
	    else @Yield { { "% @Place UNIMPLEMENTED" } @Graphic val	# VT: PDF currently has no output
	    }
	  }
	}
    }


    ###########################################################################
    #                                                                         #
    #   @Theorem, @Proof, and @EndProof                                       #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @TheoremCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginTheoremCounter
	right prefix
    {
	@TheoremCounterMarker val { prefix @Join 0 }
    }

    def @TheoremNum right tag
    {
	@TheoremCounterMarker&&tag @Open { @Next val }
    }

    def @TheoremCounterIncrement
	right tag
    {
	@TheoremCounterMarker&&preceding @Tagged tag
	@TheoremCounterMarker val { @TheoremNum tag }
	@NumberMarker @Tag { tag } @Value { @TheoremNum tag }
    }

    def @Theorem
       named @Tag {}
       named @Title {}
       right x
    {
	def @TheoremTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield @TheoremTitleFormat @Title
	   }
	}

	{ @PageMark @Tag & @TheoremCounterIncrement @Tag } @Insert
	@TheoremFormat
	    word { theorem @WordVal @TheoremWord }
	    number { @TheoremNum @Tag }
	    title { @TheoremTitle }
	    body { x }
    }

    macro @Proof { @B { {proof @WordVal @ProofWord}: } &2s }

    macro @EndProof { &1rt @Box {} }


    ###########################################################################
    #                                                                         #
    #   @Definition                                                           #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @DefinitionCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginDefinitionCounter
	right prefix
    {
	@DefinitionCounterMarker val { prefix @Join 0 }
    }

    def @DefinitionNum right tag
    {
	@DefinitionCounterMarker&&tag @Open { @Next val }
    }

    def @DefinitionCounterIncrement
	right tag
    {
	@DefinitionCounterMarker&&preceding @Tagged tag
	@DefinitionCounterMarker val { @DefinitionNum tag }
	@NumberMarker @Tag { tag } @Value { @DefinitionNum tag }
    }

    def @Definition
       named @Tag {}
       named @Title {}
       right x
    {
	def @DefinitionTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{ @PageMark @Tag & @DefinitionCounterIncrement @Tag } @Insert
	@DefinitionFormat
	    word { definition @WordVal @DefinitionWord }
	    number { @DefinitionNum @Tag }
	    title { @DefinitionTitle }
	    body { x }
    }


    ###########################################################################
    #                                                                         #
    #   @Claim                                                                #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @ClaimCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginClaimCounter
	right prefix
    {
	@ClaimCounterMarker val { prefix @Join 0 }
    }

    def @ClaimNum right tag
    {
	@ClaimCounterMarker&&tag @Open { @Next val }
    }

    def @ClaimCounterIncrement
	right tag
    {
	@ClaimCounterMarker&&preceding @Tagged tag
	@ClaimCounterMarker val { @ClaimNum tag }
	@NumberMarker @Tag { tag } @Value { @ClaimNum tag }
    }

    def @Claim
       named @Tag {}
       named @Title {}
       right x
    {
	def @ClaimTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{ @PageMark @Tag & @ClaimCounterIncrement @Tag } @Insert
	@ClaimFormat
	    word { claim @WordVal @ClaimWord }
	    number { @ClaimNum @Tag }
	    title { @ClaimTitle }
	    body { x }
    }


    ###########################################################################
    #                                                                         #
    #   @Proposition                                                          #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @PropositionCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginPropositionCounter
	right prefix
    {
	@PropositionCounterMarker val { prefix @Join 0 }
    }

    def @PropositionNum right tag
    {
	@PropositionCounterMarker&&tag @Open { @Next val }
    }

    def @PropositionCounterIncrement
	right tag
    {
	@PropositionCounterMarker&&preceding @Tagged tag
	@PropositionCounterMarker val { @PropositionNum tag }
	@NumberMarker @Tag { tag } @Value { @PropositionNum tag }
    }

    def @Proposition
       named @Tag {}
       named @Title {}
       right x
    {
	def @PropositionTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{ @PageMark @Tag & @PropositionCounterIncrement @Tag } @Insert
	@PropositionFormat
	    word { proposition @WordVal @PropositionWord }
	    number { @PropositionNum @Tag }
	    title { @PropositionTitle }
	    body { x }
    }


    ###########################################################################
    #                                                                         #
    #   @Lemma                                                                #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @LemmaCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginLemmaCounter
	right prefix
    {
	@LemmaCounterMarker val { prefix @Join 0 }
    }

    def @LemmaNum right tag
    {
	@LemmaCounterMarker&&tag @Open { @Next val }
    }

    def @LemmaCounterIncrement
	right tag
    {
	@LemmaCounterMarker&&preceding @Tagged tag
	@LemmaCounterMarker val { @LemmaNum tag }
	@NumberMarker @Tag { tag } @Value { @LemmaNum tag }
    }

    def @Lemma
       named @Tag {}
       named @Title {}
       right x
    {
	def @LemmaTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{ @PageMark @Tag & @LemmaCounterIncrement @Tag } @Insert
	@LemmaFormat
	    word { lemma @WordVal @LemmaWord }
	    number { @LemmaNum @Tag }
	    title { @LemmaTitle }
	    body { x }
    }


    ###########################################################################
    #                                                                         #
    #   @Corollary                                                            #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @CorollaryCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginCorollaryCounter
	right prefix
    {
	@CorollaryCounterMarker val { prefix @Join 0 }
    }

    def @CorollaryNum right tag
    {
	@CorollaryCounterMarker&&tag @Open { @Next val }
    }

    def @CorollaryCounterIncrement
	right tag
    {
	@CorollaryCounterMarker&&preceding @Tagged tag
	@CorollaryCounterMarker val { @CorollaryNum tag }
	@NumberMarker @Tag { tag } @Value { @CorollaryNum tag }
    }

    def @Corollary
       named @Tag {}
       named @Title {}
       right x
    {
	def @CorollaryTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{ @PageMark @Tag & @CorollaryCounterIncrement @Tag } @Insert
	@CorollaryFormat
	    word { corollary @WordVal @CorollaryWord }
	    number { @CorollaryNum @Tag }
	    title { @CorollaryTitle }
	    body { x }
    }


    ###########################################################################
    #                                                                         #
    #   @Example                                                              #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @ExampleCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginExampleCounter
	right prefix
    {
	@ExampleCounterMarker val { prefix @Join 0 }
    }

    def @ExampleNum right tag
    {
	@ExampleCounterMarker&&tag @Open { @Next val }
    }

    def @ExampleCounterIncrement
	right tag
    {
	@ExampleCounterMarker&&preceding @Tagged tag
	@ExampleCounterMarker val { @ExampleNum tag }
	@NumberMarker @Tag { tag } @Value { @ExampleNum tag }
    }

    def @Example
       named @Tag {}
       named @Title {}
       right x
    {
	def @ExampleTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{ @PageMark @Tag & @ExampleCounterIncrement @Tag } @Insert
	@ExampleFormat
	    word { example @WordVal @ExampleWord }
	    number { @ExampleNum @Tag }
	    title { @ExampleTitle }
	    body { x }
    }


    ###########################################################################
    #                                                                         #
    #  @BeginAllCounters - begin all counters                                 #
    #                                                                         #
    ###########################################################################

    def @BeginAllCounters
	left condition
	right prefix
    {
	condition @Do {
	    @BeginTheoremCounter prefix
	    // @BeginDefinitionCounter prefix
	    // @BeginClaimCounter prefix
	    // @BeginPropositionCounter prefix
	    // @BeginLemmaCounter prefix
	    // @BeginCorollaryCounter prefix
	    // @BeginExampleCounter prefix
	}
    }


    ###########################################################################
    #                                                                         #
    #  @Reference - a reference.                                              #
    #                                                                         #
    ###########################################################################

    export @Tag @Type @Abstract @Address @Annote @Author @Day @Edition
	   @HowPublished @InAuthor @InTitle @Institution @Journal @Keywords
	   @Label @Month @Note @Number @Organization @Page @Pages @Pinpoint
	   @Publisher @Title @TitleNote @TRType @URL @Volume @Year

    def @Reference
	named compulsory @Tag		{}
	named compulsory @Type		{}
	named @Abstract			{}
	named @Address			{}
	named @Annote			{}
	named @Author			{}
	named @Day			{}
	named @Edition			{}
	named @HowPublished		{}
	named @InAuthor			{}
	named @InTitle			{}
	named @Institution		{}
	named @Journal			{}
	named @Keywords			{}
	named @Label			{}
	named @Month			{}
	named @Note			{}
	named @Number			{}
	named @Organization		{}
	named @Page			{}
	named @Pages			{}
	named @Pinpoint			{}
	named @Publisher		{}
	named @Title			{}
	named @TitleNote		{}
	named @TRType			{}
	named @URL
	  named "~"  { "~"      }
	  named "/"  { "/"  &0p }
	  named "//" { "//" &0p }	{}
	named @Volume			{}
	named @Year			{}
    { @Null }


    ###########################################################################
    #                                                                         #
    #  @CiteLabel - the value of the label of a reference within a citation.  #
    #                                                                         #
    ###########################################################################

    def @CiteLabel
	left label
	right tag 
    {
	tag @CrossLink @RefCiteLabels
	    @RefNum       { @NumberOf tag				}
	    @Tag          { tag						}
	    @Type         { @Reference&&tag @Open { @Type }		}
	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
	    @Address      { @Reference&&tag @Open { @Address }		}
	    @Annote       { @Reference&&tag @Open { @Annote }		}
	    @Author       { @Reference&&tag @Open { @Author }		}
	    @Day          { @Reference&&tag @Open { @Day }		}
	    @Edition      { @Reference&&tag @Open { @Edition }		}
	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
	    @Institution  { @Reference&&tag @Open { @Institution }	}
	    @Journal      { @Reference&&tag @Open { @Journal }		}
	    @Keywords     { @Reference&&tag @Open { @Keywords }		}

	    @Label        { label @Case {
			      "" @Yield {@Reference&&tag @Open {@Label}}
			      else @Yield label
			    }						}

	    @Month        { @Reference&&tag @Open { @Month }		}
	    @Note         { @Reference&&tag @Open { @Note }		}
	    @Number       { @Reference&&tag @Open { @Number }		}
	    @Organization { @Reference&&tag @Open { @Organization }	}
	    @Page         { @Reference&&tag @Open { @Page }		}
	    @Pages        { @Reference&&tag @Open { @Pages }		}
	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
	    @Title        { @Reference&&tag @Open { @Title }		}
	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
	    @TRType       { @Reference&&tag @Open { @TRType }		}
	    @Volume       { @Reference&&tag @Open { @Volume }		}
	    @Year         { @Reference&&tag @Open { @Year }		}
    }


    ###########################################################################
    #                                                                         #
    #  @ListLabel - the value of the label of a reference within a ref list.  #
    #                                                                         #
    ###########################################################################

    def @ListLabel
	left label
	right tag 
    {
	@RefListLabels
	    @RefNum       { @NumberOf tag				}
	    @Tag          { tag						}
	    @Type         { @Reference&&tag @Open { @Type }		}
	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
	    @Address      { @Reference&&tag @Open { @Address }		}
	    @Annote       { @Reference&&tag @Open { @Annote }		}
	    @Author       { @Reference&&tag @Open { @Author }		}
	    @Day          { @Reference&&tag @Open { @Day }		}
	    @Edition      { @Reference&&tag @Open { @Edition }		}
	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
	    @Institution  { @Reference&&tag @Open { @Institution }	}
	    @Journal      { @Reference&&tag @Open { @Journal }		}
	    @Keywords     { @Reference&&tag @Open { @Keywords }		}

	    @Label        { label @Case {
			      "" @Yield {@Reference&&tag @Open {@Label}}
			      else @Yield label
			    }						}

	    @Month        { @Reference&&tag @Open { @Month }		}
	    @Note         { @Reference&&tag @Open { @Note }		}
	    @Number       { @Reference&&tag @Open { @Number }		}
	    @Organization { @Reference&&tag @Open { @Organization }	}
	    @Page         { @Reference&&tag @Open { @Page }		}
	    @Pages        { @Reference&&tag @Open { @Pages }		}
	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
	    @Title        { @Reference&&tag @Open { @Title }		}
	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
	    @TRType       { @Reference&&tag @Open { @TRType }		}
	    @Volume       { @Reference&&tag @Open { @Volume }		}
	    @Year         { @Reference&&tag @Open { @Year }		}
    }


    ###########################################################################
    #                                                                         #
    #  @SortKey - the value of the sort key of a reference.                   #
    #                                                                         #
    ###########################################################################

    def @SortKey
	left label
	right tag 
    {
	@RefListSortKey
	    @Tag          { tag						}
	    @Type         { @Reference&&tag @Open { @Type }		}
	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
	    @Address      { @Reference&&tag @Open { @Address }		}
	    @Annote       { @Reference&&tag @Open { @Annote }		}
	    @Author       { @Reference&&tag @Open { @Author }		}

	    @CiteOrder    { {@NumberOf tag} @Case {
			      "??" @Yield "??"
			      else @Yield { "1000" @Plus @NumberOf tag }
			    }
			  }

	    @Day          { @Reference&&tag @Open { @Day }		}
	    @Edition      { @Reference&&tag @Open { @Edition }		}
	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
	    @Institution  { @Reference&&tag @Open { @Institution }	}
	    @Journal      { @Reference&&tag @Open { @Journal }		}
	    @Keywords     { @Reference&&tag @Open { @Keywords }		}

	    @Label        { label @Case {
			      "" @Yield {@Reference&&tag @Open {@Label}}
			      else @Yield label
			    }
			  }

	    @Month        { @Reference&&tag @Open { @Month }		}
	    @Note         { @Reference&&tag @Open { @Note }		}
	    @Number       { @Reference&&tag @Open { @Number }		}
	    @Organization { @Reference&&tag @Open { @Organization }	}
	    @Page         { @Reference&&tag @Open { @Page }		}
	    @Pages        { @Reference&&tag @Open { @Pages }		}
	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
	    @Title        { @Reference&&tag @Open { @Title }		}
	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
	    @TRType       { @Reference&&tag @Open { @TRType }		}
	    @Volume       { @Reference&&tag @Open { @Volume }		}
	    @Year         { @Reference&&tag @Open { @Year }		}
    }


    ###########################################################################
    #                                                                         #
    #  @RefStyle - a reference printing style.                                #
    #                                                                         #
    ###########################################################################

    export @Style
    def @RefStyle
	left @Tag
	named @Style right reftag {}
    {}


    ###########################################################################
    #                                                                         #
    #  @RefPrint - prints reference with tag reftag in appropriate style.     #
    #                                                                         #
    ###########################################################################

    def @RefPrint right reftag
    {	& @RefStyle&&{ @Reference&&reftag @Open { @Type } }
	@Open { @Style reftag } &
    }


    ###########################################################################
    #                                                                         #
    #  @ReferencesSection and @ChapReferencesSection - a list of references.  #
    #                                                                         #
    ###########################################################################

    def @RefPlace { @Galley }
    def @ChapRefPlace { @Galley }

    def @BypassRefPlace { @Galley }
    def @BypassChapRefPlace { @Galley }

    def @ReferencesSection
    {
	def @RefList right num
	{
	    @NumberMarker @Value { @RefNumbers @Num num } & | @RefPlace
	    //@RefListGap @RefList @Next num
	}

	def @BypassRefList
	{
	    @BypassRefPlace //@RefListGap @BypassRefList
	}

	@RefList 1
	//@RefListGap
	@BypassRefList
    }

    def @ChapReferencesSection
    {
	def @ChapRefList right num
	{
	    @NumberMarker @Value { @RefNumbers @Num num } & | @ChapRefPlace
	    //@RefListGap @ChapRefList @Next num
	}

	def @BypassChapRefList
	{
	    @BypassChapRefPlace //@RefListGap @BypassChapRefList
	}

	@ChapRefList 1
	//@RefListGap
	@BypassChapRefList
    }


    ###########################################################################
    #                                                                         #
    #   @RefHeading - heading for reference lists.                            #
    #                                                                         #
    ###########################################################################

    def @RefHeading right x
    {	x @Case {
	    references @Yield @Word&&references
	    bibliography @Yield @Word&&bibliography
	    else @Yield x
	}
    }


    #######################################################################
    #                                                                     #
    #   @ChapRefSection                                                   #
    #                                                                     #
    #######################################################################

    def @ChapRefSection
    {
	@Heading @RefHeading @ChapRefListTitle
	@DP
	@ChapReferencesSection
    }


    ###########################################################################
    #                                                                         #
    #  @SendRef and @ChapSendRef - send one reference to the reference list.  #
    #                                                                         #
    ###########################################################################

    def @RefItem
	left lab
	right ref
    {
	def @ZeroWidth right x { &0io @OneCol x &0io }

	@RefListFormat @Case {
	    NoLabels   @Yield {					   ref	}
	    Labels     @Yield { @ZeroWidth lab |@RefListLabelWidth ref	}
	    DropLabels @Yield { lab //1vx      |@RefListLabelWidth ref	}
	    InLabels   @Yield { lab & 2s @Wide &		   ref	}
	}
    }


    def @RefListItem
	left label
	right tag
    {
	@RefListFont @Font @RefListBreak @Break {
	    @NumberMarker&&preceding @Tagged tag & @PageMark tag
	    |@RefListIndent {label @ListLabel tag} @RefItem {@RefPrint tag}
	    |@RefListRightIndent
	}
    }


    def @SendRef into { @RefPlace&&foll_or_prec }
	left label
	right tag
    {
	def @Key { label @SortKey tag }

	# no @Merge i.e. omit duplicates

	label @RefListItem tag
    }


    def @ChapSendRef into { @ChapRefPlace&&foll_or_prec }
	left label
	right tag
    {
	def @Key { label @SortKey tag }

	# no @Merge i.e. omit duplicates

	label @RefListItem tag
    }


    ###########################################################################
    #                                                                         #
    #  @Ref (bare citation) and its variants.                                 #
    #                                                                         #
    ###########################################################################

    def @Ref
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes	  @Yield { label @CiteLabel tag & label @SendRef tag }
	    else  @Yield @Null
	}
    }

    def @NoRef
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes  @Yield { label @SendRef tag }
	    else @Yield @Null
	}
    }

    def @ChapRef
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes  @Yield { label @CiteLabel tag & label @ChapSendRef tag }
	    else @Yield @Null
	}
    }

    def @NoChapRef
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes  @Yield { label @ChapSendRef tag }
	    else @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  Bypass references.                                                     #
    #                                                                         #
    ###########################################################################

    def @BypassReference into { @BypassRefPlace&&preceding }
	named label {}
	named value {}
    {
	@MakeReferences @Case {
	    Bypass @Yield { label @RefItem value }
	    else   @Yield @Null
	}
    }

    def @BypassChapReference into { @BypassChapRefPlace&&preceding }
	named label {}
	named value {}
    {
	@MakeReferences @Case {
	    Bypass @Yield { label @RefItem value }
	    else   @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  @Cite (citation) and its variants.                                     #
    #                                                                         #
    ###########################################################################

    export "$" "," ";"
    def @Cite body cite
    {
	macro "$" { @Ref }
	def "," precedence 90 left x { x"," }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield {
	        @RefCiteStyle cite
	    }
	    else @Yield @Null
	}
    }

    export "$" "," ";"
    def @NoCite body cite
    {
	macro "$" { @NoRef }
	def "," precedence 90 left x { x"," }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield { cite }
	    else @Yield @Null
	}
    }

    export "$" "," ";"
    def @ChapCite body cite
    {
	macro "$" { @ChapRef }
	def "," precedence 90 left x { x"," }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield { @RefCiteStyle cite }
	    else @Yield @Null
	}
    }

    export "$" "," ";"
    def @NoChapCite body cite
    {
	macro "$" { @NoChapRef }
	def "," precedence 90 left x { x }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield { cite }
	    else @Yield @Null
	}
    }

    ###########################################################################
    #                                                                         #
    #  Floating figures.                                                      #
    #                                                                         #
    ###########################################################################

    export @Tag prefix
    def @FigurePrefixMarker
	named @Tag {}
	named prefix {}
    {
	@Null
    }

    export @Tag count
    def @FigureCounterMarker
	named @Tag {}
	named count {}
    {
	@Null
    }

    def @RawFigureNum right tag
    {
	@FigureCounterMarker&&tag @Open { @Next count }
    }

    def @FigureCounterIncrement
	right tag
    {
	   @FigureCounterMarker&&preceding @Tagged tag
	// @FigurePrefixMarker&&preceding @Tagged tag
	// @FigureCounterMarker count { @RawFigureNum tag }
	// @NumberMarker @Tag { tag }
		@Value { { @FigurePrefixMarker&&tag @Open { prefix } }
		    @Join {@FigureNumbers @Num @RawFigureNum tag}
		}
    }

    def @BeginFigureCounter
	left condition
	right prefix
    {
	condition @Do {
	       @FigurePrefixMarker prefix { prefix }
	    // @FigureCounterMarker count { 0 }
	}
    }

    def @EndFigureList { @Galley //@MidGap @EndFigureList }

    def @Figure
	named @Tag {}
	named @Caption { dft }
	named @ShortCaption { dft }
	named @CaptionPos { @FigureCaptionPos }
	named @Format
    	    named @II right x { |@DisplayIndent x |               }
    	    named @QQ right x { |@DisplayIndent x |@DisplayIndent }
    	    named @CC right x { |0.5rt x          |               }
    	    named @RR right x { |1.0rt x          |               }
		right @Body { @FigureFormat @Body }
	named @InitialLanguage { @InitialLanguage }
	named @BypassNumber { dft }
	named @OnePage { dft }
	named @Location { @FigureLocation }
	right @Body
    {
	def @FigureNumber
	{
	    @BypassNumber @Dft @NumberOf @Tag
	}

	def @ContentsCaption
	{
	    @ShortCaption @Dft @Caption
	}

	def @OnePg
	{
	    @OnePage @Case {
		{ No  no } @Yield No
		{ Yes yes } @Yield Yes
		dft @Yield { @Location @Case {
				PageTop		@Yield No
				EvenPageTop	@Yield No
				FullPage	@Yield No
				EvenFullPage	@Yield No
				PageFoot	@Yield Yes
				ColTop		@Yield No
				ColFoot		@Yield Yes
				ColEnd		@Yield No
				Display		@Yield Yes
				AfterLine	@Yield Yes
				TryAfterLine	@Yield Yes
				Raw		@Yield No
			     }
			   }
	    }
	}

	def @CaptionState
	{
	    @Caption @Case {
		dft  @Yield None
		else @Yield { @CaptionPos @Case {
		    { Below below } @Yield Below
		    { Above above } @Yield Above
		} }
	    }
	}

	#def @FigureLabel
	#{
	#    @FigureNumbers @Case {
	#	No   @Yield @Null
	#	else @Yield {
	#	    @CaptionFormat { {figure @WordVal @FigureWord} @NumSep @FigureNumber }
	#	}
	#    }
	#}

	def @CaptionVal
	{
	    @FigureCaptionFont @Font @FigureCaptionBreak @Break
	    { ||0.5rt @FigureCaptionFormat
		 word { figure @WordVal @FigureWord }
		 number { @FigureNumber }
		 caption { @Caption }
	    }
	}

	def @FigureVal
	{
	    @InitialLanguage @Language
	    {
		@MakeFigureContents @FigureContentsEntry
		    indent { 0f }
		    crosstag { @Tag }
		    number { @FigureNumber }
		    title { @InitialLanguage @Language @ContentsCaption }
		    pagenum { @PageOf @Tag }
		// @FigureCounterIncrement @Tag
		// @Body
		// @PageMark @Tag
	    }
	}

	def @FigureTarget
	{
	    @Location @Case {
		PageTop		@Yield  @PageTopPlace&&following
		EvenPageTop	@Yield  @PageTopPlace&&following
		FullPage	@Yield  @FullPagePlace&&following
		EvenFullPage	@Yield  @FullPagePlace&&following
		PageFoot	@Yield  @PageFootAndTopPlace&&following
		ColTop		@Yield  @ColTopPlace&&following
		ColFoot		@Yield  @ColFootAndTopPlace&&following
		ColEnd		@Yield  @EndFigureList&&following
		Display		@Yield  @AfterLinePlace&&following
		AfterLine	@Yield  @AfterLinePlace&&following
		TryAfterLine	@Yield  @TryAfterLinePlace&&following
	    }
	}

	def @SendEncl into { @FigureTarget }
	    right x
	{
	    def @Enclose right x
	    {
		@OnePg @Case {
                	No  @Yield @Format x
                	Yes @Yield x
            	}
	    }

	    x
	}

	def @Send into { @FigureTarget }
	    right x
	{
	    x
	}

	def @EvenFullPageSend into { @EvenFullPagePlace&&following }
	    right x
	{
	    @OneRow x
	}

	def @EvenPageSend into { @EvenPagePlace&&following }
	    right x
	{
	    @OneRow x
	}

	def @RawFigureVal
	{
	    @OnePg.@CaptionState @Case
	    {
		Yes.Below @Yield @OneRow { @Format @FigureVal @DP @CaptionVal }
		Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @FigureVal }
		Yes.None  @Yield @OneRow { @Format @FigureVal }
		No.Below  @Yield         { @Format @FigureVal @DP @CaptionVal }
		No.Above  @Yield         { @CaptionVal @DP @Format @FigureVal }
		No.None   @Yield         { @Format @FigureVal }
	    }
	}

	def @NonRawFigureVal
	{
	  @OnePg.@CaptionState @Case
	  {
	    Yes.Below @Yield {
		@Send @OneRow { @Format @FigureVal @DP @CaptionVal // @DupRunner}
	    }
	    Yes.Above @Yield {
		@Send @OneRow { @CaptionVal @DP @Format @FigureVal // @DupRunner}
	    }
	    Yes.None @Yield {
		@Send @OneRow { @Format @FigureVal // @DupRunner }
	    }
	    No.Below @Yield {
		@SendEncl { @FigureVal // @Send { @CaptionVal // @DupRunner } }
	    }
	    No.Above @Yield {
		@Send { @CaptionVal // @SendEncl { @FigureVal // @DupRunner } }
	    }
	    No.None @Yield {
		@SendEncl { @FigureVal // @DupRunner }
	    }
	  }
	}

	@Location @Case {
	    Raw		  @Yield @RawFigureVal
	    Display	  @Yield { @NonRawFigureVal &1rt }
	    EvenPageTop   @Yield @EvenPageSend @NonRawFigureVal
	    EvenFullPage  @Yield @EvenFullPageSend @NonRawFigureVal
	    else	  @Yield @NonRawFigureVal
	}
    }


    ###########################################################################
    #                                                                         #
    #  Floating tables (exact clone of figure code immediately above).        #
    #                                                                         #
    ###########################################################################

    export @Tag prefix
    def @TablePrefixMarker
	named @Tag {}
	named prefix {}
    {
	@Null
    }

    export @Tag count
    def @TableCounterMarker
	named @Tag {}
	named count {}
    {
	@Null
    }

    def @RawTableNum right tag
    {
	@TableCounterMarker&&tag @Open { @Next count }
    }

    def @TableCounterIncrement
	right tag
    {
	   @TableCounterMarker&&preceding @Tagged tag
	// @TablePrefixMarker&&preceding @Tagged tag
	// @TableCounterMarker count { @RawTableNum tag }
	// @NumberMarker @Tag { tag }
		@Value { { @TablePrefixMarker&&tag @Open { prefix } }
		    @Join {@TableNumbers @Num @RawTableNum tag}
		}
    }

    def @BeginTableCounter
	left condition
	right prefix
    {
	condition @Do {
	       @TablePrefixMarker prefix { prefix }
	    // @TableCounterMarker count { 0 }
	}
    }

    def @EndTableList { @Galley //@MidGap @EndTableList }

    def @Table
	named @Tag {}
	named @Caption { dft }
	named @ShortCaption { dft }
	named @CaptionPos { @TableCaptionPos }
	named @Format
    	    named @II right x { |@DisplayIndent x |               }
    	    named @QQ right x { |@DisplayIndent x |@DisplayIndent }
    	    named @CC right x { |0.5rt x          |               }
    	    named @RR right x { |1.0rt x          |               }
		right @Body { @TableFormat @Body }
	named @InitialLanguage { @InitialLanguage }
	named @BypassNumber { dft }
	named @OnePage { dft }
	named @Location { @TableLocation }
	right @Body
    {
	def @TableNumber
	{
	    @BypassNumber @Dft @NumberOf @Tag
	}

	def @ContentsCaption
	{
	    @ShortCaption @Dft @Caption
	}

	def @OnePg
	{
	    @OnePage @Case {
		{ No  no } @Yield No
		{ Yes yes } @Yield Yes
		dft @Yield { @Location @Case {
				PageTop		@Yield No
				EvenPageTop	@Yield No
				FullPage	@Yield No
				EvenFullPage	@Yield No
				PageFoot	@Yield Yes
				ColTop		@Yield No
				ColFoot		@Yield Yes
				ColEnd		@Yield No
				Display		@Yield Yes
				AfterLine	@Yield Yes
				TryAfterLine	@Yield Yes
				Raw		@Yield No
			     }
			   }
	    }
	}

	def @CaptionState
	{
	    @Caption @Case {
		dft  @Yield None
		else @Yield { @CaptionPos @Case {
		    { Below below } @Yield Below
		    { Above above } @Yield Above
		} }
	    }
	}

	#def @TableLabel
	#{
	#    @TableNumbers @Case {
	#	No   @Yield @Null
	#	else @Yield {
	#	    @CaptionFormat { {table @WordVal @TableWord} @NumSep @TableNumber }
	#	}
	#    }
	#}

	def @CaptionVal
	{
	    @TableCaptionFont @Font @TableCaptionBreak @Break
	    { ||0.5rt @TableCaptionFormat
		 word { table @WordVal @TableWord }
		 number { @TableNumber }
		 caption { @Caption }
	    }
	}

	def @TableVal
	{
	    @InitialLanguage @Language
	    {
		@MakeTableContents @TableContentsEntry
		    indent { 0f }
		    crosstag { @Tag }
		    number { @TableNumber }
		    title { @InitialLanguage @Language @ContentsCaption }
		    pagenum { @PageOf @Tag }
		// @TableCounterIncrement @Tag
		// @Body
		// @PageMark @Tag
	    }
	}

	def @TableTarget
	{
	    @Location @Case {
		PageTop		@Yield  @PageTopPlace&&following
		EvenPageTop	@Yield  @PageTopPlace&&following
		FullPage	@Yield  @FullPagePlace&&following
		EvenFullPage	@Yield  @FullPagePlace&&following
		PageFoot	@Yield  @PageFootAndTopPlace&&following
		ColTop		@Yield  @ColTopPlace&&following
		ColFoot		@Yield  @ColFootAndTopPlace&&following
		ColEnd		@Yield  @EndTableList&&following
		Display		@Yield  @AfterLinePlace&&following
		AfterLine	@Yield  @AfterLinePlace&&following
		TryAfterLine	@Yield  @TryAfterLinePlace&&following
	    }
	}

	def @SendEncl into { @TableTarget }
	    right x
	{
	    def @Enclose right x
	    {
		@OnePg @Case {
                	No  @Yield @Format x
                	Yes @Yield x
            	}
	    }

	    x
	}

	def @Send into { @TableTarget }
	    right x
	{
	    x
	}

	def @EvenFullPageSend into { @EvenFullPagePlace&&following }
	    right x
	{
	    @OneRow x
	}

	def @EvenPageSend into { @EvenPagePlace&&following }
	    right x
	{
	    @OneRow x
	}

	def @RawTableVal
	{
	    @OnePg.@CaptionState @Case
	    {
		Yes.Below @Yield @OneRow { @Format @TableVal @DP @CaptionVal }
		Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @TableVal }
		Yes.None  @Yield @OneRow { @Format @TableVal }
		No.Below  @Yield         { @Format @TableVal @DP @CaptionVal }
		No.Above  @Yield         { @CaptionVal @DP @Format @TableVal }
		No.None   @Yield         { @Format @TableVal }
	    }
	}

	def @NonRawTableVal
	{
	  @OnePg.@CaptionState @Case
	  {
	    Yes.Below @Yield {
		@Send @OneRow { @Format @TableVal @DP @CaptionVal // @DupRunner}
	    }
	    Yes.Above @Yield {
		@Send @OneRow { @CaptionVal @DP @Format @TableVal // @DupRunner}
	    }
	    Yes.None @Yield {
		@Send @OneRow { @Format @TableVal // @DupRunner }
	    }
	    No.Below @Yield {
		@SendEncl { @TableVal // @Send { @CaptionVal // @DupRunner } }
	    }
	    No.Above @Yield {
		@Send { @CaptionVal // @SendEncl { @TableVal // @DupRunner } }
	    }
	    No.None @Yield {
		@SendEncl { @TableVal // @DupRunner }
	    }
	  }
	}

	@Location @Case {
	    Raw		  @Yield @RawTableVal
	    Display	  @Yield { @NonRawTableVal &1rt }
	    EvenPageTop   @Yield @EvenPageSend @NonRawTableVal
	    EvenFullPage  @Yield @EvenFullPageSend @NonRawTableVal
	    else	  @Yield @NonRawTableVal
	}
    }


    ###########################################################################
    #                                                                         #
    #  Glossary.                                                              #
    #                                                                         #
    ###########################################################################

    def @GlossaryList { @Galley //@GlossaryGap @GlossaryList }

    def @GlossarySection into { @GlossaryPlace&&following }
	right etc
    {
	// @GlossaryList
	// etc
	//1rt
    }

    def @DoGlossary into { @GlossaryList&&following }
	left @Key
	named name {}
	named pnum {}
	right body
    {
	@GlossaryFont @Font @GlossaryBreak @Break @GlossaryFormat
	    @Name { name }
	    @PageNum { pnum }
	    @Body { body }
    }

    def @Glossary
	left name
	named sortkey { dft }
	right body
    {
	def key { sortkey @Dft name }

	@MakeGlossary @Case {
	    { Yes yes } @Yield { @PageMark key &
		key @DoGlossary name { name } pnum { @PageOf key } body
	    }
	    else @Yield @Null
	}
    }

    def @InGlossary
	right x
    {
	@MakeGlossary @Case {
	    { Yes yes } @Yield { @InGlossaryFormat @InGlossaryFont @Font x }
	    else @Yield x
	}
    }


    ###########################################################################
    #                                                                         #
    #  Index.                                                                 #
    #                                                                         #
    ###########################################################################

    def @IndexList { @Galley //1vx @IndexList }
    def @BypassIndexList { @Galley //1vx @BypassIndexList }

    def @IndexSection into { @IndexPlace&&following }
	right etc
    {
	// @IndexBreak @Break @IndexList
	// @IndexBreak @Break @BypassIndexList
	// @ClearHeaderComponent
	// etc
	//1rt
    }

    def @DoIndex into { @IndexList&&following }
	left @Key			# sort key
	named pgrange {}		# page numbers, or empty if none
	named depth {}			# 0, 1, or 2 (@Index, @Sub, or @SubSub)
	right body			# body, not including any prefix
    {
	def @Body
	{
	    depth @Case {
		0 @Yield @IndexFormat body
		1 @Yield @SubIndexFormat body
		2 @Yield @SubSubIndexFormat body
	    }
	}

	def @Enclose right x
	{
	    @IndexCtd.depth @Case {

		Yes.0 @Yield {
		    @ClearHeaderComponent
		    //1vx
		    x
		    //1vx
		    1vx @SetHeaderComponent {
			@Body @IndexCtdFormat {continued @WordVal @IndexCtdWord}
		    }
		    //1vx
		    1vx @BeginHeaderComponent (unused)
		}

		Yes.1 @Yield {
		    @EndHeaderComponent
		    //1vx
		    x
		    //1vx
		    1vx @BeginHeaderComponent {
			@Body @IndexCtdFormat {continued @WordVal @IndexCtdWord}
		    }
		}

		else @Yield x

	    }
	}

	def @Merge left lpart right rpart
	{
	    { lpart @Rump { lpart @Meld rpart } } @Case
	    {
	        ""      @Yield  lpart
		else    @Yield  { { lpart{@OneCol ,} } @Meld rpart }
	    }

	}

	@IndexFont @Font @IndexBreak @Break pgrange @Case {
	    ""   @Yield { @Body &"0.03fu" {}			}
	    else @Yield { @Body &"0.03fu" {}{@OneCol ,} pgrange }

	}
    }

    def @RawIndex
	left lpart
	named depth { 0 }
	right rpart
    {
	@MakeIndex @Case {
	    Yes  @Yield { lpart @DoIndex depth { depth } rpart }
	    else @Yield @Null
	}
    }

    macro @RawSubIndex    { @RawIndex depth { 1 } }
    macro @RawSubSubIndex { @RawIndex depth { 2 } }

    def @Index
	left lpart
	named @Tag {}
	named pnformat right @PageNum { Ordinary }
	named depth { 0 }
	named to {}
	right rpart
    {
	def @PgMk right tag
	{
	  tag @CrossLink @PageOf tag
	}

	def @Fmt right x
	{
	    {pnformat x} @Case
	    {
	        Ordinary @Yield @IndexTypeOrdinary x
	        Main     @Yield @IndexTypeMain x
	        Special  @Yield @IndexTypeSpecial x
		else	 @Yield {pnformat x}
	    }
	}

	def @PgRange
	{
	    to @Case
	    {
		""    @Yield @PgMk @Tag
		else  @Yield {
		    { @PageOf @Tag } @Case
		    {
			{ @PageOf to } @Yield { @PgMk @Tag }
			else	       @Yield { {@PgMk @Tag} @IndexRangeFormat {@PgMk to} }
		    }
		}
	    }
	}

	@MakeIndex @Case {
	    Yes @Yield {
		@PageMark @Tag &
		lpart @DoIndex depth { depth } pgrange { @Fmt @PgRange } rpart }
	    else @Yield @Null
	}
    }

    macro @SubIndex    { @Index depth { 1 } }
    macro @SubSubIndex { @Index depth { 2 } }

    def @IndexBlanks
    {
	b @RawIndex {} c @RawIndex {} d @RawIndex {} e @RawIndex {}
	f @RawIndex {} g @RawIndex {} h @RawIndex {} i @RawIndex {}
	j @RawIndex {} k @RawIndex {} l @RawIndex {} m @RawIndex {}
	n @RawIndex {} o @RawIndex {} p @RawIndex {} q @RawIndex {}
	r @RawIndex {} s @RawIndex {} t @RawIndex {} u @RawIndex {}
	v @RawIndex {} w @RawIndex {} x @RawIndex {} y @RawIndex {}
	z @RawIndex {}
    }

    def @IndexSpacer
	left lpart
	named above { @IndexSpacerAbove }
	named below { @IndexSpacerBelow }
	named font { @IndexSpacerFont }
	named format right @Body { @IndexSpacerFormat @Body }
	right rpart
    {
	def @Send into { @IndexList&&following }
	    right @Key
	{
	    @ClearHeaderComponent
	    //
	    //above
	    @CNP
	    @OneRow { font @Font format rpart //below }
	}

	@MakeIndex @Case {
	    Yes  @Yield @Send lpart
	    else @Yield @Null
	}
    }

    macro @InitialIndexSpacer { @IndexSpacer above { 0i } }

    def @IndexLetters
    {
	a @InitialIndexSpacer A
	b @IndexSpacer B c @IndexSpacer C d @IndexSpacer D e @IndexSpacer E
	f @IndexSpacer F g @IndexSpacer G h @IndexSpacer H i @IndexSpacer I
	j @IndexSpacer J k @IndexSpacer K l @IndexSpacer L m @IndexSpacer M
	n @IndexSpacer N o @IndexSpacer O p @IndexSpacer P q @IndexSpacer Q
	r @IndexSpacer R s @IndexSpacer S t @IndexSpacer T u @IndexSpacer U
	v @IndexSpacer V w @IndexSpacer W x @IndexSpacer X y @IndexSpacer Y
	z @IndexSpacer Z
    }

    def @BypassBeginIndexPlace { @Galley }

    def @BypassBeginIndex force into { @BypassBeginIndexPlace&&preceding } {}

    def @BypassRawIndex force into { @BypassIndexList&&preceding }
	named indent { 0f }
	right x
    {
	&indent x
    }

    def @BypassEndIndex { @Null }


    ###########################################################################
    #                                                                         #
    #  IndexA.                                                                #
    #                                                                         #
    ###########################################################################

    def @IndexAList { @Galley //1vx @IndexAList }
    def @BypassIndexAList { @Galley //1vx @BypassIndexAList }

    def @IndexASection into { @IndexAPlace&&following }
	right etc
    {
	// @IndexABreak @Break @IndexAList
	// @IndexABreak @Break @BypassIndexAList
	// @ClearHeaderComponent
	// etc
	//1rt
    }

    def @DoIndexA into { @IndexAList&&following }
	left @Key			# sort key
	named pgrange {}		# page numbers, or empty if none
	named depth {}			# 0, 1, or 2 (@IndexA, @Sub, or @SubSub)
	right body			# body, not including any prefix
    {
	def @Body
	{
	    depth @Case {
		0 @Yield @IndexAFormat body
		1 @Yield @SubIndexAFormat body
		2 @Yield @SubSubIndexAFormat body
	    }
	}

	def @Enclose right x
	{
	    @IndexACtd.depth @Case {

		Yes.0 @Yield {
		    @ClearHeaderComponent
		    //1vx
		    x
		    //1vx
		    1vx @SetHeaderComponent {
			@Body @IndexACtdFormat {continued @WordVal @IndexACtdWord}
		    }
		    //1vx
		    1vx @BeginHeaderComponent (unused)
		}

		Yes.1 @Yield {
		    @EndHeaderComponent
		    //1vx
		    x
		    //1vx
		    1vx @BeginHeaderComponent {
			@Body @IndexACtdFormat {continued @WordVal @IndexACtdWord}
		    }
		}

		else @Yield x

	    }
	}

	def @Merge left lpart right rpart
	{
	    { lpart @Rump { lpart @Meld rpart } } @Case
	    {
	        ""      @Yield  lpart
		else    @Yield  { { lpart{@OneCol ,} } @Meld rpart }
	    }

	}

	@IndexAFont @Font @IndexABreak @Break pgrange @Case {
	    ""   @Yield { @Body &"0.03fu" {}			}
	    else @Yield { @Body &"0.03fu" {}{@OneCol ,} pgrange }

	}
    }

    def @RawIndexA
	left lpart
	named depth { 0 }
	right rpart
    {
	@MakeIndexA @Case {
	    Yes  @Yield { lpart @DoIndexA depth { depth } rpart }
	    else @Yield @Null
	}
    }

    macro @RawSubIndexA    { @RawIndexA depth { 1 } }
    macro @RawSubSubIndexA { @RawIndexA depth { 2 } }

    def @IndexA
	left lpart
	named @Tag {}
	named pnformat right @PageNum { Ordinary }
	named depth { 0 }
	named to {}
	right rpart
    {
	def @PgMk right tag
	{
	  tag @CrossLink @PageOf tag
	}

	def @Fmt right x
	{
	    {pnformat x} @Case
	    {
	        Ordinary @Yield @IndexATypeOrdinary x
	        Main     @Yield @IndexATypeMain x
	        Special  @Yield @IndexATypeSpecial x
		else	 @Yield {pnformat x}
	    }
	}

	def @PgRange
	{
	    to @Case
	    {
		""    @Yield @PgMk @Tag
		else  @Yield {
		    { @PageOf @Tag } @Case
		    {
			{ @PageOf to } @Yield { @PgMk @Tag }
			else	       @Yield { {@PgMk @Tag} @IndexARangeFormat {@PgMk to} }
		    }
		}
	    }
	}

	@MakeIndexA @Case {
	    Yes @Yield {
		@PageMark @Tag &
		lpart @DoIndexA depth { depth } pgrange { @Fmt @PgRange } rpart }
	    else @Yield @Null
	}
    }

    macro @SubIndexA    { @IndexA depth { 1 } }
    macro @SubSubIndexA { @IndexA depth { 2 } }

    def @IndexABlanks
    {
	b @RawIndexA {} c @RawIndexA {} d @RawIndexA {} e @RawIndexA {}
	f @RawIndexA {} g @RawIndexA {} h @RawIndexA {} i @RawIndexA {}
	j @RawIndexA {} k @RawIndexA {} l @RawIndexA {} m @RawIndexA {}
	n @RawIndexA {} o @RawIndexA {} p @RawIndexA {} q @RawIndexA {}
	r @RawIndexA {} s @RawIndexA {} t @RawIndexA {} u @RawIndexA {}
	v @RawIndexA {} w @RawIndexA {} x @RawIndexA {} y @RawIndexA {}
	z @RawIndexA {}
    }

    def @IndexASpacer
	left lpart
	named above { @IndexASpacerAbove }
	named below { @IndexASpacerBelow }
	named font { @IndexASpacerFont }
	named format right @Body { @IndexASpacerFormat @Body }
	right rpart
    {
	def @Send into { @IndexAList&&following }
	    right @Key
	{
	    @ClearHeaderComponent
	    //
	    //above
	    @CNP
	    @OneRow { font @Font format rpart //below }
	}

	@MakeIndexA @Case {
	    Yes  @Yield @Send lpart
	    else @Yield @Null
	}
    }

    macro @InitialIndexASpacer { @IndexASpacer above { 0i } }

    def @IndexALetters
    {
	a @InitialIndexASpacer A
	b @IndexASpacer B c @IndexASpacer C d @IndexASpacer D e @IndexASpacer E
	f @IndexASpacer F g @IndexASpacer G h @IndexASpacer H i @IndexASpacer I
	j @IndexASpacer J k @IndexASpacer K l @IndexASpacer L m @IndexASpacer M
	n @IndexASpacer N o @IndexASpacer O p @IndexASpacer P q @IndexASpacer Q
	r @IndexASpacer R s @IndexASpacer S t @IndexASpacer T u @IndexASpacer U
	v @IndexASpacer V w @IndexASpacer W x @IndexASpacer X y @IndexASpacer Y
	z @IndexASpacer Z
    }

    def @BypassBeginIndexAPlace { @Galley }

    def @BypassBeginIndexA force into { @BypassBeginIndexAPlace&&preceding } {}

    def @BypassRawIndexA force into { @BypassIndexAList&&preceding }
	named indent { 0f }
	right x
    {
	&indent x
    }

    def @BypassEndIndexA { @Null }


    ###########################################################################
    #                                                                         #
    #  IndexB.                                                                #
    #                                                                         #
    ###########################################################################

    def @IndexBList { @Galley //1vx @IndexBList }
    def @BypassIndexBList { @Galley //1vx @BypassIndexBList }

    def @IndexBSection into { @IndexBPlace&&following }
	right etc
    {
	// @IndexBBreak @Break @IndexBList
	// @IndexBBreak @Break @BypassIndexBList
	// @ClearHeaderComponent
	// etc
	//1rt
    }

    def @DoIndexB into { @IndexBList&&following }
	left @Key			# sort key
	named pgrange {}		# page numbers, or empty if none
	named depth {}			# 0, 1, or 2 (@IndexB, @Sub, or @SubSub)
	right body			# body, not including any prefix
    {
	def @Body
	{
	    depth @Case {
		0 @Yield @IndexBFormat body
		1 @Yield @SubIndexBFormat body
		2 @Yield @SubSubIndexBFormat body
	    }
	}

	def @Enclose right x
	{
	    @IndexBCtd.depth @Case {

		Yes.0 @Yield {
		    @ClearHeaderComponent
		    //1vx
		    x
		    //1vx
		    1vx @SetHeaderComponent {
			@Body @IndexBCtdFormat {continued @WordVal @IndexBCtdWord}
		    }
		    //1vx
		    1vx @BeginHeaderComponent (unused)
		}

		Yes.1 @Yield {
		    @EndHeaderComponent
		    //1vx
		    x
		    //1vx
		    1vx @BeginHeaderComponent {
			@Body @IndexBCtdFormat {continued @WordVal @IndexBCtdWord}
		    }
		}

		else @Yield x

	    }
	}

	def @Merge left lpart right rpart
	{
	    { lpart @Rump { lpart @Meld rpart } } @Case
	    {
	        ""      @Yield  lpart
		else    @Yield  { { lpart{@OneCol ,} } @Meld rpart }
	    }

	}

	@IndexBFont @Font @IndexBBreak @Break pgrange @Case {
	    ""   @Yield { @Body &"0.03fu" {}			}
	    else @Yield { @Body &"0.03fu" {}{@OneCol ,} pgrange }

	}
    }

    def @RawIndexB
	left lpart
	named depth { 0 }
	right rpart
    {
	@MakeIndexB @Case {
	    Yes  @Yield { lpart @DoIndexB depth { depth } rpart }
	    else @Yield @Null
	}
    }

    macro @RawSubIndexB    { @RawIndexB depth { 1 } }
    macro @RawSubSubIndexB { @RawIndexB depth { 2 } }

    def @IndexB
	left lpart
	named @Tag {}
	named pnformat right @PageNum { Ordinary }
	named depth { 0 }
	named to {}
	right rpart
    {
	def @PgMk right tag
	{
	  tag @CrossLink @PageOf tag
	}

	def @Fmt right x
	{
	    {pnformat x} @Case
	    {
	        Ordinary @Yield @IndexBTypeOrdinary x
	        Main     @Yield @IndexBTypeMain x
	        Special  @Yield @IndexBTypeSpecial x
		else	 @Yield {pnformat x}
	    }
	}

	def @PgRange
	{
	    to @Case
	    {
		""    @Yield @PgMk @Tag
		else  @Yield {
		    { @PageOf @Tag } @Case
		    {
			{ @PageOf to } @Yield { @PgMk @Tag }
			else	       @Yield { {@PgMk @Tag} @IndexBRangeFormat {@PgMk to} }
		    }
		}
	    }
	}

	@MakeIndexB @Case {
	    Yes @Yield {
		@PageMark @Tag &
		lpart @DoIndexB depth { depth } pgrange { @Fmt @PgRange } rpart }
	    else @Yield @Null
	}
    }

    macro @SubIndexB    { @IndexB depth { 1 } }
    macro @SubSubIndexB { @IndexB depth { 2 } }

    def @IndexBBlanks
    {
	b @RawIndexB {} c @RawIndexB {} d @RawIndexB {} e @RawIndexB {}
	f @RawIndexB {} g @RawIndexB {} h @RawIndexB {} i @RawIndexB {}
	j @RawIndexB {} k @RawIndexB {} l @RawIndexB {} m @RawIndexB {}
	n @RawIndexB {} o @RawIndexB {} p @RawIndexB {} q @RawIndexB {}
	r @RawIndexB {} s @RawIndexB {} t @RawIndexB {} u @RawIndexB {}
	v @RawIndexB {} w @RawIndexB {} x @RawIndexB {} y @RawIndexB {}
	z @RawIndexB {}
    }

    def @IndexBSpacer
	left lpart
	named above { @IndexBSpacerAbove }
	named below { @IndexBSpacerBelow }
	named font { @IndexBSpacerFont }
	named format right @Body { @IndexBSpacerFormat @Body }
	right rpart
    {
	def @Send into { @IndexBList&&following }
	    right @Key
	{
	    @ClearHeaderComponent
	    //
	    //above
	    @CNP
	    @OneRow { font @Font format rpart //below }
	}

	@MakeIndexB @Case {
	    Yes  @Yield @Send lpart
	    else @Yield @Null
	}
    }

    macro @InitialIndexBSpacer { @IndexBSpacer above { 0i } }

    def @IndexBLetters
    {
	a @InitialIndexBSpacer A
	b @IndexBSpacer B c @IndexBSpacer C d @IndexBSpacer D e @IndexBSpacer E
	f @IndexBSpacer F g @IndexBSpacer G h @IndexBSpacer H i @IndexBSpacer I
	j @IndexBSpacer J k @IndexBSpacer K l @IndexBSpacer L m @IndexBSpacer M
	n @IndexBSpacer N o @IndexBSpacer O p @IndexBSpacer P q @IndexBSpacer Q
	r @IndexBSpacer R s @IndexBSpacer S t @IndexBSpacer T u @IndexBSpacer U
	v @IndexBSpacer V w @IndexBSpacer W x @IndexBSpacer X y @IndexBSpacer Y
	z @IndexBSpacer Z
    }

    def @BypassBeginIndexBPlace { @Galley }

    def @BypassBeginIndexB force into { @BypassBeginIndexBPlace&&preceding } {}

    def @BypassRawIndexB force into { @BypassIndexBList&&preceding }
	named indent { 0f }
	right x
    {
	&indent x
    }

    def @BypassEndIndexB { @Null }


    ###########################################################################
    #                                                                         #
    #  Colophon.                                                              #
    #                                                                         #
    ###########################################################################

    def @ColophonList { @Galley //1vx @ColophonList }

    def @ColophonSection into { @ColophonPlace&&following }
	right etc
    {
	// @ColophonBreak @Break @ColophonFont @Font @ColophonList
	// etc
	//1rt
    }


    ###########################################################################
    #                                                                         #
    #  @LargeScaleStructure                                                   #
    #                                                                         #
    #  The prototype for the value of each large-scale structure symbol       #
    #  (@Chapter, @Section, etc.)                                             #
    #                                                                         #
    ###########################################################################

    def @LargeScaleStructure
	named tag {}			# tag of this large-scale structure sym
	named type {}			# MajorIntro, Major, VeryMajor, or Minor
	named initiallanguage {}	# its language
	named title {}			# its full title
	named runningtitle { dft }	# its running title Jeffk 12/11/02 from {}
	named aboveheadinggap { 0f }	# gap above heading
	named headingfont {}		# its heading font
	named headingbreak {}		# its heading break
	named headingformat		# its heading format
	    left @Num right @Body {}
	named headingtext { @Null }	# heading text
	named incontents { No }         # entry in table of contents required
	named contentsindent { 0f }	# only if type is Major
	named word {}
	named numbers { None }
	named attachnum {}		# only if numbers is not None
	named retrievenum {}		# only if numbers is not None
	named bypassnumber {}		# only if numbers is not None, or VeryMajor
	named prefix {}			# prefix of number of this symbol
	named pnprefix {}		# prefix for page numbers of this sym
	named majornum { dft }
	named majortitle { dft }
	named minornum { dft }
	named minortitle { dft }
	named intheorems { No }
	named indisplays { No }
	named infigures { No }
	named intables { No }
	named inrunners { No }
	named sendheader right @Body {}
	named innergap {}
	named endifmajor right innergap {
	    @EndFigureList
	    //innergap @EndNoteList 1
	    //innergap @ChapRefSection
	}
	named wantindefinite { No }
	right @Body
    {

	def @ShortNum
	{
	    numbers @Then {
		bypassnumber @Dft {
		    prefix @Join { numbers @Num retrievenum }
		}
	    }
	}

	def @LongNum
	{
	    numbers @Then {
		initiallanguage @Language { word @NumSep @ShortNum }
	    }
	}

	def @ShortTitle
	{
	    initiallanguage @Language { runningtitle @Dft title }
	}

	def @IfMajor right x
	{
	    type @Case {
		{ MajorIntro Major ExtraMajor ExtraMajorIntro } @Yield x
		else @Yield @Null
	    }
	}

	def @StartIfMajor {
	    type @Case {
		{ MajorIntro Major ExtraMajor ExtraMajorIntro VeryMajor } @Yield Start
		else @Yield NonStart
	    }
	}

        def @Run right start
        {
	    inrunners @Do type @Case {

		{ Major MajorIntro } @Yield {
		    start @Runner
			@MajorNum { majornum @Dft @LongNum }
			@MajorTitle { majortitle @Dft @ShortTitle }
			@MinorNum {}
			@MinorTitle {}
			@Owner { tag }
			@Prefix { pnprefix @Join @ShortNum }
		}

		{ ExtraMajor ExtraMajorIntro } @Yield {
		    start @Runner
			@MajorNum { majornum @Dft @LongNum }
			@MajorTitle { majortitle @Dft @ShortTitle }
			@MinorNum { majornum @Dft @LongNum }
			@MinorTitle { majortitle @Dft @ShortTitle }
			@Owner { tag }
			@Prefix { pnprefix @Join @ShortNum }
		}

		{ VeryMajor } @Yield {
		    start @Runner
		        @MajorNum { majornum @Dft @LongNum }
		        @MajorTitle { majortitle @Dft @ShortTitle }
		        @MinorNum {}
		        @MinorTitle {}
		        @Owner { tag }
		        @Prefix {}
		}

		Minor @Yield {
		    start @Runner
			@MajorNum { majornum @Dft @LongNum }
			@MajorTitle { majortitle @Dft @ShortTitle }
			@MinorNum { minornum @Dft @LongNum }
			@MinorTitle { minortitle @Dft @ShortTitle }
			@Owner { tag }
			@Prefix { pnprefix @Join @ShortNum }
		}
	    }
        }

	def @ContentsStuff
	{
	    incontents.type @Case {

		Yes.Minor @Yield {
			incontents @ContentsEntry
			    indent { contentsindent }
			    crosstag { tag }
			    number { @LongNum }
			    title { initiallanguage @Language title }
			    pagenum { @PageOf tag }
	        }

		{ Yes.Major Yes.MajorIntro Yes.ExtraMajor Yes.ExtraMajorIntro } @Yield {
			incontents @MajorContentsEntry
			    crosstag { tag }
			    number { @LongNum }
			    title { initiallanguage @Language title }
			    pagenum { @PageOf tag }
	        }

		{ Yes.VeryMajor } @Yield {
			incontents @VeryMajorContentsEntry
			    title { initiallanguage @Language {
				bypassnumber @ColonSep title } }
		}

		else @Yield @Null
	    }
	}

	def @Heading
	{

	    type @Case {

		Minor @Yield {
		    headingfont @Font
		    headingbreak @Break @Protect {@LongNum headingformat title}
		    // @Run @StartIfMajor
		    // @PageMark tag
		    @DP headingtext
		}

		{ Major MajorIntro ExtraMajor ExtraMajorIntro } @Yield {
		    sendheader {
		    //aboveheadinggap
		    headingfont @Font
		    headingbreak @Break { @LongNum headingformat title }
		    // @Run @StartIfMajor
		    // @PageMark tag
		    @DP headingtext
		    }
		}

		{ VeryMajor } @Yield { sendheader {
		    //aboveheadinggap
		    headingfont @Font
		    headingbreak @Break { bypassnumber headingformat title }
		    // @Run @StartIfMajor
		    // @PageMark tag
		    @DP headingtext
		    }
		}
	    }
	}

	initiallanguage @Language {
		@Heading
	    //   wantindefinite @Case {
		    Yes @Yield @Null
		    No  @Yield ""
		}
            //  numbers @Do {
		  attachnum & @NumberMarker @Tag { tag } @Value { @ShortNum }
		}
	    //  @IfMajor { @FootNoteThrough @Do @BeginFootNoteCounter }
            # //  @Run @StartIfMajor
            //  @ContentsStuff
	    //  @TitleMarker @Tag { tag } @Value { title }
            //  intheorems @BeginAllCounters @ShortNum
            //  indisplays @BeginDisplayCounter @ShortNum
            //  infigures @BeginFigureCounter @ShortNum
            //  intables @BeginTableCounter @ShortNum
            //  @Body
	    //innergap  @IfMajor endifmajor innergap
            //  @Run NonStart
	}
    }

@End @DocumentSetup