1///////////////////////////////////////////////////////////////////////////// 2// Name: tex2any.h 3// Purpose: Latex conversion header 4// Author: Julian Smart 5// Modified by: 6// Created: 7.9.93 7// RCS-ID: $Id: tex2any.h 41020 2006-09-05 20:47:48Z VZ $ 8// Copyright: (c) Julian Smart 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#include <stdio.h> 13#include "wx/utils.h" 14#include "wx/list.h" 15#include "wx/hash.h" 16#include "wx/tokenzr.h" 17#include "wx/wfstream.h" 18#include "wx/txtstrm.h" 19#include "wxhlpblk.h" 20 21/* 22 * Conversion modes 23 * 24 */ 25 26#define TEX_RTF 1 27#define TEX_XLP 2 28#define TEX_HTML 3 29 30/* 31 * We have a list of macro definitions which we must define 32 * in advance to enable the parsing to recognize macros. 33 */ 34 35#define FORBID_OK 0 36#define FORBID_WARN 1 37#define FORBID_ABSOLUTELY 2 38 39 40#ifdef __WXMSW__ 41 const unsigned long MAX_LINE_BUFFER_SIZE = 600; 42#else 43 const unsigned long MAX_LINE_BUFFER_SIZE = 11000; 44#endif 45 46class TexMacroDef: public wxObject 47{ 48 public: 49 int no_args; 50 wxChar *name; 51 bool ignore; 52 int forbidden; 53 int macroId; 54 55 TexMacroDef(int the_id, const wxChar *the_name, int n, bool ig, bool forbidLevel = FORBID_OK); 56 virtual ~TexMacroDef(void); 57}; 58 59#define CHUNK_TYPE_MACRO 1 60#define CHUNK_TYPE_ARG 2 61#define CHUNK_TYPE_STRING 3 62 63/* 64 We have nested lists to represent the Tex document. 65 Each element of a list of chunks can be one of: 66 - a plain string 67 - a macro with/without arguments. Arguments are lists of TexChunks. 68 69Example (\toplevel is implicit but made explicit here): 70 71AddMacroDef(ltMYMAT, "mymat", 2); 72 73\toplevel{The cat sat on the \mymat{very coarse and {\it cheap}}{mat}}. 74 75Parsed as: 76 77TexChunk: type = macro, name = toplevel, no_args = 1 78 Children: 79 80 TexChunk: type = argument 81 82 Children: 83 TexChunk: type = string, value = "The cat sat on the " 84 TexChunk: type = macro, name = mymat, no_args = 2 85 86 Children: 87 TexChunk: type = argument 88 89 Children: 90 TexChunk: type = string, value = "very coarse and " 91 TexChunk: type = macro, name = it, no_args = 1 92 93 Children: 94 TexChunk: type = argument 95 96 Children: 97 TexChunk: type = string, value = "cheap" 98 99 TexChunk: type = argument 100 101 Children: 102 TexChunk: type = string, value = mat 103 */ 104 105class TexChunk 106{ 107 public: 108 int type; 109// char *name; 110 TexMacroDef *def; 111 wxChar *value; 112 int macroId; 113 int no_args; 114 int argn; 115 bool optional; // Is an optional argument 116 117 wxList children; 118 TexChunk(int the_type, TexMacroDef *the_def = NULL); 119 TexChunk(TexChunk& toCopy); 120 virtual ~TexChunk(void); 121}; 122 123// Represents a topic, used for generating a table of contents file (.cnt). 124// Also for storing keywords found in a topic, a list of which is then inserted 125// into the topic in the next pass. 126class TexTopic: public wxObject 127{ 128 public: 129 // This flag is set to indicate that the topic has children. 130 // If this is the case, we know to insert a 'book' icon at this level, 131 // not just a 'page' icon. We don't want to have to open a book only 132 // to find there's only one page in it. We might force a book to be used if 133 // a top-level topic has no children (?) 134 bool hasChildren; 135 wxChar *filename; 136 wxStringList *keywords; 137 TexTopic(wxChar *f = NULL); 138 virtual ~TexTopic(void); 139}; 140extern wxHashTable TopicTable; 141void AddKeyWordForTopic(wxChar *topic, wxChar *entry, wxChar *filename = NULL); 142void ClearKeyWordTable(void); 143 144extern wxChar wxTex2RTFBuffer[]; 145extern TexChunk *TopLevel; 146extern wxHashTable MacroDefs; 147extern wxStringList IgnorableInputFiles; // Ignorable \input files, e.g. psbox.tex 148 149bool read_a_line(wxChar *buf); 150bool TexLoadFile(const wxString& filename); 151int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, 152 wxChar *environment = NULL, bool parseArgToBrace = true, TexChunk *customMacroArgs = NULL); 153int ParseMacroBody(const wxChar *macro_name, TexChunk *parent, int no_args, 154 wxChar *buffer, int pos, wxChar *environment = NULL, bool parseArgToBrace = true, TexChunk *customMacroArgs = NULL); 155void TraverseDocument(void); 156void TraverseFromChunk(TexChunk *chunk, wxNode *thisNode = NULL, bool childrenOnly = false); 157#define TraverseChildrenFromChunk(arg) TraverseFromChunk(arg, NULL, true) 158void SetCurrentOutput(FILE *fd); 159void SetCurrentOutputs(FILE *fd1, FILE *fd2); 160extern FILE *CurrentOutput1; 161extern FILE *CurrentOutput2; 162void AddMacroDef(int the_id, const wxChar *name, int n, bool ignore = false, bool forbidden = false); 163void TexInitialize(int bufSize); 164void TexCleanUp(void); 165void TexOutput(const wxChar *s, bool ordinaryText = false); 166wxChar *GetArgData(TexChunk *chunk); 167wxChar *GetArgData(void); // Get the string for the current argument 168int GetNoArgs(void); // Get the number of arguments for the current macro 169TexChunk *GetArgChunk(void); // Get the chunk for the current argument 170TexChunk *GetTopLevelChunk(void); // Get the chunk for the top level 171TexChunk *GetNextChunk(void); // Look ahead to the next chunk 172bool IsArgOptional(void); // Is this argument an optional argument? 173void DefineDefaultMacros(void); // Optional set of default macros 174int GetCurrentColumn(void); // number of characters on current line 175wxChar *ConvertCase(wxChar *s); // Convert case, according to upperCaseNames setting. 176extern wxPathList TexPathList; // Path list, can be used for file searching. 177 178extern bool StringMatch(const wxChar *one, const wxChar *two, bool subString = true, bool exact = false); 179 180// Define a variable value from the .ini file 181wxChar *RegisterSetting(const wxString& settingName, const wxString& settingValue, bool interactive = true); 182 183// Major document styles 184#define LATEX_REPORT 1 185#define LATEX_ARTICLE 2 186#define LATEX_LETTER 3 187#define LATEX_BOOK 4 188#define LATEX_SLIDES 5 189 190extern TexChunk *DocumentTitle; 191extern TexChunk *DocumentAuthor; 192extern TexChunk *DocumentDate; 193extern int DocumentStyle; 194extern int MinorDocumentStyle; 195extern wxChar *BibliographyStyleString; 196extern wxChar *DocumentStyleString; 197extern wxChar *MinorDocumentStyleString; 198 199extern int normalFont; 200extern int smallFont; 201extern int tinyFont; 202extern int largeFont1; 203extern int LargeFont2; 204extern int LARGEFont3; 205extern int hugeFont1; 206extern int HugeFont2; 207extern int HUGEFont3; 208 209/* 210 * USER-ADJUSTABLE SETTINGS 211 * 212 */ 213 214// Section font sizes 215extern int chapterFont; 216extern int sectionFont; 217extern int subsectionFont; 218extern int titleFont; 219extern int authorFont; 220extern bool winHelp; // Output in Windows Help format if true, linear otherwise 221extern bool isInteractive; 222extern bool runTwice; 223extern int convertMode; 224extern bool checkCurlyBraces; 225extern bool checkSyntax; 226extern bool stopRunning; 227extern int mirrorMargins; 228extern bool headerRule; 229extern bool footerRule; 230extern int labelIndentTab; // From left indent to item label (points) 231extern int itemIndentTab; // From left indent to item (points) 232extern bool useUpButton; 233extern int htmlBrowseButtons; 234extern bool useHeadingStyles; // Insert \s1, s2 etc. 235extern bool useWord; // Insert Word table of contents, etc. etc. 236extern bool indexSubsections; // put subsections in index 237extern bool compatibilityMode; 238extern bool generateHPJ; // Generate WinHelp HPJ file 239extern wxChar *winHelpTitle; // Title for Windows Help file 240extern int defaultTableColumnWidth; 241extern wxChar *bitmapMethod; 242extern bool truncateFilenames; // Truncate for DOS 243extern int winHelpVersion; // Version e.g. 4 for Win95 244extern bool winHelpContents; // Generate .cnt file 245extern bool htmlIndex; // Generate .htx HTML index file 246extern bool htmlFrameContents; // Use frames for HTML contents page 247extern wxChar *htmlStylesheet; // Use this CSS stylesheet for HTML pages 248extern int contentsDepth; // Depth of contents for linear RTF files 249extern bool upperCaseNames; // Filenames; default is lower case 250extern wxChar *backgroundImageString; // HTML background image 251extern wxChar *backgroundColourString; // HTML background colour 252extern wxChar *textColourString; // HTML text colour 253extern wxChar *linkColourString; // HTML link colour 254extern wxChar *followedLinkColourString; // HTML followed link colour 255extern bool combineSubSections; // Stop splitting files below section 256extern bool htmlWorkshopFiles; // generate HTML Help Workshop project files 257extern bool ignoreBadRefs; // Don't insert (REF NOT FOUND) 258extern wxChar *htmlFaceName; // HTML face name 259 260// Names to help with internationalisation 261extern wxChar *ContentsNameString; 262extern wxChar *AbstractNameString; 263extern wxChar *GlossaryNameString; 264extern wxChar *ReferencesNameString; 265extern wxChar *FiguresNameString; 266extern wxChar *TablesNameString; 267extern wxChar *FigureNameString; 268extern wxChar *TableNameString; 269extern wxChar *IndexNameString; 270extern wxChar *ChapterNameString; 271extern wxChar *SectionNameString; 272extern wxChar *SubsectionNameString; 273extern wxChar *SubsubsectionNameString; 274extern wxChar *UpNameString; 275 276/* 277 * HTML button identifiers: what kind of browse buttons 278 * are placed in HTML files, if any. 279 * 280 */ 281 282#define HTML_BUTTONS_NONE 0 283#define HTML_BUTTONS_BITMAP 1 284#define HTML_BUTTONS_TEXT 2 285 286/* 287 * Section numbering 288 * 289 */ 290 291extern int chapterNo; 292extern int sectionNo; 293extern int subsectionNo; 294extern int subsubsectionNo; 295extern int figureNo; 296extern int tableNo; 297 298extern int ParSkip; 299extern int ParIndent; 300 301extern bool isSync; 302 303// Set by client and by Tex2Any 304extern TexChunk *currentSection; 305 306// Header/footers/pagestyle 307extern TexChunk * LeftHeaderOdd; 308extern TexChunk * LeftFooterOdd; 309extern TexChunk * CentreHeaderOdd; 310extern TexChunk * CentreFooterOdd; 311extern TexChunk * RightHeaderOdd; 312extern TexChunk * RightFooterOdd; 313extern TexChunk * LeftHeaderEven; 314extern TexChunk * LeftFooterEven; 315extern TexChunk * CentreHeaderEven; 316extern TexChunk * CentreFooterEven; 317extern TexChunk * RightHeaderEven; 318extern TexChunk * RightFooterEven; 319extern wxChar * PageStyle; 320 321// Repeat the currentSection, either real (Chapter) or simulated (References) 322extern void OutputCurrentSection(void); 323extern void OutputCurrentSectionToString(wxChar *buf); 324extern void OutputChunkToString(TexChunk *chunk, wxChar *buf); 325 326// Called by Tex2Any to simulate a section 327extern void FakeCurrentSection(wxChar *fakeSection, bool addToContents = true); 328 329/* 330 * Local to Tex2Any library 331 * 332 */ 333 334extern wxChar *currentArgData; 335extern bool haveArgData; // If true, we're simulating the data. 336void StartSimulateArgument(wxChar *data); 337void EndSimulateArgument(void); 338 339/* 340 * Client-defined 341 * 342 */ 343 344// Called on start/end of macro examination 345void OnMacro(int macroId, int no_args, bool start); 346 347// Called on start/end of argument examination. 348// Return true at the start of an argument to traverse 349// (output) the argument. 350bool OnArgument(int macroId, int arg_no, bool start); 351 352// Default: library-defined 353void DefaultOnMacro(int macroId, int no_args, bool start); 354 355// Default: library-defined 356bool DefaultOnArgument(int macroId, int arg_no, bool start); 357 358// Called on error 359void OnError(const wxChar *msg); 360 361// Called for information 362void OnInform(const wxChar *msg); 363 364// Special yield wrapper 365void Tex2RTFYield(bool force = false); 366 367/* 368 * Useful utilities 369 * 370 */ 371 372// Look for \label macro, use this ref name if found or 373// make up a topic name otherwise. 374wxChar *FindTopicName(TexChunk *chunk); 375// Force the current topic to be this (e.g. force 'references' label). 376void ForceTopicName(const wxChar *name); 377void ResetTopicCounter(void); 378 379// Parse unit eg. 14, 12pt, 34cm and return value in points. 380int ParseUnitArgument(wxChar *unitArg); 381 382// Set small, large, normal etc. point sizes for reference size 383void SetFontSizes(int pointSize); 384 385/* 386 * Strip off any extension (dot something) from end of file, 387 * IF one exists. Inserts zero into buffer. 388 * 389 */ 390 391void StripExtension(wxChar *buffer); 392 393/* 394 * Reference structure 395 * 396 */ 397 398class TexRef: public wxObject 399{ 400 public: 401 wxChar *refLabel; // Reference label 402 wxChar *refFile; // Reference filename (can be NULL) 403 wxChar *sectionNumber; // Section or figure number (as a string) 404 wxChar *sectionName; // name e.g. 'section' 405 TexRef(const wxChar *label, const wxChar *file, const wxChar *section, const wxChar *sectionN = NULL); 406 virtual ~TexRef(void); 407}; 408 409/* 410 * Add a reference 411 * 412 */ 413 414void AddTexRef(wxChar *name, wxChar *file = NULL, wxChar *sectionName = NULL, 415 int chapter = 0, int section = 0, int subsection = 0, int subsubsection = 0); 416 417/* 418 * Read and write reference file (.ref), to resolve refs for second pass. 419 * 420 */ 421void WriteTexReferences(wxChar *filename); 422void ReadTexReferences(wxChar *filename); 423 424/* 425 * Bibliography stuff 426 * 427 */ 428 429class BibEntry: public wxObject 430{ 431 public: 432 wxChar *key; 433 434 /* 435 * book, inbook, article, phdthesis, inproceedings, techreport 436 */ 437 wxChar *type; 438 439 /* 440 * Possible fields 441 * 442 */ 443 wxChar *editor; 444 wxChar *title; 445 wxChar *booktitle; 446 wxChar *author; 447 wxChar *journal; 448 wxChar *volume; 449 wxChar *number; 450 wxChar *year; 451 wxChar *month; 452 wxChar *pages; 453 wxChar *chapter; 454 wxChar *publisher; 455 wxChar *address; 456 wxChar *institution; 457 wxChar *organization; 458 wxChar *comment; 459 460 inline BibEntry(void) 461 { 462 key = NULL; 463 type = NULL; 464 editor = NULL; 465 title = NULL; 466 booktitle = NULL; 467 author = NULL; 468 journal = NULL; 469 volume = NULL; 470 number = NULL; 471 chapter = NULL; 472 year = NULL; 473 month = NULL; 474 pages = NULL; 475 publisher = NULL; 476 address = NULL; 477 institution = NULL; 478 organization = NULL; 479 comment = NULL; 480 } 481}; 482 483extern wxList BibList; 484extern wxStringList CitationList; 485 486bool ReadBib(wxChar *filename); 487void OutputBib(void); 488void ResolveBibReferences(void); 489void AddCitation(wxChar *citeKey); 490TexRef *FindReference(wxChar *key); 491 492/* 493 * Ability to customize, or at least suppress unknown macro errors 494 * 495 */ 496 497extern wxList CustomMacroList; 498 499#define CUSTOM_MACRO_IGNORE 0 500#define CUSTOM_MACRO_OUTPUT 1 501#define CUSTOM_MACRO_MARK 2 502 503class CustomMacro: public wxObject 504{ 505public: 506 wxChar *macroName; 507 wxChar *macroBody; 508 int noArgs; 509 inline CustomMacro(const wxChar *name, int args, wxChar *body) 510 { 511 noArgs = args; 512 macroName = wxStrcpy(new wxChar[wxStrlen(name) + 1], name); 513 if (body) 514 macroBody = wxStrcpy(new wxChar[wxStrlen(body) + 1], body); 515 else 516 macroBody = NULL; 517 } 518 virtual ~CustomMacro(); 519}; 520 521bool ReadCustomMacros(const wxString& filename); 522void ShowCustomMacros(void); 523CustomMacro *FindCustomMacro(wxChar *name); 524wxChar *ParseMultifieldString(wxChar *s, int *pos); 525 526/* 527 * Colour table stuff 528 * 529 */ 530 531class ColourTableEntry: public wxObject 532{ 533 public: 534 wxChar *name; 535 unsigned int red; 536 unsigned int green; 537 unsigned int blue; 538 539 ColourTableEntry(const wxChar *theName, unsigned int r, unsigned int g, unsigned int b); 540 virtual ~ColourTableEntry(void); 541}; 542 543extern wxList ColourTable; 544extern void AddColour(const wxChar *theName, unsigned int r, unsigned int g, unsigned int b); 545extern int FindColourPosition(wxChar *theName); 546// Converts e.g. "red" -> "#FF0000" 547extern bool FindColourHTMLString(wxChar *theName, wxChar *buf); 548extern void InitialiseColourTable(void); 549 550#define ltABSTRACT 1 551#define ltADDCONTENTSLINE 2 552#define ltADDTOCOUNTER 3 553#define ltALPH1 4 554#define ltALPH2 5 555#define ltAPPENDIX 6 556#define ltARABIC 7 557#define ltARRAY 8 558#define ltAUTHOR 9 559 560#define ltBACKSLASH 30 561#define ltBASELINESKIP 31 562#define ltBF 32 563#define ltBIBITEM 33 564#define ltBIBLIOGRAPHYSTYLE 34 565#define ltBIBLIOGRAPHY 35 566#define ltBOXIT 36 567#define ltBACKSLASHRAW 37 568#define ltBACKGROUND 38 569#define ltBACKGROUNDCOLOUR 39 570#define ltBACKGROUNDIMAGE 40 571#define ltBRCLEAR 41 572 573#define ltCAPTIONSTAR 50 574#define ltCAPTION 51 575#define ltCDOTS 52 576#define ltCENTERLINE 53 577#define ltCENTERING 54 578#define ltCENTER 55 579#define ltCEXTRACT 56 580#define ltCHAPTERHEADING 57 581#define ltCHAPTERSTAR 58 582#define ltCHAPTER 59 583#define ltCINSERT 60 584#define ltCITE 61 585#define ltCLASS 62 586#define ltCLEARDOUBLEPAGE 63 587#define ltCLEARPAGE 64 588#define ltCLINE 65 589#define ltCLIPSFUNC 66 590#define ltCOLUMNSEP 67 591#define ltCOMMENT 68 592#define ltCOPYRIGHT 69 593#define ltCPARAM 70 594 595#define ltCHEAD 71 596#define ltCFOOT 72 597 598#define ltCHAPTERHEADINGSTAR 73 599 600#define ltDATE 90 601#define ltDESCRIPTION 91 602#define ltDESTRUCT 92 603#define ltDOCUMENTSTYLE 93 604#define ltDOCUMENT 94 605#define ltDOUBLESPACE 95 606#define ltDEFINECOLOUR 96 607#define ltDEFINECOLOR 97 608 609#define ltEM 120 610#define ltENUMERATE 121 611#define ltEQUATION 122 612#define ltEVENSIDEMARGIN 123 613 614#define ltFBOX 150 615#define ltFIGURE 151 616#define ltFLUSHLEFT 152 617#define ltFLUSHRIGHT 153 618#define ltFOOTHEIGHT 154 619#define ltFOOTNOTE 155 620#define ltFOOTSKIP 156 621#define ltFRAMEBOX 157 622#define ltFUNCTIONSECTION 158 623#define ltFUNC 159 624#define ltFIGURESTAR 160 625#define ltFOOTNOTESIZE 161 626#define ltFOOTNOTEPOPUP 162 627#define ltFANCYPLAIN 163 628#define ltFCOL 164 629#define ltBCOL 165 630#define ltFOLLOWEDLINKCOLOUR 166 631 632#define ltGLOSSARY 180 633#define ltGLOSS 181 634 635#define ltHEADHEIGHT 200 636#define ltHELPGLOSSARY 201 637#define ltHELPIGNORE 202 638#define ltHELPONLY 203 639#define ltHELPINPUT 204 640#define ltHELPFONTFAMILY 205 641#define ltHELPFONTSIZE 206 642#define ltHELPREFN 207 643#define ltHELPREF 208 644#define ltHFILL 209 645#define ltHLINE 210 646#define ltHRULE 211 647#define ltHSPACESTAR 212 648#define ltHSPACE 213 649#define ltHSKIPSTAR 214 650#define ltHSKIP 215 651#define lthuge 216 652#define ltHuge 217 653#define ltHUGE 218 654#define ltHTMLIGNORE 219 655#define ltHTMLONLY 220 656 657#define ltINCLUDEONLY 240 658#define ltINCLUDE 241 659#define ltINDEX 242 660#define ltINPUT 243 661#define ltITEMIZE 244 662#define ltITEM 245 663#define ltIMAGE 246 664#define ltIT 247 665#define ltITEMSEP 248 666#define ltINDENTED 249 667#define ltIMAGEMAP 250 668#define ltIMAGER 251 669#define ltIMAGEL 252 670#define ltINSERTATLEVEL 253 671 672#define ltKILL 260 673 674#define ltLABEL 280 675#define ltlarge 281 676#define ltLarge 282 677#define ltLARGE 283 678#define ltLATEX 284 679#define ltLBOX 285 680#define ltLDOTS 286 681#define ltLINEBREAK 287 682#define ltLISTOFFIGURES 288 683#define ltLISTOFTABLES 289 684#define ltLHEAD 290 685#define ltLFOOT 291 686#define ltLATEXIGNORE 292 687#define ltLATEXONLY 293 688#define ltLOWERCASE 294 689#define ltLBRACERAW 295 690#define ltLINKCOLOUR 296 691 692#define ltMAKEGLOSSARY 300 693#define ltMAKEINDEX 301 694#define ltMAKETITLE 302 695#define ltMARKRIGHT 303 696#define ltMARKBOTH 304 697#define ltMARGINPARWIDTH 305 698#define ltMARGINPAR 306 699#define ltMARGINPARODD 307 700#define ltMARGINPAREVEN 308 701#define ltMBOX 309 702#define ltMEMBERSECTION 310 703#define ltMEMBER 311 704#define ltMULTICOLUMN 312 705#define ltMARGINPARSEP 313 706 707#define ltNEWCOUNTER 330 708#define ltNEWLINE 331 709#define ltNEWPAGE 332 710#define ltNOCITE 333 711#define ltNOINDENT 334 712#define ltNOLINEBREAK 335 713#define ltNOPAGEBREAK 336 714#define ltNORMALSIZE 337 715#define ltNORMALBOX 338 716#define ltNORMALBOXD 339 717#define ltNUMBEREDBIBITEM 340 718 719#define ltONECOLUMN 360 720#define ltODDSIDEMARGIN 361 721 722#define ltPAGEBREAK 380 723#define ltPAGEREF 381 724#define ltPAGESTYLE 382 725#define ltPAGENUMBERING 383 726#define ltPARAGRAPHSTAR 384 727#define ltPARAGRAPH 385 728#define ltPARAM 386 729#define ltPARINDENT 387 730#define ltPARSKIP 388 731#define ltPARTSTAR 389 732#define ltPART 390 733#define ltPAR 391 734#define ltPFUNC 392 735#define ltPICTURE 393 736#define ltPOPREF 394 737#define ltPOUNDS 395 738#define ltPRINTINDEX 396 739#define ltPSBOXTO 397 740#define ltPSBOX 398 741#define ltPOPREFONLY 399 742 743#define ltQUOTE 420 744#define ltQUOTATION 421 745 746#define ltRAGGEDBOTTOM 440 747#define ltRAGGEDLEFT 441 748#define ltRAGGEDRIGHT 442 749#define ltREF 443 750#define ltRM 444 751#define ltROMAN 445 752#define ltROMAN2 446 753#define ltRTFSP 447 754#define ltRULE 448 755#define ltRULEDROW 449 756#define ltDRULED 450 757#define ltRHEAD 451 758#define ltRFOOT 452 759#define ltROW 453 760#define ltRTFIGNORE 454 761#define ltRTFONLY 455 762#define ltRBRACERAW 456 763#define ltREGISTERED 457 764 765#define ltSC 470 766#define ltSECTIONHEADING 471 767#define ltSECTIONSTAR 472 768#define ltSECTION 473 769#define ltSETCOUNTER 474 770#define ltSF 475 771#define ltSHORTCITE 476 772#define ltSINGLESPACE 477 773#define ltSLOPPYPAR 478 774#define ltSLOPPY 479 775#define ltSL 480 776#define ltSMALL 481 777#define ltSUBITEM 482 778#define ltSUBPARAGRAPHSTAR 483 779#define ltSUBPARAGRAPH 484 780#define ltSPECIAL 485 781#define ltSUBSECTIONSTAR 486 782#define ltSUBSECTION 487 783#define ltSUBSUBSECTIONSTAR 488 784#define ltSUBSUBSECTION 489 785#define ltSCRIPTSIZE 490 786#define ltSETHEADER 491 787#define ltSETFOOTER 492 788#define ltSIZEDBOX 493 789#define ltSIZEDBOXD 494 790#define ltSECTIONHEADINGSTAR 495 791#define ltSS 496 792#define ltSETHOTSPOTCOLOUR 497 793#define ltSETHOTSPOTCOLOR 498 794#define ltSETHOTSPOTUNDERLINE 499 795#define ltSETTRANSPARENCY 500 796 797#define ltTABBING 510 798#define ltTABLEOFCONTENTS 511 799#define ltTABLE 512 800#define ltTABULAR 513 801#define ltTAB 514 802#define ltTEX 515 803#define ltTEXTWIDTH 516 804#define ltTEXTHEIGHT 517 805#define ltTHEBIBLIOGRAPHY 518 806#define ltTITLEPAGE 519 807#define ltTITLE 520 808#define ltTINY 521 809#define ltTODAY 522 810#define ltTOPMARGIN 523 811#define ltTOPSKIP 524 812#define ltTT 525 813#define ltTYPEIN 526 814#define ltTYPEOUT 527 815#define ltTWOCOLUMN 528 816#define ltTHEPAGE 529 817#define ltTHECHAPTER 530 818#define ltTHESECTION 531 819#define ltTHISPAGESTYLE 532 820 821#define ltTWOCOLWIDTHA 533 822#define ltTWOCOLWIDTHB 534 823#define ltTWOCOLSPACING 535 824#define ltTWOCOLITEM 536 825#define ltTWOCOLITEMRULED 537 826#define ltTWOCOLLIST 538 827#define ltTEXTCOLOUR 539 828 829#define ltUNDERLINE 550 830#define ltURLREF 551 831#define ltUPPERCASE 552 832#define ltUSEPACKAGE 553 833 834#define ltVDOTS 570 835#define ltVERBATIMINPUT 571 836#define ltVERBATIM 572 837#define ltVERB 573 838#define ltVERSE 574 839#define ltVFILL 575 840#define ltVLINE 576 841#define ltVOID 577 842#define ltVRULE 578 843#define ltVSPACESTAR 579 844#define ltVSKIPSTAR 580 845#define ltVSPACE 581 846#define ltVSKIP 582 847#define ltVERBSTAR 583 848 849#define ltWXCLIPS 600 850#define ltWINHELPIGNORE 601 851#define ltWINHELPONLY 602 852 853#define ltXLPIGNORE 603 854#define ltXLPONLY 604 855 856#define ltSPACE 620 857#define ltBACKSLASHCHAR 621 858#define ltPIPE 622 859#define ltFORWARDSLASH 623 860#define ltUNDERSCORE 624 861#define ltAMPERSAND 625 862#define ltPERCENT 626 863#define ltDOLLAR 627 864#define ltHASH 628 865#define ltLPARENTH 629 866#define ltRPARENTH 630 867#define ltLBRACE 631 868#define ltRBRACE 632 869#define ltEQUALS 633 870#define ltRANGLEBRA 634 871#define ltLANGLEBRA 635 872#define ltPLUS 636 873#define ltDASH 637 874#define ltSINGLEQUOTE 638 875#define ltBACKQUOTE 639 876#define ltTILDE 640 877#define ltAT_SYMBOL 641 878 879// Characters, not macros but with special Latex significance 880#define ltSPECIALDOLLAR 660 881#define ltSPECIALDOUBLEDOLLAR 661 882#define ltSPECIALTILDE 662 883#define ltSPECIALHASH 663 884#define ltSPECIALAMPERSAND 664 885#define ltSUPERTABULAR 665 886 887// Accents 888#define ltACCENT_GRAVE 700 889#define ltACCENT_ACUTE 701 890#define ltACCENT_CARET 702 891#define ltACCENT_UMLAUT 703 892#define ltACCENT_TILDE 704 893#define ltACCENT_DOT 705 894#define ltACCENT_CADILLA 706 895 896// Symbols 897#define ltALPHA 800 898#define ltBETA 801 899#define ltGAMMA 802 900#define ltDELTA 803 901#define ltEPSILON 804 902#define ltVAREPSILON 805 903#define ltZETA 806 904#define ltETA 807 905#define ltTHETA 808 906#define ltVARTHETA 809 907#define ltIOTA 810 908#define ltKAPPA 811 909#define ltLAMBDA 812 910#define ltMU 813 911#define ltNU 814 912#define ltXI 815 913#define ltPI 816 914#define ltVARPI 817 915#define ltRHO 818 916#define ltVARRHO 819 917#define ltSIGMA 820 918#define ltVARSIGMA 821 919#define ltTAU 822 920#define ltUPSILON 823 921#define ltPHI 824 922#define ltVARPHI 825 923#define ltCHI 826 924#define ltPSI 827 925#define ltOMEGA 828 926 927#define ltCAP_GAMMA 830 928#define ltCAP_DELTA 831 929#define ltCAP_THETA 832 930#define ltCAP_LAMBDA 833 931#define ltCAP_XI 834 932#define ltCAP_PI 835 933#define ltCAP_SIGMA 836 934#define ltCAP_UPSILON 837 935#define ltCAP_PHI 838 936#define ltCAP_PSI 839 937#define ltCAP_OMEGA 840 938 939// Binary operation symbols 940#define ltLE 850 941#define ltLEQ 851 942#define ltLL 852 943#define ltSUBSET 853 944#define ltSUBSETEQ 854 945#define ltSQSUBSET 855 946#define ltSQSUBSETEQ 856 947#define ltIN 857 948#define ltVDASH 858 949#define ltMODELS 859 950#define ltGE 860 951#define ltGEQ 861 952#define ltGG 862 953#define ltSUPSET 863 954#define ltSUPSETEQ 864 955#define ltSQSUPSET 865 956#define ltSQSUPSETEQ 866 957#define ltNI 867 958#define ltDASHV 868 959#define ltPERP 869 960#define ltNEQ 870 961#define ltDOTEQ 871 962#define ltAPPROX 872 963#define ltCONG 873 964#define ltEQUIV 874 965#define ltPROPTO 875 966#define ltPREC 876 967#define ltPRECEQ 877 968#define ltPARALLEL 878 969#define ltSIM 879 970#define ltSIMEQ 880 971#define ltASYMP 881 972#define ltSMILE 882 973#define ltFROWN 883 974#define ltBOWTIE 884 975#define ltSUCC 885 976#define ltSUCCEQ 886 977#define ltMID 887 978 979// Negated relation symbols (selected) 980#define ltNOTEQ 890 981#define ltNOTIN 891 982#define ltNOTSUBSET 892 983 984// Arrows 985#define ltLEFTARROW 900 986#define ltLEFTARROW2 901 987#define ltRIGHTARROW 902 988#define ltRIGHTARROW2 903 989#define ltLEFTRIGHTARROW 904 990#define ltLEFTRIGHTARROW2 905 991#define ltUPARROW 906 992#define ltUPARROW2 907 993#define ltDOWNARROW 908 994#define ltDOWNARROW2 909 995 996// Miscellaneous symbols 997#define ltALEPH 1000 998#define ltWP 1001 999#define ltRE 1002 1000#define ltIM 1003 1001#define ltEMPTYSET 1004 1002#define ltNABLA 1005 1003#define ltSURD 1006 1004#define ltPARTIAL 1007 1005#define ltBOT 1008 1006#define ltFORALL 1009 1007#define ltEXISTS 1010 1008#define ltNEG 1011 1009#define ltSHARP 1012 1010#define ltANGLE 1013 1011#define ltTRIANGLE 1014 1012#define ltCLUBSUIT 1015 1013#define ltDIAMONDSUIT 1016 1014#define ltHEARTSUIT 1017 1015#define ltSPADESUIT 1018 1016#define ltINFTY 1019 1017 1018// Binary operation symbols 1019#define ltPM 1030 1020#define ltMP 1031 1021#define ltTIMES 1032 1022#define ltDIV 1033 1023#define ltCDOT 1034 1024#define ltAST 1035 1025#define ltSTAR 1036 1026#define ltCAP 1037 1027#define ltCUP 1038 1028#define ltVEE 1039 1029#define ltWEDGE 1040 1030#define ltCIRC 1041 1031#define ltBULLET 1042 1032#define ltDIAMOND 1043 1033#define ltOSLASH 1044 1034#define ltBOX 1045 1035#define ltDIAMOND2 1046 1036#define ltBIGTRIANGLEDOWN 1047 1037#define ltOPLUS 1048 1038#define ltOTIMES 1049 1039 1040// Latex2e commands 1041#define ltRMFAMILY 1200 1042#define ltSFFAMILY 1201 1043#define ltTTFAMILY 1202 1044#define ltBFSERIES 1203 1045#define ltITSHAPE 1204 1046#define ltSLSHAPE 1205 1047#define ltSCSHAPE 1206 1048 1049#define ltMDSERIES 1207 1050#define ltUPSHAPE 1208 1051 1052#define ltTEXTRM 1209 1053#define ltTEXTSF 1210 1054#define ltTEXTTT 1211 1055#define ltTEXTBF 1212 1056#define ltTEXTIT 1213 1057#define ltTEXTSL 1214 1058#define ltTEXTSC 1215 1059#define ltEMPH 1216 1060 1061#define ltDOCUMENTCLASS 1217 1062 1063// Space macros 1064#define ltSMALLSPACE1 1250 1065#define ltSMALLSPACE2 1251 1066 1067// Pseudo-macros 1068#define ltTOPLEVEL 15000 1069#define ltCUSTOM_MACRO 15001 1070#define ltSOLO_BLOCK 15002 1071