1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 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 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 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
|
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
<article>
<articleinfo>
<title>Linux Man Page Howto</title>
<author>
<firstname> Jens </firstname>
<surname> Schweikhardt</surname>
<affiliation>
<address><email>howto@schweikhardt.net</email></address>
</affiliation>
</author>
<author>
<firstname> Vertaald door: Ellen</firstname>
<surname> Bokhorst</surname>
<affiliation>
<address><email>bokkie@nl.linux.org</email></address>
</affiliation>
</author>
<othercredit role='converter'>
<firstname>Pradeep</firstname>
<surname>Padala</surname>
<contrib>Conversie van HTML naar DocBook v4.1.</contrib>
</othercredit>
<revhistory>
<revision>
<revnumber>0.1</revnumber>
<date>2002-09-07</date>
<authorinitials>ppadala</authorinitials>
<revremark>Conversie van HTML naar Docbook v4.1
</revremark>
</revision>
</revhistory>
<pubdate>v0.1, 2002-09-07</pubdate>
<abstract>
<para>$Id: Man-Page-NL.sgml,v 1.1.1.1 2004/03/21 21:02:25 cor Exp $</para>
<para>
<emphasis>
In deze HOWTO wordt uitgelegd wat je in gedachten moet houden wanneer je
on-line documentatie gaat schrijven, een zogenoemde manpage, die je
toegankelijk wilt maken via de opdracht <literal>man</literal>(1).
In dit document wordt naar een manual entry simpelweg gerefereerd als
een manpage, ongeacht de werkelijke lengte en zonder sexistische bedoelingen.
</emphasis>
</para>
</abstract>
</articleinfo>
<sect1 id="q1"><title>Een paar gedachten over documentatie</title>
<para>Waarom schrijven we documentatie? Domme vraag. Omdat we willen dat
anderen ons programma, onze bibliotheekfunctie of wat we dan ook hebben
geschreven en beschikbaar hebben gemaakt kunnen gebruiken. Maar het
schrijven van de documentatie is nog niet alles:
</para>
<itemizedlist>
<listitem>
<para>Documentatie moet toegankelijk zijn. Als het op een of andere
niet standaard lokatie is verborgen waar de aan documentatie gerelateerde
tools het niet kunnen vinden, hoe kan het dan zijn doel dienen?
</para>
</listitem>
<listitem>
<para>Documentatie moet betrouwbaar en accuraat zijn. Er is niets
ergerlijker dan het niet met elkaar overeenkomen van het functioneren
van het programma en de beschrijving van de documentatie. Gebruikers
zullen je vervloeken, je hatelijke mail sturen en je werk de prullenbak
in werpen, met de vastbesloten bedoeling nooit meer iets geschreven
door die stommeling te installeren.
</para>
</listitem>
</itemizedlist>
<para>De historische en welbekende wijze om onder UNIX documentatie
te benaderen is via de opdracht man(1). In deze HOWTO is beschreven
wat je moet doen om een manpage te schrijven die correct door de
aan documentatie gerelateerde tools wordt verwerkt. De belangrijkste
tools hiervan zijn <literal>man</literal>(1), <literal>xman</literal>(1x),
<literal>apropos</literal>(1), <literal>makewhatis</literal>(8) en
<literal>catman</literal>(8). De betrouwbaarheid en accuraatheid van
de informatie is natuurlijk geheel aan jou. Maar zelfs dit in
aanmerking genomen zul je hieronder
<link linkend="q9">een aantal ideeën</link> aantreffen die je
helpen een aantal valkuilen te voorkomen.
</para>
</sect1>
<sect1 id="q2"><title>Hoe worden manpages benaderd?</title>
<para>Je moet bekend zijn met het precieze mechanisme voor het benaderen
van manpages om aan je manpage de juiste naam toe te kennen en het op de
juiste lokatie te installeren. Elke manpage moet in een specifieke
sectie worden gecatalogiseerd, welke wordt aangeduid door een enkel teken.
De meest gebruikelijke secties en de voor mensen leesbare namen zijn onder
Linux:
</para>
<programlisting>
Sectie De voor mensen leesbare naam
1 Gebruikersopdrachten die door iedereen kunnen worden opgestart
2 Systeemaanroepen, d.w.z. functies waarin voorzien door de kernel.
3 Subroutines, d.w.z. libraryfuncties.
4 Devices, d.w.z., speciale bestanden in de directory /dev.
5 Beschrijvingen van bestandsformaten, b.v. /etc/passwd.
6 Spellen, spreekt voor zich.
7 Diversen, b.v. macropackages, conventies.
8 Systeembeheertools die alleen root kan uitvoeren.
9 Een andere (Linux specifieke) plaats voor documentatie over kernelroutines.
n (Afgekeurd) Nieuwe documentatie, die kan worden verplaatst naar een
beter geschikte sectie.
o (Afgekeurd) Oude documentatie, die voor een gepaste periode kan worden
behouden.
l (Afgekeurd) Lokale documentatie refererend naar dit specifieke systeem.
</programlisting>
<para>De naam van het bronbestand van de manpage (de invoer voor het
opmaaksysteem) is de naam van de opdracht, functie of bestandsnaam,
gevolgd door een punt, gevolgd door het teken van de sectie.
Als je documentatie schrijft over de opmaak van het bestand passwd'
dan noem je het bronbestand `passwd.5'. Hier hebben we ook een
voorbeeld van een bestandsnaam die hetzelfde is als een opdrachtnaam.
Het kan zijn dat er zelfs een library subroutine is met de naam passwd.
De gebruikelijke wijze om deze dubbelzinnigheden op te lossen is het
onderverdelen in secties: De opdrachtbeschrijving is
te vinden in het bestand `passwd.1' en de hypothetische library
subroutine in `passwd.3'.</para>
<para>Soms worden extra tekens toegevoegd en krijg je bijvoorbeeld een
bestandsnaam als `xterm.1x' of `wish.1tk'. De
bedoeling hiervan is aan te geven dat dit documentatie is voor respectievelijk
een X Window programma of een Tk toepassing. Een aantal manual browsers
is in staat gebruik te maken van deze aanvullende informatie.
Bijvoorbeeld xman zal `xterm(x)' en `wish(tk)' gebruiken in de
lijst met beschikbare documentatie.
</para>
<para>Maak alsjeblieft geen gebruik van de secties n, o en l; volgens de
File System Standard zijn deze secties afgekeurd. Houd je aan
de numerieke secties. Wees je bewust van naamsaanvaringen met bestaande
programma's, functies of bestandsnamen. Het is beslist geen goed idee om
nog een andere editor te schrijven en het ed, sed (voor smart ed) of
red (voor Rocky's ed) te noemen. Door ervoor te zorgen dat de naam
van je programma uniek is, voorkom je dat iemand jouw programma uitvoert
en de manpage van iemand anders leest, of andersom.
</para>
<para>Nu weten we in ieder geval welke naam we ons bestand moeten geven.
De volgende beslissing die moet worden genomen is de directory waarin het
uiteindelijk zal worden geïnstalleerd (stel wanneer de gebruiker
`<literal>make install</literal>' toepast op je package.)
Onder Linux staan alle manpages onder directory's die zijn weergegeven in
de omgevingsvariabele MANPATH. De aan documentatie gerelateerde tools
gebruiken MANPATH op dezelfde wijze als de shell PATH gebruikt om
uitvoerbare bestanden te lokaliseren. In feite heeft MANPATH hetzelfde
formaat als PATH. Elk bevat een door dubbele punten gescheiden lijst
met directory's (met als uitzondering dat MANPATH geen lege velden en
relatieve padnamen toestaat, het maakt alleen gebruik van absolute
namen).
Als MANPATH niet is ingesteld of geëxporteerd, dan zal een standaardwaarde
worden gebruikt waarin op z'n minst de directory /usr/man is opgenomen.
Voor het versnellen van het zoeken en het klein houden van directory's bevatten
de directory's gespecificeerd door MANPATH (de zogenoemde basisdirectory's)
een boel subdirectory's met de naam `man<s>' waarbij
<s> staat voor de sectietoekenning van één teken
geïntroduceerd in <link linkend="q2">bovenstaande tabel</link>.
Het kan zijn dat niet alle secties worden voorgesteld door een subdirectory
omdat er simpelweg geen reden is om een lege `mano' subdirectory bij
te houden.
Er kunnen echter directory's voorkomen met de namen `cat<s>',
`dvi<s>' en `ps<s>' waarin documentatie wordt
bewaard die klaar is voor de weergave of om af te drukken. Hierover later
meer. Het enige andere bestand in een basisdirectory zou een bestand met
de naam `whatis' mogen zijn. Het doel en de aanmaak van dit bestand
zal ook in <link linkend="q12">paragraaf 12)</link> worden beschreven.
De veiligste wijze om een manpage voor sectie <s> op de juiste lokatie
te hebben geïnstalleerd, is door het te plaatsen in de directory
/usr/man/man<s>. Een goede <literal>Makefile</literal>, echter,
zal de mogelijkheid bieden dat de gebruiker een basisdirectory kan kiezen,
door middel van een <literal>make</literal> variabele, zoals bijvoorbeeld
MANDIR. De meeste GNU-packages kunnen worden geconfigureerd met de optie
<literal>--prefix=/wat/dan-ook</literal>. De manpages zullen dan onder
de basisdirectory /wat/dan-ook/man worden geïnstalleerd.
Ik raad je aan in iets vergelijkbaars te voorzien.</para>
<para>Met de komst van de Linux File System Standard (FS-Stnd),
werd 't allemaal wat gecompliceerder. [Noot: de FS-Stnd schijnt te worden
vervangen door de <ulink url="http://www.pathname.com/fhs/">Filesystem Hierarchy
Standard</ulink>, FHS.] De FS-Stnd 1.2 zet uiteen dat</para>
<para>"Voorzieningen moeten worden getroffen in de structuur van /usr/man
ter ondersteuning van manpages geschreven in andere (of meerdere) talen."
</para>
<para>Dit wordt bewerkstelligd door het introduceren van een ander
directoryniveau welk onderscheid maakt tussen de verschillende talen.
Nogmaals de FS-Stnd 1.2 aanhalend:
</para>
<para>"Deze benoeming van taalsubdirectory's van /usr/man is
gebaseerd op Appendix E van de POSIX 1003.1 standaard waarin de locale
identificatiestring wordt beschreven, de best geaccepteerde methode om
een culturele omgeving te beschrijven. De <locale> string is:
<taal>[_<gebied>][.<tekenset>][,<versie>]"</para>
<para>(Zie de FS-Stnd voor een paar algemene <locale> strings.)
Overeenkomstig deze richtlijnen staan onze manpages onder
/usr/man/<locale>/man[1-9lno]. De opgemaakte versies staan dan
natuurlijk in /usr/man/<locale>/cat[1-9lno], anders zouden we
ze alleen voor een enkele locale kunnen leveren. Ik kan je ECHTER thans niet
aanbevelen naar die structuur over te schakelen.
De FS-Stnd 1.2 staat ook toe dat</para>
<para>"Systemen die een unieke taal en codeset voor alle
manpages instellen, mogen de <locale> substring achterwege laten
en alle manpages opslaan in <mandir>. Systemen met bijvoorbeeld
alleen Engelstalige manpages gecodeerd in ASCII, mogen manpages
(de <literal>man[1-9]</literal> directory's) direct opslaan in /usr/man.
(Dat is in feite de traditionele omstandigheid en regeling.)
"</para>
<para>Ik zou niet overschakelen voordat alle tools (zoals xman, tkman, info
en vele anderen die manpages inlezen) met de nieuwe structuur overweg kunnen.
</para>
</sect1>
<sect1 id="q3"><title>Hoe hoort een opgemaakte manpage eruit te zien?</title>
<para>Laat me je een voorbeeld presenteren. Hieronder zal ik het in detail
uitleggen. Als je dit in gewone tekst leest, zal het de verschillende
lettertypen niet tonen (<emphasis>vet</emphasis> en
<emphasis>schuindruk</emphasis>). [TEDOEN: de nadruk en schuindruk
is verdwenen bij de conversie naar SGML/HTML; breng het terug.]
Raadpleeg alsjeblieft de paragraaf
"<link linkend="q8">Wat zijn de fontconventies?</link>" voor meer
uitleg. Hier is de manpage voor het (hypothetische)
<literal>foo</literal> programma.</para>
<programlisting>
FOO(1) Gebruikershandleidingen FOO(1)
NAAM
foo - frobnicate de bar library
SYNTAX
foo [-bar] [-c configuratiebestand ] bestand ...
BESCHRIJVING
foo frobnicates de bar library door interne symbooltabellen
aan te passen. Standaard verwerkt het alle baz segmenten en
herschikt ze in omgekeerde tijdsvolgorde wil de xyzzy(1)
linker ze kunnen vinden. De symdef entry wordt dan gecomprimeerd
gebruik makend van het WBG (Whiz-Bang-Gizmo) algoritme. Alle bestanden
worden in de opgegeven volgorde verwerkt.
OPTIES
-b Schrijf tijdens de verwerking geen `busy' meldingen naar stdout.
-c configuratiebestand
Gebruik het alternatieve systeemomvattende configuratiebestand
in plaats van /etc/foo.conf. Hiermee wordt de omgevingsvariabele
FOOCONF overschreven.
-a Verwerk in aanvulling op de baz segmenten ook de blurfl headers.
-r Recursieve modus. Functioneert zo snel als het licht ten koste
van een megabyte aan virtueel geheugen.
BESTANDEN
/etc/foo.conf
Het systeemomvattende configuratiebestand. Zie foo(5) voor
meer details.
~/.foorc
Configuratiebestand per gebruiker. Zie foo(5) voor meer
details.
OMGEVING
FOOCONF
Als het een waarde bevat de volledige padnaam voor een
alternatief systeemomvattend foo.conf. Wordt overschreven
door de optie -c.
DIAGNOSE
De volgende diagnoses kunnen op stderr worden uitgevoerd:
Onjuist magisch nummer.
Het invoerbestand lijkt niet op een archiefbestand.
baz segmenten in oude stijl.
foo kan alleen omgaan met baz segmenten in de nieuwe stijl. COBOL
objectlibrary's worden in deze versie niet ondersteund.
BUGS
De opdrachtnaam zou zorgvuldiger moeten zijn gekozen om zijn
doel weer te geven.
AUTEUR
Jens Schweikhardt <ulink url="mailto:howto@schweikhardt.net"><howto at schweikhardt dot net></ulink>
ZIE OOK
bar(1), foo(5), xyzzy(1)
Linux Last change: MAART 1995 2
</programlisting>
<para>Hier is de uitleg zoals ik beloofde.</para>
<para><emphasis>De sectie NAAM</emphasis></para>
<para>...is de enige vereiste sectie. Man pages zonder naamsectie
zijn zo bruikbaar als koelkasten op de noordpool. Deze sectie
heeft tevens een gestandaardiseerde opmaak bestaande uit een
door komma's gescheiden lijst met programma- of functienamen,
gevolgd door een koppelteken, gevolgd door een beknopte
(gewoonlijk bestaande uit een nregelige) beschrijving van de
functionaliteit die het programma (of de functie of het bestand)
wordt verondersteld te leveren. Door middel van
<literal>makewhatis</literal>(8), komen de naam secties terecht in
de <literal>whatis</literal> databasebestanden.
<literal>Makewhatis</literal> is de reden dat de naamsectie moet
voorkomen, en waarom het moet voldoen aan de hier beschreven opmaak.
In de <literal>groff</literal> broncode moet het er uitzien als</para>
<para><emphasis>.SH NAAM foo \- frobnicate de bar library</emphasis></para>
<para>De \- is hier van belang. De backslash is nodig om onderscheid
te kunnen maken tussen een koppelteken en een afbreekstreepje welk
in de opdrachtnaam of de nregelige beschrijving voor kan komen.
</para>
<para><emphasis>De sectie SYNTAX</emphasis></para>
<para>...is bedoeld voor een beknopt overzicht van beschikbare programma-opties.
Bij functies wordt in deze sectie een opsomming gegeven van corresponderende
include bestanden en het prototype zodat de programmeur het type en aantal
argumenten weet als ook het returntype.
</para>
<para><emphasis>De sectie BESCHRIJVING</emphasis></para>
<para>...legt welsprekend uit waarom je reeks nullen en énen ook
maar iets waard is. Hier schrijf je al je kennis neer.
Dit is je reputatie. Win de bewondering van andere programmeurs en
gebruikers door van deze sectie de bron met betrouwbare en gedetailleerde
informatie te maken. Geef uitleg over waar de argumenten voor dienen, de
bestandsopmaak, welke algoritmen het vuile werk opknappen.
</para>
<para><emphasis>De sectie OPTIES</emphasis></para>
<para>...geeft een beschrijving van hoe elke optie het functioneren van
het programma benvloedt. Dat wist je al, nietwaar?
</para>
<para><emphasis>De sectie BESTANDEN</emphasis></para>
<para>...een opsomming van bestanden die het programma of de functie gebruikt.
Hier staan bijvoorbeeld configuratiebestanden, opstartbestanden en
bestanden waar het programma op directe wijze bewerkingen op uitvoert.
Het is een goed plan om de volledige padnaam van deze bestanden te geven
en ervoor te zorgen dat het installatieproces het directory gedeelte
aanpast overeenkomstig de voorkeuren van de gebruiker:
de <literal>groff</literal> manpages hebben het standaardvoorvoegsel
/usr/local, dus refereren ze standaard naar /usr/local/lib/groff/* .
Als je echter tijdens de installatie gebruik maakt van
'make prefix=/opt/gnu' dan veranderen de verwijzingen in de manpage
in /opt/gnu/lib/groff/*</para>
<para><emphasis>De sectie OMGEVING</emphasis></para>
<para>...geeft een opsomming van alle omgevingsvariabelen die van invloed
zijn op je programma of functie en vertelt uiteraard hoe. Het meest
gebruikelijk is dat de waarden van variabelen padnamen, bestandsnamen
of standaardopties zijn.
</para>
<para><emphasis>De sectie DIAGNOSE</emphasis></para>
<para>...zou een overzicht moeten geven van de meest gebruikelijke
foutmeldingen van je programma en hoe hier mee om te gaan. Het is
niet nodig om foutmeldingen van het systeem uit te leggen
(van <literal>perror</literal>(3)) of fatale signalen (van
<literal>psignal</literal>(3)) aangezien die tijdens de uitvoering
van elk programma plaats kunnen vinden.
</para>
<para><emphasis>De sectie FOUTEN</emphasis></para>
<para>...zou ideaal gezien niet bestaan. Als je flink bent, kun je
hier de beperkingen, bekende ongemakken en voorzieningen beschrijven
die anderen als onvoorzieningen kunnen beschouwen. Hernoem het tot
de TODO sectie als je niet zo flink bent ;-)
</para>
<para><emphasis>De sectie AUTEUR</emphasis></para>
<para>...is aardig als het er is voor het geval er grove fouten in de
documentatie of het functioneren van het programma voorkomen en je een
foutenrapport wilt mailen.
</para>
<para><emphasis>De sectie ZIE OOK</emphasis></para>
<para>...bestaat uit een lijst met gerelateerde manpages in alfabetische
volgorde. Conventioneel is het de laatste sectie.
Je bent er vrij in andere secties te bedenken als ze echt niet
in n van de secties die tot dusverre zijn beschreven passen.
Dus hoe precies genereerde je die manpage? Ik verwachtte die vraag,
hier is de broncode:
</para>
<programlisting>
.\" Verwerk dit bestand met
.\" groff -man -Tascii foo.1
.\"
.TH FOO 1 "MAART 1995" Linux "Gebruikershandleidingen"
.SH NAAM
foo \- frobnicate de bar library
.SH SYNTAX
.B foo [-bar] [-c
.I configuratiebestand
.B ]
.I bestand
.B ...
.SH BESCHRIJVING
.B foo
frobnicates de bar library door interne symbooltabelen aan te passen.
Standaard verwerkt het alle baz segmenten
en herschikt ze in omgekeerde tijdsvolgorde zodat de
.BR xyzzy (1)
linker ze kan vinden. De symdef entry wordt dan gecomprimeerd
gebruik makend van het WBG (Whiz-Bang-Gizmo) algoritme.
Alle bestanden worden in de opgegeven volgorde verwerkt.
.SH OPTIES
.IP -b
Schrijf tijdens de verwerking geen `busy' meldingen naar stdout.
.IP "-c configuratiebestand"
Gebruik het alternatieve systeemomvattende
.I configuratiebestand
in plaats van
.IR /etc/foo.conf .
Dit overschrijft een
.B FOOCONF
omgevingsvariabele.
.IP -a
Verwerk in aanvulling op de baz segmenten ook de blurfl headers.
.IP -r
Recursieve modus. Functioneert zo snel als het licht
ten koste van een megabyte aan virtueel geheugen.
.SH BESTANDEN
.I /etc/foo.conf
.RS
Het systeemomvattende configuratiebestand. Zie
.BR foo (5)
voor meer details.
.RE
.I ~/.foorc
.RS
Configuratiebestand per gebruiker. Zie
.BR foo (5)
voor meer details.
.SH OMGEVING
.IP FOOCONF
Als het een waarde bevat de volledige padnaam voor een
alternatief systeemomvattend
.IR foo.conf .
Wordt overschreven door de optie
.B -c .
.SH DIAGNOSE
De volgende diagnoses kunnen op stderr worden uitgevoerd:
Onjuist magisch nummer.
.RS
Het invoerbestand lijkt niet op een archiefbestand.
.RE
baz segmenten in oude stijl.
.RS
.B foo
kan alleen omgaan met baz segmenten in de nieuwe stijl. COBOL
objectlibrary's worden in deze versie niet ondersteund.
.SH BUGS
De opdrachtnaam zou zorgvuldiger moeten zijn gekozen
om zijn doel weer te geven.
.SH AUTEUR
Jens Schweikhardt <howto at schweikhardt dot net>
.SH "ZIE OOK"
.BR bar (1),
.BR foo (5),
.BR xyzzy (1)
</programlisting>
</sect1>
<sect1 id="q4"><title>Hoe documenteer ik verscheidene programma's/functies
in een enkele manpage?
</title>
<para>Veel programma's (<literal>grep</literal>,
<literal>egrep</literal>) en functies (<literal>printf</literal>,
<literal>fprintf</literal>, ...) zijn in een enkele manpage gedocumenteerd.
Deze manpages zouden echter tamelijk onbruikbaar zijn als ze slechts onder
één naam toegankelijk zouden zijn. We kunnen van een gebruiker
niet verwachten te onthouden dat de
<literal>egrep</literal> manpage in werkelijkheid de
<literal>grep</literal> manpage is. Daarom is het nodig de manpage onder
verschillende namen beschikbaar te stellen. Je hebt verschillende
manieren om dit te bereiken:
</para>
<orderedlist>
<listitem>
<para>maak voor elke naam identieke kopieën.</para>
</listitem>
<listitem>
<para>verbind alle manpages met elkaar met behulp van hardlinks.</para>
</listitem>
<listitem>
<para>symbolische links verwijzend naar de feitelijke manpage.</para>
</listitem>
<listitem>
<para>gebruik het <literal>groff</literal>'s `source' mechanisme
geleverd door de <literal>.so</literal> macro.</para>
</listitem>
</orderedlist>
<para>De eerste manier is vanzelfsprekend een verspilling van diskruimte.
De tweede is niet aan te bevelen omdat intelligente versies van het
programma <literal>catman</literal> veel werk kunnen besparen door het
type bestand of de inhoud ervan te bekijken. <!-- Hardlinks will prevent
<literal>catman</literal> from being clever. -->(Het doel van
<literal>catman</literal> is het formatteren van alle manpages zodat
ze snel kunnen worden weergegeven.) Het derde alternatief heeft een
klein nadeel: als flexibiliteit van belang is, dan moet je je er bewust
van zijn dat er bestandssystemen zijn die geen symbolische links ondersteunen.
Eind van het liedje is dat het 't beste is (TM) om gebruik te maken van
het sourcemechanisme van <literal>groff</literal>. Dat doe je zo:
Als je wilt dat je manpage in sectie 1 onder de namen `foo' en `bar'
beschikbaar is, dan plaats je de manpage in foo.1 en zorg je dat bar.1 er
als volgt uitziet:
</para>
<para><literal>.so man1/foo.1</literal></para>
<para>Het is van belang het <literal>man1/</literal> directory gedeelte
te specificeren als ook de bestandsnaam `foo.1' omdat ten tijde dat
<literal>groff</literal> wordt uitgevoerd door de browser de basisdirectory
van de manpages de huidige werkdirectory zal zijn en
<literal>groff</literal> interpreteert <literal>.so</literal>
argumenten relatief aan de huidige werkdirectory.</para>
</sect1>
<sect1 id="q5"><title>Welk macropackage kan ik het beste gebruiken?
</title>
<para>Er zijn een aantal macropackages speciaal ontworpen voor gebruik
bij het schrijven van manpages. Gewoonlijk zijn ze te vinden in de
groff macrodirectory /usr/lib/groff/tmac. De bestandsnamen zijn
<literal>tmac.</literal><iets>, waarbij <iets>
het argument is aan de -m optie van groff. Groff zal
<literal>tmac.</literal><iets> gebruiken wanneer het de optie
`<literal>-m</literal> <iets>' meekrijgt. Vaak wordt de
spatie tussen `<literal>-m</literal>' en
`<iets>' weggelaten, dus kunnen we
zeggen `<literal>groff -man</literal>' wanneer we manpages met
het macropackage <literal>tmac.an</literal> formatteren.
Dat is de reden voor de vreemde naam `tmac.an'.
Afgezien van tmac.an is er nog een
ander populair macropackage, genaamd <literal>tmac.doc</literal>, welk
zijn oorsprong vindt op de Universiteit van Californië op Berkeley.
Veel BSD manpages gebruiken het en het schijnt dat UCB het tot standaard
heeft verheven voor documentatie. De
<literal>tmac.doc</literal> macro's zijn veel flexibeler, maar
helaas zijn er manpage browsers die ze niet zullen gebruiken
en altijd <literal>groff -man</literal> zullen aanroepen. Bijvoorbeeld alle
<literal>xman</literal> programma's die ik heb gezien zullen
manpages die <literal>tmac.doc</literal> nodig hebben verknallen.
Dus doe jezelf een plezier: gebruik <literal>tmac.an</literal> --
het gebruik van een ander macropackage wordt als schadelijk aangemerkt.
<literal>tmac.andoc</literal> is een
pseudo macropackage dat de broncode bekijkt en dan
<literal>tmac.an</literal> of <literal>tmac.doc</literal> laadt.
In feite zou elke manpagebrowser het moeten gebruiken, maar tot op heden,
doen ze dit niet allemaal, dus is het 't beste als ons we vasthouden aan de oude
<literal>tmac.an</literal>. Alles wat ik je van nu af aan vertel
met betrekking tot macro's geldt alleen voor <literal>tmac.an</literal>.
Als je toch gebruik wilt maken van de <literal>tmac.doc</literal> macro's,
bekijk dan de tutorialsampler, <ulink
url="http://www.freebsd.org/cgi/man.cgi?query=mdoc.samples"><literal>mdoc.samples</literal></ulink>.
Een aantal distro's (is me verteld) worden ook met mdoc(7), mdoc.samples(7) en
groff_man(7) geleverd.</para>
<para>De definitieve bron voor <literal>troff</literal>, waarin alle
macro's worden uitgelegd is de <emphasis>Troff User's Manual</emphasis>,
beschikbaar in
<ulink url="http://cm.bell-labs.com/sys/doc/troff.html">html</ulink>,
<ulink url="http://cm.bell-labs.com/sys/doc/troff.ps">PostScript
(ps, 760K)</ulink> of
<ulink url="http://cm.bell-labs.com/sys/doc/troff.pdf">Portable
Document Format (pdf, 240K)</ulink>. door Jospeh F. Ossanna en Brian
W. Kernighan, gereviseerd November 1992. AT&T Bell Labs heeft het voor
het publiek beschikbaar gesteld. Vergeet niet de laatste geweldige homepage
van <ulink url="http://www.kohala.com/start/">W. Richard Steven
</ulink> te bekijken (beroemd om <emphasis>Unix Network
Programming</emphasis> als ook de <emphasis>TCP/IP
Illustrated</emphasis> trilogie), die ook een lijst heeft met
<ulink url="http://www.kohala.com/start/troff/troff.html">Troff
Resources</ulink> waaronder <literal>tbl</literal>,
<literal>eqn</literal>, <literal>pic</literal> en andere
filters.</para>
</sect1>
<sect1 id="q6"><title>Welke preprocessors kan ik gebruiken?</title>
<para>Groff wordt op z'n minst met drie preprocessors geleverd,
<literal>tbl</literal>, <literal>eqn</literal>, en
<literal>pic</literal> (op een aantal systemen worden ze
<literal>gtbl</literal>, <literal>geqn</literal> en
<literal>gpic</literal> genoemd.) Hun doel is preprocessor macro's en hun data
om te zetten in reguliere troff invoer.
<literal>Tbl</literal> is een preprocessor voor tabellen,
<literal>eqn</literal> is een preprocessor voor vergelijkingen/berekeningen en
<literal>pic</literal> is een preprocessor voor afbeeldingen. Raadpleeg
alsjeblieft de manpages voor meer informatie over welke functionaliteit ze
leveren. In een notedop: schrijf geen manpages waarvoor een preprocessor
nodig is. Eqn zal gewoonlijk afschuwelijke uitvoer produceren voor
schrijfmachine-achtige devices, helaas het type device waarop 99% van alle
manpages worden bekeken (tenminste dat doe ik). Bijvoorbeeld
XAllocColor.3x maakt gebruik van een paar formules met machtsverheffen.
Vanwege de aard van schrijfmachine-achtige devices zal de exponent
op dezelfde regel verschijnen als de basis.
N tot de macht van twee verschijnt als
`N2'. <literal>Tbl</literal> kan maar beter worden vermeden omdat
alle xman programma's die ik heb gezien er op mislukken.
Xman 3.1.6 maakt gebruik van de volgende opdracht om manpages te
formatteren, b.v. signal(7):</para>
<para><literal>gtbl /usr/man/man7/signal.7 | geqn | gtbl | groff
-Tascii -man /tmp/xmana01760 2> /dev/null</literal></para>
<para>wat bronnen verknalt waarin gebruik wordt gemaakt van
<literal>gtbl</literal>, omdat de uitvoer van
<literal>gtbl</literal> weer als invoer wordt gegeven aan
<literal>gtbl</literal>. Het effect is een manpage zonder je tabel.
Ik weet niet of het een programmeerfout of een feature is dat
<literal>gtbl</literal> zich verslikt in zijn eigen uitvoer of dat xman
een beetje slimmer zou kunnen zijn door
<literal>gtbl</literal> niet tweemaal te gebruiken.
Bovendien maakt een aantal systemen gebruik van <literal>grog</literal>
om vast te stellen welke opties aan groff door te geven.
Helaas gist grog soms verkeerd en beveelt
<literal>groff -t</literal> aan wanneer in feite
<literal>tbl</literal> moet worden gebruikt. We blijven in feite met
twee oplossingen achter voor tabellen:
</para>
<orderedlist>
<listitem>
<para>Maak de tabel zelf handmatig op en plaats het tussen .nf en .fi
regels zodat het ongeformatteerd blijft. Je hebt op deze wijze geen
vet en schuindruk, maar je tabel wordt altijd maar weer geslikt.
</para>
</listitem>
<listitem>
<para>Gebruik de <literal>tbl</literal> macro's die je wilt, maar
distribueer de <literal>tbl</literal> uitvoer in plaats van de invoer.
Je hebt echter te maken met de eigenaardigheid van
<literal>grog</literal> die denkt dat een bestand met een regel
beginnend met <literal>.TS</literal>
<literal>tbl</literal> vereist. <literal>Tbl</literal> uitvoer
bevat om voor mij onbekende reden nog steeds de
<literal>.TS</literal> en <literal>.TE</literal>.
Het schijnt dat je ze simpelweg kunt verwijderen en dat het resultaat
er dan nog steeds ok uitziet. YMMV, dus test het alsjeblieft bij je
manpage.
</para>
</listitem>
</orderedlist>
<para>Ik moet nog een manpage te zien krijgen die de <literal>pic</literal>
preprocessing nodig heeft. Maar ik zou het niet prettig vinden. Zoals je
hierboven kunt zien, zal
<literal>xman</literal> het niet gebruiken en
<literal>groff</literal> zal beslist die fantastische gekkigheid op de invoer
toepassen.
</para>
</sect1>
<sect1 id="q7"><title>Moet ik broncode en/of reeds geformatteerde
documentatie distribueren?
</title>
<para>Laat me de voors (+) en tegens (-) geven van een paar uitgekozen
mogelijkheden:
</para>
<orderedlist>
<listitem>
<para>Alleen de broncode:+ kleiner distributiepackage.- ontoegankelijk op
systemen zonder <literal>groff</literal>.</para>
</listitem>
<listitem>
<para>Alleen ongecomprimeerd formaat:+ zelfs toegankelijk op systemen
zonder <literal>groff</literal>.- de gebruiker kan geen dvi of
postscript bestand genereren. - verspilling van diskruimte op systemen
die ook gecomprimeerde manpages hanteren.
</para>
</listitem>
<listitem>
<para>Alleen gecomprimeerd formaat:+ zelfs toegankelijk op systemen
zonder <literal>groff</literal>.- de gebruiker kan geen dvi of postscript
bestand genereren. - welk compressieformaat zou je gebruiken?
.Z? .z? .gz? Allemaal?</para>
</listitem>
<listitem>
<para>Broncode en ongecomprimeerd geformatteerd:+ toegankelijk zelfs op
systemen zonder <literal>groff</literal>.- groter distributie
package- een aantal systemen verwacht wellicht gecomprimeerde manpages.-
overtollige informatie op systemen uitgerust met
<literal>groff</literal>.</para>
</listitem>
</orderedlist>
<para>IMHO is het 't beste alleen de broncode te distribueren. Het argument
dat het ontoegankelijk is op systemen zonder <literal>groff</literal>
doet er niet toe. De 500+ manpages van het Linux Documentatie Project
bestaan alleen uit broncode. De manpages van XFree86 bestaan alleen uit
broncode. De manpages van de FSF bestaan alleen uit broncode.
In feite heb ik zelden software gezien die werd gedistribueerd met
geformatteerde manpages. Als een systeembeheerder het werkelijk belangrijk
vindt dat manpages toegankelijk zijn dan heeft hij ook
<literal>groff</literal> geïnstalleerd.</para>
</sect1>
<sect1 id="q8"><title>Wat zijn de fontconventies?</title>
<para>Ten eerste: maak geen gebruik van directe fontoperators zoals
<literal>\fB</literal>, <literal>\fP</literal> enz. Gebruik macro's
die argumenten accepteren. Op deze wijze voorkom je een
gebruikelijke valkuil: het wijzigen van het font aan het einde van
het woord en dat de vette tekst of schuindruk tot aan de volgende
fontwijziging doorgaat. Geloof me, het gebeurt vaker dan je denkt.
De <literal>tmac.an</literal> macro's voorzien in de volgende lettertypen:
</para>
<para>.B Vet</para>
<para>.BI Vet afgewisseld met schuindruk</para>
<para>.BR Vet afgewisseld met Roman</para>
<para>.I Schuindruk</para>
<para>.IB Schuindruk afgewisseld met vet</para>
<para>.IR Schuindruk afgewisseld met Roman</para>
<para>.RB Roman afgewisseld met vet</para>
<para>.RI Roman afgewisseld met schuindruk</para>
<para>.SM Klein (9/10 geschaald van de reguliere grootte)</para>
<para>.SB Klein vet (<emphasis>niet</emphasis> klein afgewisseld
met vet)</para>
<para>X afgewisseld door Y betekent dat de oneven argumenten grafisch
worden gezet in X terwijl de even argumenten worden gezet in Y. Bijvoorbeeld
</para>
<para>.BI "Arg 1 is Vet, " "Arg 2 is Schuindruk,
" "en Vet, " "en Schuindruk."</para>
<para>De dubbele aanhalingstekens zijn nodig om witruimte in een argument
op te kunnen nemen; zonder deze aanhalingstekens verschijnt er geen
witruimte tussen de afwisselende lettertypen.
In feite hoef je de macro's voor afwisselende lettertypen alleen te gebruiken
in die gevallen waar je witruimte tussen lettertype wijzigingen
<emphasis>wilt</emphasis> voorkomen.
Tot zover wat beschikbaar is. Hieronder hoe je gebruik zou moeten maken
van de verschillende lettertypen:
(delen schaamteloos overgenomen uit man(7))</para>
<para>Alhoewel er in de UNIX-wereld veel willekeurige conventies bestaan
voor manpages, definieert het bestaan van verscheidene honderden
Linux specifieke manpages onze standaards: Bij functies worden de
argumenten altijd gespecificeerd in schuindruk, zelfs in de SYNTAX sectie,
waar de rest van de functie vet wordt afgedrukt:
</para>
<para>.BI "mijnfunctie(int " argc ", char **"
argv );</para>
<para>Bestandsnamen staan altijd in schuindruk, behalve in de sectie SYNTAX,
waarin opgenomen bestanden vet zijn afgedrukt. Dus je zou gebruik kunnen
maken van</para>
<para>.I /usr/include/stdio.h</para>
<para>en</para>
<para>.B #include <stdio.h></para>
<para>Speciale macro's, die gewoonlijk in hoofdletters staan, worden
vet afgedrukt:</para>
<para>.B MAXINT</para>
<para>Bij het nummeren van een lijst met foutcodes, staan de codes
vet afgedrukt. Deze lijst maakt gewoonlijk als volgt gebruik van de macro .TP
(paragraaf met hangende tag):
</para>
<para>.TP.B EBADF.I fd is geen geldige file descriptor..TP.B
EINVAL.I fd is ongeschikt als leesstof</para>
<para>Elke verwijzing naar een andere manpage (of naar het onderwerp van
de huidige manpage) is vet afgedrukt. Als het nummer van de manpage wordt
gegeven, dan is dit in roman, zonder spaties:
</para>
<para>.BR man (7)</para>
<para>Acroniemen zien er het beste uit wanneer ze typografisch worden gezet
in een klein lettertype. Dus is mijn aanbeveling
</para>
<para>.SM UNIX</para>
<para>.SM ASCII</para>
<para>.SM TAB</para>
<para>.SM NFS</para>
<para>.SM LALR(1)</para>
</sect1>
<sect1 id="q9"><title>Je manpage oppoetsen</title>
<para>Hieronder staan een aantal richtlijnen die de betrouwbaarheid,
leesbaarheid en 'vorming' van je documentatie verbeteren.
</para>
<itemizedlist>
<listitem>
<para>Test voorbeelden om er zeker van te zijn dat ze werken
(gebruik knippen en plakken om je shell de exacte bewoording uit de manpage
te geven).
Kopieer de uitvoer van je opdracht in je manpage, typ niet slechts in wat
je <emphasis>denkt</emphasis> dat je programma zal afdrukken.</para>
</listitem>
<listitem>
<para>Proeflees het, pas de spellingscontrole erop toe en laat iemand anders
het lezen, vooral als Engels je moedertaal niet is. De HOWTO die je aan het
lezen bent heeft de laatste test doorstaan (speciale dank aan
Michael Miller voor een nogal heldhaftige bijdrage! Alle resterende
ruwe kantjes zijn geheel mijn fout). Extra vrijwilligers zijn altijd welkom.
</para>
</listitem>
<listitem>
<para>Test je manpage: Produceert <literal>groff</literal> foutmeldingen
wanneer je je manpage formatteert? Het is aardig als je de
<literal>groff</literal> opdrachtregel in een commentaarregel plaatst.
Produceert de opdracht
<literal>man</literal>(1) foutmeldingen wanneer je
<literal>man jeprog</literal> aanroept? Produceert het 't verwachte resultaat?
Zullen <literal>xman</literal>(1x) en
<literal>tkman</literal>(1tk) met je manpage overweg kunnen? XFree86 3.1
heeft xman 3.1.6 - X11R6, het zal proberen te decomprimeren met
<literal>gzip -c -d < %s > %s zcat < %s >
%s</literal></para>
</listitem>
<listitem>
<para>Zal <literal>makewhatis</literal>(8) de éénregelige
beschrijving uit de NAAM sectie kunnen extraheren?
</para>
</listitem>
<listitem>
<para>Zet je manpage om in HTML opmaak met behulp van
<literal>rman</literal> van <ulink url="http://polyglotman.sourceforge.net/">
http://polyglotman.sourceforge.net/</ulink>, en bekijk het resultaat met een
set webbrowsers (netscape, mozilla, opera, lynx, ...) Controleer of de
kruisverwijzingen tussen je manpages als hyperlinks in de gegenereerde HTML
functioneren. Als er een website bestaat voor je softwarepackage, plaats
daar dan de manpages, en houd ze bijgewerkt.
</para>
</listitem>
<listitem>
<para>Het utility <literal>rman</literal> kan manpages ook omzetten naar
LaTeX, RTF, SGML en andere formaten; kijk deze na als je je manpages
in een boek of ander groot document wilt opnemen.
</para>
</listitem>
<listitem>
<para>Probeer je manpage om te zetten in HTML met behulp van
<literal>man2html</literal>, wat al sinds man-1.4 onderdeel uitmaakt
van het Linux man-package. Het <literal>man2html</literal> utility is een minder
grootse vertaler dan <literal>rman</literal>, maar vrijwel elke
Linux gebruiker heeft het al, dus het is het waard te zorgen dat
<literal>man2html</literal> zich niet verslikt in je manpage.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="q10"><title>Hoe krijg ik een gewoon manpage in tekstformaat
zonder al die ^H^'s ?</title>
<para>Kijk eens naar <literal>col</literal>(1), omdat
<literal>col</literal> backspacereeksen kan filteren. Gewoon voor het geval
je niet zo lang kan wachten:
</para>
<para><literal>funnyprompt$ groff -t -e -mandoc -Tascii manpage.1 |
col -bx > manpage.txt</literal></para>
<para>De <literal>-t</literal> en <literal>-e</literal> switches
vertellen <literal>groff</literal> voor te verwerken met
<literal>tbl</literal> en <literal>eqn</literal>. Dit is overdreven
voor manpages waar geen voorbewerking voor nodig is, maar afgezien
van een paar verspilde CPU cycli kan het geen kwaad. Aan de andere
kant kan het wel kwaad geen <literal>-t</literal> toe te passen
wanneer het in feitelijk nodig is: de tabel wordt afschuwelijk opgemaakt.
Je kunt er zelfs achterkomen (nou ja, gissen is een beter woord) welke
opdracht nodig is om een bepaald <literal>groff</literal> document
(niet gewoon manpages) te formatteren door het aanroepen van:</para>
<para><programlisting>funnyprompt$ grog /usr/man/man7/signal.7
groff -t -man /usr/man/man7/signal.7</programlisting>
</para>
<para>"Grog" staat voor "GROff Guess", en het doet
wat het zegt--gissen. Als het perfect zou zijn, dan zouden we geen opties
meer nodig hebben. Ik heb het onjuist zien gissen bij macropackages en
preprocessors. Hier is een door mij geschreven klein
perlscript dat de paginakoppen en voettekten kan verwijderen, je daarbij
een paar pagina's besparend (en moeder natuur een boom) bij het afdrukken
van lange en uitgebreide manpages. Bewaar het in een bestand met de naam
<literal>strip-headers</literal> & chmod 755.</para>
<programlisting>
#!/usr/bin/perl -wn
# laat het 't hele bestand in één keer inlezen:
undef $/;
# verwijder eerste koptekst:
s/^\n*.*\n+//;
# verwijder laastste voettekst:
s/\n+.*\n+$/\n/g;
# verwijder pagina-overgangen:
s/\n\n+[^ \t].*\n\n+(\S+).*\1\n\n+/\n/g;
# combineer twee of meer lege regels tot één lege regel:
s/\n{3,}/\n\n/g;
# bekijk wat er over is...
print;
</programlisting>
<para>Je moet het als het eerste filter gebruiken na de opdracht
<literal>man</literal> aangezien het terugvalt op het aantal newlines
dat door <literal>groff</literal> wordt uitgevoerd.
Bijvoorbeeld:</para>
<para><literal>funnyprompt$ man bash | strip-headers | col -bx >
bash.txt</literal></para>
</sect1>
<sect1 id="q11"><title>Hoe krijg ik een PostScript manpage van hoge kwaliteit?
</title>
<para><literal>funnyprompt$ groff -t -e -mandoc -Tps manpage.1 >
manpage.ps</literal></para>
<para>Druk dat af of bekijk het met je favoriete PostScript printer/viewer.
Zie <link linkend="q10">vraag 10)</link> voor een uitleg
van de opties.
</para>
</sect1>
<sect1 id="q12"><title>Hoe krijg ik `apropos' en `whatis' werkend?</title>
<para>Stel dat je je afvraagt welke compilers op je systeem zijn
geïnstalleerd en hoe deze kunnen worden aangeroepen.
Om deze (veelgestelde vraag) te beantwoorden, geef je op</para>
<programlisting>
funnyprompt$ apropos compiler
f77 (1) - Fortran 77 compiler
gcc (1) - GNU C and C++ compiler
pc (1) - Pascal compiler
</programlisting>
<para><literal>Apropos</literal> en <literal>whatis</literal> worden gebruikt
om snel te rapporteren welke manpage informatie bevat over een bepaald
onderwerp. Beide programma's doorzoeken een aantal bestanden met de naam
`whatis' die is te vinden in elk van de basisdirectory's van de manpages.
Zoals eerder uiteengezet, bevatten de whatis databasebestanden een
éénregelige ingang voor elke manpage in de respectieve
directorystructuur. In feite is die regel exact gelijk aan de sectie NAAM
(om precies te zijn: samengevoegd op één regel waarbij
het verbindingsteken is verwijderd; de sectie wordt tussen haakjes vermeld).
De whatis databasebestanden worden
aangemaakt met het programma <literal>makewhatis</literal>(8). Er zijn
verscheidene versies in omloop, dus raadpleeg alsblieft de manpage om
vast te stellen welke opties beschikbaar zijn. Wil
<literal>makewhatis</literal> de NAAM secties correct kunnen extraheren
dan is het van belang dat jij, de schrijver van de manpage,
je houdt aan de opmaak van de NAAM sectie zoals beschreven onder
<link linkend="q3">vraag 3)</link>. De verschillen tussen
<literal>apropos</literal> en <literal>whatis</literal> zijn simpelweg
waar in de regel ze kijken, en waar ze naar zoeken.
<literal>Apropos</literal> (wat equivalent is aan <literal>man
-k</literal>) doorzoekt de argumentstring overal op de regel,
terwijl <literal>whatis</literal> (equivalent aan <literal>man
-f</literal>) een volledige opdrachtnaam alleen in dat deel voor het
streepje probeert te matchen. Als consequentie zal
`<literal>whatis cc</literal>' het rapporteren als er een
<literal>cc</literal> manpage is en stil blijven voor <literal>gcc</literal>.
</para>
<para>Correcties en suggesties welkom!</para>
</sect1>
<sect1 id="copying"><title>Kopieervoorwaarden</title>
<para>Copyright 1995-2001 by Jens Schweikhardt. All rights
reserved.</para>
<programlisting>
"Two clause" BSD License:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
</programlisting>
</sect1>
<sect1 id="acknowledgements"><title>Erkenningen</title>
<itemizedlist>
<listitem>
<para>Michael Miller voor het proeflezen van de volledige HOWTO (in februari
2001); Gordon Torrie voor de vele behulpzame grammaticale opmerkingen
(in augustus 2001). Eventuele resterende grammaticale of stijlfouten
zijn geheel mijn fout.
</para>
</listitem>
<listitem>
<para><ulink url="http://www.SuSE.de/">S.u.S.E. (.de)</ulink> (of
<ulink url="http://www.SuSE.com/">.com</ulink>) de enige distributeur
die me gratis kopieën van hun laatste product blijven sturen,
mijn werk als howto auteur erkennend.
</para>
</listitem>
<listitem>
<para>George B. Moody voor aanvullende suggesties hoe een manpage op te
poetsen.
</para>
</listitem>
</itemizedlist>
<para>Laat een bericht bij me achter als je naam hier ontbreekt.</para>
</sect1>
<sect1 id="changelog"><title>Changelog</title>
<itemizedlist>
<listitem>
<para>Maart 6 2001: HTML broncode doorstaat nu <literal>weblint
-pedantic</literal>. <link linkend="q6">Paragraph 6:</link> Toegevoegd
workarounds voor <literal>tbl</literal> screw-ups. Toegevoegd
<link linkend="acknowledgements">Erkenningen</link> en
<link linkend="changelog">Changelog</link>. RCS Id toegevoegd.</para>
</listitem>
<listitem>
<para>Augustus 9 2001: Howto geplaatst onder een twee clausule BSD
licentie.</para>
</listitem>
<listitem>
<para>Augustus 20 2001: Grammatica verbeterd. Gebruik een genummerde lijst
voor de inhoudsopgave.
</para>
</listitem>
<listitem>
<para>Oktober 28 2001: Referenties naar mdoc(7), mdoc.samples(7) en
groff_man(7) toegevoegd.</para>
</listitem>
<listitem>
<para>April 28 2002: Grammaticacorrectie.
</para>
</listitem>
<listitem>
<para>April 30 2002: Werkte de link bij naar de groff_mdoc BSD tutorial.</para>
</listitem>
<listitem>
<para>November 29 2002: Meer suggesties voor het oppoetsen van je manpage.</para>
</listitem>
<listitem>
<para>December 15 2002: Publiceer SGML afgeleid van HTML. Verwijderde dode link
naar LSM.
</para>
</listitem>
</itemizedlist>
</sect1>
</article>
|