1This is a2ps.info, produced by makeinfo version 4.0 from a2ps.texi. 2 3INFO-DIR-SECTION Printing Tools 4START-INFO-DIR-ENTRY 5* a2ps: (a2ps). PostScript Generating Utility 6* PreScript: (a2ps) PreScript. Input language for a2ps 7* card: (a2ps) card. Print Reference Cards 8* fixps: (a2ps) fixps. Fixing Some Ill Designed PostScript Files 9* fixnt: (a2ps) fixnt. Fixing Microsoft NT PostScript Files 10* pdiff: (a2ps) pdiff. Produce Pretty Comparison of Files 11* psmandup: (a2ps) psmandup. Printing Duplex on Simplex Printers 12* psset: (a2ps) psset. Inserting calls to setpagedevice 13END-INFO-DIR-ENTRY 14 15 This document describes GNU a2ps 4.13, a converter from various 16formats, included text, to PostScript converter, with pretty-printing 17abilities. 18 19 Copyright (C) 1988-1993 Miguel Santana Copyright (C) 1995-2000 Akim 20Demaille, Miguel Santana 21 22 Permission is granted to make and distribute verbatim copies of this 23manual provided the copyright notice and this permission notice are 24preserved on all copies. 25 26 Permission is granted to copy and distribute modified versions of 27this manual under the conditions for verbatim copying, provided also 28that the section entitled "Copying" is included exactly as in the 29original, and provided that the entire resulting derived work is 30distributed under the terms of a permission notice identical to this 31one. 32 33 Permission is granted to copy and distribute translations of this 34manual into another language, under the above conditions for modified 35versions, except that this permission notice may be stated in a 36translation approved by the author. 37 38 39File: a2ps.info, Node: a2ps PostScript Files, Next: Designing PostScript Prologues, Prev: Colors in PostScript, Up: PostScript 40 41a2ps PostScript Files 42===================== 43 44 a2ps uses several types of PostScript files. Some are standards, 45such as font files, and others are meant for a2ps only. 46 47 All a2ps files have two parts, one being the comments, and the other 48being the content, separated by the following line: 49 % code follows this line 50 51 52File: a2ps.info, Node: Designing PostScript Prologues, Prev: a2ps PostScript Files, Up: PostScript 53 54Designing PostScript Prologues 55============================== 56 57 It is pretty known that satisfying the various human tastes is an 58NEXPTIME-hard problem, so a2ps offers ways to customize its output 59through the "prologue files". But since the authors feel a little 60small against NEXPTIME, they agreed on the fact that *you* are the one 61who will design the look you like. 62 63 Hence in this section, you will find what you need to know to be 64able to customize a2ps output. 65 66 Basically, a2ps uses "faces" which are associated to their "meaning" 67in the text. a2ps let's you change the way the faces look. 68 69* Menu: 70 71* Definition of the faces:: What goes in a characters style 72* Prologue File Format:: Including documentation 73* A prologue example:: A step by step example 74 75 76File: a2ps.info, Node: Definition of the faces, Next: Prologue File Format, Prev: Designing PostScript Prologues, Up: Designing PostScript Prologues 77 78Definition of the faces 79----------------------- 80 81 There are three things that define a face: 82_Its font_ 83 You should never call the font by yourself, because sometimes 84 a2ps may decide that another font would be better. This is what 85 happens for instance if a font does not support the encoding you 86 use. 87 88 Hence, never set the font by yourself, but ask a2ps to do it. 89 This is done through a line: 90 %Face: FACE REAL-FONT-NAME SIZE 91 92 This line tells a2ps that the font of FACE is REAL-FONT-NAME. It 93 will replace this line by the correct PostScript line to call the 94 needed font, and will do everything needed to set up the font. 95 96 The size of the text body is `bfs'. 97 98_Its background color_ 99 There are two cases: 100 1. You want a background color, then give the "RGB" (*note 101 Colors in PostScript::) ratio and `true' to `BG': 102 0.8 0.8 0 true BG 103 104 2. You don't want a background color, then call `BG' with 105 `false': 106 false BG 107 108_Its foreground color_ 109 As `BG', call `FG' with an "RGB" ratio: 110 0 0.5 0 FG 111 112_Its underlining_ 113 `UL' requires a boolean argument, depending whether you want or 114 not the current face to be underlined. 115 true UL 116 117_Its boxing_ 118 Requiring a boolean, `BX' let's a face have a box drawn around. 119 120 121File: a2ps.info, Node: Prologue File Format, Next: A prologue example, Prev: Definition of the faces, Up: Designing PostScript Prologues 122 123Prologue File Format 124-------------------- 125 126 Prologue files for a2ps must have `pro' as suffix. Documentation 127(reported with `--list-prologues') can be included in the comment part: 128 Documentation 129 This prologue is the same as the prologue code(pb)code, but using 130 the bold version of the fonts. 131 EndDocumentation 132 % code follows this line 133 *Note Documentation Format::, for more on the format. 134 135 136File: a2ps.info, Node: A prologue example, Prev: Prologue File Format, Up: Designing PostScript Prologues 137 138A step by step example 139---------------------- 140 141 We strongly suggest our readers not to start from scratch, but to 142copy one of the available styles (see the result of `a2ps 143--list=prologues'), to drop it in one of a2ps directories (say 144`$HOME/.a2ps', and to patch it until you like it. 145 146 Here, we will start from `color.pro', trying to give it a funky look. 147 148 Say you want the keywords to be in Helvetica, drawn in a flashy pink 149on a light green. And strong keywords, in Times Bold Italic in brown 150on a soft Hawaiian sea green (you are definitely a fine art _amateur_). 151 152 Then you need to look for `k' and `K': 153 /k { 154 false BG 155 0 0 0.9 FG 156 %Face: Keyword Courier bfs 157 Show 158 } bind def 159 160 /K { 161 false BG 162 0 0 0.8 FG 163 %Face: Keyword_strong Courier-Bold bfs 164 Show 165 } bind def 166 167and turn it into: 168 /k { 169 0.2 1 0.2 true BG 170 1 0.2 1 FG 171 %Face: Keyword Helvetica bfs 172 Show 173 } bind def 174 175 /K { 176 0.4 0.2 0 true BG 177 0.5 1 1 FG 178 %Face: Keyword_strong Times-BoldItalic bfs 179 Show 180 } bind def 181 182 Waouh! It looks great! 183 184 A bit trickier: let change the way the line numbers are printed. 185 186 First, let's look for the font definition: 187 %%BeginSetup 188 % The font for line numbering 189 /f# /Helvetica findfont bfs .6 mul scalefont def 190 %%EndSetup 191 192 Let it be in Times, twice bigger than the body font. 193 %%BeginSetup 194 % The font for line numbering 195 /f# /Times-Roman findfont bfs 2 mul scalefont def 196 %%EndSetup 197 198 How about its foreground color? 199 % Function print line number (<string> # -) 200 /# { 201 gsave 202 sx cw mul 2 div neg 0 rmoveto 203 f# setfont 204 0.8 0.1 0.1 FG 205 c-show 206 grestore 207 } bind def 208 209 Let it be blue. Now you know the process: just put `0 0 1' as `FG' 210arguments. 211 212 213File: a2ps.info, Node: Contributions, Next: FAQ, Prev: PostScript, Up: Top 214 215Contributions 216************* 217 218 This chapter documents the various shell scripts or other tools that 219are distributed with the a2ps package, but are not a2ps itself. The 220reader should also look at the documentation of `Ogonkify' (*note 221Overview: (ogonkify)top.), written by Juliusz Chroboczek. 222 223* Menu: 224 225* card:: Printing Reference Cards 226* fixps:: Fixing Some Ill Designed PostScript Files 227* fixnt:: Fixing Microsoft NT PostScript Files 228* pdiff:: Produce Pretty Comparison of Files 229* psmandup:: Printing Duplex on Simplex Printers 230* psset:: Inserting calls to setpagedevice 231 232 233File: a2ps.info, Node: card, Next: fixps, Prev: Contributions, Up: Contributions 234 235`card' 236====== 237 238 Many users of a2ps have asked for a reference card, presenting a 239summary of the options. In fact, something closely related to the 240output of `a2ps --help'. 241 242 The first version of this reference card was a PreScript file (*note 243PreScript::) to be printed by a2ps. Very soon a much better scheme was 244found: using a style sheet to pretty print directly the output of `a2ps 245--help'! A first advantage is then that the reference cards can be 246printed in the tongue you choose. 247 248 A second was that this treatment could be applied to any application 249supporting a `--help'-like option. 250 251* Menu: 252 253* Invoking card:: Command Line Interface 254* Caution when Using card:: card runs commands 255 256 257File: a2ps.info, Node: Invoking card, Next: Caution when Using card, Prev: card, Up: card 258 259Invoking `card' 260--------------- 261 262 card [OPTIONS] APPLICATIONS [-- A2PS-OPTIONS] 263 264`card' is a shell script which tries to guess how to get your 265APPLICATIONS' help message (typically by the options `--help' or `-h'), 266and pretty prints it thanks to a2ps (or the content of the environment 267variable `A2PS' if it is set). A2PS-OPTIONS are passed to a2ps. 268 269 Supported options are: 270 271 - Option: -h 272 - Option: --help 273 print a short help message and exit successfully. 274 275 - Option: -V 276 - Option: --version 277 report the version and exit successfully. 278 279 - Option: -q 280 - Option: --quiet 281 - Option: --silent 282 Run silently. 283 284 - Option: -D 285 - Option: --debug 286 enter in debug mode. 287 288 - Option: -l LANGUAGE 289 - Option: --language=LANGUAGE 290 specify the language in which the reference card should be printed. 291 LANGUAGE should be the symbol used by `LC_ALL' etc. (such as 292 `fr', `it' etc.). 293 294 If the APPLICATIONS don't support internationalization, English 295 will be used. 296 297 - Option: --command=COMMAND 298 Don't try to guess the APPLICATIONS' way to report their help 299 message, but rather use the call COMMAND. A typical example is 300 card --command="cc -flags" 301 302 It is possible to give options to a2ps (*note Options::) by 303specifying them after `--'. For instance 304 card gmake gtar --command="cc -flags" -- -Pdisplay 305 306builds the reference card of `GNU make', `GNU tar' (automatic detection 307of `--help' support), and `cc' thanks to `-flags'. 308 309 310File: a2ps.info, Node: Caution when Using card, Prev: Invoking card, Up: card 311 312Caution when Using `card' 313------------------------- 314 315 Remember that `card' runs the programs you give it, and the commands 316you supplied. Hence if there is a silly programs that has a weird 317behavior given the option `-h' etc., beware of the result. 318 319 It is even clearer using `--command': avoid running `card 320--command="rm -rf *"', because the result will be exactly what you think 321it will be! 322 323 324File: a2ps.info, Node: fixps, Next: fixnt, Prev: card, Up: Contributions 325 326`fixps' 327======= 328 329 The shell script `fixps' tries its best to fix common problems in 330PostScript files that may prevent post processing. It makes heavy use 331of the `psutils'. It is a good idea to use `fixps' in the PostScript 332delegations. 333 334 It first tries to make simple fixes, but some really broken files may 335require a much deeper treatment. If `fixps' feels the need for such a 336major surgery act, it may give up local changes and ask `Ghostscript' 337for a global rewriting. 338 339* Menu: 340 341* Invoking fixps:: Command Line Interface 342 343 344File: a2ps.info, Node: Invoking fixps, Prev: fixps, Up: fixps 345 346Invoking `fixps' 347---------------- 348 349 fixps [OPTIONS] [FILE] 350 351sanitize the PostScript FILE (or of the standard input if no FILE is 352given, or if FILE is `-'). 353 354 Supported options are: 355 356 - Option: -h 357 - Option: --help 358 Print a short help message and a list of the fixes that are 359 performed. Exit successfully. 360 361 - Option: -V 362 - Option: --version 363 report the version and exit successfully. 364 365 - Option: -D 366 - Option: --debug 367 enter in debug mode. 368 369 - Option: -q 370 - Option: --quiet 371 - Option: --silent 372 Run silently. 373 374 - Option: -o FILE 375 - Option: --output=FILE 376 specify the FILE in which is saved the output. 377 378 - Option: -n 379 - Option: --no-fix 380 Don't actually fix the FILE but still honor all of the other 381 options. In particular, `fixps -qn FILE' is equivalent to `cat 382 FILE'. 383 384 - Option: -c 385 - Option: --check 386 - Option: --dry-run 387 Don't actually fix the FILE: just report the diagnostics. 388 Contrary to the option `fixps -qc' does absolutely nothing (while 389 it does take some time to do it nicely). 390 391 - Option: -f 392 - Option: --force 393 Ask `ghoscript' for a full rewrite of the FILE. The output file 394 is really sane, but can be much longer than the original. For this 395 reason and others, it is not always a good idea to make a full 396 rewrite. This option should be used only for files that give 397 major problems. 398 399 400File: a2ps.info, Node: fixnt, Next: pdiff, Prev: fixps, Up: Contributions 401 402`fixnt' 403======= 404 405 `fixnt' (see its 406`http://www.itsm.uni-stuttgart.de/~bauer/fixnt.html', home page) is 407maintained by Holger Bauer <bauer@itsm.uni-stuttgart.de> and Michael 408Rath <rath@itsm.uni-stuttgart.de>. It is meant to fix the problems of 409the PostScript files generated by the Microsoft PostScript driver under 410Windows NT (3.5 and 4.0). 411 412 `fixps' is aware of the cases where `fixnt' should be used, hence 413you should not worry of when to use `fixnt'. 414 415* Menu: 416 417* Invoking fixnt:: Command Line Interface 418 419 420File: a2ps.info, Node: Invoking fixnt, Prev: fixnt, Up: fixnt 421 422Invoking `fixnt' 423---------------- 424 425 fixnt < `file.ps' 426 427sanitize the PostScript file FILE.PS and produce the result on the 428standard output. 429 430 431File: a2ps.info, Node: pdiff, Next: psmandup, Prev: fixnt, Up: Contributions 432 433`pdiff' 434======= 435 436 The shell script `pdiff' aims to pretty print diffs between files. 437It basically uses GNU `diff' (*note Overview: (diff)diff.) or GNU 438`wdiff' (*note The word difference finder: (wdiff)wdiff.) to extract 439the diff, then calls a2ps with the correct settings to get a nice, 440printed contextual diff. 441 442* Menu: 443 444* Invoking pdiff:: Command Line Interface 445 446 447File: a2ps.info, Node: Invoking pdiff, Prev: pdiff, Up: pdiff 448 449Invoking `pdiff' 450---------------- 451 452 pdiff [OPTIONS] FILE-1 FILE-2 [-- A2PS-OPTIONS] 453 454make a pretty comparison between FILE-1 and FILE-2. A2PS-OPTIONS are 455passed to a2ps. 456 457 Supported options are: 458 459 - Option: -h 460 - Option: --help 461 print a short help message and exit successfully. 462 463 - Option: -V 464 - Option: --version 465 report the version and exit successfully. 466 467 - Option: -q 468 - Option: --quiet 469 - Option: --silent 470 Run silently. 471 472 - Option: -D 473 - Option: --debug 474 enter in debug mode. 475 476 - Option: -w 477 - Option: --words 478 Look for words differences (default). White space differences are 479 not considered. 480 481 - Option: -l 482 - Option: --lines 483 Look for lines differences. 484 485 It is possible to give options to a2ps (*note Options::) by 486specifying them after `--'. For instance 487 pdiff COPYING COPYING.LIB -- -1 -P display 488 489Compares the files `COPYING' and `COPYING.LIB', and prints it on the 490printer `display' (usually `Ghostview' or `gv'). 491 492 493File: a2ps.info, Node: psmandup, Next: psset, Prev: pdiff, Up: Contributions 494 495`psmandup' 496========== 497 498 I personally hate to print documents of hundreds of pages on a single 499sided printer. Too bad, here there are no Duplex printers. The idea is 500then simply first to print the odd pages, then the even in reversed 501order. To make sure one flips the page in the meanwhile, the second 502half should be printed from the manual feed tray. 503 504 Make a shell script that automates this, and you get `psmandup'. 505 506* Menu: 507 508* Invoking psmandup:: Command Line Interface 509 510 511File: a2ps.info, Node: Invoking psmandup, Prev: psmandup, Up: psmandup 512 513Invoking `psmandup' 514------------------- 515 516 psmandup [OPTIONS] [FILE] 517 518produce a manual duplex version of the PostScript FILE (or of the 519standard input if no FILE is given, or if FILE is `-'). Once the first 520half is printed, put the sheet stack in the manual feed tray for the 521second half(1). 522 523 Be aware that there is a time out for manually fed jobs, usually 524short, hence do not miss the moment when the printer asks for the 525stack. If ever you missed that moment, see option `--back' to recover 526the second half. 527 528 Supported options are: 529 530 - Option: -h 531 - Option: --help 532 print a short help message and exit successfully. 533 534 - Option: -V 535 - Option: --version 536 report the version and exit successfully. 537 538 - Option: -q 539 - Option: --quiet 540 - Option: --silent 541 Run silently. 542 543 - Option: -D 544 - Option: --debug 545 enter in debug mode. 546 547 - Option: -o FILE 548 - Option: --output=FILE 549 specify the FILE in which is saved the output. 550 551 - Option: -n 552 - Option: --no-fix 553 `psmandup' will fail on ill designed PostScript (well, actually the 554 psutils will). To avoid this, by default the PostScript file is 555 sanitized by `fixps'. 556 557 When given this option, don't run `fixps'. This is meant to be 558 used when `fixps' has already been used higher in the processing 559 chain. 560 561 - Option: -f 562 - Option: --front 563 Output only the front pages, with no special PostScript feature 564 request. 565 566 - Option: -b 567 - Option: --back 568 Output only the back pages, with a manual feed request. 569 570 This option is especially useful when the manual feed time out 571 expired before you could insert back the stack in the manual feed 572 tray. 573 574 `psmandup' assumes the printer is Level 2, and supports manual 575feeding. The FILE should be reasonably sane, otherwise `psmandup' 576fails miserably. 577 578 Typical use is 579 psmandup file.ps | lp 580 581or can be put into a2ps' printer commands (*note Your Printers::). 582 583 ---------- Footnotes ---------- 584 585 (1) Many people seem to ignore that you can insert *several* sheets 586in the manual feed tray. Try at least once, it will save you from 587hours spent feeding page per page by hand! 588 589 590File: a2ps.info, Node: psset, Prev: psmandup, Up: Contributions 591 592`psset' 593======= 594 595 The shell script `psset' inserts calls to `setpagedevice' in a 596PostScript file. This is useful for instance to add Tumble or Manual 597feed request. Actually, `psmandup' uses `psset'. 598 599 You should know nevertheless that a2ps is able to make the calls to 600`setpagedevice' by itself, i.e., you can run `a2ps -SManualFeed foo' to 601print `foo' onto the manually fed tray, or run `a2ps -s2 foo' to print 602Duplex. There are no need of `psset' from a2ps. 603 604* Menu: 605 606* Invoking psset:: Command Line Interface 607 608 609File: a2ps.info, Node: Invoking psset, Prev: psset, Up: psset 610 611Invoking `psset' 612---------------- 613 614 psset [OPTIONS] [FILE] 615 616produce a version of the PostScript FILE (or of the standard input if 617no FILE is given, or if FILE is `-') that makes protected calls to the 618PostScript operator `setpagedevice'. Typical use is making FILE print 619duplex, or on the manual tray etc. 620 621 The call is protected so that the resulting file is safe, i.e., will 622still be portable, even with requests such as `-Sfoo:bar'. 623 624 It is safe to run `psset' with no feature requests. Depending upon 625the option `--no-fix', it is either equivalent to doing nothing, or to 626running `fixps' (*note fixps::). 627 628 Supported options are: 629 630 - Option: -h 631 - Option: --help 632 Print a short help message and exit successfully. 633 634 - Option: -V 635 - Option: --version 636 report the version and exit successfully. 637 638 - Option: -D 639 - Option: --debug 640 enter in debug mode. 641 642 - Option: -q 643 - Option: --quiet 644 - Option: --silent 645 Run silently. 646 647 - Option: -o FILE 648 - Option: --output=FILE 649 specify the FILE in which is saved the output. 650 651 - Option: -n 652 - Option: --no-fix 653 `psset' will fail on ill designed PostScript. Actually it is the 654 psutils that fail. To avoid this, by default the PostScript file 655 is sanitized by `fixps'. 656 657 When given this option, don't run `fixps'. This is meant to be 658 used when `fixps' has already been used higher in the processing 659 chain. 660 661 - Option: -S KEY:VALUE 662 - Option: --setpagedevice=KEY:VALUE 663 Insert a `setpagedevice' call setting KEY to VALUE. Multiple 664 values accumulate. Lists of requests separated with `;' are valid 665 (e.g., `-SDuplex:true;Tumble:false'). 666 667 - Option: -a PAGE 668 - Option: --at=PAGE 669 Specify the page where the `setpagedevice' call should be done. 670 The PAGE 0, which is the default, corresponds to the `Setup' 671 section of the document. More precisely, the insertion is 672 performed at the end of the `Setup' section, so that if there are 673 multiple calls to `psset' on the same document (which is of 674 course, a bad idea), the last call is winning. 675 676 In a typical use you should not change the PAGE. 677 678 - Option: -m 679 - Option: --manualfeed 680 Alias for `-SManualFeed:true', i.e., the request to print using the 681 manual feed tray. 682 683 - Option: -s 684 - Option: --simplex 685 Alias for `-SDuplex:false', i.e., force simplex printing. 686 687 - Option: -d 688 - Option: --duplex 689 Alias for `-SDuplex:true;Tumble:false', i.e., the request to print 690 in duplex mode, binding along the long edge of the paper. 691 692 - Option: -t 693 - Option: --tumble 694 Alias for `-SDuplex:true;Tumble:true', i.e., duplex printing such 695 that binding should happen on the short edge of the medium. 696 697 698File: a2ps.info, Node: FAQ, Next: Glossary, Prev: Contributions, Up: Top 699 700Frequently asked questions 701************************** 702 703 Please, before sending us mail, make sure the problem you have is not 704known, and explained. Moreover, avoid using the mailing list for asking 705question about the options, etc. It has been built for announces and 706suggestions, not to contact the authors. 707 708* Menu: 709 710* Why Does ...?:: Questions on Error 711* How Can I ...?:: a2ps' How-To 712* Please tell me...:: Existential Questions on a2ps 713 714 715File: a2ps.info, Node: Why Does ...?, Next: How Can I ...?, Prev: FAQ, Up: FAQ 716 717Why Does...? 718============ 719 720 Error related questions. 721 722* Menu: 723 724* It Prints Nothing:: The printer issues nothing 725* It Prints in Simplex:: While I asked for Duplex 726* It Prints in Duplex:: While I asked for Simplex 727* It Does Not Fit on the Paper:: Some parts are missing 728* It Prints Junk:: Random characters 729* It Says my File is Binary:: And refuses to print it 730* It Refuses to Change the Font Size:: 731 732 733File: a2ps.info, Node: It Prints Nothing, Next: It Prints in Simplex, Prev: Why Does ...?, Up: Why Does ...? 734 735Why Does it Print Nothing? 736-------------------------- 737 738 a2ps works OK, but the printer prints nothing. 739 740 There are two ways that printing can fail: silently, or with a 741diagnostic. 742 743 First, *check that the printer received what you sent*. a2ps may 744correctly do its job, but have the printer queue fail to deliver the 745job. In case of doubt, please check that the printer's leds blink (or 746whatever is its way to show that something is being processed). 747 748 If the printer does receive the job, but prints nothing at all, check 749that you did not give exotic options to an old printer (typically, avoid 750printing on two sides on a printer that does not support it). Avoid 751using `-S', `--setpagedevice' (*note Page Device Options::) and 752`--statusdict' (*note Statusdict Options::). 753 754 If the trouble persists, please try again but with the option 755`--debug' (a PostScript error handler is downloaded), and then send us: 756 1. the input file that gives problems 757 758 2. the output file created by a2ps *with the option `--debug'* 759 760 3. the error message that was printed. 761 762 763File: a2ps.info, Node: It Prints in Simplex, Next: It Prints in Duplex, Prev: It Prints Nothing, Up: Why Does ...? 764 765Why Does it Print in Simplex? 766----------------------------- 767 768 Though I ask a2ps to print Duplex via `--sides', the job is 769 printed Simplex. 770 771 If your printer is too old, then a2ps will not be able to send it the 772code it needs when `-s2' is specified. This is because your printer 773uses an old and not standardized interface for special features. 774 775 So you need to 776 1. specify that you want Duplex mode: `-s2', 777 778 2. remove by hand the standardized call to the Duplex feature: 779 `-SDuplex', 780 781 3. add the non standard call to Duplex. Try 782 `--statusdict=setduplexmode:true'. 783 784 Since this is painful to hit, a User Option (*note Your Shortcuts::) 785should help. 786 787 788File: a2ps.info, Node: It Prints in Duplex, Next: It Does Not Fit on the Paper, Prev: It Prints in Simplex, Up: Why Does ...? 789 790Why Does it Print in Duplex? 791---------------------------- 792 793 Though I ask a2ps to print Simplex via `--sides', the job is 794 printed Duplex. 795 796 Actually when you require Simplex, a2ps issues nothing, for 797portability reasons. Hence, if your printer is defaulted to Duplex, 798the job will be Duplexed. So you have to force a2ps to issue the 799Simplex request with `-SDuplex:false'. The user options `-=s1' and 800`-=simplex' have names easier to remember. 801 802 In the next version of a2ps this kind of portability problems will be 803fixed in a user friendly way. 804 805 806File: a2ps.info, Node: It Does Not Fit on the Paper, Next: It Prints Junk, Prev: It Prints in Duplex, Up: Why Does ...? 807 808Why Does it Not Fit on the Paper? 809--------------------------------- 810 811 When I print text files with a2ps, it prints beyond the frame of 812 the paper. 813 814 You are most probably printing with a bad medium, for instance using 815A4 paper within a2ps, while your printer uses Letter paper. Some jet 816printers have a small printable area, and a2ps may not expect it. In 817both case, read *Note Sheet Options::, option `--medium' for more. 818 819 820File: a2ps.info, Node: It Prints Junk, Next: It Says my File is Binary, Prev: It Does Not Fit on the Paper, Up: Why Does ...? 821 822Why Does it Print Junk? 823----------------------- 824 825 What I get on the printer is long and incomprehensible. It does 826 not seem to correspond to what I wanted to print. 827 828 You are probably printing a PostScript file or equivalent. Try to 829print with `-Z': a2ps will try to do his best to find what is the 830program that can help you (*note Your Delegations::). In case of doubt, 831don't hesitate to save into a file, and check the content with 832`Ghostview', or equivalent: 833 $ a2ps my_weird_file -Z -o mwf.ps 834 $ gv mwf.ps 835 836If your a2ps is correctly installed, you can use the `display' 837fake-printer: 838 $ a2ps my_weird_file -Z -P display 839 840 If it is incorrect, ask for help around you. 841 842 843File: a2ps.info, Node: It Says my File is Binary, Next: It Refuses to Change the Font Size, Prev: It Prints Junk, Up: Why Does ...? 844 845Why Does it Say my File is Binary? 846---------------------------------- 847 848 a2ps complains that my file is binary though it is not. 849 850 There are several reasons that can cause a2ps to consider a file is 851binary: 852 - there are many non printable characters in the file. Then you 853 need to use the option `--print-anyway'. 854 855 - the file is sane, composed of printable characters. Then it is 856 very likely that `file(1)' said the type of the file is `data', in 857 which case a2ps prefers not to print the file. Then you can 858 either: 859 - specify the type of the file, for instance `-Eplain'; 860 861 - specify to print in any case, `--print-anyway'; 862 863 - remove the annoying rule from the system's `sheets.map': 864 binary: <data*> 865 866 - insert in your own `~/.a2ps/sheets.map' a rule that overrides 867 that of the system's `sheets.map': 868 # Load the system's sheets.map 869 include(/usr/local/share/a2ps/sheets/sheets.map) 870 871 # Override the rule for files with type `data' according to file(1) 872 plain: <data*> 873 874 But this is not very good, since then this rule is always the 875 first tested, which means that any file with type `data' 876 according to `file(1)' will be printed in `plain' style, even 877 if the file is called `foo.c'. 878 879 - if your files can be recognized, insert a new rule in a 880 `sheets.map', such as 881 # file(1) says it's data, but it's pure text 882 plain: /*.txx/ 883 884 885 886 887File: a2ps.info, Node: It Refuses to Change the Font Size, Prev: It Says my File is Binary, Up: Why Does ...? 888 889Why Does it Refuse to Change the Font Size 890------------------------------------------ 891 892 _a2ps does not seem to honor `--font-size' (or 893 `--lines-per-page', or `--chars-per-line')._ 894 895 This is probably because you used `-1'..`-9' after the 896`--font-size'. This is wrong, because the options `-1'..`-9' set the 897font size (so that there are 80 characters per lines), and many other 898things (*Note Page Options::, option `--font-size'). 899 900 Hence `a2ps --font-size=12km -4' is exactly the same thing as `a2ps 901-4', but is different from `a2ps -4 --font-size=12km'. Note that the 902`pure' options (no side-effects) to specify the number of virtual pages 903are `--columns' and `--rows'. 904 905 906File: a2ps.info, Node: How Can I ...?, Next: Please tell me..., Prev: Why Does ...?, Up: FAQ 907 908How Can I ...? 909============== 910 911 A mini how-to on a2ps. 912 913* Menu: 914 915* Leave Room for Binding:: Specifying Margins 916* Print stdin:: Using a2ps in a pipe chain 917* Change the Fonts:: Tired of Courier? 918* The Old Option -b?:: Printing in Bold 919* Pass Options to lpr:: Disable the banner 920* Non PostScript Printers:: Using GhostScript 921* Man Pages with Underlines:: Now it Prints With Italics 922 923 924File: a2ps.info, Node: Leave Room for Binding, Next: Print stdin, Prev: How Can I ...?, Up: How Can I ...? 925 926How Can I Leave Room for Binding? 927--------------------------------- 928 929 The option `--margin[=SIZE]' is meant for this. See *Note Sheet 930Options::. 931 932 933File: a2ps.info, Node: Print stdin, Next: Change the Fonts, Prev: Leave Room for Binding, Up: How Can I ...? 934 935How Can I Print `stdin'? 936------------------------ 937 938 a2ps prints the standard input if you give no file name, or if you 939gave `-' as file name. Automatic style selection is of course much 940weaker: without the file name, a2ps can only get `file(1)''s opinion 941(*note Style Sheet Files::). In general it means most delegations are 942safe, but there will probably be no pretty-printing. 943 944 `You' can supply a name to the standard input (`--stdin=NAME') with 945which it could guess the language. 946 947 948File: a2ps.info, Node: Change the Fonts, Next: The Old Option -b?, Prev: Print stdin, Up: How Can I ...? 949 950How Can I Change the Fonts? 951--------------------------- 952 953 *Note Designing PostScript Prologues::, for details. Make sure that 954all the information a2ps needs is available (*note Font Files::). 955 956 957File: a2ps.info, Node: The Old Option -b?, Next: Pass Options to lpr, Prev: Change the Fonts, Up: How Can I ...? 958 959How Can I Simulate the Old Option `-b'? 960--------------------------------------- 961 962 By the past, a2ps had an option `-b' with which the fonts were bold. 963Since now the fonts are defined by prologues (*note Designing 964PostScript Prologues::) this option no longer makes sense. A 965replacement prologue is provided: `bold'. To use it, give the option 966`--prologue=bold'. 967 968 969File: a2ps.info, Node: Pass Options to lpr, Next: Non PostScript Printers, Prev: The Old Option -b?, Up: How Can I ...? 970 971How Can I Pass Options to `lpr' 972------------------------------- 973 974 How can I tell `a2ps' to ask `lpr' no to print the banner? 975 976 How can I pass specific options to `lp'? 977 978 If your `Printer:' fields in the configuration files were properly 979filled (*note Your Printers::), you can use the variable `lp.options' 980to pass options to `lpr' (or `lp', depending on your environment): 981 982 a2ps -Dlp.options="-h -s" -P printer 983 984You can also define `lp.options' once for all, *Note Defining 985Variables::. 986 987 Finally, you can use `Printer:' several times to reach a printer 988with different `lpr' options. 989 990 991File: a2ps.info, Node: Non PostScript Printers, Next: Man Pages with Underlines, Prev: Pass Options to lpr, Up: How Can I ...? 992 993How Can I Print on Non PostScript Printers? 994------------------------------------------- 995 996 I use a2ps at work and wish to use it at home, but my printer is 997 not PostScript. How can I do? 998 999 `Ghostscript' might be the tool you need (*note Glossary::). It 1000support conversion to many different non PostScript printers. 1001 1002 Here are some tips on how to use a non PostScript printer. If 1003somebody feels like writing a more precise documentation, she really is 1004welcome. 1005 1006 Please refer to the `Ghostscript' documentation for a precise 1007description of the tuning you need. 1008 1009 Basically, the first step you need is to achieve to call 1010`Ghostscript' in a pipe chain. In other words, try to find out the 1011right arguments `Ghostscript' needs in order to print with a command 1012like this: 1013 $ cat file.ps | gs MORE ARGUMENTS 1014 1015 In general it is the same command as for calling `Ghostscript' with 1016a filename, except that the file name to use is `-': 1017 $ cat file.ps \ 1018 | gs -q -dNOPAUSE -sDEVICE=deskjet -sOutputFile=- - -c quit\ 1019 | lp -dPRINTER-NAME 1020 1021 Once it works, it is then easy to settle the right `Printer:' line 1022in your configuration file (*note Your Printers::). For instance: 1023 Printer: djet \ 1024 | gs -q -dNOPAUSE -sDEVICE=deskjet -sOutputFile=- - -c quit\ 1025 | lp -d djet 1026 1027 Christian Mondrup <scancm@biobase.dk> uses a2ps under Windows with a 1028non PostScript printer. He uses: 1029 DefaultPrinter: | //c/gstools/gs5.10/Gswin32c.exe \ 1030 -Ic:\gstools\gs5.10;c:\gstools\gs5.10\fonts \ 1031 -sDEVICE=ljet4 -sPAPERSIZE=a4 -dNOPAUSE -r300 -dSAFER \ 1032 -sOutputFile="\\spool\HP LaserJet 5L (PCL)" \ 1033 -q - -c quit 1034 1035 1036File: a2ps.info, Node: Man Pages with Underlines, Prev: Non PostScript Printers, Up: How Can I ...? 1037 1038How Can I Print Man Pages with Underlines 1039----------------------------------------- 1040 1041 By the past, when I printed a man page with a2ps, it used 1042 underlines, but now it uses italics. I want underlines back! 1043 1044 Use `a2ps --pro=ul'. 1045 1046 1047File: a2ps.info, Node: Please tell me..., Prev: How Can I ...?, Up: FAQ 1048 1049Please tell me... 1050================= 1051 1052 Wondering something? 1053 1054* Menu: 1055 1056* Is a2ps Y2K compliant?:: Printing dates in short format 1057* The Options Have Changed:: Respect The Users 1058* Why not using yacc:: Why Using Style Sheets 1059 1060 1061File: a2ps.info, Node: Is a2ps Y2K compliant?, Next: The Options Have Changed, Prev: Please tell me..., Up: Please tell me... 1062 1063Is a2ps Y2K compliant? 1064---------------------- 1065 1066 The famous Y2K(1) problem... 1067 1068 Yes, a2ps is Y2K compliant... provided that you have either a version 1069more recent than 4.10.3. The expansions of the following escapes were 1070broken (giving `100' instead of `00'): `%D', `%W', `$D', `$W'. 1071 1072 Nevertheless, please note that if you required a two digit year, 1073expect to have `Jan 1st, 00' someday. *You* are responsible of the 1074format you want for the date: *Note Escapes::. 1075 1076 ---------- Footnotes ---------- 1077 1078 (1) Year 2000. 1079 1080 1081File: a2ps.info, Node: The Options Have Changed, Next: Why not using yacc, Prev: Is a2ps Y2K compliant?, Up: Please tell me... 1082 1083Why Have the Options Changed? 1084----------------------------- 1085 1086 The options of this a2ps are not the same as in the previous 1087 versions. 1088 1089 True. But the old scheme (up to version 4.6.1) prevented us from 1090offering more options. We *had* to drop it, and to fully redesign the 1091options handling. 1092 1093 Since that profound change, we try to change as little as possible 1094between versions. Nevertheless, as the time passes, we discover that 1095some never used options should be renamed, or used for something else. 1096In these cases, compatibility code is left for a long time. 1097 1098 Anywhere you put options but the command line (e.g., in a2ps 1099configuration files or in shell scripts), *avoid using short options*, 1100since short options are much more likely to be changed (there are not 1101so many, so it is a precious resource). Since there are as many long 1102options as one wants, we can leave compatibility code with the long 1103options. 1104 1105 1106File: a2ps.info, Node: Why not using yacc, Prev: The Options Have Changed, Up: Please tell me... 1107 1108Why not having used `yacc' and such 1109----------------------------------- 1110 1111 There are several reasons why we decided not to use grammars to parse 1112the files. Firstly it would have made the design of the style sheets 1113much more tricky, and today a2ps would know only 4 or 5 languages. 1114 1115 Secondly, it limits the number of persons who could build a style 1116sheet. 1117 1118 Thirdly, we did not feel the need for such a powerful tool: handling 1119the keywords and the sequences is just what the users expect. 1120 1121 Fourthly, any extension of a2ps would have required to recompile. 1122 1123 And last but not least, using a parser requires that the sources are 1124syntactic bug free, which is too strong a requirement. 1125 1126 Nevertheless, `PreScript' gives the possibility to have on the one 1127hand a syntactic parser which would produce `PreScript' code, and on 1128the other hand, a2ps, which would make it PostScript. This schema 1129seems to us a good compromise. If it is still not enough for you, you 1130can use the library. 1131 1132 1133File: a2ps.info, Node: Glossary, Next: Genesis, Prev: FAQ, Up: Top 1134 1135Glossary 1136******** 1137 1138 This section settles some terms used through out this document, and 1139provides the definitions of some terms you probably want to know about. 1140 1141"Adobe" 1142 Adobe is the firm who designed and owns the PostScript language. 1143 The patent that printer manufacturers must pay to Adobe is the 1144 main reason why PostScript printers are so expansive. 1145 1146"AFM file" 1147 AFM stands for Adobe Font Metrics. These files contain everything 1148 one needs to know about a font: the width of the characters, the 1149 available characters etc. 1150 1151"Charset" 1152"Code Set" 1153 Cf. Encoding. 1154 1155"Delegate" 1156 Another filter (application) which a2ps may call to process some 1157 files. This feature is especially meant for page description 1158 files (*note Your Delegations::). 1159 1160"DSC" 1161"Document Structuring Conventions" 1162 Because PostScript is a language, any file describing a document 1163 can have an arbitrary complexity. To ease the post-processing of 1164 PostScript files, the document should follow some conventions. 1165 Basically there are two kinds of conventions to follow: 1166 Page Independence 1167 Special comments state where the pages begin and end. With 1168 these comments (and the fact that the code describing a page 1169 starts and ends somewhere, which is absolutely not necessary 1170 in PostScript), very simple programs (such as `psnup', 1171 `psselect' etc.) can post process PostScript files. 1172 1173 Requirements 1174 Special features may be needed to run correctly the file. 1175 Some comments specify what services are expected from the 1176 printer (e.g., fonts, duplex printing, color etc.), and other 1177 what features are provided by the file itself (e.g., fonts, 1178 procsets etc.), so that a print manager can decide that a 1179 file cannot be printed on that printer, or that it is 1180 possible if the file is slightly modified (e.g., adding a 1181 required font not known by the printer) etc. 1182 1183 The DSC are edited by Adobe. A document which respects them is 1184 said to be "DSC conformant". 1185 1186 a2ps follows all the DSC. 1187 1188"Duplex" 1189"DuplexTumble" 1190"DuplexNoTumble" 1191 To print "Duplex" is to print double-sided. There are two ways to 1192 print Duplex depending whether the second face is printed 1193 upside-down or not: 1194 "DuplexTumble" 1195 DuplexTumble is suitable when (if it were to be bound) the 1196 document would be bound along the short edge (for instance 1197 when you are printing booklets). 1198 1199 "DuplexNoTumble" 1200 DuplexNoTumble corresponds to binding along the long edge of 1201 the medium. A typical case is when printing one-up. 1202 1203"Encoding" 1204 Association of human readable characters, and computers' internal 1205 numbered representation. In other words, they are the alphabets, 1206 which are different according to your country/mother tongue. 1207 E.g.: ASCII, Latin 1, corresponding to Western Europe etc. 1208 1209 To know more about encodings, see *Note What is an Encoding::. 1210 1211"`Ghostscript'" 1212 1213"`gs'" 1214 `Ghostscript' (http://www.cs.wisc.edu/~ghost/index.html), `gs' for 1215 short, is a full PostScript interpreter running under many various 1216 systems (Unices, MS-DOS, Mac etc.). It comes with a large set of 1217 output formats allowing many different applications: 1218 _Displaying_ 1219 It can be used either to view PostScript files (in general 1220 thanks to a graphic interface such as `Ghostview' or `gv' 1221 ...). 1222 1223 _Converting_ 1224 To may useful languages/formats: PDF, rewriting in portable 1225 PostScript or Encapsulated PS etc. 1226 1227 _Translating_ 1228 to a printer dedicated language, e.g., PCL. In particular, 1229 thanks to `ghostscript', you may print PostScript files on 1230 non PostScript printers. 1231 1232"Face" 1233 A virtual style given to some text. For instance, _Keyword_, 1234 _Comment_ are faces. 1235 1236"Headings" 1237 Everything that goes around the page and is not part of the text 1238 body. Typically the title, footer etc. 1239 1240"Key" 1241 Many objects used in a2ps, such as encodings, have both a key and 1242 a name. The word "name" is used for a symbol, a label, which is 1243 only meant to be nice to read by a human. For instance `ISO Latin 1244 1' is a name. a2ps never uses a name, but the key. 1245 1246 A "key" is the identifier of a unique object. This is information 1247 that a2ps processes, hence, whenever you need to specify an object 1248 to a2ps, use the key, not its name. For instance `latin1' is the 1249 unique identifier of the `ISO Latin 1' encoding. 1250 1251"Logical page" 1252 Cf. Virtual page. 1253 1254"lhs" 1255"left hand side" 1256 See "P-rule". 1257 1258"Medium" 1259 Official name (by Adobe) given to the output physical support. In 1260 other words, it means the description of a sheet, e.g., A4, Letter 1261 etc. 1262 1263"Name" 1264 See "Key". 1265 1266"Page" 1267 A single side of a sheet. 1268 1269"Page Description Language" 1270 A language that describes some text (which may be enriched with 1271 pointers, pictures etc.) and its layout. `HTML', PostScript, 1272 LaTeX, `roff' and others are such languages. A file written in 1273 those languages is not made to be read as is by a human, but to be 1274 transformed (or compiled) into a readable form. 1275 1276"PCL" 1277 FIXME: 1278 1279"PFA file" 1280 PostScript Font in ASCII format. This file can be directly down 1281 loaded to provide support for another font. 1282 1283"PFB file" 1284 PostScript Font in Binary format. In PFA files there are long 1285 sequences of hexadecimal digits. Here these digits are 1286 represented by their value, hence compressing 2 characters in a 1287 PFA into 1 in the PFB. This is the only advantage since a PFB 1288 file cannot be directly sent to printer: it must first be 1289 decompressed (hence turned into a PFA file) before being used. 1290 1291"PostScript" 1292 "PostScript" is a page description language designed for _Raster 1293 output devices_. It is even more powerful than that: unlike to 1294 `HTML', or `roff', but as TeX and LaTeX, it is truly a programming 1295 language which main purpose is to draw (on sheets). Most programs 1296 are a list of instructions that describes lines, shades of gray, 1297 or text to draw on a page. This is the language that most 1298 printers understand. 1299 1300 Note that the fact that PostScript is a programming language is 1301 responsible of both its success and its failure. It is a big win 1302 for the PostScript programmer who can easily implement a lot of 1303 nice visual effects. It is a big loss because the page 1304 descriptions can have an arbitrary complexity, hence rendering can 1305 be really slow (remember the first Laser you had, or even 1306 `Ghostscript'. `PDF' has been invented by Adobe to remedy these 1307 problems). 1308 1309 PostScript is a trademark of Adobe Systems Incorporated. 1310 1311"PPD file" 1312"PostScript Printer Description file" 1313 These files report everything one needs to know about a printer: 1314 the known fonts, the patches that should be down loaded, the 1315 available memory, the trays, the way to ask it duplex printing, 1316 the supported media, etc. 1317 1318 PostScript has pretended to be a device independent page 1319 description language, and the PPD files are here to prove that 1320 device independence was a failure. 1321 1322"ProcSet" 1323 Set of (PostScript) procedures. 1324 1325"Prologue" 1326 PostScript being a language, a typical PostScript program (i.e. a 1327 typical PostScript file) consists of two parts. The first part is 1328 composed of resources, such as fonts, procsets, etc. and the 1329 second part of calls to these procedures. The first part is 1330 called the "prologue", and the second, the "script". 1331 1332"P-rule" 1333 Pretty printing rule. It is composed of a "left-hand side", 1334 ("lhs" for short), and a "right-hand side", ("rhs"). The lhs 1335 describes when the rule is triggered (i.e., the pattern of text to 1336 match), and the rhs specifies the pretty printed output. *Note 1337 P-Rules::, for more semantical details, and see *Note Syntax for 1338 the P-Rules::, for implementation. 1339 1340"`psutils'" 1341 The "psutils" 1342 (http://www.dcs.ed.ac.uk/home/ajcd/psutils/index.html) is a set of 1343 tools for PostScript post processing written by Angus Duggan 1344 (http://www.dcs.ed.ac.uk/home/ajcd/). They let you resize the 1345 frame into which the page is drawn, reorder or select pages, put 1346 several pages onto a single sheet, etc. To allow the `psutils' to 1347 run correctly, the PostScript files must be DSC conformant, and 1348 the bad news is that many PostScript drivers produce files which 1349 are not. For some common cases (e.g., Micro$oft tools), Angus 1350 Duggan included in the package some tools (named `fix...ps') to 1351 fix typical problems. `fixps' is a collection of recipes on when 1352 to run what `fix' tool. 1353 1354"Raster Image Processor" 1355"RIP" 1356 The hardware and/or software that translates data from a high-level 1357 language (e.g., PostScript) into dots or pixels in a printer or 1358 image setter. 1359 1360"Raster Output Device" 1361 Behind these words is hidden the general class of devices which 1362 have Pixels that can be addressed individually: Laser, Ink or Dot 1363 printers, but also regular screens etc. It is typically opposed 1364 to the class of devices which _plot_, i.e., have a pen that they 1365 move on the paper. 1366 1367"rhs" 1368"right hand side" 1369 See "P-rule". 1370 1371"RIP" 1372 See "Raster Image Processor". 1373 1374"Script" 1375 See "Prologue". 1376 1377"Sheet" 1378 The physical support of the printing: it may support one or two 1379 pages, depending on your printing options. 1380 1381"Style sheet" 1382 Set of rules used by a2ps to give a face to the strings of a file. 1383 In a2ps, each programming language which is supported is defined 1384 via one style-sheet. 1385 1386"Tumble" 1387 See "Duplex". 1388 1389"Virtual page" 1390 Area on a physical page in which a2ps draws the content of a file. 1391 There may be several virtual pages on a physical page. ("virtual 1392 page" is the name recommended by Adobe). 1393 1394 1395File: a2ps.info, Node: Genesis, Next: Copying, Prev: Glossary, Up: Top 1396 1397Genesis 1398******* 1399 1400 Here are some words on a2ps and its history. 1401 1402* Menu: 1403 1404* History:: Where does it come from 1405* Thanks:: People who really helped 1406* Translators:: People who brought support of your tongue 1407 1408 1409File: a2ps.info, Node: History, Next: Thanks, Prev: Genesis, Up: Genesis 1410 1411History 1412======= 1413 1414 The initial version was a shell program written by Evan Kirshenbaum 1415<evan@csli>. It was very slow and contained many bugs. 1416 1417 A new version was written in `C' by Miguel Santana 1418<Miguel.Santana@st.com> to improve execution speed and portability. 1419Many new features and improvements have been added since this first 1420version. Many contributions (changes, fixes, ideas) were done by 1421a2ps users in order to improve it. 1422 1423 From the latest version from Miguel Santana (4.3), Emmanuel Briot 1424implemented bold faces for keywords in `Ada', `C' and `C++'. 1425 1426 From that version, Akim Demaille <akim@freefriends.org> generalized 1427the pretty-printing capabilities, implemented more languages support, 1428and other features. 1429 1430 1431File: a2ps.info, Node: Thanks, Next: Translators, Prev: History, Up: Genesis 1432 1433Thanks 1434====== 1435 1436 Patrick Andries, from Alis Technologies inc. (http://www.alis.com/) 1437and Roman Czyborra (see his home page (http://czyborra.com/)), provided 1438us with important information on encodings. We strongly recommend that 1439you go and read these pages: there is a lot to learn. 1440 1441 Juliusz Chroboczek worked a lot on the integration of the products of 1442Ogonkify (such as Latin 2 etc. fonts) in a2ps. Without his help, and 1443the time is devoted to both a2ps and `ogonkify', many non west-European 1444people would still be unable to print easily texts written in their 1445mother tongue. 1446 1447 Denis Girou brought a constant and valuable support through out the 1448genesis of pretty-printing a2ps. His comments on both the program and 1449the documentation are the origin of many pleasant features (such as 1450`--prologue'). 1451 1452 Alexander Mai provided us with invaluable help in the development. 1453He spotted several times subtle bugs in a2ps and the contributions, he 1454keeps a vigilant eye on portability issues, he checks and improves the 1455style sheets, and he maintains a port of a2ps for OS/2. 1456 1457 Graham Jenkins, with an extraordinary regularity, tortures a2ps on 1458weird systems that nobody ever heard of `:)'. Graham is usually the 1459ultimate test: if he says I can release a2ps, I rest reassured that, 1460yes, this time it *will* compile! If a2ps works today on your system, 1461you should thank Graham too! 1462 1463 Of course this list is not up to date, and never will. We would 1464like to thank everybody that helped us, talked to us, and even 1465criticized us with the intention to help us to improve a2ps. Of course 1466it doesn't sound right, yes it sounds a little childish, but we can 1467tell you: we would *never* have the strength and the faith of building 1468and maintaining a2ps without the support of all these guys. 1469 1470 While a2ps is finally just a couple of bits on a hard disk, to us it 1471is an adventure we live with other humans, and, boy, that's a darn good 1472pleasure! 1473 1474