1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182 |
- \input texinfo.tex @c -*-texinfo-*-
- @c $Id$
- @c Everything between the start/end of header lines will be passed by
- @c Emacs's {texinfo,makeinfo}-format region commands. See the `start of
- @c header' node for more info.
- @c %**start of header
- @c Automake requires this
- @setfilename texinfo.info
- @c Automake automatically updates version.texi to @set VERSION and
- @c @set UPDATED to appropriate values.
- @include version.texi
- @settitle GNU Texinfo @value{VERSION}
- @c Define a new index for command-line options.
- @defcodeindex op
- @c Put everything except function (command, in this case) names in one
- @c index (arbitrarily chosen to be the concept index).
- @syncodeindex op cp
- @syncodeindex vr cp
- @syncodeindex pg cp
- @tex
- \global\usebracesinindexestrue
- @end tex
- @c finalout
- @comment %**end of header
- @copying
- This manual is for GNU Texinfo (version @value{VERSION}, @value{UPDATED}),
- a documentation system that can produce both online information and a
- printed manual from a single source using semantic markup.
- Copyright @copyright{} 1988, 1990, 1991, 1992, 1993, 1995, 1996, 1997,
- 1998, 1999, 2001, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
- 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
- @quotation
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
- and with the Back-Cover Texts as in (a) below. A copy of the license
- is included in the section entitled ``GNU Free Documentation
- License''.
- (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
- modify this GNU manual. Buying copies from the FSF supports it in
- developing GNU and promoting software freedom.''
- @end quotation
- @end copying
- @dircategory Texinfo documentation system
- @direntry
- * Texinfo: (texinfo). The GNU documentation format.
- * install-info: (texinfo)Invoking install-info. Update info/dir entries.
- * makeinfo: (texinfo)Invoking makeinfo. Translate Texinfo source.
- * pod2texi: (pod2texi)Invoking pod2texi. Translate Perl POD to Texinfo.
- * texi2dvi: (texinfo)Format with texi2dvi. Print Texinfo documents.
- * texi2pdf: (texinfo)PDF Output. PDF output for Texinfo.
- * pdftexi2dvi: (texinfo)PDF Output. PDF output for Texinfo.
- * texindex: (texinfo)Format with tex/texindex. Sort Texinfo index files.
- @end direntry
- @c Set smallbook if printing in smallbook format so the example of the
- @c smallbook font is actually written using smallbook; in bigbook, a kludge
- @c is used for TeX output. Do this through the -t option to texi2dvi,
- @c so this same source can be used for other paper sizes as well.
- @c smallbook
- @c set smallbook
- @c @@clear smallbook
- @c If you like blank pages, add through texi2dvi -t.
- @c setchapternewpage odd
- @set txiindexatsignignore
- @set txiindexbackslashignore
- @set txiindexlessthanignore
- @set txiindexhyphenignore
- @titlepage
- @title Texinfo
- @subtitle The GNU Documentation Format
- @subtitle for Texinfo version @value{VERSION}, @value{UPDATED}
- @author Robert J. Chassell
- @author Richard M. Stallman
- @c Include the Distribution inside the titlepage so
- @c that headings are turned off.
- @page
- @vskip 0pt plus 1filll
- @insertcopying
- @sp 1
- Published by the Free Software Foundation @*
- 51 Franklin St, Fifth Floor @*
- Boston, MA 02110-1301 @*
- USA @*
- ISBN 1-882114-67-1 @c for version 4.0, September 1999.
- @c ISBN 1-882114-65-5 is for version 3.12, March 1998.
- @c ISBN 1-882114-64-7 is for edition 2.24 of November 1996.
- @c ISBN 1-882114-63-9 is for edition 2.20 of 28 February 1995.
- @sp 1
- Cover art by Etienne Suvasa.
- @end titlepage
- @summarycontents
- @contents
- @ifnottex
- @node Top
- @top Texinfo
- This manual is for GNU Texinfo (version @value{VERSION}, @value{UPDATED}),
- a documentation system that can produce both online information and a
- printed manual from a single source using semantic markup.
- The first part of this master menu lists the major nodes in this Info
- document, including the @@-command and concept indices. The rest of
- the menu lists all the lower-level nodes in the document.
- @end ifnottex
- @menu
- * Copying Conditions:: Your rights.
- * Overview:: Texinfo in brief.
- * Writing a Texinfo File:: Format of a Texinfo source file.
- * Beginning and Ending a File:: Beginning and end of a Texinfo file.
- * Nodes:: Writing nodes, the basic unit of Texinfo.
- * Chapter Structuring:: Creating chapters, sections, appendices, etc.
- * Cross References:: Writing cross-references.
- * Marking Text:: Marking words and phrases as code,
- keyboard input, meta-syntactic
- variables, and the like.
- * Quotations and Examples:: Block quotations, examples, etc.
- * Lists and Tables:: Itemized or numbered lists, and tables.
- * Special Displays:: Floating figures and footnotes.
- * Indices:: Creating indices.
- * Insertions:: Inserting @@-signs, braces, etc.
- * Breaks:: Forcing or preventing line and page breaks.
- * Definition Commands:: Describing functions and the like uniformly.
- * Internationalization:: Supporting languages other than English.
- * Conditionals:: Specifying text for only some output cases.
- * Defining New Texinfo Commands:: User-defined macros and aliases.
- * Include Files:: How to incorporate other Texinfo files.
- * Hardcopy:: Output for paper, with @TeX{}.
- * Generic Translator @command{texi2any}:: @command{texi2any}, an all-purpose converter.
- * Creating and Installing Info Files:: Details on Info output.
- * Generating HTML:: Details on HTML output.
- @c * texi2any Output Customization:: Fine tuning with initialization files.
- Appendices
- * @@-Command Details:: Details of the Texinfo @@-commands.
- * Tips:: Hints on how to write a Texinfo document.
- * Sample Texinfo Files:: Complete examples, including full texts.
- * Texinfo Mode:: Using the GNU Emacs Texinfo mode.
- * Headings:: How to write page headings and footings.
- * Catching Mistakes:: How to find mistakes in formatting.
- * Info Format Specification:: Technical details of the Info file format.
- * GNU Free Documentation License:: Copying this manual.
- * Command and Variable Index:: A menu containing commands and variables.
- * General Index:: A menu covering many topics.
- @detailmenu
- --- The Detailed Node Listing ---
- Overview of Texinfo
- * Reporting Bugs:: Submitting effective bug reports.
- * Output Formats:: Overview of the supported output formats.
- * Info Files:: What is an Info file?
- * Printed Books:: Characteristics of a printed book or manual.
- * Adding Output Formats:: Man pages and implementing new formats.
- * History:: Acknowledgements, contributors and genesis.
- Writing a Texinfo File
- * Command Syntax:: @@-commands are used for formatting.
- * Conventions:: General rules for writing a Texinfo file.
- * Comments:: Writing comments and ignored text in general.
- * Minimum:: What a Texinfo file must have.
- * Short Sample:: A short sample Texinfo file.
- Beginning and Ending a Texinfo File
- * Sample Beginning:: A sample beginning for a Texinfo file.
- * Texinfo File Header:: The first lines.
- * Document Permissions:: Ensuring your manual is free.
- * Titlepage & Copyright Page:: Creating the title and copyright pages.
- * Contents:: How to create a table of contents.
- * The Top Node:: Creating the `Top' node and master menu.
- * Global Document Commands:: Affecting formatting throughout.
- * Ending a File:: What is at the end of a Texinfo file?
- Texinfo File Header
- * First Line:: The first line of a Texinfo file.
- * Start of Header:: Formatting a region requires this.
- * @code{@@setfilename}:: Tell Info the name of the Info file.
- * @code{@@settitle}:: Create a title for the printed work.
- * End of Header:: Formatting a region requires this.
- Document Permissions
- * @code{@@copying}:: Declare the document's copying permissions.
- * @code{@@insertcopying}:: Where to insert the permissions.
- Title and Copyright Pages
- * @code{@@titlepage}:: Create a title for the printed document.
- * @code{@@titlefont @@center @@sp}:: The @code{@@titlefont}, @code{@@center},
- and @code{@@sp} commands.
- * @code{@@title @@subtitle @@author}:: The @code{@@title}, @code{@@subtitle},
- and @code{@@author} commands.
- * Copyright:: How to write the copyright notice and
- include copying permissions.
- * Heading Generation:: Turn on page headings after the title and
- copyright pages.
- The `Top' Node and Master Menu
- * Top Node Example::
- * Master Menu Parts::
- Global Document Commands
- * @code{@@documentdescription}:: Document summary for the HTML output.
- * @code{@@setchapternewpage}:: Start chapters on right-hand pages.
- * @code{@@headings}:: An option for turning headings on and off
- and double or single sided printing.
- * @code{@@paragraphindent}:: Specify paragraph indentation.
- * @code{@@firstparagraphindent}:: Suppressing first paragraph indentation.
- * @code{@@exampleindent}:: Specify environment indentation.
- Nodes
- * Texinfo Document Structure:: How Texinfo manuals are usually arranged.
- * Node Names:: How to choose node names.
- * Writing a Node:: How to write an @code{@@node} line.
- * Node Line Requirements:: Keep names unique.
- * First Node:: How to write a `Top' node.
- * @code{@@top} Command:: How to use the @code{@@top} command.
- * Node Menu Illustration:: A diagram, and sample nodes and menus.
- * @command{makeinfo} Pointer Creation:: Letting makeinfo determine node pointers.
- * Menus:: Listing subordinate nodes.
- Menus
- * Writing a Menu:: What is a menu?
- * Menu Example:: Two and three part menu entries.
- * Menu Location:: Menus go at the ends of nodes.
- * Menu Parts:: A menu entry has three parts.
- * Less Cluttered Menu Entry:: Two part menu entry.
- * Other Info Files:: How to refer to a different Info file.
- Chapter Structuring
- * Tree Structuring:: A manual is like an upside down tree @dots{}
- * Structuring Command Types:: How to divide a manual into parts.
- * @code{@@chapter}:: Chapter structuring.
- * @code{@@unnumbered @@appendix}::
- * @code{@@majorheading @@chapheading}::
- * @code{@@section}::
- * @code{@@unnumberedsec @@appendixsec @@heading}::
- * @code{@@subsection}::
- * @code{@@unnumberedsubsec @@appendixsubsec @@subheading}::
- * @code{@@subsubsection}:: Commands for the lowest level sections.
- * @code{@@part}:: Collections of chapters.
- * Raise/lower sections:: How to change commands' hierarchical level.
- Cross-references
- * References:: What cross-references are for.
- * Cross Reference Commands:: A summary of the different commands.
- * Cross Reference Parts:: A cross-reference has several parts.
- * @code{@@xref}:: Begin a reference with `See' @dots{}
- * Referring to a Manual as a Whole:: Refer to an entire manual.
- * @code{@@ref}:: A reference for the last part of a sentence.
- * @code{@@pxref}:: How to write a parenthetical cross-reference.
- * @code{@@anchor}:: Defining arbitrary cross-reference targets
- * @code{@@inforef}:: How to refer to an Info-only file.
- * @code{@@url}:: How to refer to a uniform resource locator.
- * @code{@@cite}:: How to refer to books not in the Info system.
- @code{@@xref}
- * One Argument:: @code{@@xref} with one argument.
- * Two Arguments:: @code{@@xref} with two arguments.
- * Three Arguments:: @code{@@xref} with three arguments.
- * Four and Five Arguments:: @code{@@xref} with four and five arguments.
- @code{@@url}, @code{@@uref@{@var{url}[, @var{text}][, @var{replacement}]@}}
- * @code{@@url} Examples:: Examples of using all the forms of @code{@@url}.
- * URL Line Breaking:: How lines are broken within @code{@@url} text.
- * @code{@@url} PDF Output Format:: A special option to hide links in PDF output.
- * PDF Colors:: Colorizing urls and other links in PDF output.
- Marking Text, Words and Phrases
- * Indicating:: How to indicate definitions, files, etc.
- * Emphasis:: How to emphasize text.
- Indicating Definitions, Commands, etc.
- * Useful Highlighting:: Highlighting provides useful information.
- * @code{@@code}:: Indicating program code.
- * @code{@@kbd}:: Showing keyboard input.
- * @code{@@key}:: Specifying keys.
- * @code{@@samp}:: Indicating a literal sequence of characters.
- * @code{@@verb}:: Indicating a verbatim sequence of characters.
- * @code{@@var}:: Indicating metasyntactic variables.
- * @code{@@env}:: Indicating environment variables.
- * @code{@@file}:: Indicating file names.
- * @code{@@command}:: Indicating command names.
- * @code{@@option}:: Indicating option names.
- * @code{@@dfn}:: Specifying definitions.
- * @code{@@abbr}:: Indicating abbreviations.
- * @code{@@acronym}:: Indicating acronyms.
- * @code{@@indicateurl}:: Indicating an example url.
- * @code{@@email}:: Indicating an electronic mail address.
- Emphasizing Text
- * @code{@@emph @@strong}:: How to emphasize text in Texinfo.
- * Smallcaps:: How to use the small caps font.
- * Fonts:: Various font commands for printed output.
- Quotations and Examples
- * Block Enclosing Commands:: Different constructs for different purposes.
- * @code{@@quotation}:: Writing a quotation.
- * @code{@@indentedblock}:: Block of text indented on left.
- * @code{@@example}:: Writing an example in a fixed-width font.
- * @code{@@verbatim}:: Writing a verbatim example.
- * @code{@@verbatiminclude}:: Including a file verbatim.
- * @code{@@lisp}:: Illustrating Lisp code.
- * @code{@@small@dots{}}:: Examples in a smaller font.
- * @code{@@display}:: Writing an example in the current font.
- * @code{@@format}:: Writing an example without narrowed margins.
- * @code{@@exdent}:: Undo indentation on a line.
- * @code{@@flushleft @@flushright}:: Pushing text flush left or flush right.
- * @code{@@raggedright}:: Avoiding justification on the right.
- * @code{@@noindent}:: Preventing paragraph indentation.
- * @code{@@indent}:: Forcing paragraph indentation.
- * @code{@@cartouche}:: Drawing rounded rectangles around text.
- Lists and Tables
- * Introducing Lists:: Texinfo formats lists for you.
- * @code{@@itemize}:: How to construct a simple list.
- * @code{@@enumerate}:: How to construct a numbered list.
- * Two-column Tables:: How to construct a two-column table.
- * Multi-column Tables:: How to construct generalized tables.
- Making a Two-column Table
- * @code{@@table}:: How to construct a two-column table.
- * @code{@@ftable @@vtable}:: Automatic indexing for two-column tables.
- * @code{@@itemx}:: How to put more entries in the first column.
- @code{@@multitable}: Multi-column Tables
- * Multitable Column Widths:: Defining multitable column widths.
- * Multitable Rows:: Defining multitable rows, with examples.
- Special Displays
- * Floats:: Figures, tables, and the like.
- * Images:: Including graphics and images.
- * Footnotes:: Writing footnotes.
- Floats
- * @code{@@float}:: Producing floating material.
- * @code{@@caption @@shortcaption}:: Specifying descriptions for floats.
- * @code{@@listoffloats}:: A table of contents for floats.
- Inserting Images
- * Image Syntax::
- * Image Scaling::
- Footnotes
- * Footnote Commands:: How to write a footnote in Texinfo.
- * Footnote Styles:: Controlling how footnotes appear in Info.
- Indices
- * Index Entries:: Choose different words for index entries.
- * Predefined Indices:: Use different indices for different kinds
- of entries.
- * Indexing Commands:: How to make an index entry.
- * Printing Indices & Menus:: How to print an index in hardcopy and
- generate index menus in Info.
- * Combining Indices:: How to combine indices.
- * New Indices:: How to define your own indices.
- Combining Indices
- * @code{@@syncodeindex}:: How to merge two indices, using @code{@@code}
- font for the merged-from index.
- * @code{@@synindex}:: How to merge two indices, using the
- roman font for the merged-from index.
- Special Insertions
- * Special Characters:: Inserting @@ @{@} , \ #
- * Inserting Quote Characters:: Inserting left and right quotes, in code.
- * Inserting Space:: Inserting the right amount of whitespace.
- * Inserting Accents:: Inserting accents and special characters.
- * Inserting Quotation Marks:: Inserting quotation marks.
- * Inserting Subscripts and Superscripts:: Inserting sub/superscripts.
- * Inserting Math:: Formatting mathematical expressions.
- * Glyphs for Text:: Inserting dots, bullets, currencies, etc.
- * Glyphs for Programming:: Indicating results of evaluation,
- expansion of macros, errors, etc.
- * Inserting Unicode:: Inserting a Unicode character by code point.
- Special Characters: Inserting @@ @{@} , \ #
- * Inserting an Atsign:: @code{@@@@}, @code{@@atchar@{@}}.
- * Inserting Braces:: @code{@@@{ @@@}}, @code{@@l rbracechar@{@}}.
- * Inserting a Comma:: , and @code{@@comma@{@}}.
- * Inserting a Backslash:: \ and @code{@@backslashchar@{@}}.
- * Inserting a Hashsign:: # and @code{@@hashchar@{@}}.
- Inserting Space
- * Multiple Spaces:: Inserting multiple spaces.
- * Not Ending a Sentence:: Sometimes a . doesn't end a sentence.
- * Ending a Sentence:: Sometimes it does.
- * @code{@@frenchspacing}:: Specifying end-of-sentence spacing.
- * @code{@@dmn}:: Formatting a dimension.
- Glyphs for Text
- * @code{@@TeX @@LaTeX}:: The @TeX{} logos.
- * @code{@@copyright}:: The copyright symbol (c in a circle).
- * @code{@@registeredsymbol}:: The registered symbol (R in a circle).
- * @code{@@dots}:: How to insert ellipses: @dots{} and @enddots{}
- * @code{@@bullet}:: How to insert a bullet: @bullet{}
- * @code{@@euro}:: How to insert the euro currency symbol.
- * @code{@@pounds}:: How to insert the pounds currency symbol.
- * @code{@@textdegree}:: How to insert the degrees symbol.
- * @code{@@minus}:: How to insert a minus sign.
- * @code{@@geq @@leq}:: How to insert greater/less-than-or-equal signs.
- Glyphs for Programming
- * Glyphs Summary::
- * @code{@@result}:: How to show the result of expression.
- * @code{@@expansion}:: How to indicate an expansion.
- * @code{@@print}:: How to indicate generated output.
- * @code{@@error}:: How to indicate an error message.
- * @code{@@equiv}:: How to indicate equivalence.
- * @code{@@point}:: How to indicate the location of point.
- * Click Sequences:: Inserting GUI usage sequences.
- Forcing and Preventing Breaks
- * Break Commands:: Summary of break-related commands.
- * Line Breaks:: Forcing line breaks.
- * @code{@@- @@hyphenation}:: Helping @TeX{} with hyphenation points.
- * @code{@@allowcodebreaks}:: Controlling line breaks within @@code text.
- * @code{@@w}:: Preventing unwanted line breaks in text.
- * @code{@@tie}:: Inserting an unbreakable but varying space.
- * @code{@@sp}:: Inserting blank lines.
- * @code{@@page}:: Forcing the start of a new page.
- * @code{@@group}:: Preventing unwanted page breaks.
- * @code{@@need}:: Another way to prevent unwanted page breaks.
- Definition Commands
- * Def Cmd Template:: Writing descriptions using definition commands.
- * Def Cmd Continuation Lines:: Continuing the heading over source lines.
- * Optional Arguments:: Handling optional and repeated arguments.
- * @code{@@deffnx}:: Group two or more `first' lines.
- * Def Cmds in Detail:: Reference for all the definition commands.
- * Def Cmd Conventions:: Conventions for writing definitions.
- * Sample Function Definition:: An example.
- The Definition Commands
- * Functions Commands:: Commands for functions and similar entities.
- * Variables Commands:: Commands for variables and similar entities.
- * Typed Functions:: Commands for functions in typed languages.
- * Typed Variables:: Commands for variables in typed languages.
- * Data Types:: The definition command for data types.
- * Abstract Objects:: Commands for object-oriented programming.
- Object-Oriented Programming
- * Variables: Object-Oriented Variables.
- * Methods: Object-Oriented Methods.
- Internationalization
- * @code{@@documentlanguage}:: Declaring the current language.
- * @code{@@documentencoding}:: Declaring the input encoding.
- Conditionally Visible Text
- * Conditional Commands:: Text for a given format.
- * Conditional Not Commands:: Text for any format other than a given one.
- * Raw Formatter Commands:: Using raw formatter commands.
- * Inline Conditionals:: Brace-delimited conditional text.
- * @code{@@set @@clear @@value}:: Variable tests and substitutions.
- * Testing for Texinfo Commands:: Testing if a Texinfo command is available.
- * Conditional Nesting:: Using conditionals inside conditionals.
- Flags: @code{@@set}, @code{@@clear}, conditionals, and @code{@@value}
- * @code{@@set @@value}:: Expand a flag variable to a string.
- * @code{@@ifset @@ifclear}:: Format a region if a flag is set.
- * @code{@@inlineifset @@inlineifclear}:: Brace-delimited flag conditionals.
- * @code{@@value} Example:: An easy way to update edition information.
- Defining New Texinfo Commands
- * Defining Macros:: Defining and undefining new commands.
- * Invoking Macros:: Using a macro, once you've defined it.
- * Macro Details:: Limitations of Texinfo macros.
- * @code{@@alias}:: Command aliases.
- * @code{@@definfoenclose}:: Customized highlighting.
- * External Macro Processors:: @code{#line} directives.
- External Macro Processors: Line Directives
- * @samp{#line} Directive::
- * TeX: @samp{#line} and @TeX{}.
- * Syntax: @samp{#line} Syntax Details.
- Include Files
- * Using Include Files:: How to use the @code{@@include} command.
- * @code{texinfo-multiple-files-update}:: How to create and update nodes and
- menus when using included files.
- * Include Files Requirements:: @code{texinfo-multiple-files-update} needs.
- * Sample Include File:: A sample outer file with included files
- within it; and a sample included file.
- * Include Files Evolution:: How use of the @code{@@include} command
- has changed over time.
- Formatting and Printing Hardcopy
- * Use @TeX{}:: Use @TeX{} to format for hardcopy.
- * Format with @command{texi2dvi}:: The simplest way to format.
- * Format with @command{tex}/@command{texindex}:: Formatting with explicit shell commands.
- * Print with @command{lpr}:: How to print.
- * Within Emacs:: How to format and print from an Emacs shell.
- * Texinfo Mode Printing:: How to format and print in Texinfo mode.
- * Compile-Command:: How to print using Emacs's compile command.
- * Requirements Summary:: @TeX{} formatting requirements summary.
- * Preparing for @TeX{}:: What to do before you use @TeX{}.
- * Overfull hboxes:: What are and what to do with overfull hboxes.
- * @code{@@smallbook}:: How to print small format books and manuals.
- * A4 Paper:: How to print on A4 or A5 paper.
- * @code{@@pagesizes}:: How to print with customized page sizes.
- * Cropmarks and Magnification:: How to print marks to indicate the size
- of pages and how to print scaled up output.
- * PDF Output:: Portable Document Format output.
- * Obtaining @TeX{}:: How to obtain @TeX{}.
- Format with @command{tex}/@command{texindex}
- * Formatting Partial Documents::
- * Details of @command{texindex}::
- @command{texi2any}: The Generic Translator for Texinfo
- * Reference Implementation:: @command{texi2any}: the reference implementation.
- * Invoking @command{texi2any}:: Running the translator from a shell.
- * @command{texi2any} Environment Variables::
- * @command{texi2any} Printed Output:: Calling @command{texi2dvi}.
- * Pointer Validation:: How to check that pointers point somewhere.
- * Customization Variables:: Configuring @command{texi2any}.
- * Internationalization of Document Strings:: Translating program-inserted text.
- * Invoking @command{pod2texi}:: Translating Perl pod to Texinfo.
- * @command{texi2html}:: An ancestor of @command{texi2any}.
- Customization Variables
- * Commands: Customization Variables for @@-Commands.
- * Options: Customization Variables and Options.
- * HTML: HTML Customization Variables.
- * Other: Other Customization Variables.
- Creating and Installing Info Files
- * Creating an Info File::
- * Installing an Info File::
- Creating an Info File
- * @command{makeinfo} Advantages:: @command{makeinfo} provides better error checking.
- * @code{makeinfo} in Emacs:: How to run @code{makeinfo} from Emacs.
- * @code{texinfo-format} commands:: Two Info formatting commands written
- in Emacs Lisp are an alternative
- to @code{makeinfo}.
- * Batch Formatting:: How to format for Info in Emacs batch mode.
- * Tag and Split Files:: How tagged and split files help Info
- to run better.
- Installing an Info File
- * Directory File:: The top level menu for all Info files.
- * New Info File:: Listing a new Info file.
- * Other Info Directories:: How to specify Info files that are
- located in other directories.
- * Installing Dir Entries:: How to specify what menu entry to add
- to the Info directory.
- * Invoking @command{install-info}:: @code{install-info} options.
- Generating HTML
- * HTML Translation:: Details of the HTML output.
- * HTML Splitting:: How HTML output is split.
- * HTML CSS:: Influencing HTML output with Cascading Style Sheets.
- * HTML Xref:: Cross-references in HTML output.
- HTML Cross-references
- * Link Basics: HTML Xref Link Basics.
- * Node Expansion: HTML Xref Node Name Expansion.
- * Command Expansion: HTML Xref Command Expansion.
- * 8-bit Expansion: HTML Xref 8-bit Character Expansion.
- * Mismatch: HTML Xref Mismatch.
- * Configuration: HTML Xref Configuration. htmlxref.cnf.
- * Preserving links: HTML Xref Link Preservation. MANUAL-noderename.cnf.
- Sample Texinfo Files
- * Short Sample Texinfo File::
- * GNU Sample Texts::
- * Verbatim Copying License::
- * All-permissive Copying License::
- Using Texinfo Mode
- * Texinfo Mode Overview:: How Texinfo mode can help you.
- * Emacs Editing:: Texinfo mode adds to GNU Emacs' general
- purpose editing features.
- * Inserting:: How to insert frequently used @@-commands.
- * Showing the Structure:: How to show the structure of a file.
- * Updating Nodes and Menus:: How to update or create new nodes and menus.
- * Info Formatting:: How to format for Info.
- * Printing:: How to format and print part or all of a file.
- * Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
- Updating Nodes and Menus
- * Updating Commands:: Five major updating commands.
- * Updating Requirements:: How to structure a Texinfo file for
- using the updating command.
- * Other Updating Commands:: How to indent descriptions, insert
- missing nodes lines, and update
- nodes in sequence.
- Page Headings
- * Headings Introduced:: Conventions for using page headings.
- * Heading Format:: Standard page heading formats.
- * Heading Choice:: How to specify the type of page heading.
- * Custom Headings:: How to create your own headings and footings.
- Catching Mistakes
- * @command{makeinfo} Preferred:: @code{makeinfo} finds errors.
- * Debugging with Info:: How to catch errors with Info formatting.
- * Debugging with @TeX{}:: How to catch errors with @TeX{} formatting.
- * Using @code{texinfo-show-structure}:: How to use @code{texinfo-show-structure}.
- * Using @code{occur}:: How to list all lines containing a pattern.
- * Running @code{Info-validate}:: How to find badly referenced nodes.
- Finding Badly Referenced Nodes
- * Using @code{Info-validate}:: How to run @code{Info-validate}.
- * Unsplit:: How to create an unsplit file.
- * Tagifying:: How to tagify a file.
- * Splitting:: How to split a file manually.
- Info Format Specification
- * General: Info Format General Layout.
- * Text: Info Format Text Constructs.
- Info Format General Layout
- * Whole: Info Format Whole Manual. Split vs.@: nonsplit manuals.
- * Preamble: Info Format Preamble.
- * Indirect: Info Format Indirect Table.
- * Tag table: Info Format Tag Table.
- * Local variables: Info Format Local Variables.
- * Regular nodes: Info Format Regular Nodes.
- Info Format Text Constructs
- * Info Format Menu::
- * Info Format Image::
- * Info Format Printindex::
- * Info Format Cross Reference::
- @end detailmenu
- @end menu
- @c Reward readers for getting to the end of the menu :).
- @c Contributed by Arnold Robbins.
- @quotation
- Documentation is like sex: when it is good, it is very, very good; and
- when it is bad, it is better than nothing.
- ---Dick Brandon
- @end quotation
- @node Copying Conditions
- @unnumbered Texinfo Copying Conditions
- @cindex Copying conditions
- @cindex Conditions for copying Texinfo
- @cindex Free software
- @cindex Libre software
- GNU Texinfo is @dfn{free software}; this means that everyone is free
- to use it and free to redistribute it on certain conditions. Texinfo
- is not in the public domain; it is copyrighted and there are
- restrictions on its distribution, but these restrictions are designed
- to permit everything that a good cooperating citizen would want to do.
- What is not allowed is to try to prevent others from further sharing
- any version of Texinfo that they might get from you.
- Specifically, we want to make sure that you have the right to give away
- copies of the programs that relate to Texinfo, that you receive source
- code or else can get it if you want it, that you can change these
- programs or use pieces of them in new free programs, and that you know
- you can do these things.
- To make sure that everyone has such rights, we have to forbid you to
- deprive anyone else of these rights. For example, if you distribute
- copies of the Texinfo related programs, you must give the recipients all
- the rights that you have. You must make sure that they, too, receive or
- can get the source code. And you must tell them their rights.
- Also, for our own protection, we must make certain that everyone finds
- out that there is no warranty for the programs that relate to Texinfo.
- If these programs are modified by someone else and passed on, we want
- their recipients to know that what they have is not what we distributed,
- so that any problems introduced by others will not reflect on our
- reputation.
- The precise conditions of the licenses for the programs currently
- being distributed that relate to Texinfo are found in the General
- Public Licenses that accompany them. This manual is covered by the
- GNU Free Documentation License (@pxref{GNU Free Documentation
- License}).
- @node Overview
- @chapter Overview of Texinfo
- @cindex Overview of Texinfo
- @cindex Texinfo overview
- @cindex Using Texinfo in general
- @cindex Texinfo, introduction to
- @cindex Introduction to Texinfo
- @anchor{Using Texinfo} @c merged node
- @dfn{Texinfo} is a documentation system that uses a single source file
- to produce both online information and printed output. This means
- that instead of writing several different documents, one for each output
- format, you need only write one document.
- Using Texinfo, you can create a printed document (via the @TeX{}
- typesetting system) in PDF or PostScript format, including chapters,
- sections, cross-references, and indices. From the same Texinfo source
- file, you can create an HTML output file suitable for use with a web
- browser, you can create an Info file with special features to make
- browsing documentation easy, and also create a Docbook file or a
- transliteration to XML format.
- @cindex Source file format
- @cindex Semantic markup
- A Texinfo source file is a plain text file containing text interspersed
- with @dfn{@@-commands} (words preceded by an @samp{@@}) that tell the
- Texinfo processors what to do. Texinfo's markup commands are almost
- entirely @dfn{semantic}; that is, they specify the intended meaning
- of text in the document, rather than physical formatting instructions.
- You can edit a Texinfo file with any text editor, but it is especially
- convenient to use GNU Emacs since that editor has a special mode,
- called Texinfo mode, that provides various Texinfo-related features.
- (@xref{Texinfo Mode}.)
- @cindex Limited scope of Texinfo
- Texinfo was devised specifically for the purpose of writing software
- documentation and manuals. If you want to write a good manual for
- your program, Texinfo has many features which we hope will make your
- job easier. However, it provides almost no commands for controlling
- the final formatting. Texinfo is not intended to be a general-purpose
- formatting program, so if you need to lay out a newspaper, devise a
- glossy magazine ad, or follow the exact formatting requirements of
- a publishing house, Texinfo may not be the simplest tool.
- @cindex Spelling of Texinfo
- @cindex Pronunciation of Texinfo
- Spell ``Texinfo'' with a capital ``T'' and the other letters in
- lowercase. The first syllable of ``Texinfo'' is pronounced like
- ``speck'', not ``hex''. This odd pronunciation is derived from the
- pronunciation of @TeX{}. Pronounce @TeX{} as if the @samp{X} were
- the last sound in the name `Bach'. In the word @TeX{}, the @samp{X}
- is, rather than the English letter ``ex'', actually the Greek letter
- ``chi''.
- Texinfo is the official documentation format of the GNU project.
- More information, including manuals for GNU packages, is available
- at the @uref{http://www.gnu.org/doc/, GNU documentation web page}.
- @menu
- * Reporting Bugs:: Submitting effective bug reports.
- * Output Formats:: Overview of the supported output formats.
- * Info Files:: What is an Info file?
- * Printed Books:: Characteristics of a printed book or manual.
- * Adding Output Formats:: Man pages and implementing new formats.
- * History:: Acknowledgements, contributors and genesis.
- @end menu
- @node Reporting Bugs
- @section Reporting Bugs
- @cindex Bugs, reporting
- @cindex Suggestions for Texinfo, making
- @cindex Reporting bugs
- We welcome bug reports and suggestions for any aspect of the Texinfo
- system: programs, documentation, installation, etc. Please email them
- to @email{bug-texinfo@@gnu.org}. You can get the latest version of
- Texinfo via its home page, @uref{http://www.gnu.org/software/texinfo}.
- @cindex Checklist for bug reports
- For bug reports, please include enough information for the maintainers
- to reproduce the problem. Generally speaking, that means:
- @itemize @bullet
- @item The version number of Texinfo and the program(s) or manual(s) involved.
- @item The contents of any input files necessary to reproduce the bug.
- @item Precisely how you ran any program(s) involved.
- @item A description of the problem and samples of any erroneous output.
- @item Hardware and operating system names and versions.
- @item Anything else that you think would be helpful.
- @end itemize
- When in doubt whether something is needed or not, include it. It's
- better to include too much than to leave out something important.
- It is critical to send an actual input file that reproduces the
- problem. What's not critical is to ``narrow down'' the example to the
- smallest possible input---the actual input with which you discovered
- the bug will suffice. (Of course, if you do do experiments, the
- smaller the input file, the better.)
- @cindex Patches, contributing
- Patches are most welcome; if possible, please make them with
- @samp{@w{diff -c}} (@pxref{Top,,, diffutils, Comparing and Merging
- Files}) and include @file{ChangeLog} entries (@pxref{Change Log,,,
- emacs, The GNU Emacs Manual}), and follow the existing coding style.
- @node Output Formats
- @section Output Formats
- @cindex Output formats
- @cindex Back-end output formats
- Here is a brief overview of the output formats currently supported by
- Texinfo.
- @table @asis
- @item Info
- @cindex Info output, overview
- (Generated via @command{makeinfo}.) Info format is mostly a plain
- text transliteration of the Texinfo source. It adds a few control
- characters to provide navigational information for cross-references,
- indices, and so on. The Emacs Info subsystem (@pxref{Top,,, info,
- Info}), and the standalone @command{info} program (@pxref{Top,,,
- info-stnd, GNU Info}), among others, can read these files. @xref{Info
- Files}, and @ref{Creating and Installing Info Files}.
- @item Plain text
- @cindex Plain text output, overview
- (Generated via @command{makeinfo --plaintext}.) This is almost the
- same as Info output with the navigational control characters are
- omitted.
- @item HTML
- @cindex HTML output, overview
- @cindex W3 consortium
- @cindex Mozilla
- @cindex Lynx
- @cindex Emacs-W3
- (Generated via @command{makeinfo --html}.) HTML, standing for Hyper
- Text Markup Language, has become the most commonly used language for
- writing documents on the World Wide Web. Web browsers, such as
- Mozilla, Lynx, and Emacs-W3, can render this language online. There
- are many versions of HTML, both different standards and
- browser-specific variations. @command{makeinfo} tries to use a subset
- of the language that can be interpreted by any common browser,
- intentionally not using many newer or less widely-supported tags.
- Although the native output is thus rather plain, it can be customized
- at various levels, if desired. For details of the HTML language and
- much related information, see @uref{http://www.w3.org/MarkUp/}.
- @xref{Generating HTML}.
- @item DVI
- @cindex DVI output, overview
- @pindex dvips
- @pindex xdvi
- (Generated via @command{texi2dvi}.) The DeVIce Independent binary
- format is output by the @TeX{} typesetting program
- (@uref{http://tug.org}). This is then read by a DVI `driver', which
- knows the actual device-specific commands that can be viewed or
- printed, notably Dvips for translation to PostScript (@pxref{Top,,,
- dvips, Dvips}) and Xdvi for viewing on an X display
- (@uref{http://sourceforge.net/projects/xdvi/}). @xref{Hardcopy}.
- (Be aware that the Texinfo language is very different from and much
- stricter than @TeX{}'s usual languages: plain @TeX{}, @LaTeX{},
- Con@TeX{}t, etc.)
- @item PostScript
- @cindex PostScript output, overview
- (Generated via @command{texi2dvi --ps}.) PostScript is a page
- description language that became widely used around 1985 and is still
- used today. @uref{http://en.wikipedia.org/wiki/PostScript} gives a
- basic description and more preferences. By default, Texinfo uses the
- @command{dvips} program to convert @TeX{}'s DVI output to PostScript.
- @xref{Top,,, dvips, Dvips}.
- @item PDF
- @cindex PDF output, overview
- @cindex Beebe, Nelson
- (Generated via @command{texi2dvi --pdf} or @command{texi2pdf}.) This
- format was developed by Adobe Systems for portable document
- interchange, based on their previous PostScript language. It can
- represent the exact appearance of a document, including fonts and
- graphics, and supporting arbitrary scaling. It is intended to be
- platform-independent and easily viewable, among other design goals;
- @uref{http://en.wikipedia.org/wiki/Portable_Document_Format} and
- @uref{http://tug.org/TUGboat/tb22-3/tb72beebe-pdf.pdf} have some
- background. By default, Texinfo uses the @command{pdftex} program, an
- extension of @TeX{}, to output PDF; see
- @uref{http://tug.org/applications/pdftex}. @xref{PDF Output}.
- @item Docbook
- @cindex Docbook output, overview
- @cindex XML Docbook output, overview
- (Generated via @command{makeinfo --docbook}.) This is an XML-based
- format developed some years ago, primarily for technical
- documentation. It therefore bears some resemblance, in broad
- outline, to Texinfo. See @uref{http://www.docbook.org}. Various
- converters from Docbook @emph{to} Texinfo have also been developed;
- see the Texinfo web pages.
- @item XML
- @cindex XML Texinfo output, overview
- @cindex Texinfo XML output, overview
- @cindex DTD, for Texinfo XML
- @pindex texinfo.dtd
- @pindex txixml2texi
- (Generated via @command{makeinfo --xml}.) XML is a generic syntax
- specification usable for any sort of content (a reference is at
- @uref{http://www.w3.org/XML}). The @command{makeinfo} XML output,
- unlike all the other output formats, is a transliteration of the
- Texinfo source rather than processed output. That is, it translates
- the Texinfo markup commands into XML syntax, for further processing by
- XML tools. The XML contains enough information to recreate the
- original content, except for syntactic constructs such as Texinfo
- macros and conditionals. The Texinfo source distribution includes a
- utility script @file{txixml2texi} to do that backward transformation.
- The details of the output syntax are defined in an XML DTD as usual,
- which is contained in a file @file{texinfo.dtd} included in the
- Texinfo source distribution and available via the Texinfo web pages.
- Texinfo XML files, and XML files in general, cannot be viewed in
- typical web browsers; they won't follow the DTD reference and as a
- result will simply report a (misleading) syntax error.
- @end table
- @node Info Files
- @section Info Files
- @cindex Info files
- As mentioned above, Info format is mostly a plain text transliteration
- of the Texinfo source, with the addition of a few control characters
- to separate nodes and provide navigational information, so that
- Info-reading programs can operate on it.
- Info files are nearly always created by processing a Texinfo source
- document. @command{makeinfo}, also known as @command{texi2any}, is
- the principal command that converts a Texinfo file into an Info file;
- @pxref{Generic Translator @command{texi2any}}.
- Generally, you enter an Info file through a node that by convention is
- named `Top'. This node normally contains just a brief summary of the
- file's purpose, and a large menu through which the rest of the file is
- reached. From this node, you can either traverse the file
- systematically by going from node to node, or you can go to a specific
- node listed in the main menu, or you can search the index menus and then
- go directly to the node that has the information you want. Alternatively,
- with the standalone Info program, you can specify specific menu items on
- the command line (@pxref{Top,,, info, Info}).
- If you want to read through an Info file in sequence, as if it were a
- printed manual, you can hit @key{SPC} repeatedly, or you get the whole
- file with the advanced Info command @kbd{g *}. (@xref{Advanced,,
- Advanced Info commands, info, Info}.)
- The @file{dir} file in the @file{info} directory serves as the
- departure point for the whole Info system. From it, you can reach the
- `Top' nodes of each of the documents in a complete Info system.
- @cindex URI syntax for Info
- If you wish to refer to an Info file via a URI, you can use the
- (unofficial) syntax exemplified by the following. This works with
- Emacs/W3, for example:
- @example
- info:emacs#Dissociated%20Press
- info:///usr/info/emacs#Dissociated%20Press
- info://localhost/usr/info/emacs#Dissociated%20Press
- @end example
- The @command{info} program itself does not follow URIs of any kind.
- @node Printed Books
- @section Printed Books
- @cindex Printed book and manual characteristics
- @cindex Manual characteristics, printed
- @cindex Book characteristics, printed
- @cindex Texinfo printed book characteristics
- @cindex Characteristics, printed books or manuals
- @cindex Knuth, Donald
- A Texinfo file can be formatted and typeset as a printed book or
- manual. To do this, you need @TeX{}, a sophisticated typesetting
- program written by Donald Knuth of Stanford University.
- A Texinfo-based book is similar to any other typeset, printed work: it
- can have a title page, copyright page, table of contents, and preface,
- as well as chapters, numbered or unnumbered sections and subsections,
- page headers, cross-references, footnotes, and indices.
- @TeX{} is a general purpose typesetting program. Texinfo provides a
- file @file{texinfo.tex} that contains information (definitions or
- @dfn{macros}) that @TeX{} uses when it typesets a Texinfo file.
- (@file{texinfo.tex} tells @TeX{} how to convert the Texinfo @@-commands
- to @TeX{} commands, which @TeX{} can then process to create the typeset
- document.) @file{texinfo.tex} contains the specifications for printing
- a document. You can get the latest version of @file{texinfo.tex} from
- the Texinfo home page, @uref{http://www.gnu.org/software/texinfo/}.
- In the United States, documents are most often printed on 8.5 inch by
- 11 inch pages (216@dmn{mm} by 280@dmn{mm}); this is the default size.
- But you can also print for 7 inch by 9.25 inch pages (178@dmn{mm} by
- 235@dmn{mm}, the @code{@@smallbook} size; or on A4 or A5 size paper
- (@code{@@afourpaper}, @code{@@afivepaper}).
- @xref{@code{@@smallbook}}, and @ref{A4 Paper}.
- @cindex Literate programming
- @TeX{} is freely distributable. It is written in a superset of Pascal
- for literate programming called WEB and can be compiled either in
- Pascal or (by using a conversion program that comes with the @TeX{}
- distribution) in C.
- @TeX{} is very powerful and has a great many features. Because a
- Texinfo file must be able to present information both on a
- character-only terminal in Info form and in a typeset book, the
- formatting commands that Texinfo supports are necessarily limited.
- @xref{Obtaining @TeX{}}, for information on acquiring @TeX{}. It is
- not part of the Texinfo distribution.
- @node Adding Output Formats
- @section Adding Output Formats
- @cindex Additional output formats
- The output formats in the previous sections handle a wide variety of
- usage, but of course there is always room for more.
- @cindex Output formats, supporting more
- @cindex SGML-tools output format
- If you are a programmer and would like to contribute to the GNU
- project by implementing additional output formats for Texinfo, that
- would be excellent. The way to do this that would be most useful is
- to write a new back-end for @command{texi2any}, our reference
- implementation of a Texinfo parser; it creates a tree representation
- of the Texinfo input that you can use for the conversion. The
- documentation in the source file
- @file{tp/Texinfo/Convert/Converter.pm} is a good place to start.
- @xref{Generic Translator @command{texi2any}}.
- Another viable approach is use the Texinfo XML output from
- @command{texi2any} as your input. This XML is an essentially complete
- representation of the input, but without the Texinfo syntax and option
- peculiarities, as described above.
- @cindex Texinfo parsers, discouraging more
- If you still cannot resist the temptation of writing a new program
- that reads Texinfo source directly, let us give some more caveats:
- please do not underestimate the amount of work required. Texinfo is
- by no means a simple language to parse correctly, and remains under
- development, so you would be committing to an ongoing task. You
- are advised to check that the tests of the language that come with
- @command{texi2any} give correct results with your new program.
- @cindex Man page output, not supported
- From time to time, proposals are made to generate traditional Unix man
- pages from Texinfo source. However, because man pages have a strict
- conventional format, creating a good man page requires a completely
- different source from that needed for the typical Texinfo applications
- of writing a good user tutorial and/or a good reference manual. This
- makes generating man pages incompatible with the Texinfo design
- goal of not having to document the same information in different
- ways for different output formats. You might as well write the man
- page directly.
- @pindex help2man
- @cindex O'Dea, Brendan
- As an alternative way to support man pages, you may find the program
- @command{help2man} to be useful. It generates a traditional man page
- from the @samp{--help} output of a program. In fact, the man pages
- for the programs in the Texinfo distribution are generated with this.
- It is GNU software written by Brendan O'Dea, available from
- @uref{http://www.gnu.org/software/help2man}.
- @node History
- @section History
- @cindex Stallman, Richard M.
- @cindex Chassell, Robert J.
- @cindex Fox, Brian
- @cindex Berry, Karl
- Richard M. Stallman invented the Texinfo format, wrote the initial
- processors, and created Edition 1.0 of this manual. Robert@tie{}J.
- Chassell greatly revised and extended the manual, starting with
- Edition 1.1. Brian Fox was responsible for the standalone Texinfo
- distribution until version 3.8, and originally wrote the standalone
- @command{makeinfo} and @command{info} programs. Karl Berry has
- continued maintenance since Texinfo 3.8 (manual edition 2.22).
- @cindex Pinard, Fran@,{c}ois
- @cindex Schwab, Andreas
- @cindex Weinberg, Zack
- @cindex Weisshaus, Melissa
- @cindex Zaretskii, Eli
- @cindex Zuhn, David D.
- Our thanks go out to all who helped improve this work, particularly
- the indefatigable Eli Zaretskii and Andreas Schwab, who have provided
- patches beyond counting. Fran@,{c}ois Pinard and David@tie{}D. Zuhn,
- tirelessly recorded and reported mistakes and obscurities. Zack
- Weinberg did the impossible by implementing the macro syntax in
- @file{texinfo.tex}. Thanks to Melissa Weisshaus for her frequent
- reviews of nearly similar editions. Dozens of others have contributed
- patches and suggestions, they are gratefully acknowledged in the
- @file{ChangeLog} file. Our mistakes are our own.
- @cindex History of Texinfo
- @cindex Texinfo history
- @subheading Beginnings
- @cindex Scribe
- @cindex Reid, Brian
- In the 1970's at CMU, Brian Reid developed a program and format named
- Scribe to mark up documents for printing. It used the @code{@@}
- character to introduce commands, as Texinfo does. Much more
- consequentially, it strove to describe document contents rather than
- formatting, an idea wholeheartedly adopted by Texinfo.
- @cindex Bolio
- @cindex Bo@TeX{}
- Meanwhile, people at MIT developed another, not too dissimilar format
- called Bolio. This then was converted to using @TeX{} as its typesetting
- language: Bo@TeX{}. The earliest Bo@TeX{} version seems to have been
- 0.02 on October 31, 1984.
- Bo@TeX{} could only be used as a markup language for documents to be
- printed, not for online documents. Richard Stallman (RMS) worked on
- both Bolio and Bo@TeX{}. He also developed a nifty on-line help format
- called Info, and then combined Bo@TeX{} and Info to create Texinfo, a
- mark up language for text that is intended to be read both online and
- as printed hard copy.
- Moving forward, the original translator to create Info was written
- (primarily by RMS and Bob Chassell) in Emacs Lisp, namely the
- @code{texinfo-format-buffer} and other functions. In the early 1990s,
- Brian Fox reimplemented the conversion program in C, now called
- @command{makeinfo}.
- @subheading Reimplementing in Perl
- @cindex Cons, Lionel
- @cindex Dumas, Patrice
- In 2012, the C @command{makeinfo} was itself replaced by a Perl
- implementation generically called @command{texi2any}. This version
- supports the same level of output customization as
- @command{texi2html}, an independent program originally written by
- Lionel Cons, later with substantial work by many others. The many
- additional features needed to make @command{texi2html} a replacement
- for @command{makeinfo} were implemented by Patrice Dumas. The first
- never-released version of @command{texi2any} was based on the
- @command{texi2html} code. That implementation, however, was abandoned
- in favor of the current program, which parses the Texinfo input into a
- tree for processing. It still supports nearly all the features of
- @command{texi2html}.
- The new Perl program is much slower than the old C program. We hope
- the speed gap will close in the future, but it may not ever be
- entirely comparable. So why did we switch? In short, we intend and
- hope that the present program will be much easier than the previous C
- implementation of @command{makeinfo} to extend to different output
- styles, back-end output formats, and all other customizations.
- In more detail:
- @itemize @bullet
- @item HTML customization. Many GNU and other free software packages
- had been happily using the HTML customization features in
- @command{texi2html} for years. Thus, in effect two independent
- implementations of the Texinfo language had developed, and keeping
- them in sync was not simple. Adding the HTML customization possible
- in @command{texi2html} to a C program would have been an
- enormous effort.
- @item Unicode, and multilingual support generally, especially of east
- Asian languages. Although of course it's perfectly plausible to write
- such support in C, in the particular case of @command{makeinfo}, it
- would have been tantamount to rewriting the entire program. In Perl,
- much of that comes essentially for free.
- @item Additional back-ends. The @command{makeinfo} code had become
- convoluted to the point where adding a new back-end was quite complex,
- requiring complex interactions with existing back-ends. In contrast,
- our Perl implementation provides a clean tree-based representation for
- all back-ends to work from. People have requested numerous different
- back-ends (@LaTeX{}, the latest (X)HTML, @dots{}), and they will now
- be much more feasible to implement. Which leads to the last item:
- @item Making contributions easier. In general, due to the cleaner
- structure, the Perl program should be considerably easier than the C
- for anyone to read and contribute to, with the resulting obvious
- benefits.
- @end itemize
- @xref{Reference Implementation}, for more on the rationale for and
- role of @command{texi2any}.
- @node Writing a Texinfo File
- @chapter Writing a Texinfo File
- This chapter describes Texinfo syntax and what is required in a Texinfo
- file, and gives a short sample file.
- @menu
- * Conventions:: General rules for writing a Texinfo file.
- * Comments:: Writing comments and ignored text in general.
- * Minimum:: What a Texinfo file must have.
- * Short Sample:: A short sample Texinfo file.
- @end menu
- @node Conventions
- @section General Syntactic Conventions
- @cindex General syntactic conventions
- @cindex Syntactic conventions
- @cindex Conventions, syntactic
- @cindex Characters, basic input
- @anchor{Formatting Commands} @c old name
- This section describes the general conventions used in all Texinfo documents.
- @itemize @bullet
- @item
- @cindex Source files, characters used
- All printable ASCII characters except @samp{@@}, @samp{@{} and
- @samp{@}} can appear in a Texinfo file and stand for themselves.
- @samp{@@} is the escape character which introduces commands, while
- @samp{@{} and @samp{@}} are used to surround arguments to certain
- commands. To put one of these special characters into the document, put
- an @samp{@@} character in front of it, like this: @samp{@@@@},
- @samp{@@@{}, and @samp{@@@}}.
- @item
- @cindex @@-commands
- @cindex Formatting commands
- In a Texinfo file, the commands you write to describe the contents of
- the manual are preceded by an @samp{@@} character; they are called
- @dfn{@@-commands}. (The @samp{@@} in Texinfo has the same meaning that
- @samp{\} has in plain @TeX{}.)
- @cindex Braces, when to use
- Depending on what they do or what arguments@footnote{The word
- @dfn{argument} comes from the way it is used in mathematics and does not
- refer to a dispute between two people; it refers to the information
- presented to the command. According to the @cite{Oxford English
- Dictionary}, the word derives from the Latin for @dfn{to make clear,
- prove}; thus it came to mean `the evidence offered as proof', which is
- to say, `the information offered', which led to its mathematical
- meaning. In its other thread of derivation, the word came to mean `to
- assert in a manner against which others may make counter assertions',
- which led to the meaning of `argument' as a dispute.} they take, you
- need to write @@-commands on lines of their own, or as part of
- sentences. As a general rule, a command requires braces if it mingles
- among other text; but it does not need braces if it is on a line of its
- own. For more details of Texinfo command syntax, see @ref{Command
- Syntax}.
- @item
- Whitespace following an @@-command name is optional and (usually)
- ignored if present. The exceptions are contexts when whitespace is
- significant, e.g., an @code{@@example} environment.
- @item
- Texinfo supports the usual quotation marks used in English and in
- other languages; see @ref{Inserting Quotation Marks}.
- @item
- @cindex Multiple dashes in source
- @cindex Dashes in source
- @cindex Hyphens in source, two or three in a row
- @cindex Em dash, producing
- @cindex En dash, producing
- Use three hyphens in a row, @samp{---}, to produce a long dash---like
- this (called an @dfn{em dash}), used for punctuation in sentences.
- Use two hyphens, @samp{--}, to produce a medium dash (called an
- @dfn{en dash}), used primarily for numeric ranges, as in ``June
- 25--26''. Use a single hyphen, @samp{-}, to produce a standard hyphen
- used in compound words. For display on the screen, Info reduces three
- hyphens to two and two hyphens to one (not transitively!). Of course,
- any number of hyphens in the source remain as they are in literal
- contexts, such as @code{@@code} and @code{@@example}.
- @item
- @cindex Form feed characters
- @cindex @kbd{CTRL-l}
- Form feed (@kbd{CTRL-l}) characters in the input are handled as
- follows:
- @table @asis
- @item PDF/DVI
- In normal text, treated as ending any open paragraph; essentially
- ignored between paragraphs.
- @item Info
- Output as-is between paragraphs (their most common use); in other
- contexts, they may be treated as regular spaces (and thus consolidated
- with surrounding whitespace).
- @item HTML
- Written as a numeric entity except contexts where spaces are ignored;
- for example, in @samp{@@footnote@{ ^L foo@}}, the form feed is
- ignored.
- @item XML
- Keep them everywhere; in attributes, escaped as @samp{\f}; also,
- @samp{\} is escaped as @samp{\\} and newline as @samp{\n}.
- @item Docbook
- Completely removed, as they are not allowed.
- @end table
- As you can see, because of these differing requirements of the output
- formats, it's not possible to use form feeds completely portably.
- @item
- @cindex Tabs; don't use!
- @strong{Caution:} Last, do not use tab characters in a Texinfo file!
- (Except perhaps in verbatim modes.) @TeX{} uses variable-width fonts,
- which means that it is impractical at best to define a tab to work in
- all circumstances. Consequently, @TeX{} treats tabs like single
- spaces, and that is not what they look like in the source.
- Furthermore, @code{makeinfo} does nothing special with tabs, and thus
- a tab character in your input file will usually have a different
- appearance in the output.
- @noindent
- To avoid this problem, Texinfo mode in GNU Emacs inserts
- multiple spaces when you press the @key{TAB} key. Also, you can run
- @code{untabify} in Emacs to convert tabs in a region to multiple
- spaces, or use the @code{unexpand} command from the shell.
- @end itemize
- @node Comments
- @section Comments
- @cindex Comments
- @findex comment
- @findex c
- You can write comments in a Texinfo file by using the @code{@@comment}
- command, which may be abbreviated to @code{@@c}. Such comments are
- for a person looking at the Texinfo source file. All the text on a
- line that follows either @code{@@comment} or @code{@@c} is a comment;
- the rest of the line does not appear in the visible output. (To be
- precise, the character after the @code{@@c} or @code{@@comment} must
- be something other than a dash or alphanumeric, or it will be taken as
- part of the command.)
- Often, you can write the @code{@@comment} or @code{@@c} in the middle
- of a line, and only the text that follows after the @code{@@comment}
- or @code{@@c} command does not appear; but some commands, such as
- @code{@@settitle}, work on a whole line. You cannot use @code{@@comment}
- or @code{@@c} within a line beginning with such a command.
- @findex DEL @r{(comment character)}
- @cindex Catcode for comments in @TeX{}
- In cases of nested command invocations, complicated macro definitions,
- etc., @code{@@c} and @code{@@comment} may provoke an error when
- processing with @TeX{}. Therefore, you can also use the @kbd{DEL}
- character (ASCII 127 decimal, 0x7f hex, 0177 octal) as a true @TeX{}
- comment character (catcode 14, in @TeX{} internals). Everything on
- the line after the @kbd{DEL} will be ignored.
- @cindex Ignored text
- @cindex Unprocessed text
- @findex ignore
- You can also have long stretches of text ignored by the Texinfo
- processors with the @code{@@ignore} and @code{@@end ignore} commands.
- Write each of these commands on a line of its own, starting each
- command at the beginning of the line. Text between these two commands
- does not appear in the processed output. You can use @code{@@ignore}
- and @code{@@end ignore} for writing comments. (For some caveats
- regarding nesting of such commands, @pxref{Conditional Nesting}.)
- @node Minimum
- @section What a Texinfo File Must Have
- @cindex Minimal Texinfo file (requirements)
- @cindex Must have in Texinfo file
- @cindex Required in Texinfo file
- @cindex Texinfo file minimum
- By convention, the name of a Texinfo file ends with one of the
- extensions @file{.texinfo}, @file{.texi}, @file{.txi}, or
- @file{.tex}.@footnote{The longer extensions are preferred, since they
- describe more clearly to a human reader the nature of the file. The
- shorter extensions are for operating systems that cannot handle long
- file names.}
- In order to be made into a printed manual and other output
- formats, a Texinfo file must begin with lines like this:
- @example
- @group
- \input texinfo
- @@settitle @var{name-of-manual}
- @end group
- @end example
- @noindent
- The contents of the file follow this beginning, and then you
- must end the Texinfo source with a line like this:
- @example
- @@bye
- @end example
- @findex \input @r{(raw @TeX{} startup)}
- @noindent
- Here's an explanation:
- @itemize @bullet
- @item
- The @samp{\input texinfo} line tells @TeX{} to use the
- @file{texinfo.tex} file, which tells @TeX{} how to translate the Texinfo
- @@-commands into @TeX{} typesetting commands. (Note the use of the
- backslash, @samp{\}; this is correct for @TeX{}.)
- @item
- The @code{@@settitle} line specifies a title for the page headers (or
- footers) of the printed manual, and the default title and document
- description for the @samp{<head>} in HTML@. Strictly speaking,
- @code{@@settitle} is optional---if you don't mind your document being
- titled `Untitled'.
- @item
- The @code{@@bye} line at the end of the file on a line of its own tells
- the formatters that the file is ended and to stop formatting. If you
- leave this out, you'll be dumped at @TeX{}'s prompt at the end of the
- run.
- @end itemize
- Furthermore, you will usually provide a Texinfo file with a title page,
- indices, and the like, all of which are explained in this manual. But
- the minimum, which can be useful for short documents, is just the two
- lines at the beginning and the one line at the end.
- @node Short Sample
- @section A Short Sample Texinfo File
- @cindex Sample Texinfo file, with comments
- Here is a short but complete Texinfo file, so you can see how Texinfo
- source appears in practice. The first three parts of the file are
- mostly boilerplate: when writing a manual, you simply change
- the names as appropriate.
- The complete file, without interspersed comments, is shown in
- @ref{Short Sample Texinfo File}.
- @xref{Beginning and Ending a File}, for more documentation on the
- commands listed here.
- @subheading Header
- @noindent
- The header tells @TeX{} which definitions file to
- use, names the manual, and carries out other such housekeeping tasks.
- @example
- @group
- \input texinfo
- @@settitle Sample Manual 1.0
- @end group
- @end example
- @subheading Summary Description and Copyright
- This segment describes the document and contains the copyright notice
- and copying permissions. This is done with the @code{@@copying} command.
- @noindent
- A real manual includes more text here, according to the license under
- which it is distributed. @xref{GNU Sample Texts}.
- @example
- @group
- @@copying
- This is a short example of a complete Texinfo file, version 1.0.
- Copyright @@copyright@{@} 2016 Free Software Foundation, Inc.
- @@end copying
- @end group
- @end example
- @subheading Titlepage, Copyright, Contents
- The title and copyright segment contains the title and copyright
- pages for the printed manual. The segment must be enclosed between
- @code{@@titlepage} and @code{@@end titlepage} commands. The title and
- copyright page does not appear in the online output.
- @noindent
- We use the @code{@@insertcopying} command to
- include the permission text from the previous section, instead of
- writing it out again; it is output on the back of the title page. The
- @code{@@contents} command generates a table of contents.
- @example
- @group
- @@titlepage
- @@title Sample Title
- @end group
- @group
- @@c The following two commands start the copyright page.
- @@page
- @@vskip 0pt plus 1filll
- @@insertcopying
- @@end titlepage
- @end group
- @@c Output the table of contents at the beginning.
- @@contents
- @end example
- @subheading `Top' Node and Master Menu
- The `Top' node starts off the online output; it does not appear in the
- printed manual. We repeat the short description from the beginning of
- the @samp{@@copying} text, but there's no need to repeat the copyright
- information, so we don't use @samp{@@insertcopying} here.
- The @samp{@@top} command itself helps @command{makeinfo} determine
- the relationships between nodes. The `Top' node contains at least a
- top-level @dfn{menu} listing the chapters, and possibly a @dfn{Master
- Menu} listing all the nodes in the entire document.
- @example
- @@ifnottex
- @@node Top
- @@top Short Sample
- This is a short sample Texinfo file.
- @@end ifnottex
- @group
- @@menu
- * First Chapter:: The first chapter is the
- only chapter in this sample.
- * Index:: Complete index.
- @@end menu
- @end group
- @end example
- @subheading The Body of the Document
- @noindent
- The body segment contains all the text of the document, but not the
- indices or table of contents. This example illustrates a node and a
- chapter containing an enumerated list.
- @example
- @group
- @@node First Chapter
- @@chapter First Chapter
- @@cindex chapter, first
- @end group
- @group
- This is the first chapter.
- @@cindex index entry, another
- @end group
- @group
- Here is a numbered list.
- @@enumerate
- @@item
- This is the first item.
- @@item
- This is the second item.
- @@end enumerate
- @end group
- @end example
- @subheading The End of the Document
- This may contain commands for printing indices, and
- closes with the @code{@@bye} command, which marks the end of the document.
- @example
- @group
- @@node Index
- @@unnumbered Index
- @end group
- @group
- @@printindex cp
- @@bye
- @end group
- @end example
- @subheading Some Results
- Here is what the contents of the first chapter of the sample look like:
- @sp 1
- @need 700
- @quotation
- This is the first chapter.
- Here is a numbered list.
- @enumerate
- @item
- This is the first item.
- @item
- This is the second item.
- @end enumerate
- @end quotation
- @node Beginning and Ending a File
- @anchor{Beginning a File} @c old name
- @chapter Beginning and Ending a Texinfo File
- @cindex Beginning a Texinfo file
- @cindex Texinfo file beginning
- @cindex File beginning
- This chapter expands on the minimal complete Texinfo source file
- previously given (@pxref{Short Sample}).
- Certain pieces of information must be provided at the beginning of a
- Texinfo file, such the title of the document and the Top node. A table
- of contents is also generally produced here.
- @cindex Frontmatter, text in
- Straight text outside of any command before the Top node should be
- avoided. Such text is treated differently in the different output
- formats: at the time of writing, it is visible in @TeX{} and HTML, by
- default not shown in Info readers, and so on.
- @menu
- * Sample Beginning:: A sample beginning for a Texinfo file.
- * Texinfo File Header:: The first lines.
- * Document Permissions:: Ensuring your manual is free.
- * Titlepage & Copyright Page:: Creating the title and copyright pages.
- * Contents:: How to create a table of contents.
- * The Top Node:: Creating the `Top' node and master menu.
- * Global Document Commands:: Affecting formatting throughout.
- * Ending a File:: What is at the end of a Texinfo file?
- @end menu
- @node Sample Beginning
- @section Sample Texinfo File Beginning
- @cindex Example beginning of Texinfo file
- The following sample shows what is needed. The elements given here are
- explained in more detail in the following sections. Other commands are
- often included at the beginning of Texinfo files, but the ones here are
- the most critical.
- @xref{GNU Sample Texts}, for the full texts to be used in GNU manuals.
- @example
- \input texinfo
- @@settitle @var{name-of-manual} @var{version}
- @@copying
- This manual is for @var{program}, version @var{version}.
- Copyright @@copyright@{@} @var{years} @var{copyright-owner}.
- @group
- @@quotation
- Permission is granted to @dots{}
- @@end quotation
- @@end copying
- @end group
- @group
- @@titlepage
- @@title @var{name-of-manual-when-printed}
- @@subtitle @var{subtitle-if-any}
- @@subtitle @var{second-subtitle}
- @@author @var{author}
- @end group
- @group
- @@c The following two commands
- @@c start the copyright page.
- @@page
- @@vskip 0pt plus 1filll
- @@insertcopying
- @end group
- Published by @dots{}
- @@end titlepage
- @@c So the toc is printed at the start.
- @@contents
- @@ifnottex
- @@node Top
- @@top @var{title}
- This manual is for @var{program}, version @var{version}.
- @@end ifnottex
- @group
- @@menu
- * First Chapter:: Getting started @dots{}
- * Second Chapter:: @dots{}
- @dots{}
- * Copying:: Your rights and freedoms.
- @@end menu
- @end group
- @group
- @@node First Chapter
- @@chapter First Chapter
- @@cindex first chapter
- @@cindex chapter, first
- @dots{}
- @end group
- @end example
- @node Texinfo File Header
- @section Texinfo File Header
- @cindex Header for Texinfo files
- @cindex Texinfo file header
- Texinfo files start with at least two lines. These are the
- @code{\input texinfo} line and the @code{@@settitle} line.
- Also, if you want to format just part of the Texinfo file in Emacs,
- you must write the @code{@@settitle} line between start-of-header and
- end-of-header lines. These start- and end-of-header lines are optional,
- but they do no harm, so you might as well always include them.
- Any command that affects document formatting as a whole makes sense to
- include in the header. @code{@@synindex} (@pxref{@code{@@synindex}}),
- for instance, is another command often included in the header.
- Thus, the beginning of a Texinfo file looks approximately
- like this:
- @example
- @group
- \input texinfo
- @@settitle Sample Manual 1.0
- @end group
- @end example
- (@xref{GNU Sample Texts} for complete sample texts.)
- @menu
- * First Line:: The first line of a Texinfo file.
- * Start of Header:: Formatting a region requires this.
- * @code{@@setfilename}:: Tell Info the name of the Info file.
- * @code{@@settitle}:: Create a title for the printed work.
- * End of Header:: Formatting a region requires this.
- @end menu
- @node First Line
- @subsection The First Line of a Texinfo File
- @cindex First line of a Texinfo file
- @cindex Beginning line of a Texinfo file
- @cindex Header of a Texinfo file
- Every Texinfo file that is to be the top-level input to @TeX{} must begin
- with a line that looks like this:
- @example
- \input texinfo
- @end example
- When the file is processed by @TeX{}, the @samp{\input texinfo} command
- tells @TeX{} to load the macros needed for processing a Texinfo file.
- These are in a file called @file{texinfo.tex}, which should have been
- installed on your system along with either the @TeX{} or Texinfo
- software. @TeX{} uses the backslash, @samp{\}, to mark the beginning of
- a command, exactly as Texinfo uses @samp{@@}. The @file{texinfo.tex}
- file causes the switch from @samp{\} to @samp{@@}; before the switch
- occurs, @TeX{} requires @samp{\}, which is why it appears at the
- beginning of the file.
- You may optionally follow this line with a comment to tell GNU Emacs
- to use Texinfo mode when the file is edited:
- @example
- \input texinfo @@c -*-texinfo-*-
- @end example
- @noindent This may be useful when Emacs doesn't detect the file type
- from the file extension automatically.
- @node Start of Header
- @subsection Start of Header
- @cindex Start of header line
- A start-of-header line is a Texinfo comment that looks like this:
- @example
- @@c %**start of header
- @end example
- Write the start-of-header line on the second line of a Texinfo file.
- Follow the start-of-header line with an @code{@@settitle} line and,
- optionally, with other commands that globally affect the document
- formatting, such as @code{@@synindex} or @code{@@footnotestyle}; and
- then by an end-of-header line (@pxref{End of Header}).
- The start- and end-of-header lines allow you to format only part of a
- Texinfo file for Info or printing. @xref{@code{texinfo-format} commands}.
- The odd string of characters, @samp{%**}, is to ensure that no other
- comment is accidentally taken for a start-of-header line. You can
- change it if you wish by setting the @code{tex-start-of-header} and/or
- @code{tex-end-of-header} Emacs variables. @xref{Texinfo Mode Printing}.
- @node @code{@@setfilename}
- @subsection @code{@@setfilename}: Set the Output File Name
- @anchor{setfilename}@c old name
- @findex setfilename
- @cindex Texinfo requires @code{@@setfilename}
- @cindex Output file name, required
- The @code{@@setfilename} line specifies the name of the output file to
- be generated.
- When present, it should be the first Texinfo command (that is, after
- @samp{\input texinfo}).
- Write the @code{@@setfilename} command at the beginning of a line and
- follow it on the same line by the Info file name.
- @example
- @@setfilename @var{info-file-name}
- @end example
- The name must be different from the name of the
- Texinfo file. There are two conventions for choosing the name: you
- can either remove the extension (such as @samp{.texi}) entirely from
- the input file name, or (recommended) replace it with the @samp{.info}
- extension.
- @cindex Ignored before @code{@@setfilename}
- @cindex @samp{\input} source line ignored
- When a @code{@@setfilename} line is present, the Texinfo processors
- ignore everything written before the @code{@@setfilename} line. This
- is why the very first line of the file (the @code{\input} line) does
- not show up in the output.
- If there is no @code{@@setfilename} line, @code{makeinfo} uses the
- input file name to determine the output name: first, any of the
- extensions @code{.texi}, @code{.tex}, @code{.txi} or @code{.texinfo}
- is removed from the input file name; then, the output format specific
- extension is added---@code{.html} when generating HTML, @code{.info}
- when generating Info, etc. The @code{\input} line is still ignored in
- this processing, as well as leading blank lines.
- When producing another output format, @code{makeinfo} will replace any
- final extension with the output format-specific extension (@samp{html}
- when generating HTML, for example), or add a dot followed by the
- extension (@samp{.html} for HTML) if the given name has no extension.
- @code{@@setfilename} used to be required by the Texinfo processors, and
- some other programs may still expect it to be present; for example,
- Automake (@pxref{Texinfo,,,automake, GNU Automake}).
- @cindex Length of file names
- @cindex File name collision
- @cindex Info file name, choosing
- Although an explicit @samp{.info} extension is preferable, some
- operating systems cannot handle long file names. You can run into a
- problem even when the file name you specify is itself short enough.
- This occurs because the Info formatters split a long Info file into
- short indirect subfiles, and name them by appending @samp{-1},
- @samp{-2}, @dots{}, @samp{-10}, @samp{-11}, and so on, to the original
- file name. (@xref{Tag and Split Files}.) The subfile name
- @file{texinfo.info-10}, for example, is too long for old systems with
- a 14-character limit on filenames; so the Info file name for this
- document is @file{texinfo} rather than @file{texinfo.info}. When
- @code{makeinfo} is running on operating systems such as MS-DOS which
- impose severe limits on file names, it may remove some characters from
- the original file name to leave enough space for the subfile suffix,
- thus producing files named @file{texin-10}, @file{gcc.i12}, etc.
- See also the @option{--output} option in @ref{Invoking @command{texi2any}}.
- @node @code{@@settitle}
- @subsection @code{@@settitle}: Set the Document Title
- @anchor{settitle}@c old name
- @findex settitle
- @cindex Document title, specifying
- A Texinfo file should contain a line that looks like this:
- @example
- @@settitle @var{title}
- @end example
- Write the @code{@@settitle} command at the beginning of a line and
- follow it on the same line by the title. Do not write anything else
- on the line. The @code{@@settitle} command should precede everything
- that generates actual output. The best place for it is right after
- the @code{@@setfilename} command (described in the previous section).
- This command tells @TeX{} the title to use in a header or footer
- for double-sided output, in case such headings are output. For
- more on headings for @TeX{}, see @ref{Heading Generation}.
- @cindex @code{<title>} HTML tag
- In the HTML file produced by @command{makeinfo}, @var{title} serves as
- the document @samp{<title>}. It also becomes the default document
- description in the @samp{<head>} part
- (@pxref{@code{@@documentdescription}}).
- When the title page is used in the output, the title in the
- @code{@@settitle} command does not affect the title as it appears on
- the title page. Thus, the two do not need not to match exactly. A
- practice we recommend is to include the version or edition number of
- the manual in the @code{@@settitle} title; on the title page, the
- version number generally appears as a @code{@@subtitle} so it would
- be omitted from the @code{@@title}. @xref{@code{@@titlepage}}.
- @node End of Header
- @subsection End of Header
- @cindex End of header line
- Follow the header lines with an @w{end-of-header} line, which is a
- Texinfo comment that looks like this:
- @example
- @@c %**end of header
- @end example
- @xref{Start of Header}.
- @node Document Permissions
- @section Document Permissions
- @cindex Document Permissions
- @cindex Copying Permissions
- The copyright notice and copying permissions for a document need to
- appear in several places in the various Texinfo output formats.
- Therefore, Texinfo provides a command (@code{@@copying}) to declare
- this text once, and another command (@code{@@insertcopying}) to
- insert the text at appropriate points.
- @anchor{Software Copying Permissions}@c old node name
- This section is about the license of the Texinfo document. If the
- document is a software manual, the software is typically under a
- different license---for GNU and many other free software packages,
- software is usually released under the GNU GPL, and manuals are
- released under the GNU FDL@. It is helpful to state the license of
- the software of the manual, but giving the complete text of the
- software license is not necessarily required.
- @menu
- * @code{@@copying}:: Declare the document's copying permissions.
- * @code{@@insertcopying}:: Where to insert the permissions.
- @end menu
- @node @code{@@copying}
- @subsection @code{@@copying}: Declare Copying Permissions
- @anchor{copying}@c old name
- @findex copying
- The @code{@@copying} command should be given very early in the document;
- the recommended location is right after the header material
- (@pxref{Texinfo File Header}). It conventionally consists of a sentence
- or two about what the program is, identification of the documentation
- itself, the legal copyright line, and the copying permissions. Here is
- a skeletal example:
- @example
- @@copying
- This manual is for @var{program} (version @var{version}, updated
- @var{date}), which @dots{}
- Copyright @@copyright@{@} @var{years} @var{copyright-owner}.
- @@quotation
- Permission is granted to @dots{}
- @@end quotation
- @@end copying
- @end example
- The @code{@@quotation} has no legal significance; it's there to improve
- readability in some contexts.
- The text of @code{@@copying} is output as a comment at the beginning
- of Info, HTML, XML, and Docbook output files. It is @emph{not} output
- implicitly in plain text or @TeX{}; it's up to you to use
- @code{@@insertcopying} to emit the copying information. See the next
- section for details.
- @findex copyright
- The @code{@@copyright@{@}} command generates a @samp{c} inside a
- circle when the output format supports this glyph (print and HTML
- always do, for instance). When the glyph is not supported in the
- output, it generates the three-character sequence @samp{(C)}.
- The copyright notice itself has the following legally-prescribed
- form:
- @example
- Copyright @copyright{} @var{years} @var{copyright-owner}.
- @end example
- @cindex Copyright word, always in English
- The word `Copyright' must always be written in English, even if the
- document is otherwise written in another language. This is due to
- international law.
- @cindex Years, in copyright line
- The list of years should include all years in which a version was
- completed (even if it was released in a subsequent year). It is
- simplest for each year to be written out individually and in full,
- separated by commas.
- @cindex Copyright holder for FSF works
- @cindex Holder of copyright for FSF works
- @cindex Owner of copyright for FSF works
- The copyright owner (or owners) is whoever holds legal copyright on the
- work. In the case of works assigned to the FSF, the owner is `Free
- Software Foundation, Inc.'.
- The copyright `line' may actually be split across multiple lines, both
- in the source document and in the output. This often happens for
- documents with a long history, having many different years of
- publication. If you do use several lines, do not indent any of them
- (or anything else in the @code{@@copying} block) in the source file.
- @xref{Copyright Notices,,, maintain, GNU Maintainer Information}, for
- additional information. @xref{GNU Sample Texts}, for the full text to
- be used in GNU manuals. @xref{GNU Free Documentation License}, for
- the license itself under which GNU and other free manuals are
- distributed.
- @node @code{@@insertcopying}
- @subsection @code{@@insertcopying}: Include Permissions Text
- @anchor{insertcopying}@c old name
- @findex insertcopying
- @cindex Copying text, including
- @cindex Permissions text, including
- @cindex Including permissions text
- The @code{@@insertcopying} command is simply written on a line by
- itself, like this:
- @example
- @@insertcopying
- @end example
- This inserts the text previously defined by @code{@@copying}. To meet
- legal requirements, it must be used on the copyright page in the printed
- manual (@pxref{Copyright}).
- The @code{@@copying} command itself causes the permissions text to
- appear in an Info file @emph{before} the first node. The text is also
- copied into the beginning of each split Info output file, as is legally
- necessary. This location implies a human reading the manual using Info
- does @emph{not} see this text (except when using the advanced Info
- command @kbd{g *}), but this does not matter for legal purposes,
- because the text is present.
- Similarly, the @code{@@copying} text is automatically included at the
- beginning of each HTML output file, as an HTML comment. Again, this
- text is not visible (unless the reader views the HTML source).
- The permissions text defined by @code{@@copying} also appears
- automatically at the beginning of the XML and Docbook output files.
- @node Titlepage & Copyright Page
- @section Title and Copyright Pages
- In hard copy output, the manual's name and author are usually printed on
- a title page. Copyright information is usually printed on the back of
- the title page.
- The title and copyright pages appear in printed manuals, but not in
- most other output formats. Because of this, it is possible to use
- several slightly obscure typesetting commands that are not to be used
- in the main text. In addition, this part of the beginning of a
- Texinfo file contains the text of the copying permissions that appears
- in the printed manual.
- @menu
- * @code{@@titlepage}:: Create a title for the printed document.
- * @code{@@titlefont @@center @@sp}:: The @code{@@titlefont}, @code{@@center},
- and @code{@@sp} commands.
- * @code{@@title @@subtitle @@author}:: The @code{@@title}, @code{@@subtitle},
- and @code{@@author} commands.
- * Copyright:: How to write the copyright notice and
- include copying permissions.
- * Heading Generation:: Turn on page headings after the title and
- copyright pages.
- @end menu
- @node @code{@@titlepage}
- @subsection @code{@@titlepage}
- @anchor{titlepage}@c old name
- @cindex Title page
- @findex titlepage
- Start the material for the title page and following copyright page
- with @code{@@titlepage} on a line by itself and end it with
- @code{@@end titlepage} on a line by itself.
- The @code{@@end titlepage} command starts a new page and turns on page
- numbering (@pxref{Heading Generation}). All the
- material that you want to appear on unnumbered pages should be put
- between the @code{@@titlepage} and @code{@@end titlepage} commands.
- You can force the table of contents to appear there with the
- @code{@@setcontentsaftertitlepage} command (@pxref{Contents}).
- @findex page@r{, within @code{@@titlepage}}
- By using the @code{@@page} command you can force a page break within the
- region delineated by the @code{@@titlepage} and @code{@@end titlepage}
- commands and thereby create more than one unnumbered page. This is how
- the copyright page is produced. (The @code{@@titlepage} command might
- perhaps have been better named the @code{@@titleandadditionalpages}
- command, but that would have been rather long!)
- When you write a manual about a computer program, you should write the
- version of the program to which the manual applies on the title page.
- If the manual changes more frequently than the program or is independent
- of it, you should also include an edition number@footnote{We have found
- that it is helpful to refer to versions of independent manuals as
- `editions' and versions of programs as `versions'; otherwise, we find we
- are liable to confuse each other in conversation by referring to both
- the documentation and the software with the same words.} for the manual.
- This helps readers keep track of which manual is for which version of
- the program. (The `Top' node should also contain this information; see
- @ref{The Top Node}.)
- Texinfo provides two main methods for creating a title page. One method
- uses the @code{@@titlefont}, @code{@@sp}, and @code{@@center} commands
- to generate a title page in which the words on the page are
- centered.
- The second method uses the @code{@@title}, @code{@@subtitle}, and
- @code{@@author} commands to create a title page with black rules under
- the title and author lines and the subtitle text set flush to the
- right hand side of the page. With this method, you do not specify any
- of the actual formatting of the title page. You specify the text
- you want, and Texinfo does the formatting.
- You may use either method, or you may combine them; see the examples in
- the sections below.
- @findex shorttitlepage
- @cindex Bastard title page
- @cindex Title page, bastard
- For sufficiently simple documents, and for the bastard title page in
- traditional book frontmatter, Texinfo also provides a command
- @code{@@shorttitlepage} which takes the rest of the line as the title.
- The argument is typeset on a page by itself and followed by a blank
- page.
- @node @code{@@titlefont @@center @@sp}
- @subsection @code{@@titlefont}, @code{@@center}, and @code{@@sp}
- @anchor{titlefont center sp}@c old name
- @findex titlefont
- @findex center
- @findex sp @r{(titlepage line spacing)}
- You can use the @code{@@titlefont}, @code{@@sp}, and @code{@@center}
- commands to create a title page for a printed document. (This is the
- first of the two methods for creating a title page in Texinfo.)
- Use the @code{@@titlefont} command to select a large font suitable for
- the title itself. You can use @code{@@titlefont} more than once if you
- have an especially long title.
- For HTML output, each @code{@@titlefont} command produces an
- @code{<h1>} heading, but the HTML document @code{<title>} is not
- affected. For that, you must put a @code{@@settitle} command before
- the @code{@@titlefont} command (@pxref{@code{@@settitle}}).
- @need 700
- For example:
- @example
- @@titlefont@{Texinfo@}
- @end example
- Use the @code{@@center} command at the beginning of a line to center
- the remaining text on that line. Thus,
- @example
- @@center @@titlefont@{Texinfo@}
- @end example
- @noindent
- centers the title, which in this example is ``Texinfo'' printed
- in the title font.
- Use the @code{@@sp} command to insert vertical space. For example:
- @example
- @@sp 2
- @end example
- @noindent
- This inserts two blank lines on the printed page.
- (@xref{@code{@@sp}}, for more information about the @code{@@sp}
- command.)
- A template for this method looks like this:
- @example
- @group
- @@titlepage
- @@sp 10
- @@center @@titlefont@{@var{name-of-manual-when-printed}@}
- @@sp 2
- @@center @var{subtitle-if-any}
- @@sp 2
- @@center @var{author}
- @dots{}
- @@end titlepage
- @end group
- @end example
- The spacing of the example fits an 8.5 by 11 inch manual.
- You can in fact use these commands anywhere, not just on a title page,
- but since they are not logical markup commands, we don't recommend
- them.
- @node @code{@@title @@subtitle @@author}
- @subsection @code{@@title}, @code{@@subtitle}, and @code{@@author}
- @anchor{title subtitle author}@c old name
- @findex title
- @findex subtitle
- @findex author
- You can use the @code{@@title}, @code{@@subtitle}, and @code{@@author}
- commands to create a title page in which the vertical and horizontal
- spacing is done for you automatically. This contrasts with the method
- described in the previous section, in which the @code{@@sp} command is
- needed to adjust vertical spacing.
- Write the @code{@@title}, @code{@@subtitle}, or @code{@@author}
- commands at the beginning of a line followed by the title, subtitle,
- or author. The @code{@@author} command may be used for a quotation in
- an @code{@@quotation} block (@pxref{@code{@@quotation}});
- except for that, it is an error to use any of these commands outside
- of @code{@@titlepage}.
- The @code{@@title} command produces a line in which the title is set
- flush to the left-hand side of the page in a larger than normal font.
- The title is underlined with a black rule. The title must be given on
- a single line in the source file; it will be broken into multiple
- lines of output is needed.
- For long titles, the @code{@@*} command may be used to specify the
- line breaks in long titles if the automatic breaks do not suit. Such
- explicit line breaks are generally reflected in all output formats; if
- you only want to specify them for the printed output, use a
- conditional (@pxref{Conditionals}). For example:
- @example
- @@title This Long Title@@inlinefmt@{tex,@@*@} Is Broken in @@TeX@{@}
- @end example
- The @code{@@subtitle} command sets subtitles in a normal-sized font
- flush to the right-hand side of the page.
- The @code{@@author} command sets the names of the author or authors in
- a middle-sized font flush to the left-hand side of the page on a line
- near the bottom of the title page. The names are followed by a black
- rule that is thinner than the rule that underlines the title.
- There are two ways to use the @code{@@author} command: you can write
- the name or names on the remaining part of the line that starts with
- an @code{@@author} command:
- @example
- @@author by Jane Smith and John Doe
- @end example
- @noindent
- or you can write the names one above each other by using multiple
- @code{@@author} commands:
- @example
- @group
- @@author Jane Smith
- @@author John Doe
- @end group
- @end example
- @need 950
- A template for this method looks like this:
- @example
- @group
- @@titlepage
- @@title @var{name-of-manual-when-printed}
- @@subtitle @var{subtitle-if-any}
- @@subtitle @var{second-subtitle}
- @@author @var{author}
- @@page
- @dots{}
- @@end titlepage
- @end group
- @end example
- @node Copyright
- @subsection Copyright Page
- @cindex Copyright page
- @cindex Printed permissions
- @cindex Permissions, printed
- By international treaty, the copyright notice for a book must be either
- on the title page or on the back of the title page. When the copyright
- notice is on the back of the title page, that page is customarily not
- numbered. Therefore, in Texinfo, the information on the copyright page
- should be within @code{@@titlepage} and @code{@@end titlepage}
- commands.
- @findex vskip @r{@TeX{} vertical skip}
- @cindex filll @r{@TeX{} dimension}
- Use the @code{@@page} command to cause a page break. To push the
- copyright notice and the other text on the copyright page towards the
- bottom of the page, use the following incantation after @code{@@page}:
- @example
- @@vskip 0pt plus 1filll
- @end example
- @noindent
- The @code{@@vskip} command inserts whitespace in the @TeX{} output; it
- is ignored in all other output formats. The @samp{0pt plus 1filll}
- means to put in zero points of mandatory whitespace, and as much
- optional whitespace as needed to push the following text to the bottom
- of the page. Note the use of three @samp{l}s in the word
- @samp{filll}; this is correct.
- To insert the copyright text itself, write @code{@@insertcopying}
- next (@pxref{Document Permissions}):
- @example
- @@insertcopying
- @end example
- Follow the copying text by the publisher, ISBN numbers, cover art
- credits, and other such information.
- Here is an example putting all this together:
- @example
- @@titlepage
- @dots{}
- @@page
- @@vskip 0pt plus 1filll
- @@insertcopying
- Published by @dots{}
- Cover art by @dots{}
- @@end titlepage
- @end example
- We have one more special case to consider: for plain text output, you
- must insert the copyright information explicitly if you want it to
- appear. For instance, you could have the following after the copyright
- page:
- @example
- @@ifplaintext
- @@insertcopying
- @@end ifplaintext
- @end example
- You could include other title-like information for the plain text
- output in the same place.
- @node Heading Generation
- @subsection Heading Generation
- @anchor{end titlepage}@c old name
- @cindex Headings, page, begin to appear
- @cindex Titlepage end starts headings
- @cindex End titlepage starts headings
- @cindex Generating page headings
- Like all @code{@@end} commands (@pxref{Quotations and Examples}), the
- @code{@@end titlepage} command must be written at the beginning of a
- line by itself, with only one space between the @code{@@end} and the
- @code{titlepage}. It not only marks the end of the title and
- copyright pages, but also causes @TeX{} to start generating page
- headings and page numbers.
- Texinfo has two standard page heading formats, one for documents
- printed on one side of each sheet of paper (single-sided printing),
- and the other for documents printed on both sides of each sheet
- (double-sided printing).
- In full generality, you can control the headings in different ways:
- @itemize @bullet
- @item
- The conventional way is to write a @code{@@setchapternewpage} command
- before the title page commands, if required, and then have the
- @code{@@end titlepage} command start generating page headings in the
- manner desired.
- Most documents are formatted with the standard single-sided or
- double-sided headings, (sometimes) using @code{@@setchapternewpage
- odd} for double-sided printing and (almost always) no
- @code{@@setchapternewpage} command for single-sided printing
- (@pxref{@code{@@setchapternewpage}}).
- @item
- Alternatively, you can use the @code{@@headings} command to prevent
- page headings from being generated or to start them for either single
- or double-sided printing. Write a @code{@@headings} command
- immediately after the @code{@@end titlepage} command. To turn off
- headings, write @code{@@headings off}. @xref{@code{@@headings}}.
- @item
- Or, you may specify your own page heading and footing format.
- @xref{Headings}.
- @end itemize
- @node Contents
- @section Generating a Table of Contents
- @cindex Table of contents
- @cindex Contents, table of
- @cindex Short table of contents
- @findex contents
- @findex summarycontents
- @findex shortcontents
- The @code{@@chapter}, @code{@@section}, and other structuring commands
- (@pxref{Chapter Structuring}) supply the information to make up a
- table of contents, but they do not cause an actual table to appear in
- the manual. To do this, you must use the @code{@@contents} and/or
- @code{@@summarycontents} command(s).
- @table @code
- @item @@contents
- Generates a table of contents in a printed manual, including all
- chapters, sections, subsections, etc., as well as appendices and
- unnumbered chapters. Headings generated by @code{@@majorheading},
- @code{@@chapheading}, and the other @code{@@@dots{}heading} commands
- do not appear in the table of contents (@pxref{Structuring Command
- Types}).
- @item @@shortcontents
- @itemx @@summarycontents
- (@code{@@summarycontents} is a synonym for @code{@@shortcontents}.)
- Generates a short or summary table of contents that lists only the
- chapters, appendices, and unnumbered chapters. Sections, subsections
- and subsubsections are omitted. Only a long manual needs a short
- table of contents in addition to the full table of contents.
- @end table
- Both contents commands should be written on a line by themselves, and
- placed near the beginning of the file, after the @code{@@end
- titlepage} (@pxref{@code{@@titlepage}}), before any sectioning
- command. The contents commands automatically generate a chapter-like
- heading at the top of the first table of contents page, so don't
- include any sectioning command such as @code{@@unnumbered} before
- them.
- Since an Info file uses menus instead of tables of contents, the Info
- formatting commands ignore the contents commands. But the contents
- are included in plain text output (generated by @code{makeinfo
- --plaintext}) and in other output formats, such as HTML.
- When @code{makeinfo} writes a short table of contents while producing
- HTML output, the links in the short table of contents point to
- corresponding entries in the full table of contents rather than the text
- of the document. The links in the full table of contents point to the
- main text of the document.
- @node The Top Node
- @section The `Top' Node and Master Menu
- @cindex Top node
- @cindex Node, `Top'
- The `Top' node is the node in which a reader enters an Info manual.
- As such, it should begin with a brief description of the manual
- (including the version number), and end with a master menu for the
- whole manual. Of course you should include any other general
- information you feel a reader would find helpful.
- @findex top
- It is conventional and desirable to write a @code{@@top} sectioning
- command line containing the title of the document immediately after
- the @code{@@node Top} line (@pxref{@code{@@top} Command}).
- The contents of the `Top' node should appear only in the online output;
- none of it should appear in printed output, so enclose it between
- @code{@@ifnottex} and @code{@@end ifnottex} commands. (@TeX{} does not
- print either an @code{@@node} line or a menu; they appear only in Info;
- strictly speaking, you are not required to enclose these parts between
- @code{@@ifnottex} and @code{@@end ifnottex}, but it is simplest to do
- so. @xref{Conditionals, , Conditionally Visible Text}.)
- @menu
- * Top Node Example::
- * Master Menu Parts::
- @end menu
- @node Top Node Example
- @subsection Top Node Example
- @cindex Top node example
- Here is an example of a Top node.
- @example
- @group
- @@ifnottex
- @@node Top
- @@top Sample Title
- This is the text of the top node.
- @@end ifnottex
- @end group
- Additional general information.
- @group
- @@menu
- * First Chapter::
- * Second Chapter::
- @dots{}
- * Index::
- @end group
- @@end menu
- @end example
- @node Master Menu Parts
- @subsection Parts of a Master Menu
- @cindex Master menu
- @cindex Menu, master
- @cindex Parts of a master menu
- A @dfn{master menu} is the main menu. It is customary to include a
- detailed menu listing all the nodes in the document in this menu.
- Like any other menu, a master menu is enclosed in @code{@@menu} and
- @code{@@end menu} and does not appear in the printed output.
- Generally, a master menu is divided into parts.
- @itemize @bullet
- @item
- The first part contains the major nodes in the Texinfo file: the nodes
- for the chapters, chapter-like sections, and the appendices.
- @item
- The second part contains nodes for the indices.
- @item
- @findex detailmenu
- @cindex Detailed menu
- The third and subsequent parts contain a listing of the other,
- lower-level nodes, often ordered by chapter. This way, rather than go
- through an intermediary menu, an inquirer can go directly to a
- particular node when searching for specific information. These menu
- items are not required; add them if you think they are a convenience.
- If you do use them, put @code{@@detailmenu} before the first one, and
- @code{@@end detailmenu} after the last; otherwise, @code{makeinfo}
- will get confused.
- @end itemize
- Each section in the menu can be introduced by a descriptive line. So
- long as the line does not begin with an asterisk, it will not be
- treated as a menu entry. (@xref{Writing a Menu}, for more
- information.)
- For example, the master menu for this manual looks like the following
- (but has many more entries):
- @example
- @group
- @@menu
- * Copying Conditions:: Your rights.
- * Overview:: Texinfo in brief.
- @dots{}
- @end group
- @group
- * Command and Variable Index::
- * General Index::
- @end group
- @group
- @@detailmenu
- --- The Detailed Node Listing ---
- Overview of Texinfo
- * Reporting Bugs:: @dots{}
- @dots{}
- @end group
- @group
- Beginning a Texinfo File
- * Sample Beginning:: @dots{}
- @dots{}
- @@end detailmenu
- @@end menu
- @end group
- @end example
- @node Global Document Commands
- @section Global Document Commands
- @cindex Global Document Commands
- Besides the basic commands mentioned in the previous sections, here are
- additional commands which affect the document as a whole. They are
- generally all given before the Top node, if they are given at all.
- @menu
- * @code{@@documentdescription}:: Document summary for the HTML output.
- * @code{@@setchapternewpage}:: Start chapters on right-hand pages.
- * @code{@@headings}:: An option for turning headings on and off
- and double or single sided printing.
- * @code{@@paragraphindent}:: Specify paragraph indentation.
- * @code{@@firstparagraphindent}:: Suppressing first paragraph indentation.
- * @code{@@exampleindent}:: Specify environment indentation.
- @end menu
- @node @code{@@documentdescription}
- @subsection @code{@@documentdescription}: Summary Text
- @anchor{documentdescription}@c old name
- @cindex Document description
- @cindex Description of document
- @cindex Summary of document
- @cindex Abstract of document
- @cindex @code{<meta>} HTML tag, and document description
- @findex documentdescription
- When producing HTML output for a document, @command{makeinfo} writes a
- @samp{<meta>} element in the @samp{<head>} to give some idea of the
- content of the document. By default, this @dfn{description} is the
- title of the document, taken from the @code{@@settitle} command
- (@pxref{@code{@@settitle}}). To change this, use the
- @code{@@documentdescription} environment, as in:
- @example
- @@documentdescription
- descriptive text.
- @@end documentdescription
- @end example
- @noindent
- This will produce the following output in the @samp{<head>} of the HTML:
- @example
- <meta name=description content="descriptive text.">
- @end example
- @code{@@documentdescription} must be specified before the first node of
- the document.
- @node @code{@@setchapternewpage}
- @subsection @code{@@setchapternewpage}: Blank Pages Before Chapters
- @anchor{setchapternewpage}@c old name
- @findex setchapternewpage
- @cindex Starting chapters
- @cindex Pages, starting odd
- In an officially bound book, text is usually printed on both sides of
- the paper, chapters start on right-hand pages, and right-hand pages have
- odd numbers. But in short reports, text often is printed only on one
- side of the paper. Also in short reports, chapters sometimes do not
- start on new pages, but are printed on the same page as the end of the
- preceding chapter, after a small amount of vertical whitespace.
- You can use the @code{@@setchapternewpage} command with various
- arguments to specify how @TeX{} should start chapters and whether it
- should format headers for printing on one or both sides of the paper
- (single-sided or double-sided printing).
- Write the @code{@@setchapternewpage} command at the beginning of a
- line followed by its argument.
- For example, you would write the following to cause each chapter to
- start on a fresh odd-numbered page:
- @example
- @@setchapternewpage odd
- @end example
- You can specify one of three alternatives with the
- @code{@@setchapternewpage} command:
- @table @asis
- @item @code{@@setchapternewpage off}
- Cause @TeX{} to typeset a new chapter on the same page as the last
- chapter, after skipping some vertical whitespace. Also, cause @TeX{} to
- format page headers for single-sided printing.
- @item @code{@@setchapternewpage on}
- Cause @TeX{} to start new chapters on new pages and to format page
- headers for single-sided printing. This is the form most often used for
- short reports or personal printing. This is the default.
- @item @code{@@setchapternewpage odd}
- Cause @TeX{} to start new chapters on new, odd-numbered pages
- (right-handed pages) and to typeset for double-sided printing. This is
- the form most often used for books and manuals.
- @end table
- Texinfo does not have a @code{@@setchapternewpage even} command,
- because there is no printing tradition of starting chapters or books on
- an even-numbered page.
- If you don't like the default headers that @code{@@setchapternewpage}
- sets, you can explicit control them with the @code{@@headings} command.
- @xref{@code{@@headings}}.
- At the beginning of a manual or book, pages are not numbered---for
- example, the title and copyright pages of a book are not numbered. By
- convention, table of contents and frontmatter pages are numbered with
- roman numerals and not in sequence with the rest of the document.
- The @code{@@setchapternewpage} has no effect in output formats that do
- not have pages, such as Info and HTML.
- We recommend not including any @code{@@setchapternewpage} command in
- your document source at all, since such desired pagination is not
- intrinsic to the document. For a particular hard copy run, if you
- don't want the default output (no blank pages, same headers on all
- pages) use the @option{--texinfo} option to @command{texi2dvi} to
- specify the output you want.
- @node @code{@@headings}
- @subsection The @code{@@headings} Command
- @anchor{headings on off}@c old name
- @findex headings
- The @code{@@headings} command is rarely used. It specifies what kind of
- page headings and footings to print on each page. Usually, this is
- controlled by the @code{@@setchapternewpage} command. You need the
- @code{@@headings} command only if the @code{@@setchapternewpage} command
- does not do what you want, or if you want to turn off predefined page
- headings prior to defining your own. Write a @code{@@headings} command
- immediately after the @code{@@end titlepage} command.
- You can use @code{@@headings} as follows:
- @table @code
- @item @@headings off
- Turn off printing of page headings.
- @item @@headings single
- Turn on page headings appropriate for single-sided printing.
- @item @@headings double
- Turn on page headings appropriate for double-sided printing.
- @item @@headings singleafter
- @itemx @@headings doubleafter
- Turn on @code{single} or @code{double} headings, respectively, after the
- current page is output.
- @item @@headings on
- Turn on page headings: @code{single} if @samp{@@setchapternewpage
- on}, @code{double} otherwise.
- @end table
- For example, suppose you write @code{@@setchapternewpage off} before the
- @code{@@titlepage} command to tell @TeX{} to start a new chapter on the
- same page as the end of the last chapter. This command also causes
- @TeX{} to typeset page headers for single-sided printing. To cause
- @TeX{} to typeset for double sided printing, write @code{@@headings
- double} after the @code{@@end titlepage} command.
- You can stop @TeX{} from generating any page headings at all by
- writing @code{@@headings off} on a line of its own immediately after the
- line containing the @code{@@end titlepage} command, like this:
- @example
- @@end titlepage
- @@headings off
- @end example
- @noindent
- The @code{@@headings off} command overrides the @code{@@end titlepage}
- command, which would otherwise cause @TeX{} to print page headings.
- You can also specify your own style of page heading and footing.
- @xref{Headings, , Page Headings}, for more information.
- @node @code{@@paragraphindent}
- @subsection @code{@@paragraphindent}: Controlling Paragraph Indentation
- @anchor{paragraphindent}@c old name
- @findex paragraphindent
- @cindex Indenting paragraphs, control of
- @cindex Paragraph indentation control
- The Texinfo processors may insert whitespace at the beginning of the
- first line of each paragraph, thereby indenting that paragraph. You can
- use the @code{@@paragraphindent} command to specify this indentation.
- Write a @code{@@paragraphindent} command at the beginning of a line
- followed by either @samp{asis} or a number:
- @example
- @@paragraphindent @var{indent}
- @end example
- The indentation is according to the value of @var{indent}:
- @table @asis
- @item @code{asis}
- Do not change the existing indentation (not implemented in @TeX{}).
- @item @code{none}
- @itemx 0
- Omit all indentation.
- @item @var{n}
- Indent by @var{n} space characters in Info output, by @var{n} ems in
- @TeX{}.
- @end table
- The default value of @var{indent} is 3. @code{@@paragraphindent} is
- ignored for HTML output.
- It is best to write the @code{@@paragraphindent} command before the
- end-of-header line at the beginning of a Texinfo file, so the region
- formatting commands indent paragraphs as specified. @xref{Start of
- Header}.
- @node @code{@@firstparagraphindent}
- @subsection @code{@@firstparagraphindent}: Indenting After Headings
- @anchor{firstparagraphindent}@c old name
- @findex firstparagraphindent
- @cindex First paragraph, suppressing indentation of
- @cindex Suppressing first paragraph indentation
- @cindex Preventing first paragraph indentation
- @cindex Indenting, suppressing of first paragraph
- @cindex Headings, indentation after
- As you can see in the present manual, the first paragraph in any
- section is not indented by default. Typographically, indentation is a
- paragraph separator, which means that it is unnecessary when a new
- section begins. This indentation is controlled with the
- @code{@@firstparagraphindent} command:
- @example
- @@firstparagraphindent @var{word}
- @end example
- The first paragraph after a heading is indented according to the value
- of @var{word}:
- @table @asis
- @item @code{none}
- Prevents the first paragraph from being indented (default).
- This option is ignored by @command{makeinfo} if
- @code{@@paragraphindent asis} is in effect.
- @item @code{insert}
- Include normal paragraph indentation. This respects the paragraph
- indentation set by a @code{@@paragraphindent} command
- (@pxref{@code{@@paragraphindent}}).
- @end table
- @code{@@firstparagraphindent} is ignored for HTML and Docbook output.
- It is best to write the @code{@@firstparagraphindent} command before the
- end-of-header line at the beginning of a Texinfo file, so the region
- formatting commands indent paragraphs as specified. @xref{Start of
- Header}.
- @node @code{@@exampleindent}
- @subsection @code{@@exampleindent}: Environment Indenting
- @anchor{exampleindent}@c old name
- @findex exampleindent
- @cindex Indenting environments
- @cindex Environment indentation
- @cindex Example indentation
- The Texinfo processors indent each line of @code{@@example} and similar
- environments. You can use the @code{@@exampleindent} command to specify
- this indentation. Write an @code{@@exampleindent} command at the
- beginning of a line followed by either @samp{asis} or a number:
- @example
- @@exampleindent @var{indent}
- @end example
- The indentation is according to the value of @var{indent}:
- @table @asis
- @item @code{asis}
- Do not change the existing indentation (not implemented in @TeX{}).
- @item 0
- Omit all indentation.
- @item @var{n}
- Indent environments by @var{n} space characters in Info output, by
- @var{n} ems in @TeX{}.
- @end table
- The default value of @var{indent} is 5 spaces in Info, and 0.4@dmn{in}
- in @TeX{}, which is somewhat less. (The reduction is to help @TeX{}
- fit more characters onto physical lines.)
- It is best to write the @code{@@exampleindent} command before the
- end-of-header line at the beginning of a Texinfo file, so the region
- formatting commands indent paragraphs as specified. @xref{Start of
- Header}.
- @node Ending a File
- @section Ending a Texinfo File
- @cindex Ending a Texinfo file
- @cindex Texinfo file ending
- @cindex File ending
- @findex bye
- The end of a Texinfo file should include commands to create indices
- (@pxref{Printing Indices & Menus}), and the @code{@@bye} command to mark
- the last line to be processed. For example:
- @example
- @@node Index
- @@unnumbered Index
- @@printindex cp
- @@bye
- @end example
- @findex bye
- @anchor{File End}
- An @code{@@bye} command terminates Texinfo processing. None of the
- formatters process anything following @code{@@bye}; any such text is
- completely ignored. The @code{@@bye} command should be on a line by
- itself.
- Thus, if you wish, you may follow the @code{@@bye} line with arbitrary
- notes. Also, you may follow the @code{@@bye} line with a local
- variables list for Emacs, most typically a @samp{compile-command}
- (@pxref{Compile-Command,, Using the Local Variables List}).
- @node Nodes
- @chapter Nodes
- @anchor{node}@anchor{@@node} @c old names
- @cindex Node, defined
- A @dfn{node} is a region of text that begins at a @code{@@node}
- command, and continues until the next @code{@@node} command.
- To specify a node, write a @code{@@node} command at the beginning of
- a line, and follow it with the name of the node.
- Each node contains the discussion of one topic. Info readers
- display one node at a time, and provide commands for the user to move
- to related nodes. The HTML output can be similarly navigated.
- Nodes are used as the targets of cross-references. Cross-references,
- such as the one at the end of this sentence, are made with @code{@@xref}
- and related commands; see @ref{Cross References}. Cross-references can
- be sprinkled throughout the text, and provide a way to represent links
- that do not fit a hierarchical structure.
- Normally, you put a node command immediately before each chapter
- structuring command---for example, an @code{@@section} or
- @code{@@subsection} line. (@xref{Chapter Structuring}.).
- You must do this even if you do not intend to format the file for Info.
- This is because @TeX{} uses both @code{@@node} names and
- chapter-structuring names in the output for cross-references. The only
- time you are likely to use the chapter structuring commands without also
- using nodes is if you are writing a document that contains no cross
- references and will only be printed, not transformed into Info, HTML, or
- other formats.
- @menu
- * Texinfo Document Structure:: Double structure of documents.
- * Node Names:: How to choose node names.
- * Writing a Node:: How to write an @code{@@node} line.
- * Node Line Requirements:: Keep names unique.
- * First Node:: How to write a `Top' node.
- * @code{@@top} Command:: How to use the @code{@@top} command.
- * Node Menu Illustration:: A diagram, and sample nodes and menus.
- * @command{makeinfo} Pointer Creation:: Letting makeinfo determine node pointers.
- * Menus:: Listing subordinate nodes.
- @end menu
- @node Texinfo Document Structure
- @section Texinfo Document Structure
- @cindex Texinfo document structure
- @cindex Document structure, of Texinfo
- @cindex Structure, of Texinfo documents
- @cindex Double structure, of Texinfo documents
- @anchor{Two Paths}@c node name
- Nodes can contain @dfn{menus}, which contain the names of @dfn{child
- nodes} within the parent node; for example, a node corresponding to a
- chapter would have a menu of the sections in that chapter. The menus
- allow the user to move to the child nodes in a natural way in the online
- output.
- In addition, nodes contain @dfn{node pointers} that name other nodes.
- The `Next' and `Previous' pointers form nodes at the same sectioning
- level into a chain. As you might imagine, the `Next' pointer links to
- the next node, and the `Previous' pointer links to the previous node.
- Thus, for example, all the nodes that are at the level of sections
- within a chapter are linked together, and the order in this chain
- is the same as the order of the children in the menu of the parent
- chapter. Each child node records the parent node name as its `Up'
- pointer.
- @opindex accesskey@r{, in HTML output of nodes}
- The Info and HTML output from @command{makeinfo} for each node includes
- links to the `Next', `Previous', and `Up' nodes. The HTML also uses
- the @code{accesskey} attribute with the values @samp{n}, @samp{p}, and
- @samp{u} respectively. This allows people using web browsers to
- follow the navigation using (typically) @kbd{M-@var{letter}}, e.g.,
- @kbd{M-n} for the `Next' node, from anywhere within the node.
- Node pointers and menus provide structure for Info files just as
- chapters, sections, subsections, and the like provide structure for
- printed books. The two structures are theoretically distinct; in
- practice, however, the tree structure of printed books is essentially
- always used for the node and menu structure also, as this leads to a
- document which is easiest to follow. @xref{Texinfo Document
- Structure}.
- Typically, the sectioning structure and the node structure are
- completely parallel, with one node for each chapter, section, etc.,
- and with the nodes following the same hierarchical arrangement as the
- sectioning. Thus, if a node is at the logical level of a chapter, its
- child nodes are at the level of sections; similarly, the child nodes
- of sections are at the level of subsections.
- Although it is technically possible to create Texinfo documents with
- only one structure or the other, or for the two structures not to be
- parallel, or for either the sectioning or node structure to be
- abnormally formed, etc., this is @emph{not at all recommended}. To
- the best of our knowledge, all the Texinfo manuals currently in
- general use do follow the conventional parallel structure.
- @node Node Names
- @section Choosing Node Names
- @cindex Node names, choosing
- The name of a node identifies the node. For all the details of node
- names, @pxref{Node Line Requirements}).
- @anchor{Node Line Tips}@c previous node name
- Here are some suggestions for node names:
- @itemize @bullet
- @item
- Try to pick node names that are informative but short.
- In the Info file, the file name, node name, and pointer names are all
- inserted on one line, which may run into the right edge of the window.
- (This does not cause a problem with Info, but is ugly.)
- @item
- Try to pick node names that differ from each other near the beginnings
- of their names. This way, it is easy to use automatic name completion in
- Info.
- @item
- Conventionally, node names are capitalized in the same way as section
- and chapter titles. In this manual, initial and significant words are
- capitalized; others are not. In other manuals, just initial words and
- proper nouns are capitalized. Either way is fine; we recommend just
- being consistent.
- @end itemize
- Because node names are used in cross-references, it is not desirable
- to casually change them once published. Such name changes invalidate
- references from other manuals, from mail archives, and so on.
- @xref{HTML Xref Link Preservation}.
- The pointers from a given node enable you to reach other nodes and
- consist simply of the names of those nodes. The pointers are usually
- not specified explicitly, as @command{makeinfo} can determine them
- (@pxref{@command{makeinfo} Pointer Creation}).
- Normally, a node's `Up' pointer contains the name of the node whose
- menu mentions that node. The node's `Next' pointer contains the name
- of the node that follows the present node in that menu and its
- `Previous' pointer contains the name of the node that precedes it in
- that menu. When a node's `Previous' node is the same as its `Up'
- node, both pointers name the same node.
- Usually, the first node of a Texinfo file is the `Top' node, and its
- `Up' pointer points to the @file{dir} file, which contains the main menu
- for all of Info.
- @node Writing a Node
- @section Writing an @code{@@node} Line
- @cindex Writing an @code{@@node} line
- @cindex @code{@@node} line writing
- @cindex Node line writing
- @findex node
- The easiest way to write an @code{@@node} line is to write @code{@@node}
- at the beginning of a line and then the name of the node, like this:
- @example
- @@node @var{node-name}
- @end example
- After you have inserted an @code{@@node} line, you should immediately
- write an @@-command for the chapter or section and insert its name.
- Next (and this is important!), put in several index entries. Usually,
- you will find at least two and often as many as four or five ways of
- referring to the node in the index. Use them all. This will make it
- much easier for people to find the node.
- If you wish, you can ignore @code{@@node} lines altogether in your
- first draft and then use the @code{texinfo-insert-node-lines} command
- to create @code{@@node} lines for you. However, we do not recommend
- this practice. It is better to name the node itself at the same time
- that you write a segment so you can easily make cross-references.
- Useful cross-references are an especially important feature of a good
- Texinfo manual.
- Even when you explicitly specify all pointers, you cannot write the
- nodes in the Texinfo source file in an arbitrary order! Because
- formatters must process the file sequentially, irrespective of node
- pointers, you must write the nodes in the order you wish them to
- appear in the output. For Info format one can imagine that the order
- may not matter, but it matters for the other formats.
- You may optionally follow the node name argument to @code{@@node}
- with up to three optional arguments on the rest of the same line,
- separating the arguments with commas. These are the names of the
- `Next', `Previous', and `Up' pointers, in that order. We recommend
- omitting them if your Texinfo document is hierarchically organized,
- as virtually all are (@pxref{@command{makeinfo} Pointer Creation}).
- Any spaces before or after each name on the @code{@@node} line are
- ignored.
- The template for a fully-written-out node line with `Next', `Previous',
- and `Up' pointers looks like this:
- @example
- @@node @var{node-name}, @var{next}, @var{previous}, @var{up}
- @end example
- The @var{node-name} argument must be present, but the others are
- optional. If you wish to specify some but not others, just insert
- commas as needed, as in: @samp{@@node mynode,,,uppernode}. However,
- we recommend leaving off all the pointers and letting @code{makeinfo}
- determine them.
- If you are using GNU Emacs, you can use the update node commands
- provided by Texinfo mode to insert the names of the pointers; or
- (recommended), you can leave the pointers out of the Texinfo file and
- let @code{makeinfo} insert node pointers into the Info file it
- creates. (@xref{Texinfo Mode}, and @ref{@command{makeinfo} Pointer
- Creation}.)
- Alternatively, you can insert the `Next', `Previous', and `Up'
- pointers yourself. If you do this, you may find it helpful to use the
- Texinfo mode keyboard command @kbd{C-c C-c n}. This command inserts
- @samp{@@node} and a comment line listing the names of the pointers in
- their proper order. The comment line helps you keep track of which
- arguments are for which pointers. This comment line is especially useful
- if you are not familiar with Texinfo.
- @node Node Line Requirements
- @section @code{@@node} Line Requirements
- @cindex Node line requirements
- @cindex Restrictions on node names
- Names used with @code{@@node} have several requirements:
- @itemize @bullet
- @item
- @cindex Unique node names requirement
- @cindex Node names must be unique
- All the node names in a single Texinfo file must be unique.
- This means, for example, that if you end every chapter with a summary,
- you must name each summary node differently. You cannot just call
- them all ``Summary''. You may, however, duplicate the titles of
- chapters, sections, and the like. Thus you can end each chapter with
- a section called ``Summary'', so long as the node names for those
- sections are all different.
- @item
- @cindex Commands in node names
- @cindex @@-commands in node names
- Node names can contain @@-commands. The output is generally the
- natural result of the command; for example, using @code{@@TeX@{@}} in a
- node name results in the @TeX{} logo being output, as it would be in
- normal text. Cross-references should use @code{@@TeX@{@}} just as the
- node name does.
- For Info and HTML output, especially, it is necessary to expand
- commands to some sequence of plain characters; for instance,
- @code{@@TeX@{@}} expands to the three letters @samp{TeX} in the Info
- node name. However, cross-references to the node should not take the
- ``shortcut'' of using @samp{TeX}; stick to the actual node name,
- commands and all.
- Some commands do not make sense in node names; for instance,
- environments (e.g., @code{@@quotation}), commands that read a whole
- line as their argument (e.g., @code{@@sp}), and plenty of others.
- For the complete list of commands that are allowed, and their
- expansion for HTML identifiers and file names, @pxref{HTML Xref
- Command Expansion}. The expansions for Info are generally given with
- main the description of the command.
- Prior to the Texinfo 5 release in 2013, this feature was supported in
- an ad hoc way (the @option{--commands-in-node-names} option to
- @command{makeinfo}). Now it is part of the language.
- @item
- @cindex Colon in node name
- @cindex Comma in node name
- @cindex Parentheses in node name
- @cindex Period in node name
- @cindex Characters, invalid in node name
- @cindex Invalid characters in node names
- @cindex Node names, invalid characters in
- Unfortunately, you cannot reliably use periods, commas, or colons
- within a node name; these can confuse the Info reader. Also, a node
- name may not start with a left parenthesis preceding a right
- parenthesis, as in @code{(not)allowed}, since this syntax is used to
- specify an external manual. (Perhaps these limitations will be
- removed some day.)
- @command{makeinfo} warns about such problematic usage in node names,
- menu items, and cross-references. If you don't want to see the
- warnings, you can set the customization variable
- @code{INFO_SPECIAL_CHARS_WARNING} to @samp{0} (@pxref{Other
- Customization Variables}).
- Also, if you insist on using these characters in node names (accepting
- the resulting substandard Info output), in order not to confuse the
- Texinfo processors you must still escape those characters, by using
- either special insertions (@pxref{Inserting a Comma}) or @code{@@asis}
- (@pxref{@code{@@asis}}). For example:
- @example
- @@node foo@@asis@{::@}bar
- @end example
- As an example of avoiding the special characters, the following is a
- section title in this manual:
- @smallexample
- @@section @@code@{@@@@unnumbered@}, @@code@{@@@@appendix@}: ...
- @end smallexample
- @noindent
- But the corresponding node name lacks the commas and the subtitle:
- @smallexample
- @@node @code{@@unnumbered @@appendix}
- @end smallexample
- @cindex Case in node name
- @item
- Case is significant in node names.
- @cindex White space in node name
- @cindex Spaces in node name
- @item
- Spaces before and after names on the @samp{@@node} line are ignored.
- Multiple whitespace characters ``inside'' a name are collapsed to a
- single space. For example:
- @example
- @@node foo bar
- @@node foo bar,
- @@node foo bar ,
- @@node foo bar,
- @@node foo bar ,
- @end example
- @noindent all define the same node, namely @samp{foo bar}.
- In menu entries, this is the name that should be used: no leading or
- trailing spaces, and a single internal space. (For cross-references,
- the node name used in the Texinfo sources is automatically normalized
- in this way.)
- @item
- The next/previous/up pointers on @code{@@node} lines must be the names
- of nodes. (It's recommended to leave out these explicit node pointer
- names, which automatically avoids any problem here; @pxref{@command{makeinfo}
- Pointer Creation}.)
- @end itemize
- @node First Node
- @section The First Node
- @cindex Top node is first
- @cindex First node
- The first node of a Texinfo file is the @dfn{Top} node, except in an
- included file (@pxref{Include Files}). The Top node should contain a
- short summary, copying permissions, and a master menu. @xref{The Top
- Node}, for more information on the Top node contents and examples.
- Here is a description of the node pointers to be used in the Top node:
- @itemize @bullet
- @item
- @cindex Up node of Top node
- @cindex (dir) as Up node of Top node
- The Top node (which must be named @samp{top} or @samp{Top}) should have
- as its `Up' node the name of a node in another file, where there is a
- menu that leads to this file. Specify the file name in parentheses.
- Usually, all Info files are available through a single virtual Info
- tree, constructed from multiple directories. In this case, use
- @samp{(dir)} as the parent of the Top node; this specifies the
- top-level node in the @file{dir} file, which contains the main menu
- for the Info system as a whole. (Each directory with Info files is
- intended to contain a file named @file{dir}.)
- That's fine for Info, but for HTML output, one might well want the Up
- link from the Top node to go somewhere other than @samp{dir.html}.
- For example, for GNU the natural place would be
- @url{http://www.gnu.org/manual/} (a web page collecting links to most
- GNU manuals), better specified as just @code{/manual/} if the manual
- will be installed on @code{www.gnu.org}. This can be specified with
- the @code{TOP_NODE_UP_URL} customization variable (@pxref{HTML
- Customization Variables}), as in
- @example
- $ @kbd{makeinfo --html -c TOP_NODE_UP_URL=/manual/} ...
- @end example
- All links to @code{(dir)} will be replaced by the given url.
- @item
- @cindex Prev node of Top node
- The `Prev' node of the Top node is usually either omitted or also set
- to @file{(dir)}. Either is fine.
- @item
- @cindex Next node of Top node
- The `Next' node of the Top node should be the first chapter in your
- document.
- @end itemize
- @xref{Installing an Info File}, for more information about installing
- an Info file in the @file{info} directory.
- It is usually best to leave the pointers off entirely and let the
- tools implicitly define them, with this simple result:
- @example
- @@node Top
- @end example
- @node @code{@@top} Command
- @section The @code{@@top} Sectioning Command
- @anchor{top command}@c old name
- @anchor{makeinfo top}@c another old name
- @anchor{makeinfo top command}@c yet another name
- @findex top
- The @code{@@top} command is a special sectioning command that you
- should only use after a @samp{@@node Top} line at the beginning of a
- Texinfo file. The @code{@@top} command tells the @code{makeinfo}
- formatter which node is to be used as the root of the node tree.
- It produces the same sort of output as @code{@@unnumbered}
- (@pxref{@code{@@unnumbered @@appendix}}).
- The @code{@@top} node is conventionally wrapped in an
- @code{@@ifnottex} conditional so that it will not appear in @TeX{}
- output (@pxref{Conditionals}).
- Thus, in practice, a Top node usually looks like this:
- @example
- @@ifnottex
- @@node Top
- @@top @var{your-manual-title}
- @var{very-high-level-summary}
- @@end ifnottex
- @end example
- @code{@@top} is ignored when raising or lowering sections. That is,
- it is never lowered and nothing can be raised to it
- (@pxref{Raise/lower sections}).
- @node Node Menu Illustration
- @section Node and Menu Illustration
- Here is a diagram that illustrates a Texinfo file with three chapters,
- each of which contains two sections.
- The ``root'' is at the top of the diagram and the ``leaves'' are at
- the bottom. This is how such a diagram is drawn conventionally; it
- illustrates an upside-down tree. For this reason, the root node is
- called the `Top' node, and `Up' node pointers carry you closer to the
- root.
- @example
- @group
- Top
- |
- -------------------------------------
- | | |
- Chapter 1 Chapter 2 Chapter 3
- | | |
- -------- -------- --------
- | | | | | |
- Section Section Section Section Section Section
- 1.1 1.2 2.1 2.2 3.1 3.2
- @end group
- @end example
- Using explicit pointers (not recommended, but for shown for purposes
- of the example), the fully-written command to start Chapter@tie{}2
- would be this:
- @example
- @group
- @@node Chapter 2, Chapter 3, Chapter 1, Top
- @@comment node-name, next, previous, up
- @end group
- @end example
- @noindent
- This @code{@@node} line says that the name of this node is
- ``Chapter@tie{}2'', the name of the `Next' node is ``Chapter 3'', the
- name of the `Previous' node is ``Chapter@tie{}1'', and the name of the
- `Up' node is ``Top''. You can (and should) omit writing out these
- node names if your document is hierarchically organized
- (@pxref{@command{makeinfo} Pointer Creation}), but the pointer
- relationships still obtain.
- @quotation Note
- `Next' and `Previous' refer to nodes at the @emph{same hierarchical
- level} in the manual, not necessarily to the next node within the
- Texinfo file. In the Texinfo file, the subsequent node may be at a
- lower level---a section-level node most often follows a chapter-level
- node, for example. (The `Top' node contains the exception to this
- rule. Since the `Top' node is the only node at that level, `Next'
- refers to the first following node, which is almost always a chapter
- or chapter-level node.)
- @end quotation
- To go to Sections 2.1 and 2.2 using Info, you need a menu inside
- Chapter 2. (@xref{Menus}.) You would write the menu just before the
- beginning of Section 2.1, like this:
- @example
- @group
- @@menu
- * Sect. 2.1:: Description of this section.
- * Sect. 2.2:: Description.
- @@end menu
- @end group
- @end example
- Using explicit pointers, the node for Sect.@: 2.1 is written like this:
- @example
- @group
- @@node Sect. 2.1, Sect. 2.2, Chapter 2, Chapter 2
- @@comment node-name, next, previous, up
- @end group
- @end example
- In Info format, the `Next' and `Previous' pointers of a node usually
- lead to other nodes at the same level---from chapter to chapter or
- from section to section (sometimes, as shown, the `Previous' pointer
- points up); an `Up' pointer usually leads to a node at the level above
- (closer to the `Top' node); and a `Menu' leads to nodes at a level
- below (closer to `leaves'). (A cross-reference can point to a node at
- any level; see @ref{Cross References}.)
- A @code{@@node} command and a chapter structuring command are
- conventionally used together, in that order, often followed by
- indexing commands. (As shown in the example above, you may follow the
- @code{@@node} line with a comment line, e.g., to show which pointer is
- which if explicit pointers are used.) The Texinfo processors use this
- construct to determine the relationships between nodes and sectioning
- commands.
- Here is the beginning of the chapter in this manual called ``Ending a
- Texinfo File''. This shows an @code{@@node} line followed by an
- @code{@@chapter} line, and then by indexing lines.
- @example
- @group
- @@node Ending a File
- @@chapter Ending a Texinfo File
- @@cindex Ending a Texinfo file
- @@cindex Texinfo file ending
- @@cindex File ending
- @end group
- @end example
- An earlier version of the manual used explicit node pointers. Here is
- the beginning of the same chapter for that case. This shows an
- @code{@@node} line followed by a comment line, a @code{@@chapter}
- line, and then by indexing lines.
- @example
- @group
- @@node Ending a File, Structuring, Beginning a File, Top
- @@comment node-name, next, previous, up
- @@chapter Ending a Texinfo File
- @@cindex Ending a Texinfo file
- @dots{}
- @end group
- @end example
- @node @command{makeinfo} Pointer Creation
- @section @code{makeinfo} Pointer Creation
- @cindex Creating pointers with @code{makeinfo}
- @cindex Pointer creation with @code{makeinfo}
- @cindex Automatic pointer creation with @code{makeinfo}
- @cindex Implicit pointer creation with @code{makeinfo}
- The @code{makeinfo} program can automatically determine node pointers
- for a hierarchically organized document. This implicit node pointer
- creation feature in @code{makeinfo} relieves you from the need to
- update menus and pointers manually or with Texinfo mode commands.
- (@xref{Updating Nodes and Menus}.) We highly recommend taking
- advantage of this.
- To do so, write your @code{@@node} lines with just the name of the
- node:
- @example
- @@node My Node
- @end example
- @noindent
- You do not need to write out the `Next', `Previous', and `Up'
- pointers.
- Then, you must write a sectioning command, such as @code{@@chapter}
- or @code{@@section}, on the line immediately following each truncated
- @code{@@node} line (except that comment lines may intervene). This is
- where it normally goes.
- Also, you must write the name of each node (except for the `Top' node)
- in a menu that is one or more hierarchical levels above the node's
- level.
- Finally, you must follow the `Top' @code{@@node} line with a line
- beginning with @code{@@top} to mark the top-level node in the file.
- @xref{@code{@@top} Command}.
- @cindex Detail menu
- @findex detailmenu
- If you use a detailed menu in your master menu (@pxref{Master Menu
- Parts}), mark it with the @code{@@detailmenu @dots{} @@end
- detailmenu} environment, or @command{makeinfo} will get confused,
- typically about the last and/or first node in the document.
- In most cases, you will want to take advantage of this feature and not
- redundantly specify node pointers that the programs can determine.
- However, Texinfo documents are not required to be organized
- hierarchically or in fact to contain sectioning commands at all (for
- example, if you never intend the document to be printed), so node
- pointers may still be specified explicitly, in full generality.
- @node Menus
- @section Menus
- @cindex Menus
- @findex menu
- @dfn{Menus} contain pointers to subordinate nodes. In online output,
- you use menus to go to such nodes. Menus have no effect in printed
- manuals and do not appear in them.
- @menu
- * Writing a Menu:: What is a menu?
- * Menu Example:: Two and three part menu entries.
- * Menu Location:: Menus go at the ends of nodes.
- * Menu Parts:: A menu entry has three parts.
- * Less Cluttered Menu Entry:: Two part menu entry.
- * Other Info Files:: How to refer to a different Info file.
- @end menu
- @node Writing a Menu
- @subsection Writing a Menu
- @cindex Writing a menu
- @cindex Menu writing
- A menu consists of a @code{@@menu} command on a line by itself,
- followed by menu entry lines or menu comment lines, and then followed
- by an @code{@@end menu} command on a line by itself.
- A menu looks like this:
- @example
- @group
- @@menu
- Larger Units of Text
- * Files:: All about handling files.
- * Multiples: Buffers. Multiple buffers; editing
- several files at once.
- @@end menu
- @end group
- @end example
- @cindex Spaces, in menus
- In a menu, every line that begins with an @w{@samp{* }} is a @dfn{menu
- entry}. (Note the space after the asterisk.)
- A line that does not start with an @w{@samp{* }} may also appear in a
- menu. Such a line is not a menu entry but rather a @dfn{menu comment}
- line that appears in the Info file. In the example above, the line
- @samp{Larger Units of Text} is such a menu comment line; the two lines
- starting with @w{@samp{* }} are menu entries.
- @cindex Hierarchical documents, and menus
- Technically, menus can carry you to any node, regardless of the
- structure of the document; even to nodes in a different Info file.
- However, we do not recommend making use of this, because it is hard
- for readers to follow. Also, the @command{makeinfo} implicit pointer
- creation feature (@pxref{@command{makeinfo} Pointer Creation}) and GNU
- Emacs Texinfo mode updating commands work only to create menus of
- subordinate nodes in a hierarchically structured document. It is much
- better to use cross-references to refer to arbitrary nodes.
- @cindex Menus, automatically generating
- @findex validatemenus
- @command{makeinfo} can automatically generate menus in nodes for Info
- and HTML output, based on the chapter structure of the document. To
- specify that you want it to do this, place the line
- @samp{@@validatemenus off} near the beginning of the document.
- In Info, a user selects a node with the @kbd{m} (@code{Info-menu})
- command. The menu entry name is what the user types after the @kbd{m}
- command.
- @opindex accesskey@r{, in HTML output of menus}
- In the HTML output from @command{makeinfo}, the @code{accesskey}
- attribute is used with the values @samp{1}@dots{}@samp{9} for the
- first nine entries. This allows people using web browsers to follow
- the first menu entries using (typically) @kbd{M-@var{digit}}, e.g.,
- @kbd{M-1} for the first entry.
- @node Menu Example
- @subsection A Menu Example
- @cindex Menu example
- @cindex Example menu
- @c merge with Writing a Menu node?
- A menu looks like this in Texinfo:
- @example
- @group
- @@menu
- * menu entry name: Node name. A short description.
- * Node name:: This form is preferred.
- @@end menu
- @end group
- @end example
- @need 800
- @noindent
- This produces:
- @example
- @group
- * menu:
- * menu entry name: Node name. A short description.
- * Node name:: This form is preferred.
- @end group
- @end example
- @need 700
- Here is an example as you might see it in a Texinfo file:
- @example
- @group
- @@menu
- Larger Units of Text
- * Files:: All about handling files.
- * Multiples: Buffers. Multiple buffers; editing
- several files at once.
- @@end menu
- @end group
- @end example
- @need 800
- @noindent
- This produces:
- @example
- @group
- * menu:
- Larger Units of Text
- * Files:: All about handling files.
- * Multiples: Buffers. Multiple buffers; editing
- several files at once.
- @end group
- @end example
- In this example, the menu has two entries. @samp{Files} is both a menu
- entry name and the name of the node referred to by that name.
- @samp{Multiples} is the menu entry name; it refers to the node named
- @samp{Buffers}. The line @samp{Larger Units of Text} is a comment; it
- appears in the menu, but is not an entry.
- Since no file name is specified with either @samp{Files} or
- @samp{Buffers}, they must be the names of nodes in the same Info file
- (@pxref{Other Info Files, , Referring to Other Info Files}).
- @node Menu Location
- @subsection Menu Location
- @cindex Menu location
- @cindex Location of menus
- There may be at most one menu in a node. A menu is conventionally
- located at the end of a node, without any regular text or additional
- commands between the @code{@@end menu} and the beginning of the next
- node.
- @cindex Info format, and menus
- This convention is useful, since a reader who uses the menu could
- easily miss any such text. Also, any such post-menu text will be
- considered part of the menu in Info output (which has no marker for
- the end of a menu). Thus, a line beginning with @samp{* } will likely
- be incorrectly handled.
- It's usually best if a node with a menu does not contain much text.
- If you find yourself with a lot of text before a menu, we generally
- recommend moving all but a couple of paragraphs into a new subnode.
- Otherwise, it is easy for readers to miss the menu.
- @ignore
- Years ago, we recommended using a @samp{@@heading} command within an
- @code{@@ifinfo} conditional instead of the normal sectioning commands
- after a very short node with a menu. This had the advantage of making
- the printed output look better, because there was no very short text
- between two headings on the page. But it does not work with
- @command{makeinfo}'s implicit pointer creation, and it also makes the
- XML output incorrect, since it does not reflect the true document
- structure. So, we no longer recommend this.
- @end ignore
- @node Menu Parts
- @subsection The Parts of a Menu
- @cindex Parts of a menu
- @cindex Menu parts
- @cindex @code{@@menu} parts
- A menu entry has three parts, only the second of which is required:
- @enumerate
- @item
- The menu entry name (optional).
- @item
- The name of the node (required).
- @item
- A description of the item (optional).
- @end enumerate
- The template for a generic menu entry looks like this (but see the
- next section for one more possibility):
- @example
- * @var{menu-entry-name}: @var{node-name}. @var{description}
- @end example
- Follow the menu entry name with a single colon, and follow the node
- name with tab, comma, newline, or the two characters period and space
- (@samp{. }).
- The third part of a menu entry is a descriptive phrase or sentence.
- Menu entry names and node names are often short; the description
- explains to the reader what the node is about. A useful description
- complements the node name rather than repeats it. The description,
- which is optional, can spread over multiple lines; if it does, some
- authors prefer to indent the second line while others prefer to align
- it with the first (and all others). It's up to you. An empty line,
- or the next menu entry, ends a description.
- Space characters in a menu are preserved as-is in the Info output; this
- allows you to format the menu as you wish. Unfortunately you must type
- node names without any extra spaces or some versions of some Info
- readers will not find the node (@pxref{Node Line Requirements}).
- @command{makeinfo} warns when the text of a menu item (and node names
- and cross-references) contains a problematic construct that will
- interfere with its parsing in Info. If you don't want to see the
- warnings, you can set the customization variable
- @code{INFO_SPECIAL_CHARS_WARNING} to @samp{0} (@pxref{Other
- Customization Variables}).
- @node Less Cluttered Menu Entry
- @subsection Less Cluttered Menu Entry
- @cindex Two part menu entry
- @cindex Double-colon menu entries
- @cindex Menu entries with two colons
- @cindex Less cluttered menu entry
- @cindex Uncluttered menu entry
- When the menu entry name and node name are the same, you can write
- the name immediately after the asterisk and space at the beginning of
- the line and follow the name with two colons.
- @need 800
- For example, write
- @example
- * Name:: @var{description}
- @end example
- @need 800
- @noindent
- instead of
- @example
- * Name: Name. @var{description}
- @end example
- We recommend using the node name for the menu entry name whenever
- possible, since it reduces visual clutter in the menu.
- @node Other Info Files
- @subsection Referring to Other Info Files
- @cindex Referring to other Info files
- @cindex Nodes in other Info files
- @cindex Other Info files' nodes
- @cindex Going to other Info files' nodes
- @cindex Info; other files' nodes
- You can create a menu entry that enables a reader in Info to go to a
- node in another Info file by writing the file name in parentheses just
- before the node name. Some examples:
- @example
- @group
- @@menu
- * @var{first-entry-name}:(@var{filename})@var{nodename}. @var{description}
- * (@var{filename})@var{second-node}:: @var{description}
- @@end menu
- @end group
- @end example
- For example, to refer directly to the @samp{Outlining} and
- @samp{Rebinding} nodes in the @cite{Emacs Manual}, you could write a
- menu like this:
- @example
- @group
- @@menu
- * Outlining: (emacs)Outline Mode. The major mode for
- editing outlines.
- * (emacs)Rebinding:: How to redefine the
- meaning of a key.
- @@end menu
- @end group
- @end example
- If you do not list the node name, but only name the file, then Info
- presumes that you are referring to the `Top' node. Examples:
- @example
- @group
- * Info: (info). Documentation browsing system.
- * (emacs):: The extensible, self-documenting
- text editor.
- @end group
- @end example
- The GNU Emacs Texinfo mode menu updating commands only work with nodes
- within the current buffer, so you cannot use them to create menus that
- refer to other files. You must write such menus by hand.
- @node Chapter Structuring
- @chapter Chapter Structuring
- @anchor{Structuring}@c old name
- @cindex Chapter structuring
- @cindex Structuring of chapters
- @cindex Sectioning
- Texinfo's @dfn{chapter structuring} commands divide a document into a
- hierarchy of chapters, sections, subsections, and subsubsections. These
- commands generate large headings in the text, like the one above. They
- also provide information for generating the table of contents
- (@pxref{Contents,, Generating a Table of Contents}).
- Normally you put a @code{@@node} command immediately before each
- chapter structuring command. @xref{Nodes}.
- @menu
- * Tree Structuring:: A manual is like an upside down tree @dots{}
- * Structuring Command Types:: How to divide a manual into parts.
- * @code{@@chapter}:: Chapter structuring.
- * @code{@@unnumbered @@appendix}::
- * @code{@@majorheading @@chapheading}::
- * @code{@@section}::
- * @code{@@unnumberedsec @@appendixsec @@heading}::
- * @code{@@subsection}::
- * @code{@@unnumberedsubsec @@appendixsubsec @@subheading}::
- * @code{@@subsubsection}:: Commands for the lowest level sections.
- * @code{@@part}:: Collections of chapters.
- * Raise/lower sections:: How to change commands' hierarchical level.
- @end menu
- @node Tree Structuring
- @section Tree Structure of Sections
- @cindex Tree structuring
- A Texinfo file is usually structured like a book with chapters,
- sections, subsections, and the like. This structure can be visualized
- as a tree (or rather as an upside-down tree) with the root at the top
- and the levels corresponding to chapters, sections, subsection, and
- subsubsections.
- Here is a diagram that shows a Texinfo file with three chapters, each
- with two sections.
- @example
- @group
- Top
- |
- -------------------------------------
- | | |
- Chapter 1 Chapter 2 Chapter 3
- | | |
- -------- -------- --------
- | | | | | |
- Section Section Section Section Section Section
- 1.1 1.2 2.1 2.2 3.1 3.2
- @end group
- @end example
- In a Texinfo file that has this structure, the beginning of Chapter 2
- would be written like this:
- @example
- @group
- @@node Chapter 2
- @@chapter Chapter 2
- @end group
- @end example
- @noindent
- For purposes of example, here is how it would be written with
- explicit node pointers:
- @example
- @group
- @@node Chapter 2, Chapter 3, Chapter 1, Top
- @@chapter Chapter 2
- @end group
- @end example
- The chapter structuring commands are described in the sections that
- follow; the @code{@@node} command is described in
- the previous chapter (@pxref{Nodes}).
- @node Structuring Command Types
- @section Structuring Command Types
- The chapter structuring commands fall into four groups or series, each
- of which contains structuring commands corresponding to the
- hierarchical levels of chapters, sections, subsections, and
- subsubsections.
- The four groups of commands are the @code{@@chapter} series, the
- @code{@@unnumbered} series, the @code{@@appendix} series, and the
- @code{@@heading} series. Each command produces a title with a
- different appearance in the body of the document. Some of the
- commands list their titles in the tables of contents, while others do
- not. Here are the details:
- @itemize @bullet
- @item
- The @code{@@chapter} and @code{@@appendix} series of commands produce
- numbered or lettered entries both in the body of a document and in its
- table of contents.
- @item
- The @code{@@unnumbered} series of commands produce unnumbered entries
- both in the body of a document and in its table of contents. The
- @code{@@top} command, which has a special use, is a member of this
- series (@pxref{@code{@@top} Command}). An @code{@@unnumbered} section
- is a normal part of the document structure.
- @item
- The @code{@@heading} series of commands produce simple unnumbered
- headings that do not appear in a table of contents, are not associated
- with nodes, and cannot be cross-referenced. These heading commands
- never start a new page.
- @end itemize
- When a @code{@@setchapternewpage} command says to do so, the
- @code{@@chapter}, @code{@@unnumbered}, and @code{@@appendix} commands
- start new pages in the printed manual; the @code{@@heading} commands
- do not. @xref{@code{@@setchapternewpage}}.
- Here is a summary:
- @tex
- {\globaldefs=1 \smallfonts \rm}
- @end tex
- @multitable @columnfractions .19 .30 .29 .22
- @item @tab @tab @tab No new page
- @item @i{Numbered} @tab @i{Unnumbered} @tab @i{Lettered/numbered} @tab @i{Unnumbered}
- @item In contents @tab In contents @tab In contents @tab Not in contents
- @item @tab @code{@@top} @tab @tab @code{@@majorheading}
- @item @code{@@chapter} @tab @code{@@unnumbered} @tab @code{@@appendix} @tab @code{@@chapheading}
- @item @code{@@section} @tab @code{@@unnumberedsec} @tab @code{@@appendixsec} @tab @code{@@heading}
- @item @code{@@subsection} @tab @code{@@unnumberedsubsec} @tab @code{@@appendixsubsec} @tab @code{@@subheading}
- @item @code{@@subsubsection} @tab @code{@@unnumberedsubsubsec} @tab @code{@@appendixsubsubsec} @tab @code{@@subsubheading}
- @end multitable
- @tex
- {\globaldefs=1 \textfonts \rm}
- @end tex
- @node @code{@@chapter}
- @section @code{@@chapter}: Chapter Structuring
- @anchor{chapter}@c old name
- @findex chapter
- @code{@@chapter} identifies a chapter in the document--the highest
- level of the normal document structuring hierarchy. Write the command
- at the beginning of a line and follow it on the same line by the title
- of the chapter. The chapter is numbered automatically, starting
- from@tie{}1.
- For example, the present chapter in this manual is entitled
- ``@code{@@chapter}: Chapter Structuring''; the @code{@@chapter} line
- looks like this:
- @example
- @@chapter @@code@{@@@@chapter@}: Chapter Structuring
- @end example
- In @TeX{}, the @code{@@chapter} command produces a chapter heading in
- the document.
- In Info and plain text output, the @code{@@chapter} command causes the
- title to appear on a line by itself, with a line of asterisks inserted
- underneath. So, the above example produces the following output:
- @example
- @group
- 5 Chapter Structuring
- *********************
- @end group
- @end example
- In HTML, the @code{@@chapter} command produces an @code{<h2>}-level
- header by default (controlled by the @code{CHAPTER_HEADER_LEVEL}
- customization variable, @pxref{Other Customization Variables}).
- In the XML and Docbook output, a @code{<chapter>} element is produced
- that includes all the following sections, up to the next chapter.
- @node @code{@@unnumbered @@appendix}
- @section @code{@@unnumbered}, @code{@@appendix}: Chapters with Other Labeling
- @anchor{unnumbered & appendix}@c old name
- @findex unnumbered
- @findex appendix
- Use the @code{@@unnumbered} command to start a chapter-level element
- that appears without chapter numbers of any kind. Use the
- @code{@@appendix} command to start an appendix that is labeled by
- letter (`A', `B', @dots{}) instead of by number; appendices are also
- at the chapter level of structuring.
- Write an @code{@@appendix} or @code{@@unnumbered} command at the
- beginning of a line and follow it on the same line by the title,
- just as with @code{@@chapter}.
- @findex centerchap
- Texinfo also provides a command @code{@@centerchap}, which is analogous
- to @code{@@unnumbered}, but centers its argument in the printed and HTML
- outputs. This kind of stylistic choice is not usually offered by
- Texinfo. It may be suitable for short documents.
- @c but the Hacker's Dictionary wanted it, before they quit Texinfo.
- @cindex Docbook and prefatory sections
- @cindex Preface, etc., and Docbook
- With @code{@@unnumbered}, if the name of the associated node is one of
- these English words (case-insensitive):
- @example
- Acknowledgements Colophon Dedication Preface
- @end example
- @cindex @code{<acknowledgements>} Docbook tag
- @cindex @code{<colophon>} Docbook tag
- @cindex @code{<dedication>} Docbook tag
- @cindex @code{<preface>} Docbook tag
- @cindex @code{<chapter>} Docbook tag
- @cindex @code{<title>} Docbook tag
- @noindent then the Docbook output uses corresponding special tags
- (@code{<preface>}, etc.)@: instead of the default @code{<chapter>}.
- The argument to @code{@@unnumbered} itself can be anything, and is
- output as the following @code{<title>} text as usual.
- @node @code{@@majorheading @@chapheading}
- @section @code{@@majorheading}, @code{@@chapheading}: Chapter-level Headings
- @anchor{majorheading & chapheading}@c old name
- @findex majorheading
- @findex chapheading
- The @code{@@majorheading} and @code{@@chapheading} commands produce
- chapter-like headings in the body of a document.
- However, neither command produces an entry in the table of contents,
- and neither command causes @TeX{} to start a new page in a printed
- manual.
- In @TeX{}, a @code{@@majorheading} command generates a larger vertical
- whitespace before the heading than a @code{@@chapheading} command but
- is otherwise the same.
- In Info and plain text, the @code{@@majorheading} and
- @code{@@chapheading} commands produce the same output as
- @code{@@chapter}: the title is printed on a line by itself with a line
- of asterisks underneath. Similarly for HTML@. The only difference is
- the lack of numbering and the lack of any association with nodes.
- @xref{@code{@@chapter}}.
- @node @code{@@section}
- @section @code{@@section}: Sections Below Chapters
- @anchor{section}@c old name
- @findex section
- An @code{@@section} command identifies a section within a chapter
- unit, whether created with @code{@@chapter}, @code{@@unnumbered}, or
- @code{@@appendix}, following the numbering scheme of the chapter-level
- command. Thus, within a @code{@@chapter} chapter numbered `1', the
- sections are numbered `1.1', `1.2', etc.; within an @code{@@appendix}
- ``chapter'' labeled `A', the sections are numbered `A.1', `A.2', etc.;
- within an @code{@@unnumbered} chapter, the section gets no number.
- The output is underlined with @samp{=} in Info and plain text.
- To make a section, write the @code{@@section} command at the
- beginning of a line and follow it on the same line by the section
- title. For example,
- @example
- @@section This is a section
- @end example
- @noindent
- might produce the following in Info:
- @example
- @group
- 5.7 This is a section
- =====================
- @end group
- @end example
- Section titles are listed in the table of contents.
- The @TeX{}, HTML, Docbook, and XML output is all analogous to the
- chapter-level output, just ``one level down''; @pxref{@code{@@chapter}}.
- @node @code{@@unnumberedsec @@appendixsec @@heading}
- @section @code{@@unnumberedsec}, @code{@@appendixsec}, @code{@@heading}
- @anchor{unnumberedsec appendixsec heading}@c old name
- @findex unnumberedsec
- @findex appendixsec
- @findex heading
- The @code{@@unnumberedsec}, @code{@@appendixsec}, and @code{@@heading}
- commands are, respectively, the unnumbered, appendix-like, and
- heading-like equivalents of the @code{@@section} command (see the
- previous section).
- @code{@@unnumberedsec} and @code{@@appendixsec} do not need to be used
- in ordinary circumstances, because @code{@@section} may also be used
- within @code{@@unnumbered} and @code{@@appendix} chapters; again, see
- the previous section.
- @table @code
- @item @@unnumberedsec
- The @code{@@unnumberedsec} command may be used within an unnumbered
- chapter or within a regular chapter or appendix to produce an
- unnumbered section.
- @item @@appendixsec
- @itemx @@appendixsection
- @findex appendixsection
- @findex appendixsec
- @code{@@appendixsection} is a longer spelling of the
- @code{@@appendixsec} command; the two are synonymous.
- Conventionally, the @code{@@appendixsec} or @code{@@appendixsection}
- command is used only within appendices.
- @item @@heading
- You may use the @code{@@heading} command (almost) anywhere for a
- section-style heading that will not appear in the table of contents.
- The @code{@@heading}-series commands can appear inside most
- environments, for example, though pathological and useless locations
- such as inside @code{@@titlepage}, as an argument to another command,
- etc., are not allowed.
- @end table
- @node @code{@@subsection}
- @section @code{@@subsection}: Subsections Below Sections
- @anchor{subsection}@c old name
- @findex subsection
- Subsections are to sections as sections are to chapters;
- @pxref{@code{@@section}}. In Info and plain text, subsection titles
- are underlined with @samp{-}. For example,
- @example
- @@subsection This is a subsection
- @end example
- @noindent
- might produce
- @example
- @group
- 1.2.3 This is a subsection
- --------------------------
- @end group
- @end example
- Subsection titles are listed in the table of contents.
- The @TeX{}, HTML, Docbook, and XML output is all analogous to the
- chapter-level output, just ``two levels down'';
- @pxref{@code{@@chapter}}.
- @node @code{@@unnumberedsubsec @@appendixsubsec @@subheading}
- @section The @code{@@subsection}-like Commands
- @anchor{unnumberedsubsec appendixsubsec subheading}@c old name
- @findex unnumberedsubsec
- @findex appendixsubsec
- @findex subheading
- @cindex Subsection-like commands
- The @code{@@unnumberedsubsec}, @code{@@appendixsubsec}, and
- @code{@@subheading} commands are, respectively, the unnumbered,
- appendix-like, and heading-like equivalents of the @code{@@subsection}
- command. (@xref{@code{@@subsection}}.)
- @code{@@unnumberedsubsec} and @code{@@appendixsubsec} do not need to
- be used in ordinary circumstances, because @code{@@subsection} may
- also be used within sections of @code{@@unnumbered} and
- @code{@@appendix} chapters (@pxref{@code{@@section}}).
- An @code{@@subheading} command produces a heading like that of a
- subsection except that it is not numbered and does not appear in the
- table of contents. Similarly, an @code{@@unnumberedsubsec} command
- produces an unnumbered heading like that of a subsection and an
- @code{@@appendixsubsec} command produces a subsection-like heading
- labeled with a letter and numbers; both of these commands produce
- headings that appear in the table of contents. In Info and plain
- text, the @code{@@subsection}-like commands generate a title
- underlined with hyphens.
- @node @code{@@subsubsection}
- @section @code{@@subsection} and Other Subsub Commands
- @anchor{subsubsection}@c old name
- @findex subsubsection
- @findex unnumberedsubsubsec
- @findex appendixsubsubsec
- @findex subsubheading
- @cindex Subsub sectioning commands
- The fourth and lowest level sectioning commands in Texinfo are the
- `subsub' commands. They are:
- @table @code
- @item @@subsubsection
- Subsubsections are to subsections as subsections are to sections.
- (@xref{@code{@@subsection}}.) Subsubsection titles appear in the
- table of contents.
- @item @@unnumberedsubsubsec
- Unnumbered subsubsection titles appear in the table of contents,
- but lack numbers. Otherwise, unnumbered subsubsections are the same
- as subsubsections.
- @item @@appendixsubsubsec
- Conventionally, appendix commands are used only for appendices and are
- lettered and numbered appropriately. They also appear in the table
- of contents.
- @item @@subsubheading
- The @code{@@subsubheading} command may be used anywhere that you want
- a small heading that will not appear in the table of contents.
- @end table
- As with subsections, @code{@@unnumberedsubsubsec} and
- @code{@@appendixsubsubsec} do not need to be used in ordinary
- circumstances, because @code{@@subsubsection} may also be used within
- subsections of @code{@@unnumbered} and @code{@@appendix} chapters
- (@pxref{@code{@@section}}).
- In Info, `subsub' titles are underlined with periods. For example,
- @example
- @@subsubsection This is a subsubsection
- @end example
- @noindent
- might produce
- @example
- @group
- 1.2.3.4 This is a subsubsection
- ...............................
- @end group
- @end example
- The @TeX{}, HTML, Docbook, and XML output is all analogous to the
- chapter-level output, just ``three levels down''; @pxref{@code{@@chapter}}.
- @node @code{@@part}
- @section @code{@@part}: Groups of Chapters
- @findex part
- @cindex Part pages
- The final sectioning command is @code{@@part}, to mark a @dfn{part} of
- a manual, that is, a group of chapters or (rarely) appendices. This
- behaves quite differently from the other sectioning commands, to fit
- with the way such ``parts'' are conventionally used in books.
- No @code{@@node} command is associated with @code{@@part}. Just write
- the command on a line by itself, including the part title, at the
- place in the document you want to mark off as starting that part. For
- example:
- @example
- @@part Part I:@@* The beginning
- @end example
- As can be inferred from this example, no automatic numbering or
- labeling of the @code{@@part} text is done. The text is taken as-is.
- Because parts are not associated with nodes, no general text can
- follow the @code{@@part} line. To produce the intended output, it
- must be followed by a chapter-level command (including its node).
- Thus, to continue the example:
- @example
- @@part Part I:@@* The beginning
- @@node Introduction
- @@chapter Introduction
- ...
- @end example
- In the @TeX{} output, the @code{@@part} text is included in both the
- normal and short tables of contents (@pxref{Contents}), without a page
- number (since that is the normal convention). In addition, a ``part
- page'' is output in the body of the document, with just the
- @code{@@part} text. In the example above, the @code{@@*} causes a
- line break on the part page (but is replaced with a space in the
- tables of contents). This part page is always forced to be on an odd
- (right-hand) page, regardless of the chapter pagination
- (@pxref{@code{@@setchapternewpage}}).
- In the HTML output, the @code{@@part} text is similarly included in
- the tables of contents, and a heading is included in the main document
- text, as part of the following chapter or appendix node.
- In the XML and Docbook output, the @code{<part>} element includes all
- the following chapters, up to the next @code{<part>}. A @code{<part>}
- containing chapters is also closed at an appendix.
- In the Info and plain text output, @code{@@part} has no effect.
- @code{@@part} is ignored when raising or lowering sections (see next
- section). That is, it is never lowered and nothing can be raised to it.
- @node Raise/lower sections
- @section Raise/lower Sections: @code{@@raisesections} and @code{@@lowersections}
- @findex raisesections
- @findex lowersections
- @cindex Raising and lowering sections
- @cindex Lowering and raising sections
- @cindex Sections, raising and lowering
- The @code{@@raisesections} and @code{@@lowersections} commands
- implicitly raise and lower the hierarchical level of following
- chapters, sections and the other sectioning commands (excluding parts).
- That is, the @code{@@raisesections} command changes sections to
- chapters, subsections to sections, and so on. Conversely, the
- @code{@@lowersections} command changes chapters to sections, sections
- to subsections, and so on. Thus, a @code{@@lowersections} command
- cancels a @code{@@raisesections} command, and vice versa.
- @cindex Include files, and section levels
- You can use @code{@@lowersections} to include text written as an outer
- or standalone Texinfo file in another Texinfo file as an inner,
- included file (@pxref{Include Files}). Typical usage looks like this:
- @example
- @@lowersections
- @@include somefile.texi
- @@raisesections
- @end example
- @noindent (Without the @code{@@raisesections}, all the subsequent
- sections in the main file would also be lowered.)
- If the included file being lowered has a @code{@@top} node, you'll
- need to conditionalize its inclusion with a flag (@pxref{@code{@@set
- @@value}}).
- As a practical matter, you generally only want to raise or lower large
- chunks, usually in external files as shown above. The final result has
- to have menus that take the raising and lowering into account, so you
- cannot just arbitrarily sprinkle @code{@@raisesections} and
- @code{@@lowersections} commands throughout the document.
- Repeated use of the commands continues to raise or lower the
- hierarchical level a step at a time. An attempt to raise above
- `chapter' reproduces chapter commands; an attempt to lower below
- `subsubsection' reproduces subsubsection commands. Also, lowered
- subsubsections and raised chapters will not work with
- @command{makeinfo}'s feature of implicitly determining node pointers,
- since the menu structure cannot be represented correctly.
- Write each @code{@@raisesections} and @code{@@lowersections} command
- on a line of its own.
- @node Cross References
- @chapter Cross-references
- @cindex Making cross-references
- @cindex Cross-references
- @cindex References
- @dfn{Cross-references} are used to refer the reader to other parts of the
- same or different Texinfo files.
- @menu
- * References:: What cross-references are for.
- * Cross Reference Commands:: A summary of the different commands.
- * Cross Reference Parts:: A cross-reference has several parts.
- * @code{@@xref}:: Begin a reference with `See' @dots{}
- * Referring to a Manual as a Whole:: Refer to an entire manual.
- * @code{@@ref}:: A reference for the last part of a sentence.
- * @code{@@pxref}:: How to write a parenthetical cross-reference.
- * @code{@@anchor}:: Defining arbitrary cross-reference targets
- * @code{@@inforef}:: How to refer to an Info-only file.
- * @code{@@url}:: How to refer to a uniform resource locator.
- * @code{@@cite}:: How to refer to books not in the Info system.
- @end menu
- @node References
- @section What References Are For
- Often, but not always, a printed document should be designed so that
- it can be read sequentially. People tire of flipping back and forth
- to find information that should be presented to them as they need
- it.
- However, in any document, some information will be too detailed for
- the current context, or incidental to it; use cross-references to
- provide access to such information. Also, an online help system or a
- reference manual is not like a novel; few read such documents in
- sequence from beginning to end. Instead, people look up what they
- need. For this reason, such creations should contain many cross
- references to help readers find other information that they may not
- have read.
- In a printed manual, a cross-reference results in a page reference,
- unless it is to another manual altogether, in which case the
- cross-reference names that manual. In Info, a cross-reference results
- in an entry that you can follow using the Info @samp{f} command.
- (@xref{Help-Xref,, Following cross-references, info, Info}.) In HTML, a
- cross-reference results in an hyperlink.
- The various cross-reference commands use nodes (or anchors,
- @pxref{@code{@@anchor}}) to define cross-reference locations.
- @TeX{} needs nodes to define cross-reference locations. When @TeX{}
- generates a DVI file, it records each node's page number and uses the
- page numbers in making references. Thus, even if you are writing a
- manual that will only be printed, and not used online, you must
- nonetheless write @code{@@node} lines in order to name the places to
- which you make cross-references.
- @need 800
- @node Cross Reference Commands
- @section Different Cross-reference Commands
- @cindex Different cross-reference commands
- There are three different cross-reference commands:
- @table @code
- @item @@xref
- Used to start a sentence in the printed manual and in HTML with
- @w{`See @dots{}'} or an Info cross-reference saying @samp{*Note
- @var{name}: @var{node}.}.
- @item @@ref
- Used within or, more often, at the end of a sentence; produces just
- the reference in the printed manual and in HTML without the preceding
- `See' (same as @code{@@xref} for Info).
- @item @@pxref
- Used within parentheses, at the end of a sentence, or otherwise before
- punctuation, to make a reference. Its output starts with a lowercase
- `see' in the printed manual and in HTML, and a lowercase @samp{*note}
- in Info. (@samp{p} is for `parenthesis'.)
- @end table
- Additionally, there are commands to produce references to documents
- outside the Texinfo system. The @code{@@cite} command is used
- to make references to books and manuals. @code{@@url} produces
- a @acronym{URL}, for example a reference to a page on the World
- Wide Web. @code{@@inforef} is used to make a reference to an Info
- file for which there is no printed manual.
- @node Cross Reference Parts
- @section Parts of a Cross-reference
- @cindex Cross-reference parts
- @cindex Parts of a cross-reference
- @anchor{Reference Syntax} @c merged node
- A cross-reference command requires only one argument, which is
- the name of the node to which it refers. Here is a simple example:
- @example
- @@xref@{Node name@}.
- @end example
- @noindent
- In Info output, this produces
- @example
- *Note Node name::.
- @end example
- @noindent
- In a printed manual, the output is
- @quotation
- See Section @var{nnn} [Node name], page @var{ppp}.
- @end quotation
- A cross-reference command may contain up to four additional arguments.
- By using these arguments, you can provide a cross-reference name,
- a topic description or section title for the printed output, the name
- of a different manual file, and the name of a different printed manual.
- To refer to another manual as a whole, the manual file and/or the name
- of the printed manual are the only required arguments (@pxref{Referring
- to a Manual as a Whole}).
- @need 700
- Here is an example of a full five-part cross-reference:
- @example
- @group
- @@xref@{Node name, Online Label, Printed Label,
- info-file-name, A Printed Manual@}, for details.
- @end group
- @end example
- @noindent
- which produces
- @example
- *Note Online Label: (info-file-name)Node name,
- for details.
- @end example
- @noindent
- in Info and
- @quotation
- See section ``Printed Label'' in @i{A Printed Manual}, for details.
- @end quotation
- @noindent
- in a printed book.
- The five possible arguments for a cross-reference are:
- @enumerate
- @item
- The node or anchor name (required, except for reference to whole
- manuals). This is the location to which the cross-reference takes
- you. In a printed document, the location of the node provides the
- page reference only for references within the same document.
- Use @code{@@node} to define the node (@pxref{Writing a Node}), or
- @code{@@anchor} (@pxref{@code{@@anchor}}).
- Write a node name in a cross-reference in exactly the same way as in
- the @code{@@node} line, including the same capitalization; otherwise, the
- formatters may not find the reference.
- @item
- A label for online output. It is usually omitted; then
- the topic description (third argument) is used if it was specified;
- if that was omitted as well, the node name is used.
- @item
- A label for printed output. Often, this is the title or topic of the
- section. This is used as the name of the reference in the printed
- manual. If omitted, the node name is used.
- @item
- The name of the manual file in which the reference is located, if it is
- different from the current file. This name is used both for Info and
- HTML.
- @item
- The name of a printed manual from a different Texinfo file.
- @end enumerate
- The template for a full five argument cross-reference looks like
- this:
- @example
- @group
- @@xref@{@var{node-name}, @var{online-label}, @var{printed-label},
- @var{info-file-name}, @var{printed-manual-title}@}
- @end group
- @end example
- Whitespace before and after the commas separating these arguments is
- ignored. To include a comma in one of the arguments, use
- @code{@@comma@{@}} (@pxref{Inserting a Comma}).
- @cindex Comma after cross-reference
- When processing with TeX, a comma is automatically inserted after the
- page number for cross-references to within the same manual, unless the
- closing brace of the argument is followed by non-whitespace (such as a
- comma or period). This gives you the choice of whether to have a comma
- there in Info or HTML output. For example,
- @example
- @@xref@{Another Section@} for more information
- @end example
- @noindent produces
- @w{`See Another Section, page @var{ppp}, for more information'} in the
- printed output, and
- @w{@samp{*Note Another Section:: for more information}} in the Info
- output.
- If an unwanted comma is added, follow the argument
- with a command such as @samp{@@:}. For example,
- @w{@samp{@@xref@{Hurricanes@}@@: --- for the details}} produces
- @quotation
- See Hurricanes, page @var{ppp} --- for the details
- @end quotation
- @noindent instead of
- @w{`See Hurricanes, page @var{ppp}, --- for the details'}.
- Cross-references with one, two, three, four, and five arguments are
- described separately following the description of @code{@@xref}.
- @command{makeinfo} warns when the text of a cross-reference (and node
- names and menu items) contains a problematic construct that will
- interfere with its parsing in Info. If you don't want to see the
- warnings, you can set the customization variable
- @code{INFO_SPECIAL_CHARS_WARNING} to @samp{0} (@pxref{Other
- Customization Variables}).
- @node @code{@@xref}
- @section @code{@@xref}
- @anchor{xref}@c old name
- @findex xref
- @cindex Cross-references using @code{@@xref}
- @cindex References using @code{@@xref}
- The @code{@@xref} command generates a cross-reference for the
- beginning of a sentence.
- @menu
- * One Argument:: @code{@@xref} with one argument.
- * Two Arguments:: @code{@@xref} with two arguments.
- * Three Arguments:: @code{@@xref} with three arguments.
- * Four and Five Arguments:: @code{@@xref} with four and five arguments.
- @end menu
- @node One Argument
- @subsection @code{@@xref} with One Argument
- @cindex One-argument form of cross-references
- The simplest form of @code{@@xref} takes one argument, the name of
- another node in the same Texinfo file.
- @need 700
- @noindent
- For example,
- @example
- @@xref@{Tropical Storms@}.
- @end example
- @noindent
- produces
- @example
- *Note Tropical Storms::.
- @end example
- @noindent
- in Info and
- @quotation
- See Section 3.1 [Tropical Storms], page 24.
- @end quotation
- @noindent
- in a printed manual.
- @node Two Arguments
- @subsection @code{@@xref} with Two Arguments
- @cindex Two-argument form of cross-references
- With two arguments, the second is used as a label for the online output.
- @need 750
- @noindent
- The template is like this:
- @example
- @@xref@{@var{node-name}, @var{online-label}@}.
- @end example
- @need 700
- @noindent
- For example,
- @example
- @@xref@{Electrical Effects, Lightning@}.
- @end example
- @noindent
- produces:
- @example
- *Note Lightning: Electrical Effects.
- @end example
- @noindent
- in Info and
- @quotation
- See Section 5.2 [Electrical Effects], page 57.
- @end quotation
- @noindent
- in a printed manual, where the node name is printed.
- The second argument to cross-references must observe some of the
- restrictions for node names (@pxref{Node Line Requirements}). The
- most common issue is that colons cannot be used, since that interferes
- with the parsing of the Info file.
- @node Three Arguments
- @subsection @code{@@xref} with Three Arguments
- @cindex Three-argument form of cross-references
- A third argument replaces the node name in the @TeX{} output. The third
- argument should be the name of the section in the printed output, or
- else state the topic discussed by that section.
- @need 750
- @noindent
- The template is like this:
- @example
- @group
- @@xref@{@var{node-name}, @var{online-label}, @var{printed-label}@}.
- @end group
- @end example
- @need 700
- @noindent
- For example,
- @example
- @group
- @@xref@{Electrical Effects, Lightning, Thunder and Lightning@},
- for details.
- @end group
- @end example
- @noindent
- produces
- @example
- *Note Lightning: Electrical Effects, for details.
- @end example
- @noindent
- in Info and
- @quotation
- See Section 5.2 [Thunder and Lightning], page 57, for details.
- @end quotation
- @noindent
- in a printed manual.
- If a third argument is given and the second one is empty, then the
- third argument serves for both. (Note how two commas, side by side, mark
- the empty second argument.)
- @example
- @group
- @@xref@{Electrical Effects, , Thunder and Lightning@},
- for details.
- @end group
- @end example
- @noindent
- produces
- @example
- *Note Thunder and Lightning: Electrical Effects, for details.
- @end example
- @noindent
- in Info and
- @quotation
- See Section 5.2 [Thunder and Lightning], page 57, for details.
- @end quotation
- @noindent
- in a printed manual.
- The third argument to cross-references must observe some of the
- restrictions for node names (@pxref{Node Line Requirements}). The
- most common issue is that colons cannot be used, since that interferes
- with the parsing of the Info file.
- As a practical matter, it is often best to write cross-references with
- just the first argument if the node name and the section title are the
- same (or nearly so), and with the first and third arguments only if the
- node name and title are different.
- @findex xrefautomaticsectiontitle
- Texinfo offers a setting to use the section title instead of node
- names by default in cross-references (an explicitly specified third
- argument still takes precedence):
- @example
- @@xrefautomaticsectiontitle on
- @end example
- Typically this line would be given near the beginning of the document
- and used for the whole manual. But you can turn it off if you want
- (@code{@@xrefautomaticsectiontitle off}), for example, if you're
- including some other sub-document that doesn't have suitable section
- names.
- @node Four and Five Arguments
- @subsection @code{@@xref} with Four and Five Arguments
- @cindex Four- and five argument forms of cross-references
- In a cross-reference, a fourth argument specifies the name of another
- Info file, different from the file in which the reference appears, and
- a fifth argument specifies its title as a printed manual.
- @need 800
- @noindent
- The full template is:
- @example
- @group
- @@xref@{@var{node-name}, @var{online-label}, @var{printed-label},
- @var{info-file-name}, @var{printed-manual-title}@}.
- @end group
- @end example
- @need 700
- @noindent
- For example,
- @example
- @@xref@{Electrical Effects, Lightning, Thunder and Lightning,
- weather, An Introduction to Meteorology@}.
- @end example
- @noindent
- produces this output in Info:
- @example
- *Note Lightning: (weather)Electrical Effects.
- @end example
- @noindent
- As you can see, the name of the Info file is enclosed in parentheses
- and precedes the name of the node.
- @noindent
- In a printed manual, the reference looks like this:
- @quotation
- See section ``Thunder and Lightning'' in @cite{An Introduction to
- Meteorology}.
- @end quotation
- @noindent
- The title of the printed manual is typeset like @code{@@cite}; and the
- reference lacks a page number since @TeX{} cannot know to which page a
- reference refers when that reference is to another manual.
- Next case: often, you will leave out the second argument when you use
- the long version of @code{@@xref}. In this case, the third argument,
- the topic description, will be used as the cross-reference name in
- Info. For example,
- @example
- @@xref@{Electrical Effects, , Thunder and Lightning,
- weather, An Introduction to Meteorology@}.
- @end example
- @noindent
- produces
- @example
- @group
- *Note Thunder and Lightning: (weather)Electrical Effects.
- @end group
- @end example
- @noindent
- in Info and
- @quotation
- See section ``Thunder and Lightning'' in @cite{An Introduction to
- Meteorology}.
- @end quotation
- @noindent
- in a printed manual.
- Next case: If the node name and the section title are the same in the
- other manual, you may also leave out the section title. In this case,
- the node name is used in both instances. For example,
- @example
- @@xref@{Electrical Effects,,,
- weather, An Introduction to Meteorology@}.
- @end example
- @noindent
- produces
- @example
- @group
- *Note (weather)Electrical Effects::.
- @end group
- @end example
- @noindent
- in Info and
- @quotation
- See section ``Electrical Effects'' in @cite{An Introduction to
- Meteorology}.
- @end quotation
- @noindent
- in a printed manual.
- A very unusual case: you may want to refer to another manual file that
- is within a single printed manual---when multiple Texinfo files are
- incorporated into the same @TeX{} run but can create separate Info or
- HTML output files. In this case, you need to specify only the fourth
- argument, and not the fifth.
- Finally, it's also allowed to leave out all the arguments
- @emph{except} the fourth and fifth, to refer to another manual as a
- whole. See the next section.
- @node Referring to a Manual as a Whole
- @section Referring to a Manual as a Whole
- @cindex Manual, referring to as a whole
- @cindex Referring to an entire manual
- @anchor{Top Node Naming} @c old name
- Ordinarily, you must always name a node in a cross-reference.
- However, it's not unusual to want to refer to another manual as a
- whole, rather than a particular section within it. In this case,
- giving any section name is an unnecessary distraction.
- So, with cross-references to other manuals (@pxref{Four and Five
- Arguments}), if the first argument is either @samp{Top} (capitalized
- just that way) or omitted entirely, and the third argument is omitted,
- the printed output includes no node or section name. (The Info output
- includes @samp{Top} if it was given.) For example,
- @example
- @@xref@{Top,,, make, The GNU Make Manual@}.
- @end example
- @noindent produces
- @example
- @group
- *Note (make)Top::.
- @end group
- @end example
- @noindent and
- @quotation
- See @cite{The GNU Make Manual}.
- @end quotation
- @noindent
- Info readers will go to the Top node of the manual whether
- or not the `Top' node is explicitly specified.
- It's also possible (and is historical practice) to refer to a whole
- manual by specifying the `Top' node and an appropriate entry for the
- third argument to the @code{@@xref} command. Using this idiom, to
- make a cross-reference to @cite{The GNU Make Manual}, you would write:
- @example
- @@xref@{Top,, Overview, make, The GNU Make Manual@}.
- @end example
- @noindent
- which produces
- @example
- *Note Overview: (make)Top.
- @end example
- @noindent
- in Info and
- @quotation
- See section ``Overview'' in @cite{The GNU Make Manual}.
- @end quotation
- @noindent
- in a printed manual.
- In this example, @samp{Top} is the name of the first node, and
- @samp{Overview} is the name of the first section of the manual. There
- is no widely-used convention for naming the first section in a printed
- manual, this is just what the Make manual happens to use. This
- arbitrariness of the first name is a principal reason why omitting the
- third argument in whole-manual cross-references is preferable.
- @node @code{@@ref}
- @section @code{@@ref}
- @anchor{ref}@c old name
- @findex ref
- @cindex Cross-references using @code{@@ref}
- @cindex References using @code{@@ref}
- @code{@@ref} is nearly the same as @code{@@xref} except that it does
- not generate a `See' in the printed output, just the reference itself.
- This makes it useful as the last part of a sentence.
- @noindent For example,
- @cindex Hurricanes
- @example
- For more information, @@pxref@{This@}, and @@ref@{That@}.
- @end example
- @noindent
- produces in Info:
- @example
- For more information, *note This::, and *note That::.
- @end example
- @noindent
- and in printed output:
- @quotation
- For more information, see Section 1.1 [This], page 1,
- and Section 1.2 [That], page 2.
- @end quotation
- The @code{@@ref} command can tempt writers to express themselves in a
- manner that is suitable for a printed manual but looks awkward in the
- Info format. Bear in mind that your audience could be using both the
- printed and the Info format. For example:
- @cindex Sea surges
- @example
- Sea surges are described in @@ref@{Hurricanes@}.
- @end example
- @noindent
- looks ok in the printed output:
- @quotation
- Sea surges are described in Section 6.7 [Hurricanes], page 72.
- @end quotation
- @noindent
- but is awkward to read in Info, ``note'' being a verb:
- @example
- Sea surges are described in *note Hurricanes::.
- @end example
- @node @code{@@pxref}
- @section @code{@@pxref}
- @anchor{pxref}@c old name
- @findex pxref
- @cindex Cross-references using @code{@@pxref}
- @cindex References using @code{@@pxref}
- The parenthetical reference command, @code{@@pxref}, is nearly the
- same as @code{@@xref}, but it is best used at the end of a sentence or
- before a closing parenthesis. The command differs from @code{@@xref}
- in that @TeX{} typesets the reference for the printed manual with a
- lowercase `see' rather than an uppercase `See'.
- @noindent
- With one argument, a parenthetical cross-reference looks like this:
- @cindex Flooding
- @example
- @dots{} storms cause flooding (@@pxref@{Hurricanes@}) @dots{}
- @end example
- @need 800
- @noindent
- which produces
- @example
- @group
- @dots{} storms cause flooding (*note Hurricanes::) @dots{}
- @end group
- @end example
- @noindent
- in Info and
- @quotation
- @dots{} storms cause flooding (see Section 6.7 [Hurricanes], page 72) @dots{}
- @end quotation
- @noindent
- in a printed manual.
- With two arguments, a parenthetical cross-reference has this template:
- @example
- @dots{} (@@pxref@{@var{node-name}, @var{cross-reference-name}@}) @dots{}
- @end example
- @noindent
- which produces
- @example
- @dots{} (*note @var{cross-reference-name}: @var{node-name}.) @dots{}
- @end example
- @noindent
- in Info and
- @quotation
- @dots{} (see Section @var{nnn} [@var{node-name}], page @var{ppp}) @dots{}
- @end quotation
- @noindent
- in a printed manual.
- @code{@@pxref} can be used with up to five arguments, just like
- @code{@@xref} (@pxref{@code{@@xref}}).
- In past versions of Texinfo, it was not allowed to write punctuation
- after a @code{@@pxref}, so it could be used @emph{only} before a
- right parenthesis. This is no longer the case, so now it can be used
- (for example) at the end of a sentence, where a lowercase ``see''
- works best. For instance:
- @example
- @dots{} For more information, @@pxref@{More@}.
- @end example
- @noindent
- which outputs (in Info):
- @example
- @dots{} For more information, *note More::.
- @end example
- As a matter of style, @code{@@pxref} is best used at the ends of
- sentences. Although it technically works in the middle of a sentence,
- that location breaks up the flow of reading.
- @node @code{@@anchor}
- @section @code{@@anchor}: Defining Arbitrary Cross-reference Targets
- @anchor{anchor}@c old name
- @findex anchor
- @cindex Anchors
- @cindex Cross-reference targets, arbitrary
- @cindex Targets for cross-references, arbitrary
- An @dfn{anchor} is a position in your document, labelled so that
- cross-references can refer to it, just as they can to nodes. You
- create an anchor with the @code{@@anchor} command, and give the label
- as a normal brace-delimited argument. For example:
- @example
- This marks the @@anchor@{x-spot@}spot.
- @dots{}
- @@xref@{x-spot,,the spot@}.
- @end example
- @noindent produces:
- @example
- This marks the spot.
- @dots{}
- See [the spot], page 1.
- @end example
- As you can see, the @code{@@anchor} command itself produces no output.
- This example defines an anchor `x-spot' just before the word `spot'.
- You can refer to it later with an @code{@@xref} or other cross
- reference command, as shown (@pxref{Cross References}).
- It is best to put @code{@@anchor} commands just before the position you
- wish to refer to; that way, the reader's eye is led on to the correct
- text when they jump to the anchor. You can put the @code{@@anchor}
- command on a line by itself if that helps readability of the source.
- Whitespace (including newlines) is ignored after @code{@@anchor}.
- Anchor names and node names may not conflict. Anchors and nodes are
- given similar treatment in some ways; for example, the
- @code{goto-node} command takes either an anchor name or a node name as
- an argument. (@xref{Go to node,,, info, Info}.)
- Also like node names, anchor names cannot include some characters
- (@pxref{Node Line Requirements}).
- @cindex Nodes, deleting or renaming
- Because of this duality, when you delete or rename a node, it is
- usually a good idea to define an @code{@@anchor} with the old name.
- That way, any links to the old node, whether from other Texinfo
- manuals or general web pages, keep working. You can also do this with
- the @file{RENAMED_NODES_FILE} feature of @command{makeinfo}
- (@pxref{HTML Xref Link Preservation}). Both methods keep links
- on the web working; the only substantive difference is that defining
- anchors also makes the old node names available when reading the
- document in Info.
- @node @code{@@inforef}
- @section @code{@@inforef}: Cross-references to Info-only Material
- @anchor{inforef}@c old name
- @findex inforef
- @cindex Cross-references using @code{@@inforef}
- @cindex References using @code{@@inforef}
- @code{@@inforef} is used for making cross-references to Info
- documents---even from a printed manual. This might be because you
- want to refer to conditional @code{@@ifinfo} text
- (@pxref{Conditionals}), or because printed output is not available
- (perhaps because there is no Texinfo source), among other
- possibilities.
- The command takes either two or three arguments, in the following
- order:
- @enumerate
- @item
- The node name.
- @item
- The cross-reference name (optional).
- @item
- The Info file name.
- @end enumerate
- @noindent
- The template is:
- @example
- @@inforef@{@var{node-name}, @var{cross-reference-name}, @var{info-file-name}@}
- @end example
- @need 800
- @noindent
- For example,
- @example
- @group
- @@inforef@{Advanced, Advanced Info commands, info@},
- for more information.
- @end group
- @end example
- @need 800
- @noindent
- produces (in Info):
- @example
- @group
- *Note Advanced Info commands: (info)Advanced,
- for more information.
- @end group
- @end example
- @need 800
- @noindent
- and (in the printed output):
- @quotation
- See Info file @file{info}, node @samp{Advanced}, for more information.
- @end quotation
- (This particular example is not realistic, since the Info manual is
- written in Texinfo, so all formats are available. In fact, we don't
- know of any extant Info-only manuals.)
- The converse of @code{@@inforef} is @code{@@cite}, which is used to
- refer to printed works for which no Info form exists.
- @xref{@code{@@cite}}.
- @node @code{@@url}
- @section @code{@@url}, @code{@@uref@{@var{url}[, @var{text}][, @var{replacement}]@}}
- @anchor{uref}@c old name
- @findex uref
- @cindex Uniform resource locator, referring to
- @cindex URL, referring to
- @cindex @code{href}, producing HTML
- @code{@@uref} produces a reference to a uniform resource locator
- (url). It takes one mandatory argument, the url, and two optional
- arguments which control the text that is displayed. In HTML and PDF
- output, @code{@@uref} produces a link you can follow. (To merely
- indicate a url without creating a link people can follow, use
- @code{@@indicateurl}, @pxref{@code{@@indicateurl}}.)
- @findex url
- @anchor{url}@code{@@url} is a synonym for @code{@@uref}.
- (Originally, @code{@@url} had the meaning of @code{@@indicateurl}, but
- in practice it was almost always misused. So we've changed the
- meaning.)
- The second argument, if specified, is the text to display (the default
- is the url itself); in Info, DVI, and PDF output, but not in HTML
- output, the url is output in addition to this text.
- @cindex Man page, reference to
- The third argument, if specified, is the text to display, but in this
- case the url is not output in any format. This is useful when the
- text is already sufficiently referential, as in a man page. Also, if
- the third argument is given, the second argument is ignored.
- @menu
- * @code{@@url} Examples:: Examples of using all the forms of @code{@@url}.
- * URL Line Breaking:: How lines are broken within @code{@@url} text.
- * @code{@@url} PDF Output Format:: A special option to hide links in PDF output.
- * PDF Colors:: Colorizing urls and other links in PDF output.
- @end menu
- @node @code{@@url} Examples
- @subsection @code{@@url} Examples
- @cindex @code{@@url}, examples of using
- @cindex URL, examples of displaying
- First, here is an example of the simplest form of @code{@@url}, with
- just one argument. The given url is both the target and the visible
- text of the link:
- @example
- The official GNU ftp site is @@uref@{http://ftp.gnu.org/gnu@}.
- @end example
- @noindent produces:
- @display
- The official GNU ftp site is @uref{http://ftp.gnu.org/gnu}.
- @end display
- @subsubheading Two-argument form of @code{@@url}
- Here is an example of the two-argument form:
- @example
- The official @@uref@{http://ftp.gnu.org/gnu, GNU ftp site@}
- holds programs and texts.
- @end example
- @noindent which produces:
- @display
- The official @uref{http://ftp.gnu.org/gnu, GNU ftp site}
- holds programs and texts.
- @end display
- @noindent that is, the Info (and @TeX{}, etc.)@: output is this:
- @example
- The official GNU ftp site (http://ftp.gnu.org/gnu)
- holds programs and texts.
- @end example
- @noindent while the HTML output is this:
- @example
- The official <a href="http://ftp.gnu.org/gnu">GNU ftp site</a>
- holds programs and texts.
- @end example
- @subsubheading Three-argument form of @code{@@url}
- Finally, an example of the three-argument form:
- @example
- The @@uref@{/man.cgi/1/ls,,ls@} program @dots{}
- @end example
- @noindent which, except for HTML, produces:
- @display
- The @uref{/man.cgi/1/ls,,ls} program @dots{}
- @end display
- @noindent but with HTML:
- @example
- The <a href="/man.cgi/1/ls">ls</a> program @dots{}
- @end example
- By the way, some people prefer to display urls in the unambiguous
- format:
- @display
- <URL:http://@var{host}/@var{path}>
- @end display
- @noindent
- @cindex @code{<URL...>} convention, not used
- You can use this form in the input file if you wish. We feel it's not
- necessary to include the @samp{<URL:} and @samp{>} in the output,
- since to be useful any software that tries to detect urls in text
- already has to detect them without the @samp{<URL:}.
- @node URL Line Breaking
- @subsection URL Line Breaking
- @cindex Line breaking, and urls
- @cindex Breakpoints within urls
- @TeX{} allows line breaking within urls at only a few characters
- (which are special in urls): @samp{&}, @samp{.}, @samp{#}, @samp{?},
- and @samp{/} (but not between two @samp{/} characters). A tiny amount
- of stretchable space is also inserted around these characters to help
- with line breaking.
- For HTML output, modern browsers will also do line breaking within
- displayed urls. If you need to allow breaks at other characters you
- can insert @code{@@/} as needed (@pxref{Line Breaks}).
- @findex urefbreakstyle
- By default, in @TeX{} any such breaks at special characters will occur
- after the character. Some people prefer such breaks to happen before
- the special character. This can be controlled with the
- @code{@@urefbreakstyle} command (this command has effect only in
- @TeX{}):
- @example
- @@urefbreakstyle @var{how}
- @end example
- @noindent where the argument @var{how} is one of these words:
- @vindex after@r{, value for @code{@@urefbreakstyle}}
- @vindex before@r{, value for @code{@@urefbreakstyle}}
- @vindex none@r{, value for @code{@@urefbreakstyle}}
- @table @samp
- @item after
- (the default) Potentially break after the special characters.
- @item before
- Potentially break before the special characters.
- @item none
- Do not consider breaking at the special characters at all; any potential
- breaks must be manually inserted.
- @end table
- @node @code{@@url} PDF Output Format
- @subsection @code{@@url} PDF Output Format
- @cindex PDF output of urls
- @cindex URLs, PDF output of
- If the ultimate purpose of a PDF is only to be viewed online, perhaps
- similar to HTML in some inchoate way, you may not want the urls to be
- included in the visible text (just as urls are not visible to readers
- of web pages). Texinfo provides a PDF-specific option for this, which
- must be used inside @code{@@tex}:
- @findex \urefurlonlylinktrue
- @example
- @@tex
- \global\urefurlonlylinktrue
- @@end tex
- @end example
- The result is that @code{@@url@{http://www.gnu.org, GNU@}} has the
- visible output of just `GNU', with a link target of
- @url{http://www.gnu.org}. Ordinarily, the visible output would
- include both the label and the url: `GNU (@url{http://www.gnu.org})'.
- This option only has effect when the PDF output is produced with the
- pdf@TeX{} program, not with other ways of getting from Texinfo to PDF
- (e.g., @TeX{} to DVI to PDF)@. Consequently, it is ok to specify this
- option unconditionally within @code{@@tex}, as shown above. It is
- ignored when DVI is being produced.
- @node PDF Colors
- @subsection PDF Colors
- @cindex Colored links, in PDF output
- @cindex Links, coloring in PDF output
- @cindex URLs, coloring in PDF output
- By default, urls and cross-reference links are printed in black in PDF
- output. Very occasionally, however, you may want to highlight such
- ``live'' links with a different color, as is commonly done on web
- pages. Texinfo provides a PDF-specific option for specifying these
- colors, which must be used inside @code{@@tex}:
- @findex \linkcolor
- @findex \urlcolor
- @example
- @@tex
- \global\def\linkcolor@{1 0 0@} % red
- \global\def\urlcolor@{0 1 0@} % green
- @@end tex
- @end example
- @code{\urlcolor} changes the color of @code{@@url} output (both the
- actual url and any textual label), while @code{\linkcolor} changes the
- color for cross-references to nodes, etc. They are independent.
- @cindex RGB color specification.
- The three given values must be numbers between 0 and 1, specifying the
- amount of red, green, and blue respectively.
- These definitions only have an effect when the PDF output is produced
- with the pdf@TeX{} program, not with other ways of getting from
- Texinfo to PDF (e.g., @TeX{} to DVI to PDF)@. Consequently, it is ok
- to specify this option unconditionally within @code{@@tex}, as shown
- above. It is ignored when DVI is being produced.
- We do not recommend colorizing just for fun; unless you have a
- specific reason to use colors, best to skip it.
- @node @code{@@cite}
- @section @code{@@cite}@{@var{reference}@}
- @anchor{cite}@c old name
- @findex cite
- Use the @code{@@cite} command for the name of a book that lacks a
- companion Info file. The command produces italics in the printed
- manual, and quotation marks in the Info file.
- If a book is written in Texinfo, it is better to use a cross-reference
- command since a reader can easily follow such a reference in Info.
- @xref{@code{@@xref}}.
- @node Marking Text
- @chapter Marking Text, Words and Phrases
- @cindex Paragraph, marking text within
- @cindex Marking words and phrases
- @cindex Words and phrases, marking them
- @cindex Marking text within a paragraph
- @cindex Text, marking up
- In Texinfo, you can mark words and phrases in a variety of ways.
- The Texinfo formatters use this information to determine how to
- highlight the text.
- You can specify, for example, whether a word or phrase is a
- defining occurrence, a metasyntactic variable, or a symbol used in a
- program. Also, you can emphasize text, in several different ways.
- @menu
- * Indicating:: How to indicate definitions, files, etc.
- * Emphasis:: How to emphasize text.
- @end menu
- @node Indicating
- @section Indicating Definitions, Commands, etc.
- @cindex Highlighting text
- @cindex Indicating commands, definitions, etc.
- Texinfo has commands for indicating just what kind of object a piece
- of text refers to. For example, email addresses are marked by
- @code{@@email}; that way, the result can be a live link to send email
- when the output format supports it. If the email address was simply
- marked as ``print in a typewriter font'', that would not be possible.
- @menu
- * Useful Highlighting:: Highlighting provides useful information.
- * @code{@@code}:: Indicating program code.
- * @code{@@kbd}:: Showing keyboard input.
- * @code{@@key}:: Specifying keys.
- * @code{@@samp}:: Indicating a literal sequence of characters.
- * @code{@@verb}:: Indicating a verbatim sequence of characters.
- * @code{@@var}:: Indicating metasyntactic variables.
- * @code{@@env}:: Indicating environment variables.
- * @code{@@file}:: Indicating file names.
- * @code{@@command}:: Indicating command names.
- * @code{@@option}:: Indicating option names.
- * @code{@@dfn}:: Specifying definitions.
- * @code{@@abbr}:: Indicating abbreviations.
- * @code{@@acronym}:: Indicating acronyms.
- * @code{@@indicateurl}:: Indicating an example url.
- * @code{@@email}:: Indicating an electronic mail address.
- @end menu
- @node Useful Highlighting
- @subsection Highlighting Commands are Useful
- The commands serve a variety of purposes:
- @table @code
- @item @@code@{@var{sample-code}@}
- Indicate text that is a literal example of a piece of a program.
- @xref{@code{@@code}}.
- @item @@kbd@{@var{keyboard-characters}@}
- Indicate keyboard input. @xref{@code{@@kbd}}.
- @item @@key@{@var{key-name}@}
- Indicate the conventional name for a key on a keyboard.
- @xref{@code{@@key}}.
- @item @@samp@{@var{text}@}
- Indicate text that is a literal example of a sequence of characters.
- @xref{@code{@@samp}}.
- @item @@verb@{@var{text}@}
- Write a verbatim sequence of characters.
- @xref{@code{@@verb}}.
- @item @@var@{@var{metasyntactic-variable}@}
- Indicate a metasyntactic variable. @xref{@code{@@var}}.
- @item @@env@{@var{environment-variable}@}
- Indicate an environment variable. @xref{@code{@@env}}.
- @item @@file@{@var{file-name}@}
- Indicate the name of a file. @xref{@code{@@file}}.
- @item @@command@{@var{command-name}@}
- Indicate the name of a command.
- @xref{@code{@@command}}.
- @item @@option@{@var{option}@}
- Indicate a command-line option.
- @xref{@code{@@option}}.
- @item @@dfn@{@var{term}@}
- Indicate the introductory or defining use of a term.
- @xref{@code{@@dfn}}.
- @item @@cite@{@var{reference}@}
- Indicate the name of a book. @xref{@code{@@cite}}.
- @item @@abbr@{@var{abbreviation}@}
- Indicate an abbreviation, such as `Comput.'.
- @item @@acronym@{@var{acronym}@}
- Indicate an acronym. @xref{@code{@@acronym}}.
- @item @@indicateurl@{@var{uniform-resource-locator}@}
- Indicate an example (that is, nonfunctional) uniform resource locator.
- @xref{@code{@@indicateurl}}. (Use @code{@@url} (@pxref{@code{@@url}}) for
- live urls.)
- @item @@email@{@var{email-address}[, @var{displayed-text}]@}
- Indicate an electronic mail address. @xref{@code{@@email}}.
- @end table
- @node @code{@@code}
- @subsection @code{@@code}@{@var{sample-code}@}
- @anchor{code}@c old name
- @findex code
- @cindex Syntactic tokens, indicating
- Use the @code{@@code} command to indicate text that is a piece of a
- program and which consists of entire syntactic tokens. Enclose the
- text in braces.
- @cindex Expressions in a program, indicating
- @cindex Keywords, indicating
- @cindex Reserved words, indicating
- Thus, you should use @code{@@code} for an expression in a program, for
- the name of a variable or function used in a program, or for a
- keyword in a programming language.
- Use @code{@@code} for command names in languages that resemble
- programming languages, such as Texinfo. For example, @code{@@code} and
- @code{@@samp} are produced by writing @samp{@@code@{@@@@code@}} and
- @samp{@@code@{@@@@samp@}} in the Texinfo source, respectively.
- @cindex Case, not altering in @code{@@code}
- It is incorrect to alter the case of a word inside a @code{@@code}
- command when it appears at the beginning of a sentence. Most computer
- languages are case sensitive. In C, for example, @code{Printf} is
- different from the identifier @code{printf}, and most likely is a
- misspelling of it. Even in languages which are not case sensitive, it
- is confusing to a human reader to see identifiers spelled in different
- ways. Pick one spelling and always use that. If you do not want to
- start a sentence with a command name written all in lowercase, you
- should rearrange the sentence.
- In the Info output, @code{@@code} results in single quotation marks
- around the text. In other formats, @code{@@code} argument is typeset
- in a typewriter (monospace) font. For example,
- @example
- The function returns @@code@{nil@}.
- @end example
- @noindent
- produces this:
- @quotation
- The function returns @code{nil}.
- @end quotation
- Here are some cases for which it is preferable @emph{not} to use @code{@@code}:
- @itemize @bullet
- @item
- For shell command names such as @command{ls} (use @code{@@command}).
- @item
- For environment variable such as @env{TEXINPUTS} (use @code{@@env}).
- @item
- For shell options such as @samp{-c} when such options stand alone (use
- @code{@@option}).
- @item
- An entire shell command often looks better if written using
- @code{@@samp} rather than @code{@@code}. In this case, the rule is to
- choose the more pleasing format.
- @item
- For a string of characters shorter than a syntactic token. For example,
- if you are writing about @samp{goto-ch}, which is just a part of the
- name for the @code{goto-char} Emacs Lisp function, you should use
- @code{@@samp}.
- @item
- In general, when writing about the characters used in a token; for
- example, do not use @code{@@code} when you are explaining what letters
- or printable symbols can be used in the names of functions. (Use
- @code{@@samp}.) Also, you should not use @code{@@code} to mark text
- that is considered input to programs unless the input is written in a
- language that is like a programming language. For example, you should
- not use @code{@@code} for the keystroke commands of GNU Emacs (use
- @code{@@kbd} instead) although you may use @code{@@code} for the names
- of the Emacs Lisp functions that the keystroke commands invoke.
- @end itemize
- By default, @TeX{} will consider breaking lines at @samp{-} and
- @samp{_} characters within @code{@@code} and related commands. This
- can be controlled with @code{@@allowcodebreaks}
- (@pxref{@code{@@allowcodebreaks}}). The HTML output attempts to
- respect this for @samp{-}, but ultimately it is up to the browser's
- behavior. For Info, it seems better never to make such breaks.
- For Info, the quotes are omitted in the output of the @code{@@code}
- command and related commands (e.g., @code{@@kbd}, @code{@@command}),
- in typewriter-like contexts such as the @code{@@example} environment
- (@pxref{@code{@@example}}) and @code{@@code} itself, etc.
- To control which quoting characters are implicitly inserted by Texinfo
- processors in the output of @samp{@@code}, etc., see the
- @code{OPEN_QUOTE_SYMBOL} and @code{CLOSE_QUOTE_SYMBOL} customization
- variables (@pxref{Other Customization Variables}). This is separate
- from how actual quotation characters in the input document are handled
- (@pxref{Inserting Quote Characters}).
- @node @code{@@kbd}
- @subsection @code{@@kbd}@{@var{keyboard-characters}@}
- @anchor{kbd}@c old name
- @findex kbd
- @cindex Keyboard input
- Use the @code{@@kbd} command for characters of input to be typed by
- users. For example, to refer to the characters @kbd{M-a}, write:
- @example
- @@kbd@{M-a@}
- @end example
- @noindent
- and to refer to the characters @kbd{M-x shell}, write:
- @example
- @@kbd@{M-x shell@}
- @end example
- @cindex User input
- @cindex Slanted typewriter font, for @code{@@kbd}
- By default, the @code{@@kbd} command produces a different font
- (slanted typewriter instead of normal typewriter),
- so users can distinguish the characters that they are supposed
- to type from those that the computer outputs.
- @findex kbdinputstyle
- Since the usage of @code{@@kbd} varies from manual to manual, you can
- control the font switching with the @code{@@kbdinputstyle} command.
- This command has no effect on Info output. Write this command at the
- beginning of a line with a single word as an argument, one of the
- following:
- @vindex distinct@r{, value for @code{@@kbdinputstyle}}
- @vindex example@r{, value for @code{@@kbdinputstyle}}
- @vindex code@r{, value for @code{@@kbdinputstyle}}
- @table @samp
- @item code
- Always use the same font for @code{@@kbd} as @code{@@code}.
- @item example
- Use the distinguishing font for @code{@@kbd} only in @code{@@example}
- and similar environments.
- @item distinct
- (the default) Always use the distinguishing font for @code{@@kbd}.
- @end table
- You can embed another @@-command inside the braces of a @code{@@kbd}
- command. Here, for example, is the way to describe a command that
- would be described more verbosely as ``press the @samp{r} key and then
- press the @key{RETURN} key'':
- @example
- @@kbd@{r @@key@{RET@}@}
- @end example
- @noindent
- This produces: @kbd{r @key{RET}}. (The present manual uses the
- default for @code{@@kbdinputstyle}.)
- You also use the @code{@@kbd} command if you are spelling out the letters
- you type; for example:
- @example
- To give the @@code@{logout@} command,
- type the characters @@kbd@{l o g o u t @@key@{RET@}@}.
- @end example
- @noindent
- This produces:
- @quotation
- To give the @code{logout} command,
- type the characters @kbd{l o g o u t @key{RET}}.
- @end quotation
- (Also, this example shows that you can add spaces for clarity. If you
- explicitly want to mention a space character as one of the characters of
- input, write @kbd{@@key@{SPC@}} for it.)
- @node @code{@@key}
- @subsection @code{@@key}@{@var{key-name}@}
- @anchor{key}@c old name
- @findex key
- Use the @code{@@key} command for the conventional name for a key on a
- keyboard, as in:
- @example
- @@key@{RET@}
- @end example
- You can use the @code{@@key} command within the argument of an
- @code{@@kbd} command when the sequence of characters to be typed
- includes one or more keys that are described by name.
- For example, to produce @kbd{C-x @key{ESC}} and @kbd{M-@key{TAB}} you
- would type:
- @example
- @@kbd@{C-x @@key@{ESC@}@}
- @@kbd@{M-@@key@{TAB@}@}
- @end example
- Here is a list of the recommended names for keys:
- @cindex Recommended names for keys
- @cindex Keys, recommended names
- @cindex Names recommended for keys
- @cindex Abbreviations for keys
- @cindex Control keys, specifying
- @cindex Meta keys, specifying
- @quotation
- @table @t
- @item SPC
- Space
- @item RET
- Return
- @item LFD
- Linefeed (however, since most keyboards nowadays do not have a Linefeed key,
- it might be better to call this character @kbd{C-j})
- @item TAB
- Tab
- @item BS
- Backspace
- @item ESC
- Escape
- @item DELETE
- Delete
- @item SHIFT
- Shift
- @item CTRL
- Control
- @item META
- Meta
- @end table
- @end quotation
- @cindex META key
- There are subtleties to handling words like `meta' or `ctrl' that are
- names of modifier keys. When mentioning a character in which the
- modifier key is used, such as @kbd{Meta-a}, use the @code{@@kbd} command
- alone; do not use the @code{@@key} command; but when you are referring
- to the modifier key in isolation, use the @code{@@key} command. For
- example, write @samp{@@kbd@{Meta-a@}} to produce @kbd{Meta-a} and
- @samp{@@key@{META@}} to produce @key{META}.
- @c per rms.
- As a convention in GNU manuals, @code{@@key} should not be used in
- index entries.
- @node @code{@@samp}
- @subsection @code{@@samp}@{@var{text}@}
- @anchor{samp}@c old name
- @findex samp
- Use the @code{@@samp} command to indicate text that is a literal example
- or `sample' of a sequence of characters in a file, string, pattern, etc.
- Enclose the text in braces. The argument appears within single
- quotation marks in both the Info file and the printed manual; in
- addition, it is printed in a fixed-width font.
- @example
- To match @@samp@{foo@} at the end of the line,
- use the regexp @@samp@{foo$@}.
- @end example
- @noindent
- produces
- @quotation
- To match @samp{foo} at the end of the line, use the regexp
- @samp{foo$}.
- @end quotation
- Any time you are referring to single characters, you should use
- @code{@@samp} unless @code{@@kbd} or @code{@@key} is more appropriate.
- Also, you may use @code{@@samp} for entire statements in C and for entire
- shell commands---in this case, @code{@@samp} often looks better than
- @code{@@code}. Basically, @code{@@samp} is a catchall for whatever is
- not covered by @code{@@code}, @code{@@kbd}, @code{@@key},
- @code{@@command}, etc.
- Only include punctuation marks within braces if they are part of the
- string you are specifying. Write punctuation marks outside the braces
- if those punctuation marks are part of the English text that surrounds
- the string. In the following sentence, for example, the commas and
- period are outside of the braces:
- @example
- @group
- In English, the vowels are @@samp@{a@}, @@samp@{e@},
- @@samp@{i@}, @@samp@{o@}, @@samp@{u@}, and sometimes
- @@samp@{y@}.
- @end group
- @end example
- @noindent
- This produces:
- @quotation
- In English, the vowels are @samp{a}, @samp{e},
- @samp{i}, @samp{o}, @samp{u}, and sometimes
- @samp{y}.
- @end quotation
- @node @code{@@verb}
- @subsection @code{@@verb}@{@var{char}@var{text}@var{char}@}
- @anchor{verb}@c old name
- @findex verb
- @cindex Verbatim in-line text
- @cindex Delimiter character, for verbatim
- Use the @code{@@verb} command to print a verbatim sequence of
- characters.
- Like @LaTeX{}'s @code{\verb} command, the verbatim text can be quoted using
- any unique delimiter character. Enclose the verbatim text, including the
- delimiters, in braces. Text is printed in a fixed-width font:
- @example
- How many @@verb@{|@@|@}-escapes does one need to print this
- @@verb@{.@@a @@b.@@c.@} string or @@verb@{+@@'e?`@{@}!`\+@} this?
- @end example
- @noindent
- produces
- @example
- How many @verb{|@|}-escapes does one need to print this
- @verb{.@a @b.@c.} string or @verb{+@'e?`{}!`\+} this?
- @end example
- This is in contrast to @code{@@samp} (see the previous section),
- @code{@@code}, and similar commands; in those cases, the argument is
- normal Texinfo text, where the three characters @code{@@@{@}} are
- special, as usual. With @code{@@verb}, nothing is special except the
- delimiter character you choose.
- The delimiter character itself may appear inside the verbatim text, as
- shown above. As another example, @samp{@@verb@{...@}} prints a single
- (fixed-width) period.
- It is not reliable to use @code{@@verb} inside other Texinfo
- constructs. In particular, it does not work to use @code{@@verb} in
- anything related to cross-referencing, such as section titles or
- figure captions.
- @node @code{@@var}
- @subsection @code{@@var}@{@var{metasyntactic-variable}@}
- @anchor{var}@c old name
- @findex var
- Use the @code{@@var} command to indicate metasyntactic variables. A
- @dfn{metasyntactic variable} is something that stands for another
- piece of text. For example, you should use a metasyntactic variable
- in the documentation of a function to describe the arguments that are
- passed to that function.
- Do not use @code{@@var} for the names of normal variables in computer
- programs. These are specific names, so @code{@@code} is correct for
- them (@code{@@code}). For example, the Emacs Lisp variable
- @code{texinfo-tex-command} is not a metasyntactic variable; it is
- properly formatted using @code{@@code}.
- Do not use @code{@@var} for environment variables either; @code{@@env}
- is correct for them (see the next section).
- The effect of @code{@@var} in the Info file is to change the case of
- the argument to all uppercase. In the printed manual and HTML
- output, the argument is output in slanted type.
- @need 700
- For example,
- @example
- To delete file @@var@{filename@},
- type @@samp@{rm @@var@{filename@}@}.
- @end example
- @noindent
- produces
- @quotation
- To delete file @var{filename}, type @samp{rm @var{filename}}.
- @end quotation
- @noindent
- (Note that @code{@@var} may appear inside @code{@@code},
- @code{@@samp}, @code{@@file}, etc.)
- Write a metasyntactic variable all in lowercase without spaces, and
- use hyphens to make it more readable. Thus, the Texinfo source for
- the illustration of how to begin a Texinfo manual looks like
- this:
- @example
- @group
- \input texinfo
- @@@@settitle @@var@{name-of-manual@}
- @end group
- @end example
- @noindent
- This produces:
- @example
- @group
- \input texinfo
- @@settitle @var{name-of-manual}
- @end group
- @end example
- In some documentation styles, metasyntactic variables are shown with
- angle brackets, for example:
- @example
- @dots{}, type rm <filename>
- @end example
- @noindent
- However, that is not the style that Texinfo uses.
- @c FIXME add a customization variable? Add an example on how to do that
- @c for HTML?
- @c (You can, of course, modify the sources to @file{texinfo.tex}
- @c and the Info formatting commands
- @c to output the @code{<@dots{}>} format if you wish.)
- @node @code{@@env}
- @subsection @code{@@env}@{@var{environment-variable}@}
- @anchor{env}@c old name
- @findex env
- Use the @code{@@env} command to indicate environment variables, as
- used by many operating systems, including GNU@. Do not use it for
- @emph{meta}syntactic variables; use @code{@@var} for those (see the
- previous section).
- @code{@@env} is equivalent to @code{@@code} in its effects.
- For example:
- @example
- The @@env@{PATH@} environment variable @dots{}
- @end example
- @noindent produces
- @quotation
- The @env{PATH} environment variable @dots{}
- @end quotation
- @node @code{@@file}
- @subsection @code{@@file}@{@var{file-name}@}
- @anchor{file}@c old name
- @findex file
- Use the @code{@@file} command to indicate text that is the name of a
- file, buffer, or directory, or is the name of a node in Info. You can
- also use the command for file name suffixes. Do not use @code{@@file}
- for symbols in a programming language; use @code{@@code}.
- @code{@@file} is equivalent to @code{code} in its effects. For
- example,
- @example
- The @@file@{.el@} files are in
- the @@file@{/usr/local/emacs/lisp@} directory.
- @end example
- @noindent
- produces
- @quotation
- The @file{.el} files are in
- the @file{/usr/local/emacs/lisp} directory.
- @end quotation
- @node @code{@@command}
- @subsection @code{@@command}@{@var{command-name}@}
- @anchor{command}@c old name
- @findex command
- @cindex Command names, indicating
- @cindex Program names, indicating
- Use the @code{@@command} command to indicate command names, such as
- @command{ls} or @command{cc}.
- @code{@@command} is equivalent to @code{@@code} in its effects.
- For example:
- @example
- The command @@command@{ls@} lists directory contents.
- @end example
- @noindent produces
- @quotation
- The command @command{ls} lists directory contents.
- @end quotation
- You should write the name of a program in the ordinary text font, rather
- than using @code{@@command}, if you regard it as a new English word,
- such as `Emacs' or `Bison'.
- When writing an entire shell command invocation, as in @samp{ls -l},
- you should use either @code{@@samp} or @code{@@code} at your discretion.
- @node @code{@@option}
- @subsection @code{@@option}@{@var{option-name}@}
- @anchor{option}@c old name
- @findex option
- Use the @code{@@option} command to indicate a command-line option; for
- example, @option{-l} or @option{--version} or
- @option{--output=@var{filename}}.
- @code{@@option} is equivalent to @code{@@code} in its effects.
- For example:
- @example
- The option @@option@{-l@} produces a long listing.
- @end example
- @noindent produces
- @quotation
- The option @option{-l} produces a long listing.
- @end quotation
- @node @code{@@dfn}
- @subsection @code{@@dfn}@{@var{term}@}
- @anchor{dfn}@c old name
- @findex dfn
- Use the @code{@@dfn} command to identify the introductory or defining
- use of a technical term. Use the command only in passages whose
- purpose is to introduce a term which will be used again or which the
- reader ought to know. Mere passing mention of a term for the first
- time does not deserve @code{@@dfn}. The command generates italics in
- the printed manual, and double quotation marks in the Info file. For
- example:
- @example
- Getting rid of a file is called @@dfn@{deleting@} it.
- @end example
- @noindent
- produces
- @quotation
- Getting rid of a file is called @dfn{deleting} it.
- @end quotation
- As a general rule, a sentence containing the defining occurrence of a
- term should be a definition of the term. The sentence does not need
- to say explicitly that it is a definition, but it should contain the
- information of a definition---it should make the meaning clear.
- @node @code{@@abbr}
- @subsection @code{@@abbr}@{@var{abbreviation}[, @var{meaning}]@}
- @anchor{abbr}@c old name
- @findex abbr
- @cindex Abbreviations, tagging
- You can use the @code{@@abbr} command for general abbreviations. The
- abbreviation is given as the single argument in braces, as in
- @samp{@@abbr@{Comput.@}}. As a matter of style, or for particular
- abbreviations, you may prefer to omit periods, as in
- @samp{@@abbr@{Mr@} Stallman}.
- @code{@@abbr} accepts an optional second argument, intended to be used
- for the meaning of the abbreviation.
- If the abbreviation ends with a lowercase letter and a period, and is
- not at the end of a sentence, and has no second argument, remember to
- use the @code{@@.} command (@pxref{Ending a Sentence}) to get the
- correct spacing. However, you do not have to use @code{@@.} within
- the abbreviation itself; Texinfo automatically assumes periods within
- the abbreviation do not end a sentence.
- @cindex @code{<abbr>} and @code{<abbrev>} tags
- In @TeX{} and in the Info output, the first argument is printed as-is;
- if the second argument is present, it is printed in parentheses after
- the abbreviation. In HTML the @code{<abbr>} tag is used; in Docbook,
- the @code{<abbrev>} tag is used. For instance:
- @example
- @@abbr@{Comput. J., Computer Journal@}
- @end example
- @noindent produces:
- @display
- @abbr{Comput. J., Computer Journal}
- @end display
- For abbreviations consisting of all capital letters, you may prefer to
- use the @code{@@acronym} command instead. See the next section for
- more on the usage of these two commands.
- @node @code{@@acronym}
- @subsection @code{@@acronym}@{@var{acronym}[, @var{meaning}]@}
- @anchor{acronym}@c old name
- @findex acronym
- @cindex NASA, as acronym
- @cindex Acronyms, tagging
- You can use the @code{@@acronym} command for abbreviations written in
- all capital letters, such as `@acronym{NASA}'. The abbreviation is
- given as the single argument in braces, as in
- @samp{@@acronym@{NASA@}}. As a matter of style, or for particular
- acronyms, you may prefer to use periods, as in
- @samp{@@acronym@{N.A.S.A.@}}.
- @code{@@acronym} accepts an optional second argument, intended to be
- used for the meaning of the acronym.
- If the acronym is at the end of a sentence, and if there is no second
- argument, remember to use the @code{@@.} or similar command
- (@pxref{Ending a Sentence}) to get the correct spacing.
- @cindex @code{<acronym>} tag
- In @TeX{}, the acronym is printed in slightly smaller font. In the
- Info output, the argument is printed as-is. In either format, if the
- second argument is present, it is printed in parentheses after the
- acronym. In HTML and Docbook the @code{<acronym>} tag is used.
- For instance (since GNU is a recursive acronym, we use
- @code{@@acronym} recursively):
- @example
- @@acronym@{GNU, @@acronym@{GNU@}'s Not Unix@}
- @end example
- @noindent produces:
- @display
- @acronym{GNU, @acronym{GNU}'s Not Unix}
- @end display
- @cindex Family names, in all capitals
- In some circumstances, it is conventional to print family names in all
- capitals. Don't use @code{@@acronym} for this, since a name is not an
- acronym. Use @code{@@sc} instead (@pxref{Smallcaps}).
- @code{@@abbr} and @code{@@acronym} are closely related commands: they
- both signal to the reader that a shortened form is being used, and
- possibly give a meaning. When choosing whether to use these two
- commands, please bear the following in mind.
- @itemize @minus
- @item
- In common English usage, acronyms are a subset of abbreviations: they
- include pronounceable words like `@acronym{NATO}', `radar', and
- `snafu'; some sources also include syllable acronyms like
- `Usenet', hybrids like `@acronym{SIGGRAPH}', and unpronounceable
- initialisms like `@acronym{FBI}'.
- @item
- In Texinfo, an acronym (but not an abbreviation) should consist only
- of capital letters and periods, no lowercase.
- @item
- In @TeX{}, an acronym (but not an abbreviation) is printed in a
- slightly smaller font.
- @item
- Some browsers place a dotted bottom border under abbreviations but not
- acronyms.
- @item
- It usually turns out to be quite difficult and/or time-consuming to
- consistently use @code{@@acronym} for all sequences of uppercase
- letters. Furthermore, it looks strange for some acronyms to be in the
- normal font size and others to be smaller. Thus, a simpler approach
- you may wish to consider is to avoid @code{@@acronym} and just typeset
- everything as normal text in all capitals: @samp{GNU}, producing the
- output `GNU'.
- @item
- In general, it's not essential to use either of these commands for all
- abbreviations; use your judgment. Text is perfectly readable without
- them.
- @end itemize
- @node @code{@@indicateurl}
- @subsection @code{@@indicateurl}@{@var{uniform-resource-locator}@}
- @anchor{indicateurl}@c old name
- @findex indicateurl
- @cindex Uniform resource locator, indicating
- @cindex URL, indicating
- Use the @code{@@indicateurl} command to indicate a uniform resource
- locator on the World Wide Web. This is purely for markup purposes and
- does not produce a link you can follow (use the @code{@@url} or
- @code{@@uref} command for that, @pxref{@code{@@url}}).
- @code{@@indicateurl} is useful for urls which do not actually exist.
- For example:
- @example
- For example, the url might be @@indicateurl@{http://example.org/path@}.
- @end example
- @noindent which produces:
- @display
- For example, the url might be @indicateurl{http://example.org/path}.
- @end display
- The output from @code{@@indicateurl} is more or less like that of
- @code{@@samp} (@pxref{@code{@@samp}}).
- @node @code{@@email}
- @subsection @code{@@email}@{@var{email-address}[, @var{displayed-text}]@}
- @anchor{email}@c old name
- @findex email
- Use the @code{@@email} command to indicate an electronic mail address.
- It takes one mandatory argument, the address, and one optional argument, the
- text to display (the default is the address itself).
- @cindex Mailto link
- In Info, the address is shown in angle brackets, preceded by the text
- to display if any. In @TeX{}, the angle brackets are omitted. In
- HTML output, @code{@@email} produces a @samp{mailto} link that usually
- brings up a mail composition window. For example:
- @example
- Send bug reports to @@email@{bug-texinfo@@@@gnu.org@},
- suggestions to the @@email@{bug-texinfo@@@@gnu.org, same place@}.
- @end example
- @noindent produces
- @display
- Send bug reports to @email{bug-texinfo@@gnu.org},
- suggestions to the @email{bug-texinfo@@gnu.org, same place}.
- @end display
- @node Emphasis
- @section Emphasizing Text
- @cindex Emphasizing text
- Usually, Texinfo changes the font to mark words in the text according
- to the category the words belong to; an example is the @code{@@code}
- command. Most often, this is the best way to mark words. However,
- sometimes you will want to emphasize text without indicating a
- category. Texinfo has two commands to do this. Also, Texinfo has
- several commands that specify the font in which text will be output.
- These commands have no effect in Info and only one of them, the
- @code{@@r} command, has any regular use.
- @menu
- * @code{@@emph @@strong}:: How to emphasize text in Texinfo.
- * Smallcaps:: How to use the small caps font.
- * Fonts:: Various font commands for printed output.
- @end menu
- @node @code{@@emph @@strong}
- @subsection @code{@@emph}@{@var{text}@} and @code{@@strong}@{@var{text}@}
- @anchor{emph & strong}@c oldname
- @findex emph
- @findex strong
- @cindex Emphasizing text, font for
- The @code{@@emph} and @code{@@strong} commands are for emphasis;
- @code{@@strong} is stronger. In printed output, @code{@@emph} produces
- @emph{italics} and @code{@@strong} produces @strong{bold}.
- In the Info output, @code{@@emph} surrounds the text with underscores
- (@samp{_}), and @code{@@strong} puts asterisks around the text.
- For example,
- @example
- @group
- @@strong@{Caution:@} @@samp@{rm *@}
- removes @@emph@{all@} normal files.
- @end group
- @end example
- @noindent
- produces the following:
- @quotation
- @strong{Caution}: @samp{rm * .[^.]*}
- removes @emph{all} normal files.
- @end quotation
- The @code{@@strong} command is seldom used except to mark what is, in
- effect, a typographical element, such as the word `Caution' in the
- preceding example.
- @quotation Caution
- Do not use @code{@@strong} with the word @samp{Note} followed by a
- space; Info will mistake the combination for a cross-reference. Use a
- phrase such as @strong{Please notice} or @strong{Caution} instead, or
- the optional argument to @code{@@quotation}---@samp{Note} is allowable
- there.
- @end quotation
- @node Smallcaps
- @subsection @code{@@sc}@{@var{text}@}: The Small Caps Font
- @cindex Small caps font
- @findex sc @r{(small caps font)}
- Use the @samp{@@sc} command to set text in @sc{a small caps font}
- (where possible). Write the text you want to be in small caps between
- braces in lowercase, like this:
- @example
- Richard @@sc@{Stallman@} commenc@'{e} GNU.
- @end example
- @noindent
- This produces:
- @display
- Richard @sc{Stallman} commenc@'{e} GNU.
- @end display
- As shown here, we recommend reserving @code{@@sc} for special cases
- where you want typographic small caps; family names are one such,
- especially in languages other than English, though there are no
- hard-and-fast rules about such things.
- @cindex @code{<small>} tag
- @TeX{} typesets any uppercase letters between the braces of an
- @code{@@sc} command in full-size capitals; only lowercase letters are
- printed in the small caps font. In the Info output, the argument to
- @code{@@sc} is printed in all uppercase. In HTML, the argument is
- uppercased and the output marked with the @code{<small>} tag to reduce
- the font size, since HTML cannot easily represent true small caps.
- Overall, we recommend using standard upper- and lowercase letters
- wherever possible.
- @node Fonts
- @subsection Fonts for Printing
- @cindex Fonts for printing
- @findex fonttextsize
- @cindex Font size, reducing
- @cindex Reducing font size
- @cindex Smaller fonts
- Texinfo provides one command to change the size of the main body font
- in the @TeX{} output for a document: @code{@@fonttextsize}. It has no
- effect in other output. It takes a single argument on the remainder
- of the line, which must be either @samp{10} or @samp{11}. For
- example:
- @example
- @@fonttextsize 10
- @end example
- @cindex Printing cost, reducing
- The effect is to reduce the body font to a 10@dmn{pt} size (the
- default is 11@dmn{pt}). Fonts for other elements, such as sections
- and chapters, are reduced accordingly. This should only be used in
- conjunction with @code{@@smallbook} (@pxref{@code{@@smallbook}}) or
- similar, since 10@dmn{pt} fonts on standard paper (8.5x11 or A4) are
- too small. One reason to use this command is to save pages, and hence
- printing cost, for physical books.
- Texinfo does not at present have commands to switch the font family
- to use, or more general size-changing commands.
- Texinfo also provides a number of font commands that specify font
- changes in the printed manual and (where possible) in the HTML output.
- They have no effect in Info. All the commands apply to a following
- argument surrounded by braces.
- @table @code
- @item @@b
- @findex b @r{(bold font)}
- @cindex Bold font
- selects @b{bold} face;
- @item @@i
- @findex i @r{(italic font)}
- @cindex Italic font
- selects an @i{italic} font;
- @item @@r
- @findex r @r{(roman font)}
- @cindex Roman font
- @cindex Default font
- selects a @r{roman} font, which is the usual font in which text is
- printed. It may or may not be seriffed.
- @item @@sansserif
- @findex sansserif @r{(sans serif font)}
- @cindex Sans serif font
- selects a @sansserif{sans serif} font;
- @item @@slanted
- @findex slanted @r{(slanted font)}
- @cindex Slanted font
- @cindex Oblique font
- selects a @slanted{slanted} font;
- @item @@t
- @findex t @r{(typewriter font)}
- @cindex Monospace font
- @cindex Fixed-width font
- @cindex Typewriter font
- selects the @t{fixed-width}, typewriter-style font used by @code{@@code};
- @end table
- (The commands with longer names were invented much later than the
- others, at which time it did not seem desirable to use very short
- names for such infrequently needed features.)
- @cindex @code{<lineannotation>} Docbook tag
- The @code{@@r} command can be useful in example-like environments, to
- write comments in the standard roman font instead of the fixed-width
- font. This looks better in printed output, and produces a
- @code{<lineannotation>} tag in Docbook output.
- For example,
- @example
- @group
- @@lisp
- (+ 2 2) ; @@r@{Add two plus two.@}
- @@end lisp
- @end group
- @end example
- @noindent
- produces
- @lisp
- (+ 2 2) ; @r{Add two plus two.}
- @end lisp
- The @code{@@t} command can occasionally be useful to produce output in
- a typewriter font where that is supported (e.g., HTML and PDF), but no
- distinction is needed in Info or plain text: @code{@@t@{foo@}}
- produces @t{foo}, cf. @code{@@code@{foo@}} producing @code{foo}.
- In general, the other font commands are unlikely to be useful; they
- exist primarily to make it possible to document the functionality of
- specific font effects, such as in @TeX{} and related packages.
- @node Quotations and Examples
- @chapter Quotations and Examples
- Quotations and examples are blocks of text consisting of one or more
- whole paragraphs that are set off from the bulk of the text and
- treated differently. They are usually indented in the output.
- @findex end
- In Texinfo, you always begin a quotation or example by writing an
- @@-command at the beginning of a line by itself, and end it by writing
- an @code{@@end} command that is also at the beginning of a line by
- itself. For instance, you begin an example by writing
- @code{@@example} by itself at the beginning of a line and end the
- example by writing @code{@@end example} on a line by itself, at the
- beginning of that line, and with only one space between the
- @code{@@end} and the @code{example}.
- @menu
- * Block Enclosing Commands:: Different constructs for different purposes.
- * @code{@@quotation}:: Writing a quotation.
- * @code{@@indentedblock}:: Block of text indented on left.
- * @code{@@example}:: Writing an example in a fixed-width font.
- * @code{@@verbatim}:: Writing a verbatim example.
- * @code{@@lisp}:: Illustrating Lisp code.
- * @code{@@display}:: Writing an example in the current font.
- * @code{@@format}:: Writing an example without narrowed margins.
- * @code{@@exdent}:: Undo indentation on a line.
- * @code{@@flushleft @@flushright}:: Pushing text flush left or flush right.
- * @code{@@raggedright}:: Avoiding justification on the right.
- * @code{@@noindent}:: Preventing paragraph indentation.
- * @code{@@indent}:: Forcing paragraph indentation.
- * @code{@@cartouche}:: Drawing rounded rectangles around text.
- * @code{@@small@dots{}}:: Examples in a smaller font.
- @end menu
- @node Block Enclosing Commands
- @section Block Enclosing Commands
- Here is a summary of commands that enclose blocks of text, also known
- as @dfn{environments}. They're explained further in the following
- sections.
- @table @code
- @item @@quotation
- Indicate text that is quoted. The text is filled, indented (from both
- margins), and printed in a roman font by default.
- @item @@indentedblock
- Like @code{@@quotation}, but the text is indented only on the left.
- @item @@example
- Illustrate code, commands, and the like. The text is printed
- in a fixed-width font, and indented but not filled.
- @item @@lisp
- Like @code{@@example}, but specifically for illustrating Lisp code. The
- text is printed in a fixed-width font, and indented but not filled.
- @item @@verbatim
- Mark a piece of text that is to be printed verbatim; no character
- substitutions are made and all commands are ignored, until the next
- @code{@@end verbatim}. The text is printed in a fixed-width font,
- and not indented or filled. Extra spaces and blank lines are
- significant, and tabs are expanded.
- @item @@display
- Display illustrative text. The text is indented but not filled, and
- no font is selected (so, by default, the font is roman).
- @item @@format
- Like @code{@@display} (the text is not filled and no font is
- selected), but the text is not indented.
- @item @@smallquotation
- @itemx @@smallindentedblock
- @itemx @@smallexample
- @itemx @@smalllisp
- @itemx @@smalldisplay
- @itemx @@smallformat
- These @code{@@small...} commands are just like their non-small
- counterparts, except that they output text in a smaller font size,
- where possible.
- @item @@flushleft
- @itemx @@flushright
- Text is not filled, but is set flush with the left or right margin,
- respectively.
- @item @@raggedright
- Text is filled, but only justified on the left, leaving the right
- margin ragged.
- @item @@cartouche
- Highlight text, often an example or quotation, by drawing a box with
- rounded corners around it.
- @end table
- The @code{@@exdent} command is used within the above constructs to
- undo the indentation of a line.
- The @code{@@noindent} command may be used after one of the above
- constructs (or at the beginning of any paragraph) to prevent the
- following text from being indented as a new paragraph.
- @node @code{@@quotation}
- @section @code{@@quotation}: Block Quotations
- @anchor{quotation}@c old name
- @cindex Quotations
- @findex quotation
- The text of a quotation is processed like normal text (regular font,
- text is filled) except that:
- @itemize @bullet
- @item
- both the left and right margins are closer to the center of the page,
- so the whole of the quotation is indented;
- @item
- the first lines of paragraphs are indented no more than other lines; and
- @item
- an @code{@@author} command may be given to specify the author of the
- quotation.
- @end itemize
- @quotation
- This is an example of text written between a @code{@@quotation}
- command and an @code{@@end quotation} command. A @code{@@quotation}
- command is most often used to indicate text that is excerpted from
- another (real or hypothetical) printed work.
- @end quotation
- Write a @code{@@quotation} command as text on a line by itself. This
- line will disappear from the output. Mark the end of the quotation
- with a line beginning with and containing only @code{@@end quotation}.
- The @code{@@end quotation} line will likewise disappear from the
- output.
- @code{@@quotation} takes one optional argument, given on the remainder
- of the line. This text, if present, is included at the beginning of
- the quotation in bold or otherwise emphasized, and followed with a
- @samp{:}. For example:
- @example
- @@quotation Note
- This is
- a foo.
- @@end quotation
- @end example
- @noindent
- produces
- @quotation Note
- This is
- a foo.
- @end quotation
- If the @code{@@quotation} argument is one of these English words
- (case-insensitive):
- @example
- Caution Important Note Tip Warning
- @end example
- @cindex @code{<caution>} Docbook tag
- @cindex @code{<important>} Docbook tag
- @cindex @code{<note>} Docbook tag
- @cindex @code{<tip>} Docbook tag
- @cindex @code{<warning>} Docbook tag
- @cindex @code{<blockquote>} HTML tag
- @noindent then the Docbook output uses corresponding special tags
- (@code{<note>}, etc.)@: instead of the default @code{<blockquote>}.
- HTML output always uses @code{<blockquote>}.
- If the author of the quotation is specified in the @code{@@quotation}
- block with the @code{@@author} command, a line with the author name is
- displayed after the quotation:
- @example
- @@quotation
- People sometimes ask me if it is a sin in the Church of Emacs to use
- vi. Using a free version of vi is not a sin; it is a penance. So happy
- hacking.
- @@author Richard Stallman
- @@end quotation
- @end example
- @noindent
- produces
- @quotation
- People sometimes ask me if it is a sin in the Church of Emacs to use
- vi. Using a free version of vi is not a sin; it is a penance. So happy
- hacking.
- @author Richard Stallman
- @end quotation
- @findex smallquotation
- Texinfo also provides a command @code{@@smallquotation}, which is just
- like @code{@@quotation} but uses a smaller font size where possible.
- @xref{@code{@@small@dots{}}}.
- @node @code{@@indentedblock}
- @section @code{@@indentedblock}: Indented text blocks
- @cindex Indented text block
- @findex indentedblock
- The @code{@@indentedblock} environment is similar to
- @code{@@quotation}, except that text is only indented on the left (and
- there is no optional argument for an author). Thus, the text font
- remains unchanged, and text is gathered and filled as usual, but the
- left margin is increased. For example:
- @indentedblock
- This is an example of text written between an @code{@@indentedblock}
- command and an @code{@@end indentedblock} command. The
- @code{@@indentedblock} environment can contain any text or other
- commands desired.
- @end indentedblock
- This is written in the Texinfo source as:
- @example
- @@indentedblock
- This is an example ...
- @@end indentedblock
- @end example
- @findex smallindentedblock
- Texinfo also provides a command @code{@@smallindentedblock}, which is
- just like @code{@@indentedblock} but uses a smaller font size where
- possible. @xref{@code{@@small@dots{}}}.
- @node @code{@@example}
- @section @code{@@example}: Example Text
- @anchor{example}@c old name
- @findex example
- @cindex Examples, formatting them
- @cindex Formatting examples
- The @code{@@example} environment is used to indicate an example that
- is not part of the running text, such as computer input or output.
- Write an @code{@@example} command at the beginning of a line by
- itself. Mark the end of the example with an @code{@@end example}
- command, also written at the beginning of a line by itself.
- An @code{@@example} environment has the following characteristics:
- @itemize
- @item Each line in the input file is a line in the output; that is,
- the source text is not filled as it normally is.
- @item Extra spaces and blank lines are significant.
- @item The output is indented.
- @item The output uses a fixed-width font.
- @item Texinfo commands @emph{are} expanded; if you want the output to
- be the input verbatim, use the @code{@@verbatim} environment instead
- (@pxref{@code{@@verbatim}}).
- @end itemize
- For example,
- @example
- @@example
- cp foo @@var@{dest1@}; \
- cp foo @@var@{dest2@}
- @@end example
- @end example
- @noindent
- produces
- @example
- cp foo @var{dest1}; \
- cp foo @var{dest2}
- @end example
- The lines containing @code{@@example} and @code{@@end example} will
- disappear from the output. To make the output look good, you should
- put a blank line before the @code{@@example} and another blank line
- after the @code{@@end example}. Blank lines inside the beginning
- @code{@@example} and the ending @code{@@end example}, on the other
- hand, do appear in the output.
- @quotation Caution
- Do not use tabs in the lines of an example! (Or anywhere else in
- Texinfo, except in verbatim environments.) @TeX{} treats tabs as
- single spaces, and that is not what they look like. In Emacs, you can
- use @kbd{M-x untabify} to convert tabs in a region to multiple spaces.
- @end quotation
- Examples are often, logically speaking, ``in the middle'' of a
- paragraph, and the text that continues afterwards should not be
- indented, as in the example above. The @code{@@noindent} command
- prevents a piece of text from being indented as if it were a new
- paragraph (@pxref{@code{@@noindent}}).
- If you want to embed code fragments within sentences, instead of
- displaying them, use the @code{@@code} command or its relatives
- (@pxref{@code{@@code}}).
- If you wish to write a ``comment'' on a line of an example in the
- normal roman font, you can use the @code{@@r} command (@pxref{Fonts}).
- @node @code{@@verbatim}
- @section @code{@@verbatim}: Literal Text
- @anchor{verbatim}@c old name
- @findex verbatim
- @cindex Verbatim environment
- Use the @code{@@verbatim} environment for printing of text that may
- contain special characters or commands that should not be interpreted,
- such as computer input or output (@code{@@example} interprets its text
- as regular Texinfo commands). This is especially useful for including automatically
- generated files in a Texinfo manual.
- In general, the output will be just the same as the input. No
- character substitutions are made, e.g., all spaces and blank lines are
- significant, including tabs. In the printed manual, the text is
- typeset in a fixed-width font, and not indented or filled.
- Write a @code{@@verbatim} command at the beginning of a line by
- itself. This line will disappear from the output. Mark the end of
- the verbatim block with an @code{@@end verbatim} command, also written
- at the beginning of a line by itself. The @code{@@end verbatim} will
- also disappear from the output.
- For example:
- @c oops, got to trick this a bit: can't use @end verbatim inside @verbatim
- @example
- @exdent @t{@@verbatim}
- @exdent @t{@{}
- @exdent @key{TAB}@t{@@command with strange characters: @@'e}
- @exdent @t{expand@key{TAB}me}
- @exdent @t{@}}
- @exdent @t{@@end verbatim}
- @end example
- @noindent
- This produces:
- @verbatim
- {
- @command with strange characters: @'e
- expand me
- }
- @end verbatim
- Since the lines containing @code{@@verbatim} and @code{@@end verbatim}
- produce no output, typically you should put a blank line before the
- @code{@@verbatim} and another blank line after the @code{@@end
- verbatim}. Blank lines between the beginning @code{@@verbatim} and
- the ending @code{@@end verbatim} will appear in the output.
- @cindex Verbatim, small
- @cindex Small verbatim
- You can get a ``small'' verbatim by enclosing the @code{@@verbatim} in
- an @code{@@smallformat} environment, as shown here:
- @c more cheating ...
- @smallexample
- @exdent @t{@@smallformat}
- @exdent @t{@@verbatim}
- @exdent @t{... still verbatim, but in a smaller font ...}
- @exdent @t{@@end verbatim}
- @exdent @t{@@end smallformat}
- @end smallexample
- Finally, a word of warning: it is not reliable to use
- @code{@@verbatim} inside other Texinfo constructs.
- See also @ref{@code{@@verbatiminclude}}.
- @node @code{@@lisp}
- @section @code{@@lisp}: Marking a Lisp Example
- @anchor{lisp}@c old name
- @findex lisp
- @cindex Lisp example
- The @code{@@lisp} command is used for Lisp code. It is synonymous
- with the @code{@@example} command.
- @lisp
- This is an example of text written between an
- @code{@@lisp} command and an @code{@@end lisp} command.
- @end lisp
- Use @code{@@lisp} instead of @code{@@example} to preserve information
- regarding the nature of the example. This is useful, for example, if
- you write a function that evaluates only and all the Lisp code in a
- Texinfo file. Then you can use the Texinfo file as a Lisp
- library. Mark the end of @code{@@lisp} with @code{@@end lisp} on a line
- by itself.
- @node @code{@@display}
- @section @code{@@display}: Examples Using the Text Font
- @anchor{display}@c old name
- @findex display
- @cindex Display formatting
- The @code{@@display} command begins another kind of environment, where
- the font is left unchanged, not switched to typewriter as with
- @code{@@example}. Each line of input still produces a line of output,
- and the output is still indented.
- @display
- This is an example of text written between a @code{@@display} command
- and an @code{@@end display} command. The @code{@@display} command
- indents the text, but does not fill it.
- @end display
- @findex smalldisplay
- Texinfo also provides the environment @code{@@smalldisplay}, which is
- like @code{@@display} but uses a smaller font size.
- @xref{@code{@@small@dots{}}}.
- @node @code{@@format}
- @section @code{@@format}: Examples Using the Full Line Width
- @anchor{format}@c old name
- @findex format
- The @code{@@format} command is similar to @code{@@display}, except it
- leaves the text unindented. Like @code{@@display}, it does not select
- the fixed-width font.
- @format
- This is an example of text written between a @code{@@format} command
- and an @code{@@end format} command. As you can see
- from this example,
- the @code{@@format} command does not fill the text.
- @end format
- @findex smallformat
- Texinfo also provides the environment @code{@@smallformat}, which is
- like @code{@@format} but uses a smaller font size.
- @xref{@code{@@small@dots{}}}.
- @node @code{@@exdent}
- @section @code{@@exdent}: Undoing a Line's Indentation
- @anchor{exdent}@c old name
- @findex exdent
- @cindex Indentation undoing
- The @code{@@exdent} command removes any indentation a line might have.
- The command is written at the beginning of a line and applies only to
- the text that follows the command that is on the same line. Do not use
- braces around the text. In a printed manual, the text on an
- @code{@@exdent} line is printed in the roman font.
- @code{@@exdent} is usually used within examples. Thus,
- @example
- @group
- @@example
- This line follows an @@@@example command.
- @@exdent This line is exdented.
- This line follows the exdented line.
- The @@@@end example comes on the next line.
- @@end example
- @end group
- @end example
- @noindent
- produces
- @example
- @group
- This line follows an @@example command.
- @exdent This line is exdented.
- This line follows the exdented line.
- The @@end example comes on the next line.
- @end group
- @end example
- In practice, the @code{@@exdent} command is rarely used. Usually, you
- un-indent text by ending the example and returning the page to its
- normal width.
- @code{@@exdent} has no effect in HTML output.
- @node @code{@@flushleft @@flushright}
- @section @code{@@flushleft} and @code{@@flushright}
- @anchor{flushleft & flushright}@c old name
- @findex flushleft
- @findex flushright
- @cindex Ragged right, without filling
- @cindex Ragged left, without filling
- The @code{@@flushleft} and @code{@@flushright} commands line up the
- ends of lines on the left and right margins of a page,
- but do not fill the text. The commands are written on lines of their
- own, without braces. The @code{@@flushleft} and @code{@@flushright}
- commands are ended by @code{@@end flushleft} and @code{@@end
- flushright} commands on lines of their own.
- @need 1500
- For example,
- @example
- @group
- @@flushleft
- This text is
- written flushleft.
- @@end flushleft
- @end group
- @end example
- @noindent
- produces
- @quotation
- @flushleft
- This text is
- written flushleft.
- @end flushleft
- @end quotation
- @code{@@flushright} produces the type of indentation often used in the
- return address of letters. For example,
- @example
- @group
- @@flushright
- Here is an example of text written
- flushright. The @@code@{@@flushright@} command
- right justifies every line but leaves the
- left end ragged.
- @@end flushright
- @end group
- @end example
- @noindent
- produces
- @flushright
- Here is an example of text written
- flushright. The @code{@@flushright} command
- right justifies every line but leaves the
- left end ragged.
- @end flushright
- @node @code{@@raggedright}
- @section @code{@@raggedright}: Ragged Right Text
- @anchor{raggedright}@c old name
- @findex raggedright
- @cindex Ragged right, with filling
- The @code{@@raggedright} fills text as usual, but the text is only
- justified on the left; the right margin is ragged. The command is
- written on a line of its own, without braces. The
- @code{@@raggedright} command is ended by @code{@@end raggedright} on a
- line of its own. This command has no effect in Info and HTML output,
- where text is always set ragged right.
- The @code{@@raggedright} command can be useful with paragraphs
- containing lists of commands with long names, when it is known in
- advance that justifying the text on both margins will make the
- paragraph look bad.
- An example (from elsewhere in this manual):
- @example
- @group
- @@raggedright
- Commands for double and single angle quotation marks:
- @@code@{@@@@guillemetleft@@@{@@@}@}, @@code@{@@@@guillemetright@@@{@@@}@},
- @@code@{@@@@guillemotleft@@@{@@@}@}, @@code@{@@@@guillemotright@@@{@@@}@},
- @@code@{@@@@guilsinglleft@@@{@@@}@}, @@code@{@@@@guilsinglright@@@{@@@}@}.
- @@end raggedright
- @end group
- @end example
- @noindent
- produces
- @raggedright
- Commands for double and single angle quotation marks:
- @code{@@guillemetleft@{@}}, @code{@@guillemetright@{@}},
- @code{@@guillemotleft@{@}}, @code{@@guillemotright@{@}},
- @code{@@guilsinglleft@{@}}, @code{@@guilsinglright@{@}}.
- @end raggedright
- @node @code{@@noindent}
- @section @code{@@noindent}: Omitting Indentation
- @anchor{noindent}@c old name
- @findex noindent
- @cindex Omitting indentation
- @cindex Suppressing indentation
- @cindex Indentation, omitting
- An example or other inclusion can break a paragraph into segments.
- Ordinarily, the formatters indent text that follows an example as a new
- paragraph. You can prevent this on a case-by-case basis by writing
- @code{@@noindent} at the beginning of a line, preceding the continuation
- text. You can also disable indentation for all paragraphs globally with
- @code{@@paragraphindent} (@pxref{@code{@@paragraphindent}}).
- Here is an example showing how to eliminate the normal indentation of
- the text after an @code{@@example}, a common situation:
- @example
- @group
- @@example
- This is an example
- @@end example
- @@noindent
- This line is not indented. As you can see, the
- beginning of the line is fully flush left with the
- line that follows after it.
- @end group
- @end example
- @noindent produces:
- @display
- @example
- This is an example
- @end example
- @noindent
- This line is not indented. As you can see, the
- beginning of the line is fully flush left with the
- line that follows after it.
- @end display
- The standard usage of @code{@@noindent} is just as above: at the
- beginning of what would otherwise be a paragraph, to eliminate the
- indentation that normally happens there. It can either be followed by
- text or be on a line by itself. There is no reason to use it
- in other contexts, such as in the middle of a paragraph or inside an
- environment (@pxref{Quotations and Examples}).
- You can control the number of blank lines in the Info file output by
- adjusting the input as desired: a line containing just
- @code{@@noindent} does not generate a blank line, and neither does an
- @code{@@end} line for an environment.
- Do not put braces after a @code{@@noindent} command; they are not
- used, since @code{@@noindent} is a command used outside of paragraphs
- (@pxref{Command Syntax}).
- @node @code{@@indent}
- @section @code{@@indent}: Forcing Indentation
- @anchor{indent}@c old name
- @findex indent
- @cindex Forcing indentation
- @cindex Inserting indentation
- @cindex Indentation, forcing
- @indent
- To complement the @code{@@noindent} command (see the previous
- section), Texinfo provides the @code{@@indent} command to force a
- paragraph to be indented. For instance, this paragraph (the first in
- this section) is indented using an @code{@@indent} command.
- And indeed, the first paragraph of a section is the most likely place
- to use @code{@@indent}, to override the normal behavior of no
- indentation there (@pxref{@code{@@paragraphindent}}). It can either be
- followed by text or be on a line by itself.
- As a special case, when @code{@@indent} is used in an environment
- where text is not filled, it produces a paragraph indentation space in
- the @TeX{} output. (These environments are where a line of input
- produces a line of output, such as @code{@@example} and
- @code{@@display}; for a summary of all environments, @pxref{Block
- Enclosing Commands}.)
- Do not put braces after an @code{@@indent} command; they are not used,
- since @code{@@indent} is a command used outside of paragraphs
- (@pxref{Command Syntax}).
- @node @code{@@cartouche}
- @section @code{@@cartouche}: Rounded Rectangles
- @anchor{cartouche}@c old name
- @findex cartouche
- @cindex Box with rounded corners
- @cindex Rounded rectangles, around text
- In a printed manual, the @code{@@cartouche} command draws a box with
- rounded corners around its contents. In HTML, a normal rectangle is
- drawn. @code{@@cartouche} has no effect in Info output.
- You can use this command to further highlight an example or quotation.
- For instance, you could write a manual in which one type of example is
- surrounded by a cartouche for emphasis.
- For example,
- @example
- @@cartouche
- @@example
- % pwd
- /usr/local/share/emacs
- @@end example
- @@end cartouche
- @end example
- @noindent
- surrounds the two-line example with a box with rounded corners, in the
- printed manual.
- The output from the example looks like this (if you're reading this in
- Info, you'll see the @code{@@cartouche} had no effect):
- @cartouche
- @example
- % pwd
- /usr/local/share/emacs
- @end example
- @end cartouche
- @code{@@cartouche} also implies @code{@@group} (@pxref{@code{@@group}}).
- @node @code{@@small@dots{}}
- @section @code{@@small@dots{}} Block Commands
- @anchor{small}@c old name
- @findex smallexample
- @findex smallformat
- @findex smalllisp
- @findex smallquotation
- @cindex Small examples
- @cindex Examples in smaller fonts
- @cindex Quotations in smaller fonts
- @cindex Lisp examples in smaller fonts
- In addition to the regular @code{@@example} and similar commands,
- Texinfo has ``small'' example-style commands. These are
- @code{@@smallquotation}, @code{@@smallindentedblock},
- @code{@@smalldisplay}, @code{@@smallexample}, @code{@@smallformat},
- and @code{@@smalllisp}.
- In Info output, the @code{@@small@dots{}} commands are equivalent to
- their non-small companion commands.
- In @TeX{}, however, the @code{@@small@dots{}} commands typeset text in
- a smaller font than the non-small example commands. Thus, for
- instance, code examples can contain longer lines and still fit on a
- page without needing to be rewritten.
- A smaller font size is also requested in HTML output, and (as usual)
- retained in the Texinfo@tie{}XML transliteration.
- Mark the end of a @code{@@small@dots{}} block with a corresponding
- @code{@@end small@dots{}}. For example, pair @code{@@smallexample} with
- @code{@@end smallexample}.
- Here is an example of the font used by the @code{@@smallexample}
- command (in Info, the output will be the same as usual):
- @smallexample
- @dots{} to make sure that you have the freedom to
- distribute copies of free software (and charge for
- this service if you wish), that you receive source
- code or can get it if you want it, that you can
- change the software or use pieces of it in new free
- programs; and that you know you can do these things.
- @end smallexample
- The @code{@@small@dots{}} commands use the same font style as their
- normal counterparts: @code{@@smallexample} and @code{@@smalllisp} use
- a fixed-width font, and everything else uses the regular font.
- They also have the same behavior in other respects---whether filling
- is done and whether margins are narrowed.
- As a general rule, a printed document looks better if you use only one
- of (for instance) @code{@@example} or @code{@@smallexample}
- consistently within a chapter.
- @node Lists and Tables
- @chapter Lists and Tables
- @cindex Making lists and tables
- @cindex Lists and tables, making
- @cindex Tables and lists, making
- Texinfo has several ways of making lists and tables. Lists can be
- bulleted or numbered; two-column tables can highlight the items in
- the first column; multi-column tables are also supported.
- @menu
- * Introducing Lists:: Texinfo formats lists for you.
- * @code{@@itemize}:: How to construct a simple list.
- * @code{@@enumerate}:: How to construct a numbered list.
- * Two-column Tables:: How to construct a two-column table.
- * Multi-column Tables:: How to construct generalized tables.
- @end menu
- @node Introducing Lists
- @section Introducing Lists
- Texinfo automatically indents the text in lists or tables, and numbers
- an enumerated list. This last feature is useful if you modify the
- list, since you do not need to renumber it yourself.
- Numbered lists and tables begin with the appropriate @@-command at the
- beginning of a line, and end with the corresponding @code{@@end}
- command on a line by itself. The table and itemized-list commands
- also require that you write formatting information on the same line as
- the beginning @@-command.
- Begin an enumerated list, for example, with an @code{@@enumerate}
- command and end the list with an @code{@@end enumerate} command.
- Begin an itemized list with an @code{@@itemize} command, followed on
- the same line by a formatting command such as @code{@@bullet}, and end
- the list with an @code{@@end itemize} command.
- @findex end
- Precede each element of a list with an @code{@@item} or @code{@@itemx}
- command.
- @sp 1
- @noindent
- Here is an itemized list of the different kinds of table and lists:
- @itemize @bullet
- @item
- Itemized lists with and without bullets.
- @item
- Enumerated lists, using numbers or letters.
- @item
- Two-column tables with highlighting.
- @end itemize
- @sp 1
- @noindent
- Here is an enumerated list with the same items:
- @enumerate
- @item
- Itemized lists with and without bullets.
- @item
- Enumerated lists, using numbers or letters.
- @item
- Two-column tables with highlighting.
- @end enumerate
- @sp 1
- @noindent
- And here is a two-column table with the same items and their
- @w{@@-commands}:
- @table @code
- @item @@itemize
- Itemized lists with and without bullets.
- @item @@enumerate
- Enumerated lists, using numbers or letters.
- @item @@table
- @itemx @@ftable
- @itemx @@vtable
- Two-column tables, optionally with indexing.
- @end table
- @node @code{@@itemize}
- @section @code{@@itemize}: Making an Itemized List
- @anchor{itemize}@c old name
- @findex itemize
- @cindex Itemization
- The @code{@@itemize} command produces a sequence of ``items'', each
- starting with a bullet or other mark inside the left margin, and
- generally indented.
- @cindex @code{@@w}, for blank items
- Begin an itemized list by writing @code{@@itemize} at the beginning of
- a line. Follow the command, on the same line, with a character or a
- Texinfo command that generates a mark. Usually, you will use
- @code{@@bullet} after @code{@@itemize}, but you can use
- @code{@@minus}, or any command or character that results in a single
- character in the Info file. (When you write the mark command such as
- @code{@@bullet} after an @code{@@itemize} command, you may omit the
- @samp{@{@}}.) If you don't specify a mark command, the default is
- @code{@@bullet}. If you don't want any mark at all, but still want
- logical items, use @code{@@w@{@}} (in this case the braces are
- required).
- @findex item
- After the @code{@@itemize}, write your items, each starting with
- @code{@@item}. Text can follow on the same line as the @code{@@item}.
- The text of an item can continue for more than one paragraph.
- There should be at least one @code{@@item} inside the @code{@@itemize}
- environment. If none are present, @code{makeinfo} gives a warning.
- If you just want indented text and not a list of items, use
- @code{@@indentedblock}; @pxref{@code{@@indentedblock}}.
- Index entries and comments that are given before an @code{@@item}
- including the first, are automatically moved (internally) to after the
- @code{@@item}, so the output is as expected. Historically this has
- been a common practice.
- Usually, you should put a blank line between items. This puts a blank
- line in the Info file. (@TeX{} inserts the proper vertical space in
- any case.) Except when the entries are very brief, these blank lines
- make the list look better.
- Here is an example of the use of @code{@@itemize}, followed by the
- output it produces. @code{@@bullet} produces an @samp{*} in Info and
- a round dot in other output formats.
- @example
- @group
- @@itemize @@bullet
- @@item
- Some text for foo.
- @@item
- Some text
- for bar.
- @@end itemize
- @end group
- @end example
- @noindent
- This produces:
- @quotation
- @itemize @bullet
- @item
- Some text for foo.
- @item
- Some text
- for bar.
- @end itemize
- @end quotation
- Itemized lists may be embedded within other itemized lists. Here is a
- list marked with dashes embedded in a list marked with bullets:
- @example
- @group
- @@itemize @@bullet
- @@item
- First item.
- @@itemize @@minus
- @@item
- Inner item.
- @@item
- Second inner item.
- @@end itemize
- @@item
- Second outer item.
- @@end itemize
- @end group
- @end example
- @noindent
- This produces:
- @quotation
- @itemize @bullet
- @item
- First item.
- @itemize @minus
- @item
- Inner item.
- @item
- Second inner item.
- @end itemize
- @item
- Second outer item.
- @end itemize
- @end quotation
- @node @code{@@enumerate}
- @section @code{@@enumerate}: Making a Numbered or Lettered List
- @anchor{enumerate}@c old name
- @findex enumerate
- @cindex Enumeration
- @code{@@enumerate} is like @code{@@itemize} (@pxref{@code{@@itemize}}),
- except that the labels on the items are successive integers or letters
- instead of bullets.
- Write the @code{@@enumerate} command at the beginning of a line. The
- command does not require an argument, but accepts either a number or a
- letter as an option. Without an argument, @code{@@enumerate} starts the
- list with the number @samp{1}. With a numeric argument, such as
- @samp{3}, the command starts the list with that number. With an upper-
- or lowercase letter, such as @samp{a} or @samp{A}, the command starts
- the list with that letter.
- Write the text of the enumerated list in the same way as an itemized
- list: write a line starting with @code{@@item} at the beginning of
- each item in the enumeration. It is ok to have text following the
- @code{@@item}, and the text for an item can continue for several
- paragraphs.
- You should put a blank line between entries in the list.
- This generally makes it easier to read the Info file.
- @need 1500
- Here is an example of @code{@@enumerate} without an argument:
- @example
- @group
- @@enumerate
- @@item
- Underlying causes.
- @@item
- Proximate causes.
- @@end enumerate
- @end group
- @end example
- @noindent
- This produces:
- @enumerate
- @item
- Underlying causes.
- @item
- Proximate causes.
- @end enumerate
- @sp 1
- Here is an example with an argument of @kbd{3}:
- @sp 1
- @example
- @group
- @@enumerate 3
- @@item
- Predisposing causes.
- @@item
- Precipitating causes.
- @@item
- Perpetuating causes.
- @@end enumerate
- @end group
- @end example
- @noindent
- This produces:
- @enumerate 3
- @item
- Predisposing causes.
- @item
- Precipitating causes.
- @item
- Perpetuating causes.
- @end enumerate
- @sp 1
- Here is a brief summary of the alternatives. The summary is constructed
- using @code{@@enumerate} with an argument of @kbd{a}.
- @sp 1
- @enumerate a
- @item
- @code{@@enumerate}
- Without an argument, produce a numbered list, with the first item
- numbered@tie{}1.
- @item
- @code{@@enumerate @var{unsigned-integer}}
- With an (unsigned) numeric argument, start a numbered list with that
- number. You can use this to continue a list that you interrupted with
- other text.
- @item
- @code{@@enumerate @var{upper-case-letter}}
- With an uppercase letter as argument, start a list
- in which each item is marked
- by a letter, beginning with that uppercase letter.
- @item
- @code{@@enumerate @var{lower-case-letter}}
- With a lowercase letter as argument, start a list
- in which each item is marked by
- a letter, beginning with that lowercase letter.
- @end enumerate
- You can also nest enumerated lists, as in an outline.
- @node Two-column Tables
- @section Making a Two-column Table
- @cindex Tables, making two-column
- @findex table
- @code{@@table} is similar to @code{@@itemize}
- (@pxref{@code{@@itemize}}), but allows you to specify a name or
- heading line for each item. The @code{@@table} command is used to
- produce two-column tables, and is especially useful for glossaries,
- explanatory exhibits, and command-line option summaries.
- @menu
- * @code{@@table}:: How to construct a two-column table.
- * @code{@@ftable @@vtable}:: Automatic indexing for two-column tables.
- * @code{@@itemx}:: How to put more entries in the first column.
- @end menu
- @node @code{@@table}
- @subsection Using the @code{@@table} Command
- @anchor{table}@c old name
- @cindex Definition lists, typesetting
- Use the @code{@@table} command to produce a two-column table. This
- command is typically used when you have a list of items and a brief text
- with each one, such as a list of definitions.
- Write the @code{@@table} command at the beginning of a line, after a
- blank line, and follow it on the same line with an argument that is an
- `indicating' command, such as @code{@@code}, @code{@@samp},
- @code{@@var}, @code{@@option}, or @code{@@kbd} (@pxref{Indicating}).
- This command will be applied to the text in the first column. For
- example, @code{@@table @@code} will cause the text in the first column
- to be output as if it had been the argument to a @code{@@code} command.
- @anchor{@code{@@asis}}@c command name with @, for consistency
- @findex asis
- You may use the @code{@@asis} command as an argument to
- @code{@@table}. @code{@@asis} is a command that does nothing: if you
- use this command after @code{@@table}, the first column entries are
- output without added highlighting (``as is'').
- The @code{@@table} command works with other commands besides those
- explicitly mentioned here. However, you can only use predefined
- Texinfo commands that take an argument in braces. You cannot
- reliably use a new command defined with @code{@@macro}, although an
- @code{@@alias} (for a suitable predefined command) is acceptable.
- @xref{Defining New Texinfo Commands}.
- @findex item
- Begin each table entry with an @code{@@item} command at the beginning
- of a line. Write the text for the first column on the same line as the
- @code{@@item} command. Write the text for the second column on the line
- following the @code{@@item} line and on subsequent lines. You may
- write as many lines of supporting text as you wish, even several
- paragraphs. But only the text on the same line as the @code{@@item}
- will be placed in the first column (including any footnotes).
- You do not need to type anything for an empty second column.
- Normally, you should put a blank line before an @code{@@item} line
- (except the first one). This puts a blank line in the Info file.
- Except when the entries are very brief, a blank line looks better.
- End the table with a line consisting of @code{@@end table}, followed
- by a blank line. @TeX{} will always start a new paragraph after the
- table, so the blank line is needed for the Info output to be analogous.
- @need 1500
- For example, the following table highlights the text in the first
- column with the @code{@@samp} command:
- @example
- @group
- @@table @@samp
- @@item foo
- This is the text for
- @@samp@{foo@}.
- @@item bar
- Text for @@samp@{bar@}.
- @@end table
- @end group
- @end example
- @noindent
- This produces:
- @table @samp
- @item foo
- This is the text for
- @samp{foo}.
- @item bar
- Text for @samp{bar}.
- @end table
- If you want to list two or more named items with a single block of
- text, use the @code{@@itemx} command. (@xref{@code{@@itemx}}.)
- The @code{@@table} command (@pxref{@code{@@table}}) is not supported
- inside @code{@@display}. Since @code{@@display} is line-oriented, it
- doesn't make sense to use them together. If you want to indent a
- table, try @code{@@quotation} (@pxref{@code{@@quotation}}) or
- @code{@@indentedblock} (@pxref{@code{@@indentedblock}}).
- @node @code{@@ftable @@vtable}
- @subsection @code{@@ftable} and @code{@@vtable}
- @anchor{ftable vtable}@c old name
- @findex ftable
- @findex vtable
- @cindex Tables with indexing
- @cindex Indexing table entries automatically
- The @code{@@ftable} and @code{@@vtable} commands are the same as the
- @code{@@table} command except that @code{@@ftable} automatically enters
- each of the items in the first column of the table into the index of
- functions and @code{@@vtable} automatically enters each of the items in
- the first column of the table into the index of variables. This
- simplifies the task of creating indices. Only the items on the same
- line as the @code{@@item} or @code{@@itemx} commands are indexed, and
- they are indexed in exactly the form that they appear on that line.
- @xref{Indices}, for more information about indices.
- Begin a two-column table using @code{@@ftable} or @code{@@vtable} by
- writing the @@-command at the beginning of a line, followed on the same
- line by an argument that is a Texinfo command such as @code{@@code},
- exactly as you would for a @code{@@table} command; and end the table
- with an @code{@@end ftable} or @code{@@end vtable} command on a line by
- itself.
- See the example for @code{@@table} in the previous section.
- @node @code{@@itemx}
- @subsection @code{@@itemx}: Second and Subsequent Items
- @anchor{itemx}@c old name
- @cindex Two named items for @code{@@table}
- @findex itemx
- Use the @code{@@itemx} command inside a table when you have two or more
- first column entries for the same item, each of which should appear on a
- line of its own.
- Use @code{@@item} for the first entry, and @code{@@itemx} for all
- subsequent entries; @code{@@itemx} must always follow an @code{@@item}
- command, with no blank line intervening.
- The @code{@@itemx} command works exactly like @code{@@item} except
- that it does not generate extra vertical space above the first column
- text. If you have multiple consecutive @code{@@itemx} commands, do
- not insert any blank lines between them.
- For example,
- @example
- @group
- @@table @@code
- @@item upcase
- @@itemx downcase
- These two functions accept a character or a string as
- argument, and return the corresponding uppercase (lowercase)
- character or string.
- @@end table
- @end group
- @end example
- @noindent
- This produces:
- @table @code
- @item upcase
- @itemx downcase
- These two functions accept a character or a string as
- argument, and return the corresponding uppercase (lowercase)
- character or string.
- @end table
- @noindent
- (Note also that this example illustrates multi-line supporting text in
- a two-column table.)
- @node Multi-column Tables
- @section @code{@@multitable}: Multi-column Tables
- @findex multitable
- @cindex Tables, making multi-column
- @code{@@multitable} allows you to construct tables with any number of
- columns, with each column having any width you like.
- You define the column widths on the @code{@@multitable} line itself, and
- write each row of the actual table following an @code{@@item} command,
- with columns separated by a @code{@@tab} command. Finally, @code{@@end
- multitable} completes the table. Details in the sections below.
- @menu
- * Multitable Column Widths:: Defining multitable column widths.
- * Multitable Rows:: Defining multitable rows, with examples.
- @end menu
- @node Multitable Column Widths
- @subsection Multitable Column Widths
- @cindex Multitable column widths
- @cindex Column widths, defining for multitables
- @cindex Widths, defining multitable column
- You can define the column widths for a multitable in two ways: as
- fractions of the line length; or with a prototype row. Mixing the two
- methods is not supported. In either case, the widths are defined
- entirely on the same line as the @code{@@multitable} command.
- @enumerate
- @item
- @findex columnfractions
- @cindex Line length, column widths as fraction of
- To specify column widths as fractions of the line length, write
- @code{@@columnfractions} and the decimal numbers (presumably less than
- 1; a leading zero is allowed and ignored) after the
- @code{@@multitable} command, as in:
- @example
- @@multitable @@columnfractions .33 .33 .33
- @end example
- The fractions need not add up exactly to 1.0, as these do not. This
- allows you to produce tables that do not need the full line length.
- @item
- @cindex Prototype row, column widths defined by
- To specify a prototype row, write the longest entry for each column
- enclosed in braces after the @code{@@multitable} command. For example:
- @example
- @@multitable @{some text for column one@} @{for column two@}
- @end example
- @noindent
- The first column will then have the width of the typeset `some text for
- column one', and the second column the width of `for column two'.
- The prototype entries need not appear in the table itself.
- Although we used simple text in this example, the prototype entries can
- contain Texinfo commands; markup commands such as @code{@@code} are
- particularly likely to be useful.
- @end enumerate
- @node Multitable Rows
- @subsection Multitable Rows
- @cindex Multitable rows
- @cindex Rows, of a multitable
- @findex item
- @findex tab
- After the @code{@@multitable} command defining the column widths (see
- the previous section), you begin each row in the body of a multitable
- with @code{@@item}, and separate the column entries with @code{@@tab}.
- Line breaks are not special within the table body, and you may break
- input lines in your source file as necessary.
- @findex headitem
- @cindex Heading row, in table
- @cindex @code{<thead>} HTML/XML tag
- You can also use @code{@@headitem} instead of @code{@@item} to produce
- a @dfn{heading row}. The @TeX{} output for such a row is in bold, and
- the HTML and Docbook output uses the @code{<thead>} tag. In Info, the
- heading row is followed by a separator line made of dashes (@samp{-}
- characters).
- @findex headitemfont
- @cindex Font for multitable heading rows
- The command @code{@@headitemfont} can be used in templates when the
- entries in a @code{@@headitem} row need to be used in a template. It
- is a synonym for @code{@@b}, but using @code{@@headitemfont} avoids
- any dependency on that particular font style, in case we provide a way
- to change it in the future.
- Here is a complete example of a multi-column table (the text is from
- @cite{The GNU Emacs Manual}, @pxref{Split Window,, Splitting Windows,
- emacs, The GNU Emacs Manual}):
- @example
- @@multitable @@columnfractions .15 .45 .4
- @@headitem Key @@tab Command @@tab Description
- @@item C-x 2
- @@tab @@code@{split-window-vertically@}
- @@tab Split the selected window into two windows,
- with one above the other.
- @@item C-x 3
- @@tab @@code@{split-window-horizontally@}
- @@tab Split the selected window into two windows
- positioned side by side.
- @@item C-Mouse-2
- @@tab
- @@tab In the mode line or scroll bar of a window,
- split that window.
- @@end multitable
- @end example
- @noindent produces:
- @multitable @columnfractions .15 .45 .4
- @headitem Key @tab Command @tab Description
- @item C-x 2
- @tab @code{split-window-vertically}
- @tab Split the selected window into two windows,
- with one above the other.
- @item C-x 3
- @tab @code{split-window-horizontally}
- @tab Split the selected window into two windows
- positioned side by side.
- @item C-Mouse-2
- @tab
- @tab In the mode line or scroll bar of a window,
- split that window.
- @end multitable
- @node Special Displays
- @chapter Special Displays
- @cindex Special displays
- The commands in this chapter allow you to write text that is specially
- displayed (output format permitting), outside of the normal document
- flow.
- One set of such commands is for creating ``floats'', that is, figures,
- tables, and the like, set off from the main text, possibly numbered,
- captioned, and/or referred to from elsewhere in the document. Images
- are often included in these displays.
- Another group of commands is for creating footnotes in Texinfo.
- @menu
- * Floats:: Figures, tables, and the like.
- * Images:: Including graphics and images.
- * Footnotes:: Writing footnotes.
- @end menu
- @node Floats
- @section Floats
- @cindex Floats, in general
- A @dfn{float} is a display which is set off from the main text. It is
- typically labeled as being a ``Figure'', ``Table'', ``Example'', or
- some similar type.
- @cindex Floating, not yet implemented
- A float is so-named because, in principle, it can be moved to the
- bottom or top of the current page, or to a following page, in the
- printed output. (Floating does not make sense in other output
- formats.) In the present version of Texinfo, however, this floating
- is unfortunately not yet implemented. Instead, the floating material
- is simply output at the current location, more or less as if it were
- an @code{@@group} (@pxref{@code{@@group}}).
- @menu
- * @code{@@float}:: Producing floating material.
- * @code{@@caption @@shortcaption}:: Specifying descriptions for floats.
- * @code{@@listoffloats}:: A table of contents for floats.
- @end menu
- @node @code{@@float}
- @subsection @code{@@float} [@var{type}][,@var{label}]: Floating Material
- @anchor{float}@c old name
- @findex float
- @cindex Float environment
- To produce floating material, enclose the material you want to be
- displayed separate between @code{@@float} and @code{@@end float}
- commands, on lines by themselves.
- Floating material often uses @code{@@image} to display an
- already-existing graphic (@pxref{Images}), or @code{@@multitable} to
- display a table (@pxref{Multi-column Tables}). However, the contents
- of the float can be anything. Here's an example with simple text:
- @example
- @@float Figure,fig:ex1
- This is an example float.
- @@end float
- @end example
- @noindent And the output:
- @float Figure,fig:ex1
- This is an example float.
- @end float
- As shown in the example, @code{@@float} takes two arguments (separated
- by a comma), @var{type} and @var{label}. Both are optional.
- @table @var
- @item type
- Specifies the sort of float this is; typically a word such as
- ``Figure'', ``Table'', etc. If this is not given, and @var{label} is,
- any cross-referencing will simply use a bare number.
- @item label
- Specifies a cross-reference label for this float. If given, this
- float is automatically given a number, and will appear in any
- @code{@@listoffloats} output (@pxref{@code{@@listoffloats}}). Cross
- references to @var{label} are allowed.
- @cindex Floats, making unnumbered
- @cindex Unnumbered float, creating
- On the other hand, if @var{label} is not given, then the float will
- not be numbered and consequently will not appear in the
- @code{@@listoffloats} output or be cross-referenceable.
- @end table
- @noindent Ordinarily, you specify both @var{type} and @var{label}, to get a
- labeled and numbered float.
- @cindex Floats, numbering of
- @cindex Numbering of floats
- In Texinfo, all floats are numbered in the same way: with the chapter
- number (or appendix letter), a period, and the float number, which
- simply counts 1, 2, 3, @dots{}, and is reset at each chapter. Each
- float type is counted independently.
- Floats within an @code{@@unnumbered}, or outside of any chapter, are
- simply numbered consecutively from 1.
- These numbering conventions are not, at present, changeable.
- @node @code{@@caption @@shortcaption}
- @subsection @code{@@caption} & @code{@@shortcaption}
- @anchor{caption shortcaption}@c old name
- @findex caption
- @findex shortcaption
- @cindex Captions, for floats
- @cindex Short captions, for lists of floats
- You may write a @code{@@caption} anywhere within a @code{@@float}
- environment, to define a caption for the float. It is not allowed in
- any other context. @code{@@caption} takes a single argument, enclosed
- in braces. Here's an example:
- @example
- @@float
- An example float, with caption.
- @@caption@{Caption for example float.@}
- @@end float
- @end example
- @noindent The output is:
- @float
- An example float, with caption.
- @caption{Caption for example float.}
- @end float
- @code{@@caption} can appear anywhere within the float; it is not
- processed until the @code{@@end float}. The caption text is usually a
- sentence or two, but may consist of several paragraphs if necessary.
- In the output, the caption always appears below the float; this is not
- currently changeable. It is preceded by the float type and/or number,
- as specified to the @code{@@float} command (see the previous section).
- The @code{@@shortcaption} command likewise may be used only within
- @code{@@float}, and takes a single argument in braces. The short
- caption text is used instead of the caption text in a list of floats
- (see the next section). Thus, you can write a long caption for the
- main document, and a short title to appear in the list of floats. For
- example:
- @example
- @@float
- ... as above ...
- @@shortcaption@{Text for list of floats.@}
- @@end float
- @end example
- The text for @code{@@shortcaption} may not contain comments
- (@code{@@c}), verbatim text (@code{@@verb}), environments such as
- @code{@@example}, footnotes (@code{@@footnote}) or other complex
- constructs. The same constraints apply to @code{@@caption} unless
- there is a @code{@@shortcaption}.
- @node @code{@@listoffloats}
- @subsection @code{@@listoffloats}: Tables of Contents for Floats
- @anchor{listoffloats}@c old name
- @findex listoffloats
- @cindex List of floats
- @cindex Floats, list of
- @cindex Table of contents, for floats
- You can write a @code{@@listoffloats} command to generate a list of
- floats for a given float type (@pxref{@code{@@float}}), analogous to
- the document's overall table of contents. Typically, it is written in
- its own @code{@@unnumbered} node to provide a heading and structure,
- rather like @code{@@printindex} (@pxref{Printing Indices & Menus}).
- @code{@@listoffloats} takes one optional argument, the float type.
- Here's an example:
- @example
- @@node List of Figures
- @@unnumbered List of Figures
- @@listoffloats Figure
- @end example
- @noindent And here's what the output from @code{@@listoffloats}
- looks like, given the example figure earlier in this chapter (the Info
- output is formatted as a menu):
- @display
- @ifinfo
- * Figure 12.1: fig:ex1.
- @end ifinfo
- @ifnotinfo
- @listoffloats Figure
- @end ifnotinfo
- @end display
- Without any argument, @code{@@listoffloats} generates a list of floats
- for which no float type was specified, i.e., no first argument to the
- @code{@@float} command (@pxref{@code{@@float}}).
- Each line in the list of floats contains the float type (if any),
- the float number, and the caption, if any---the @code{@@shortcaption}
- argument, if it was specified, else the @code{@@caption} argument.
- In Info, the result is a menu where each float can be selected. In
- HTML, each line is a link to the float. In printed output, the page
- number is included.
- Unnumbered floats (those without cross-reference labels) are omitted
- from the list of floats.
- @node Images
- @section Inserting Images
- @cindex Images, inserting
- @cindex Pictures, inserting
- @findex image
- You can insert an image given in an external file with the
- @code{@@image} command. Although images can be used anywhere,
- including the middle of a paragraph, we describe them in this chapter
- since they are most often part of a displayed figure or example.
- @menu
- * Image Syntax::
- * Image Scaling::
- @end menu
- @node Image Syntax
- @subsection Image Syntax
- Here is the synopsis of the @code{@@image} command:
- @example
- @@image@{@var{filename}@r{[,} @var{width}@r{[,} @var{height}@r{[,} @var{alttext}@r{[, }@var{extension}@r{]]]]}@}
- @end example
- @cindex Formats for images
- @cindex Image formats
- The @var{filename} argument is mandatory, and must not have an
- extension, because the different processors support different formats:
- @itemize @bullet
- @item
- @pindex eps image format
- @TeX{} (DVI output) reads the file @file{@var{filename}.eps}
- (Encapsulated PostScript format).
- @item
- @pindex pdftex@r{, and images}
- @pindex png image format
- @pindex jpeg image format
- @pindex pdf image inclusions
- pdf@TeX{} reads @file{@var{filename}.pdf}, @file{@var{filename}.png},
- @file{@var{filename}.jpg}, or @file{@var{filename}.jpeg} (in that
- order). It also tries uppercase versions of the extensions. The PDF
- format does not support EPS images, so such must be converted first.
- @item
- For Info, @code{makeinfo} includes @file{@var{filename}.txt} verbatim
- (more or less as if it were in @code{@@verbatim}). The Info output
- may also include a reference to @file{@var{filename}.png} or
- @file{@var{filename}.jpg}. (See below.)
- @item
- For HTML, @code{makeinfo} outputs a reference to
- @file{@var{filename}.png}, @file{@var{filename}.jpg},
- @file{@var{filename}.jpeg} or @file{@var{filename}.gif} (in that
- order). If none of those exist, it gives an error, and outputs a
- reference to @file{@var{filename}.jpg} anyway.
- @item
- @cindex SVG images, used in Docbook
- For Docbook, @code{makeinfo} outputs references to
- @file{@var{filename}.eps}, @file{@var{filename}.gif}
- @file{@var{filename}.jpeg}, @file{@var{filename}.jpg},
- @file{@var{filename}.pdf}, @file{@var{filename}.png} and
- @file{@var{filename}.svg}, for every file found. Also,
- @file{@var{filename}.txt} is included verbatim, if present. (The
- subsequent Docbook processor is supposed to choose the appropriate one.)
- @item
- For Info and HTML output, @code{makeinfo} uses the optional fifth
- argument @var{extension} to @code{@@image} for the filename extension,
- if it is specified and the file is found. Any leading period should
- be included in @var{extension}. For example:
- @pindex XPM image format
- @example
- @@image@{foo,,,,.xpm@}
- @end example
- @end itemize
- If you want to install image files for use by Info readers too, we
- recommend putting them in a subdirectory like @samp{@var{foo}-figures}
- for a package @var{foo}. Copying the files into
- @code{$(infodir)/@var{foo}-figures/} should be done in your
- @code{Makefile}.
- The @var{width} and @var{height} arguments are described in the next
- section.
- For @TeX{} output, if an image is the only thing in a paragraph it
- will ordinarily be displayed on a line by itself, respecting the
- current environment indentation, but without the normal paragraph
- indentation. If you want it centered, use @code{@@center}
- (@pxref{@code{@@titlefont @@center @@sp}}).
- @cindex Alt attribute for images
- @cindex Images, alternate text for
- @findex @sortas{-} -@r{ (in image alt string)}
- For HTML output, @code{makeinfo} sets the @dfn{alt attribute} for
- inline images to the optional @var{alttext} (fourth) argument to
- @code{@@image}, if supplied. If not supplied, @code{makeinfo} uses
- the full file name of the image being displayed. The @var{alttext} is
- processed as Texinfo text, so special characters such as @samp{"} and
- @samp{<} and @samp{&} are escaped in the HTML output; also, you can
- get an empty @code{alt} string with @code{@@-} (a command that
- produces no output; @pxref{@code{@@- @@hyphenation}}).
- For Info output, the @code{alt} string is also processed as Texinfo
- text and output. In this case, @samp{\} is escaped as @samp{\\} and
- @samp{"} as @samp{\"}; no other escapes are done.
- In Info output, @code{makeinfo} writes a reference to the binary image
- file (trying @var{filename} suffixed with @file{@var{extension}},
- @file{@var{.extension}}, @file{.png}, or @file{.jpg}, in that order)
- if one exists. It also literally includes the @file{.txt} file if one
- exists. This way, Info readers which can display images (such as the
- Emacs Info browser, running under X) can do so, whereas Info readers
- which can only use text (such as the standalone Info reader) can
- display the textual version.
- @cindex @samp{^@@^H} for images in Info
- The implementation of this is to put the following construct into the
- Info output:
- @example
- ^@@^H[image src="@var{binaryfile}" text="@var{txtfile}"
- alt="@var{alttext} ... ^@@^H]
- @end example
- @noindent where @samp{^@@} and @samp{^H} stand for the actual null and
- backspace control characters. If one of the files is not present, the
- corresponding argument is omitted.
- The reason for mentioning this here is that older Info browsers (this
- feature was introduced in Texinfo version 4.6) will display the above
- literally, which, although not pretty, should not be harmful.
- @node Image Scaling
- @subsection Image Scaling
- @cindex Images, scaling
- @cindex Scaling images
- @cindex Width of images
- @cindex Height of images
- @cindex Aspect ratio of images
- @cindex Distorting images
- The optional @var{width} and @var{height} arguments to the
- @code{@@image} command (see the previous section) specify the size to
- which to scale the image. They are only taken into account in @TeX{}.
- If neither is specified, the image is presented in its natural size
- (given in the file); if only one is specified, the other is scaled
- proportionately; and if both are specified, both are respected, thus
- likely distorting the original image by changing its aspect ratio.
- @cindex Dimensions and image sizes
- The @var{width} and @var{height} may be specified using any valid @TeX{}
- dimension, namely:
- @table @asis
- @item pt
- @cindex Points (dimension)
- point (72.27pt = 1in)
- @item pc
- @cindex Picas
- pica (1pc = 12pt)
- @item bp
- @cindex Big points
- big point (72bp = 1in)
- @item in
- @cindex Inches
- inch
- @item cm
- @cindex Centimeters
- centimeter (2.54cm = 1in)
- @item mm
- @cindex Millimeters
- millimeter (10mm = 1cm)
- @item dd
- @cindex Did@^ot points
- did@^ot point (1157dd = 1238pt)
- @item cc
- @cindex Ciceros
- cicero (1cc = 12dd)
- @item sp
- @cindex Scaled points
- scaled point (65536sp = 1pt)
- @end table
- @pindex ridt.eps
- For example, the following will scale a file @file{ridt.eps} to one
- inch vertically, with the width scaled proportionately:
- @example
- @@image@{ridt,,1in@}
- @end example
- @pindex epsf.tex
- For @code{@@image} to work with @TeX{}, the file @file{epsf.tex} must be
- installed somewhere that @TeX{} can find it. (The standard location is
- @file{@var{texmf}/tex/generic/dvips/epsf.tex}, where @var{texmf} is a
- root of your @TeX{} directory tree.) This file is included in the
- Texinfo distribution and is also available from
- @uref{ftp://tug.org/tex/epsf.tex}, among other places.
- @code{@@image} can be used within a line as well as for displayed
- figures. Therefore, if you intend it to be displayed, be sure to leave
- a blank line before the command, or the output will run into the
- preceding text.
- Image scaling is presently implemented only in @TeX{}, not in HTML or
- any other sort of output.
- @node Footnotes
- @section Footnotes
- @cindex Footnotes
- @findex footnote
- A @dfn{footnote} is for a reference that documents or elucidates the
- primary text.@footnote{A footnote should complement or expand upon the
- primary text, but a reader should not need to read a footnote to
- understand the primary text. For a thorough discussion of footnotes,
- see @cite{The Chicago Manual of Style}, which is published by the
- University of Chicago Press.}
- Footnotes are distracting; use them sparingly at most, and it is best
- to avoid them completely. Standard bibliographical references are
- usually better placed in a bibliography at the end of a document
- instead of in footnotes throughout.
- @menu
- * Footnote Commands:: How to write a footnote in Texinfo.
- * Footnote Styles:: Controlling how footnotes appear in Info.
- @end menu
- @node Footnote Commands
- @subsection Footnote Commands
- In Texinfo, footnotes are created with the @code{@@footnote} command.
- This command is followed immediately by a left brace, then by the text
- of the footnote, and then by a terminating right brace. Footnotes may
- be of any length (they will be broken across pages if necessary), but
- are usually short. The template is:
- @example
- ordinary text@@footnote@{@var{text of footnote}@}
- @end example
- As shown here, the @code{@@footnote} command should come right after the
- text being footnoted, with no intervening space; otherwise, the footnote
- marker might end up starting a line.
- For example, this clause is followed by a sample footnote@footnote{Here
- is the sample footnote.}; in the Texinfo source, it looks like
- this:
- @example
- @dots{}a sample footnote@@footnote@{Here is the sample
- footnote.@}; in the Texinfo source@dots{}
- @end example
- As you can see, this source includes two punctuation marks next to
- each other; in this case, @samp{.@};} is the sequence. This is normal
- (the first ends the footnote and the second belongs to the sentence
- being footnoted), so don't worry that it looks odd. (Another style,
- perfectly acceptable, is to put the footnote after punctuation
- belonging to the sentence, as in @samp{;@@footnote@{...}.)
- In a printed manual or book, the reference mark for a footnote is a
- small, superscripted number; the text of the footnote appears at the
- bottom of the page, below a horizontal line.
- In Info, the reference mark for a footnote is a pair of parentheses
- with the footnote number between them, like this: @samp{(1)}. The
- reference mark is followed by a cross-reference link to the footnote
- text if footnotes are put in separate nodes (@pxref{Footnote Styles}).
- In the HTML output, footnote references are generally marked with a
- small, superscripted number which is rendered as a hypertext link to
- the footnote text.
- @cindex Critical editions
- @cindex Nested footnotes
- Footnotes cannot be nested, and cannot appear in section headings of
- any kind or other ``unusual'' places.
- A final tip: footnotes in the argument of an @code{@@item} command for
- an @code{@@table} must be entirely on the same line as the
- @code{@@item} (as usual). @xref{Two-column Tables}.
- @node Footnote Styles
- @subsection Footnote Styles
- Info has two footnote styles, which determine where the text of the
- footnote is located:
- @itemize @bullet
- @cindex @samp{@r{End}} node footnote style
- @item
- In the `End' node style, all the footnotes for a single node are
- placed at the end of that node. The footnotes are separated from the
- rest of the node by a line of dashes with the word @samp{Footnotes}
- within it. Each footnote begins with an @samp{(@var{n})} reference
- mark.
- @need 700
- @noindent
- Here is an example of the Info output for a single footnote in the
- end-of-node style:
- @example
- @group
- --------- Footnotes ---------
- (1) Here is a sample footnote.
- @end group
- @end example
- @cindex @samp{@r{Separate}} footnote style
- @item
- In the `Separate' node style, all the footnotes for a single
- node are placed in an automatically constructed node of
- their own. In this style, a ``footnote reference'' follows
- each @samp{(@var{n})} reference mark in the body of the
- node. The footnote reference is actually a cross-reference
- which you use to reach the footnote node.
- The name of the node with the footnotes is constructed
- by appending @w{@samp{-Footnotes}} to the name of the node
- that contains the footnotes. (Consequently, the footnotes'
- node for the @file{Footnotes} node is
- @w{@file{Footnotes-Footnotes}}!) The footnotes' node has an
- `Up' node pointer that leads back to its parent node.
- @noindent
- Here is how the first footnote in this manual looks after being
- formatted for Info in the separate node style:
- @smallexample
- @group
- File: texinfo.info Node: Overview-Footnotes, Up: Overview
- (1) The first syllable of "Texinfo" is pronounced like "speck", not
- "hex". @dots{}
- @end group
- @end smallexample
- @end itemize
- Unless your document has long and important footnotes (as in, say,
- Gibbon's @cite{Decline and Fall @dots{}}), we recommend the @samp{end}
- style, as it is simpler for readers to follow.
- @findex footnotestyle
- Use the @code{@@footnotestyle} command to specify an Info file's
- footnote style. Write this command at the beginning of a line followed
- by an argument, either @samp{end} for the end node style or
- @samp{separate} for the separate node style.
- @need 700
- For example,
- @example
- @@footnotestyle end
- @end example
- @noindent
- or
- @example
- @@footnotestyle separate
- @end example
- Write a @code{@@footnotestyle} command before or shortly after the
- end-of-header line at the beginning of a Texinfo file. (You should
- include any @code{@@footnotestyle} command between the start-of-header
- and end-of-header lines, so the region formatting commands will format
- footnotes as specified.)
- In HTML, when the footnote style is @samp{end}, or if the output is
- not split, footnotes are put at the end of the output. If set to
- @samp{separate}, and the output is split, they are placed in a
- separate file.
- @node Indices
- @chapter Indices
- @cindex Indices
- Using Texinfo, you can generate indices without having to sort and
- collate entries manually. In an index, the entries are listed in
- alphabetical order, together with information on how to find the
- discussion of each entry. In a printed manual, this information
- consists of page numbers. In an Info file, this information is a menu
- entry leading to the first node referenced.
- Texinfo provides several predefined kinds of index: an index for
- functions, an index for variables, an index for concepts, and so on.
- You can combine indices or use them for other than their canonical
- purpose. Lastly, you can define your own new indices.
- @menu
- * Predefined Indices:: Use different indices for different kinds
- of entries.
- * Indexing Commands:: How to make an index entry.
- * Index Entries:: Choose different words for index entries.
- * Printing Indices & Menus:: How to print an index in hardcopy and
- generate index menus in Info.
- * Combining Indices:: How to combine indices.
- * New Indices:: How to define your own indices.
- @end menu
- @node Predefined Indices
- @section Predefined Indices
- Texinfo provides six predefined indices. Here are their nominal
- meanings, abbreviations, and the corresponding index entry commands:
- @table @samp
- @item cp
- @cindex @code{cp} (concept) index
- @findex cindex
- (@code{@@cindex}) concept index, for general concepts.
- @item fn
- @cindex @code{fn} (function) index
- @findex findex
- (@code{@@findex}) function index, for function and function-like
- names (such as entry points of libraries).
- @item ky
- @cindex @code{ky} (keystroke) index
- @findex kindex
- (@code{@@kindex}) keystroke index, for keyboard commands.
- @item pg
- @cindex @code{pg} (program) index
- @findex pindex
- (@code{@@pindex}) program index, for names of programs.
- @item tp
- @cindex @code{tp} (data type) index
- @findex tindex
- (@code{@@tindex}) data type index, for type names (such as structures
- defined in header files).
- @item vr
- @cindex @code{vr} (variable) index
- @findex vindex
- (@code{@@vindex}) variable index, for variable names (such as global
- variables of libraries).
- @end table
- @noindent
- Not every manual needs all of these, and most manuals use only two or
- three at most. The present manual, for example, has two indices: a
- concept index and an @@-command index (that is actually the function
- index but is called a command index in the chapter heading).
- You are not required to use the predefined indices strictly for their
- canonical purposes. For example, suppose you wish to index some C
- preprocessor macros. You could put them in the function index along
- with actual functions, just by writing @code{@@findex} commands for
- them; then, when you print the ``Function Index'' as an unnumbered
- chapter, you could give it the title `Function and Macro Index' and
- all will be consistent for the reader.
- On the other hand, it is best not to stray too far from the meaning of
- the predefined indices. Otherwise, in the event that your text is
- combined with other text from other manuals, the index entries will
- not match up. Instead, define your own new index (@pxref{New
- Indices}).
- We recommend having a single index in the final document whenever
- possible, however many source indices you use, since then readers have
- only one place to look. Two or more source indices can be combined
- into one output index using the @code{@@synindex} or
- @code{@@syncodeindex} commands (@pxref{Combining Indices}).
- @node Indexing Commands
- @section Defining the Entries of an Index
- @cindex Defining indexing entries
- @cindex Index entries
- @cindex Entries for an index
- @cindex Specifying index entries
- @cindex Creating index entries
- The data to make an index come from many individual indexing commands
- scattered throughout the Texinfo source file. Each command says to add
- one entry to a particular index; after formatting, the index will give
- the current page number or node name as the reference.
- An index entry consists of an indexing command at the beginning of a
- line followed, on the rest of the line, by the entry.
- For example, this section begins with the following five entries for
- the concept index:
- @example
- @@cindex Defining indexing entries
- @@cindex Index entries, defining
- @@cindex Entries for an index
- @@cindex Specifying index entries
- @@cindex Creating index entries
- @end example
- Each predefined index has its own indexing command---@code{@@cindex}
- for the concept index, @code{@@findex} for the function index, and so
- on, as listed in the previous section.
- Index entries should precede the visible material that is being
- indexed. For instance:
- @example
- @@cindex hello
- Hello, there!
- @end example
- @noindent Among other reasons, that way following indexing links (in
- whatever context) ends up before the material, where readers want to
- be, instead of after.
- @cindex Index font types
- By default, entries for a concept index are printed in a small roman
- font and entries for the other indices are printed in a small
- @code{@@code} font. You may change the way part of an entry is
- printed with the usual Texinfo commands, such as @code{@@file} for
- file names (@pxref{Marking Text}), and @code{@@r} for the normal roman
- font (@pxref{Fonts}).
- @findex sortas
- @cindex sort keys for index entries
- @cindex index sorting
- For the printed output, you may specify an explicit sort key for an
- index entry using @code{@@sortas} immediately following the index
- command. For example: @samp{@@findex @@sortas@{\@} \ @@r@{(literal
- \ in @@code@{@@@@math@})} sorts the index entry this produces under
- backslash.
- @vindex txiindexbackslashignore
- @vindex txiindexhyphenignore
- @vindex txiindexlessthanignore
- @vindex txiindexatsignignore
- To reduce the quantity of sort keys you need to provide explicitly,
- you may choose to ignore certain characters in index entries
- for the purposes of sorting. The characters that you can
- currently choose to ignore are @samp{\}, @samp{-}, @samp{<}
- and @samp{@@}, which are ignored by giving as an argument to the
- @code{@@set} command, respectively, @code{txiindexbackslashignore},
- @code{txiindexhyphenignore}, @code{txiindexlessthanignore} and
- @code{txiindexatsignignore}. For example, specifying @samp{@@set
- txiindexbackslashignore} causes the @samp{\mathopsup} entry in the
- index for this manual to be sorted as if it were @samp{mathopsup},
- so that it appears among the other entries beginning `M'.
- @quotation Caution
- Do not use a colon in an index entry. In Info, a colon separates the
- menu entry name from the node name, so a colon in the entry itself
- confuses Info. @xref{Menu Parts}, for more information about the
- structure of a menu entry.
- @end quotation
- @node Index Entries
- @section Making Index Entries
- @cindex Index entries, making
- @cindex Entries, making index
- @cindex Writing index entries
- @cindex Index entries, advice on writing
- @cindex Advice on writing entries
- @cindex Capitalization of index entries
- Concept index entries consist of text. The best way to write an index
- is to devise entries which are terse yet clear. If you can do this,
- the index usually looks better if the entries are written just as they
- would appear in the middle of a sentence, that is, capitalizing only
- proper names and acronyms that always call for uppercase letters.
- This is the case convention we use in most GNU manuals' indices.
- If you don't see how to make an entry terse yet clear, make it longer
- and clear---not terse and confusing. If many of the entries are
- several words long, the index may look better if you use a different
- convention: to capitalize the first word of each entry. Whichever
- case convention you use, use it consistently.
- In any event, do not ever capitalize a case-sensitive name such as a C
- or Lisp function name or a shell command; that would be a spelling
- error. Entries in indices other than the concept index are symbol
- names in programming languages, or program names; these names are
- usually case-sensitive, so likewise use upper- and lowercase as
- required.
- @cindex Unique index entries
- It is a good idea to make index entries unique wherever feasible.
- That way, people using the printed output or online completion of
- index entries don't see undifferentiated lists. Consider this an
- opportunity to make otherwise-identical index entries be more
- specific, so readers can more easily find the exact place they are
- looking for.
- When you are making index entries, it is good practice to think of the
- different ways people may look for something. Different people
- @emph{do not} think of the same words when they look something up. A
- helpful index will have items indexed under all the different words
- that people may use. For example, one reader may think it obvious
- that the two-letter names for indices should be listed under
- ``Indices, two-letter names, since ``Indices'' are the general
- concept. But another reader may remember the specific concept of
- two-letter names and search for the entry listed as ``Two letter names
- for indices''. A good index will have both entries and will help both
- readers.
- Like typesetting, the construction of an index is a skilled art, the
- subtleties of which may not be appreciated until you need to do it
- yourself.
- @node Printing Indices & Menus
- @section Printing Indices and Menus
- @cindex Printing an index
- @cindex Indices, printing and menus
- @cindex Generating menus with indices
- @cindex Menus generated with indices
- To print an index means to include it as part of a manual or Info file.
- This does not happen automatically just because you use @code{@@cindex}
- or other index-entry generating commands in the Texinfo file; those just
- cause the raw data for the index to be accumulated. To generate an
- index, you must include the @code{@@printindex} command at the place in
- the document where you want the index to appear. Also, as part of the
- process of creating a printed manual, you must run a program called
- @code{texindex} (@pxref{Hardcopy}) to sort the raw data to produce a
- sorted index file. The sorted index file is what is actually used to
- print the index.
- Texinfo offers six separate types of predefined index, which suffice
- in most cases. @xref{Indices}, for information on this, as well
- defining your own new indices, combining indices, and, most
- importantly advice on writing the actual index entries. This section
- focuses on printing indices, which is done with the
- @code{@@printindex} command.
- @findex printindex
- @code{@@printindex} takes one argument, a two-letter index
- abbreviation. It reads the corresponding sorted index file (for
- printed output), and formats it appropriately into an index.
- The @code{@@printindex} command does not generate a chapter heading
- for the index, since different manuals have different needs.
- Consequently, you should precede the @code{@@printindex} command with
- a suitable section or chapter command (usually @code{@@appendix} or
- @code{@@unnumbered}) to supply the chapter heading and put the index
- into the table of contents. Precede the chapter heading with an
- @code{@@node} line as usual.
- For example:
- @smallexample
- @group
- @@node Variable Index
- @@unnumbered Variable Index
- @@printindex vr
- @end group
- @group
- @@node Concept Index
- @@unnumbered Concept Index
- @@printindex cp
- @end group
- @end smallexample
- If you have more than one index, we recommend placing the concept index last.
- @itemize
- @item
- In printed output, @code{@@printindex} produces a traditional
- two-column index, with dot leaders between the index terms and page
- numbers.
- @item
- In Info output, @code{@@printindex} produces a special menu containing
- the line number of the entry, relative to the start of the node. Info
- readers can use this to go to the exact line of an entry, not just the
- containing node. (Older Info readers will just go to the node.)
- Here's an example:
- @smallexample
- * First index entry: Top. (line 7)
- @end smallexample
- @noindent The actual number of spaces is variable, to right-justify
- the line number; it's been reduced here to make the line fit in the
- printed manual.
- @item
- In plain text output, @code{@@printindex} produces the same menu, but
- the line numbers are relative to the start of the file, since that's
- more convenient for that format.
- @item
- In HTML output, @code{@@printindex} produces links to the index
- entries.
- @item
- In XML and Docbook output, it simply records the index to be printed.
- @end itemize
- @node Combining Indices
- @section Combining Indices
- @cindex Combining indices
- @cindex Indices, combining them
- Sometimes you will want to combine two disparate indices such as
- functions and concepts, perhaps because you have few enough entries
- that a separate index would look silly.
- You could put functions into the concept index by writing
- @code{@@cindex} commands for them instead of @code{@@findex} commands,
- and produce a consistent manual by printing the concept index with the
- title `Function and Concept Index' and not printing the `Function
- Index' at all; but this is not a robust procedure. It works only if
- your document is never included as part of another document that is
- designed to have a separate function index; if your document were to
- be included with such a document, the functions from your document and
- those from the other would not end up together. Also, to make your
- function names appear in the right font in the concept index, you
- would need to enclose every one of them between the braces of
- @code{@@code}.
- @menu
- * @code{@@syncodeindex}:: How to merge two indices, using @code{@@code}
- font for the merged-from index.
- * @code{@@synindex}:: How to merge two indices, using the
- roman font for the merged-from index.
- @end menu
- @node @code{@@syncodeindex}
- @subsection @code{@@syncodeindex}: Combining indices using @code{@@code}
- @anchor{syncodeindex}@c old name
- @findex syncodeindex
- When you want to combine functions and concepts into one index, you
- should index the functions with @code{@@findex} and index the concepts
- with @code{@@cindex}, and use the @code{@@syncodeindex} command to
- redirect the function index entries into the concept index.
- The @code{@@syncodeindex} command takes two arguments; they are the name
- of the index to redirect, and the name of the index to redirect it to.
- The template looks like this:
- @example
- @@syncodeindex @var{from} @var{to}
- @end example
- @cindex Predefined names for indices
- @cindex Two letter names for indices
- @cindex Indices, two letter names
- @cindex Names for indices
- For this purpose, the indices are given two-letter names:
- @table @samp
- @item cp
- concept index
- @item fn
- function index
- @item vr
- variable index
- @item ky
- key index
- @item pg
- program index
- @item tp
- data type index
- @end table
- Write a @code{@@syncodeindex} command before or shortly after the
- end-of-header line at the beginning of a Texinfo file. For example,
- to merge a function index with a concept index, write the
- following:
- @example
- @@syncodeindex fn cp
- @end example
- @noindent
- This will cause all entries designated for the function index to merge
- in with the concept index instead.
- To merge both a variables index and a function index into a concept
- index, write the following:
- @example
- @group
- @@syncodeindex vr cp
- @@syncodeindex fn cp
- @end group
- @end example
- @cindex Fonts for indices
- The @code{@@syncodeindex} command puts all the entries from the `from'
- index (the redirected index) into the @code{@@code} font, overriding
- whatever default font is used by the index to which the entries are
- now directed. This way, if you direct function names from a function
- index into a concept index, all the function names are printed in the
- @code{@@code} font as you would expect.
- @node @code{@@synindex}
- @subsection @code{@@synindex}: Combining indices
- @anchor{synindex}@c old name
- @findex synindex
- The @code{@@synindex} command is nearly the same as the
- @code{@@syncodeindex} command, except that it does not put the `from'
- index entries into the @code{@@code} font; rather it puts them in the
- roman font. Thus, you use @code{@@synindex} when you merge a concept
- index into a function index.
- @xref{Printing Indices & Menus}, for information about printing an index
- at the end of a book or creating an index menu in an Info file.
- @node New Indices
- @section Defining New Indices
- @cindex Defining new indices
- @cindex Indices, defining new
- @cindex New index defining
- @findex defindex
- @findex defcodeindex
- In addition to the predefined indices (@pxref{Predefined Indices}),
- you may use the @code{@@defindex} and @code{@@defcodeindex} commands
- to define new indices. These commands create new indexing @@-commands
- with which you mark index entries. The @code{@@defindex} command is
- used like this:
- @example
- @@defindex @var{name}
- @end example
- New index names are usually two-letter words, such as @samp{au}.
- For example:
- @example
- @@defindex au
- @end example
- This defines a new index, called the @samp{au} index. At the same
- time, it creates a new indexing command, @code{@@auindex}, that you
- can use to make index entries. Use this new indexing command just as
- you would use a predefined indexing command.
- For example, here is a section heading followed by a concept index
- entry and two @samp{au} index entries.
- @example
- @@section Cognitive Semantics
- @@cindex kinesthetic image schemas
- @@auindex Johnson, Mark
- @@auindex Lakoff, George
- @end example
- @noindent
- (Evidently, @samp{au} serves here as an abbreviation for ``author''.)
- Texinfo constructs the new indexing command by concatenating the name
- of the index with @samp{index}; thus, defining an @samp{xy} index
- leads to the automatic creation of an @code{@@xyindex} command.
- Use the @code{@@printindex} command to print the index, as you do with
- the predefined indices. For example:
- @example
- @group
- @@node Author Index
- @@unnumbered Author Index
- @@printindex au
- @end group
- @end example
- The @code{@@defcodeindex} is like the @code{@@defindex} command,
- except that, in the printed output, it prints entries in an
- @code{@@code} font by default instead of a roman font.
- You should define new indices before the end-of-header line of a
- Texinfo file, and (of course) before any @code{@@synindex} or
- @code{@@syncodeindex} commands (@pxref{Texinfo File Header}).
- As mentioned earlier (@pxref{Predefined Indices}), we recommend having
- a single index in the final document whenever possible, however many
- source indices you use, since then readers have only one place to
- look.
- When creating an index, @TeX{} creates a file whose extension is the
- name of the index (@pxref{Names of index files}). Therefore you
- should avoid using index names that collide with extensions used for
- other purposes, such as @samp{.aux} or @samp{.xml}.
- @command{makeinfo} already reports an error if a new index conflicts
- well-known extension name.
- @node Insertions
- @chapter Special Insertions
- @cindex Inserting special characters and symbols
- @cindex Special insertions
- Texinfo provides several commands for inserting characters that have
- special meaning in Texinfo, such as braces, and for other graphic
- elements that do not correspond to simple characters you can type.
- @iftex
- These are:
- @itemize @bullet
- @item The Texinfo special characters: @samp{@@ @{@} , \ #}.
- @item Whitespace within and around a sentence.
- @item Accents.
- @item Dots and bullets.
- @item The @TeX{} logo and the copyright symbol.
- @item The euro and pounds currency symbols.
- @item The degrees symbol.
- @item The minus sign.
- @item Mathematical expressions.
- @item Glyphs for examples of programming: evaluation, macros, errors, etc.
- @item Footnotes.
- @end itemize
- @end iftex
- @menu
- * Special Characters:: Inserting @@ @{@} , \ #
- * Inserting Quote Characters:: Inserting left and right quotes, in code.
- * Inserting Space:: Inserting the right amount of whitespace.
- * Inserting Accents:: Inserting accents and special characters.
- * Inserting Quotation Marks:: Inserting quotation marks.
- * Inserting Subscripts and Superscripts:: Inserting sub/superscripts.
- * Inserting Math:: Formatting mathematical expressions.
- * Glyphs for Text:: Inserting dots, bullets, currencies, etc.
- * Glyphs for Programming:: Indicating results of evaluation,
- expansion of macros, errors, etc.
- * Inserting Unicode:: Inserting a Unicode character by code point.
- @end menu
- @node Special Characters
- @section Special Characters: Inserting @@ @{@} , \ #
- @anchor{Braces Atsign}@c previous names for this node
- @anchor{Atsign Braces Comma}
- @cindex Special characters, inserting
- @cindex Commands to insert special characters
- @samp{@@} and curly braces are the basic special characters in
- Texinfo. To insert these characters so they appear in text, you must
- put an @samp{@@} in front of these characters to prevent Texinfo from
- misinterpreting them. Alphabetic commands are also provided.
- The other characters (comma, backslash, hash) are special only in
- restricted contexts, as explained in the respective sections.
- @menu
- * Inserting an Atsign:: @code{@@@@}, @code{@@atchar@{@}}.
- * Inserting Braces:: @code{@@@{ @@@}}, @code{@@l rbracechar@{@}}.
- * Inserting a Comma:: , and @code{@@comma@{@}}.
- * Inserting a Backslash:: \ and @code{@@backslashchar@{@}}.
- * Inserting a Hashsign:: # and @code{@@hashchar@{@}}.
- @end menu
- @node Inserting an Atsign
- @subsection Inserting `@@' with @code{@@@@} and @code{@@atchar@{@}}
- @cindex At sign, inserting
- @cindex Inserting @@ @r{(literal @samp{@@})}
- @findex @sortas{@@} @@ @r{(literal @samp{@@})}
- @findex atchar@{@} @r{(literal @samp{@@})}
- @code{@@@@} produces a single @samp{@@} character in the output. Do
- not put braces after an @code{@@@@} command.
- @code{@@atchar@{@}} also produces a single @samp{@@} character in the
- output. It does need following braces, as usual for alphabetic
- commands. In inline conditionals (@pxref{Inline Conditionals}), it
- can be necessary to avoid using the literal @samp{@@} character in the
- source (and may be clearer in other contexts).
- @node Inserting Braces
- @subsection Inserting `@{ `@}' with @code{@@@{ @@@}} and @code{@@l rbracechar@{@}}
- @findex @{ @r{(literal @samp{@{})}
- @findex @} @r{(literal @samp{@}})}
- @findex lbracechar@{@} @r{(literal @samp{@{})}
- @findex rbracechar@{@} @r{(literal @samp{@}})}
- @cindex Braces, inserting
- @code{@@@{} produces a single @samp{@{} in the output, and @code{@@@}}
- produces a single @samp{@}}. Do not put braces after either an
- @code{@@@{} or an @code{@@@}} command.
- @code{@@lbracechar@{@}} and @code{@@rbracechar@{@}} also produce
- single @samp{@{} and @samp{@}} characters in the output. They do need
- following braces, as usual for alphabetic commands. In inline
- conditionals (@pxref{Inline Conditionals}), it can be
- necessary to avoid using literal brace characters in the source (and
- may be clearer in other contexts).
- @node Inserting a Comma
- @subsection Inserting `,' with @code{@@comma@{@}}
- @findex comma
- @cindex Comma, inserting
- Ordinarily, a comma `,' is a normal character that can be simply typed
- in your input where you need it.
- However, Texinfo uses the comma as a special character only in one
- context: to separate arguments to those Texinfo commands, such as
- @code{@@acronym} (@pxref{@code{@@acronym}}) and @code{@@xref}
- (@pxref{Cross References}), as well as user-defined macros
- (@pxref{Defining Macros}), which take more than one argument.
- Since a comma character would confuse Texinfo's parsing for these
- commands, you must use the command @samp{@@comma@{@}} instead if you want
- to pass an actual comma. Here are some examples:
- @example
- @@acronym@{ABC, A Bizarre @@comma@{@}@}
- @@xref@{Comma,, The @@comma@{@} symbol@}
- @@mymac@{One argument@@comma@{@} containing a comma@}
- @end example
- Although @samp{@@comma@{@}} can be used nearly anywhere, there is no
- need for it anywhere except in this unusual case.
- (Incidentally, the name @samp{@@comma} lacks the @samp{char} suffix used
- in its companion commands only for historical reasons. It didn't seem
- important enough to define a synonym.)
- @node Inserting a Backslash
- @subsection Inserting `\' with @code{@@backslashchar@{@}}
- @findex backslashchar
- @cindex Backslash, inserting
- Ordinarily, a backslash `\' is a normal character in Texinfo that can
- be simply typed in your input where you need it. The result is to
- typeset the backslash from the typewriter font.
- However, Texinfo uses the backslash as a special character in one
- restricted context: to delimit formal arguments in the bodies of
- user-defined macros (@pxref{Defining Macros}).
- Due to the vagaries of macro argument parsing, it is more reliable to
- pass an alphabetic command that produces a backslash instead of using
- a literal \. Hence @code{@@backslashchar@{@}}. Here is an example
- macro call:
- @example
- @@mymac@{One argument@@backslashchar@{@} with a backslash@}
- @end example
- @findex \backslash
- Texinfo documents may also use \ as a command character inside
- @code{@@math} (@pxref{Inserting Math}). In this case, @code{@@\} or
- @code{\backslash} produces a ``math'' backslash (from the math symbol
- font), while @code{@@backslashchar@{@}} produces a typewriter
- backslash as usual.
- Although @samp{@@backslashchar@{@}} can be used nearly anywhere, there
- is no need for it except in these unusual cases.
- @node Inserting a Hashsign
- @subsection Inserting `#' with @code{@@hashchar@{@}}
- @findex hashchar@{@} @r{(literal @samp{#})}
- @cindex Inserting #
- @cindex Hash sign, inserting
- Ordinarily, a hash `#' is a normal character in Texinfo that can be
- simply typed in your input where you need it. The result is to
- typeset the hash character from the current font.
- @cindex Number sign, inserting
- @cindex Octotherp, inserting
- @cindex Sharp sign (not), inserting
- This character has many other names, varying by locale, such as
- ``number sign'', ``pound'', and ``octothorp''. It is also sometimes
- called ``sharp'' or ``sharp sign'' since it vaguely resembles the
- musical symbol by that name. In situations where Texinfo is used,
- ``hash'' is the most common in our experience.
- However, Texinfo uses the hash character as a special character in one
- restricted context: to introduce the so-called @code{#line} directive
- and variants (@pxref{External Macro Processors}).
- So, in order to typeset an actual hash character in such a place (for
- example, in a program that needs documentation about @code{#line}),
- it's necessary to use @code{@@hashchar@{@}} or some other construct.
- Here's an example:
- @example
- @@hashchar@{@} 10 "example.c"
- @end example
- Although @samp{@@hashchar@{@}} can be used nearly anywhere, there
- is no need for it anywhere except this unusual case.
- @node Inserting Quote Characters
- @section Inserting Quote Characters
- @cindex Inserting quote characters
- @cindex Quote characters, inserting
- As explained in the early section on general Texinfo input conventions
- (@pxref{Conventions}), Texinfo source files use the ASCII character
- @code{`} (96 decimal) to produce a left quote (`), and ASCII @code{'}
- (39 decimal) to produce a right quote ('). Doubling these input
- characters (@code{``} and @code{''}) produces double quotes (`` and
- ''). These are the conventions used by @TeX{}.
- This works all right for text. However, in examples of computer code,
- readers are especially likely to cut and paste the text
- verbatim---and, unfortunately, some document viewers will mangle these
- characters. (The free PDF reader @command{xpdf} works fine, but other
- PDF readers, both free and nonfree, have problems.)
- If this is a concern for you, Texinfo provides these two commands:
- @table @code
- @item @@codequoteundirected @var{on-off}
- @findex codequoteundirected
- @cindex undirected single quote
- causes the output for the @code{'} character in code environments to
- be the undirected single quote, like this:
- @set txicodequoteundirected on
- @code{'}.
- @set txicodequoteundirected off
- @item @@codequotebacktick @var{on-off}
- @findex codequotebacktick
- @cindex backtick
- @cindex grave accent, standalone
- causes the output for the @code{`} character in code environments to
- be the backtick character (standalone grave accent), like this:
- @set txicodequotebacktick on
- @code{`}.
- @set txicodequotebacktick off
- @end table
- If you want these settings for only part of the document,
- @code{@@codequote... off} will restore the normal behavior, as in
- @code{@@codequoteundirected off}.
- These settings affect @code{@@code}, @code{@@example}, @code{@@kbd},
- @code{@@samp}, @code{@@verb}, and @code{@@verbatim}. @xref{Useful
- Highlighting}.
- @vindex txicodequoteundirected@r{, obsolete variable}
- @vindex txicodequotebacktick@r{, obsolete variable}
- This feature used to be controlled by using @code{@@set} to change the
- values of the corresponding variables @code{txicodequoteundirected}
- and @code{txicodequotebacktick}; they are still supported, but the
- command interface is preferred.
- @node Inserting Space
- @section Inserting Space
- @cindex Inserting space
- @cindex Spacing, inserting
- The following sections describe commands that control spacing of various
- kinds within and after sentences.
- @menu
- * Multiple Spaces:: Inserting multiple spaces.
- * Not Ending a Sentence:: Sometimes a . doesn't end a sentence.
- * Ending a Sentence:: Sometimes it does.
- * @code{@@frenchspacing}:: Specifying end-of-sentence spacing.
- * @code{@@dmn}:: Formatting a dimension.
- @end menu
- @node Multiple Spaces
- @subsection Multiple Spaces
- @cindex Multiple spaces
- @cindex Whitespace, inserting
- @cindex Space, inserting horizontal
- @findex <space>
- @findex <tab>
- @findex <newline>
- Ordinarily, multiple whitespace characters (space, tab, and newline)
- are collapsed into a single space.
- Occasionally, you may want to produce several consecutive spaces,
- either for purposes of example (e.g., what your program does with
- multiple spaces as input), or merely for purposes of appearance in
- headings or lists. Texinfo supports three commands:
- @code{@@@kbd{SPACE}}, @code{@@@kbd{TAB}}, and @code{@@@kbd{NL}}, all
- of which insert a single space into the output. (Here,
- @code{@@@kbd{SPACE}} represents an @samp{@@} character followed by a
- space, i.e., @samp{@@ }, @kbd{TAB} represents an actual tab character,
- and @code{@@@kbd{NL}} represents an @samp{@@} character and end-of-line,
- i.e., when @samp{@@} is the last character on a line.)
- For example,
- @example
- Spacey@@ @@ @@ @@
- example.
- @end example
- @noindent produces
- @example
- Spacey@ @ @ @
- example.
- @end example
- Other possible uses of @code{@@@kbd{SPACE}} have been subsumed by
- @code{@@multitable} (@pxref{Multi-column Tables}).
- Do not follow any of these commands with braces.
- To produce a non-breakable space, see @ref{@code{@@tie}}.
- @node Not Ending a Sentence
- @subsection Not Ending a Sentence
- @cindex Not ending a sentence
- @cindex Sentence non-ending punctuation
- @cindex Periods, inserting
- @cindex Spacing, in the middle of sentences
- When a period, exclamation point or question mark is
- at the end of a sentence, slightly more space is
- inserted after it in a typeset manual.
- @findex <colon> @r{(suppress end-of-sentence space)}
- @findex :
- Usually, Texinfo can determine automatically when a period ends a
- sentence. However, special commands are needed in some circumstances.
- Use the @code{@@:} command after a period, question mark, exclamation
- mark or colon that should not be followed by extra space. This is
- necessary in the following situations:
- @enumerate
- @item After a period that ends a lowercase abbreviation which is not at
- the end of a sentences.
- @item When a parenthetical remark in the middle of a sentence (like
- this one!)@: ends with a period, exclamation point or question mark,
- @code{@@:} should be used after the right parenthesis. Similarly for
- right brackets and right quotes (both single and double).
- @end enumerate
- For example:
- @example
- @samp{foo vs.@@: bar (or?)@@: baz},
- @end example
- @noindent
- The first line below shows the output, and for comparison, the second
- line shows the spacing when the @samp{@@:} commands were not used.
- @quotation
- foo vs.@: bar (or?)@: baz@*
- foo vs. bar (or?) baz
- @end quotation
- @iftex
- If you look carefully, you will see a bit of extraneous space after the
- @samp{vs.}@: and @samp{(or?)}@:.
- @end iftex
- It may help you to remember what @code{@@:} does by imagining that it
- stands for an invisible lower-case character that stops a word ending in
- a period.
- A few Texinfo commands force normal interword spacing, so that you
- don't have to insert @code{@@:} where you otherwise would. These are
- the code-like highlighting commands, @code{@@var}, @code{@@abbr}, and
- @code{@@acronym} (@pxref{Useful Highlighting}). For example, in
- @samp{@@code@{foo. bar@}} the period is not considered to be the end of a
- sentence, and no extra space is inserted.
- @code{@@:} has no effect on the HTML or Docbook output.
- @node Ending a Sentence
- @subsection Ending a Sentence
- @cindex Ending a Sentence
- @cindex Sentence ending punctuation
- @findex . @r{(end of sentence)}
- @findex ! @r{(end of sentence)}
- @findex ? @r{(end of sentence)}
- @cindex Spacing, at ends of sentences
- As mentioned above, Texinfo normally inserts additional space after
- the end of a sentence. It uses the same heuristic for this as @TeX{}:
- a sentence ends with a period, exclamation point, or question mark,
- either preceded or followed by optional closing punctuation, and then
- whitespace, and @emph{not} preceded by a capital letter.
- Use @code{@@.}@: instead of a period, @code{@@!}@: instead of an
- exclamation point, and @code{@@?}@: instead of a question mark at the
- end of a sentence that does end with a capital letter. Do not put
- braces after any of these commands. For example:
- @example
- Give it to M.I.B. and to M.E.W@@. Also, give it to R.J.C@@.
- Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
- @end example
- @noindent
- The output follows. In printed output and Info, you can see the
- desired extra whitespace after the @samp{W} in the first line.
- @quotation
- Give it to M.I.B. and to M.E.W@. Also, give it to R.J.C@.@*
- Give it to M.I.B. and to M.E.W. Also, give it to R.J.C.
- @end quotation
- In the HTML output, @code{@@.}@: is equivalent to a simple @samp{.};
- likewise for @code{@@!}@: and @code{@@?}@:.
- @cindex Closing punctuation, and sentence ending
- The ``closing punctuation'' mentioned above is defined as a right
- parenthesis (@samp{)}, right bracket (@samp{]}), or right quote,
- either single or double (@samp{'} and @samp{''}; the many possible
- additional Unicode right quotes are not included). These characters
- can be thought of as invisible with respect to whether a given period
- ends a sentence. (This is the same rule as @TeX{}.) For instance,
- the periods in @samp{foo.) Bar} and @samp{foo.'' Bar} do end
- sentences.
- The meanings of @code{@@:} and @code{@@.}, etc.@: in Texinfo are
- designed to work well with the Emacs sentence motion commands
- (@pxref{Sentences,,, emacs, The GNU Emacs Manual}). It may help to
- imagine that the @samp{@@} in @samp{@@.}, etc., is an invisible
- lower-case letter `a' which makes an upper-case letter before it
- immaterial for the purposes of deciding whether the period ends the
- sentence.
- A few Texinfo commands are not considered as being an abbreviation,
- even though they may end with a capital letter when expanded, so that
- you don't have to insert @code{@@.} and companions. Notably, this is
- the case for code-like highlighting commands, @code{@@var} arguments
- ending with a capital letter, @code{@@LaTeX}, and @code{@@TeX}. For
- example, that sentence ended with @samp{... @@code@{@@@@TeX@}.};
- @code{@@.} was not needed. Similarly, in
- @code{... @@var@{VARNAME@}. Text} the period after @var{VARNAME} ends
- the sentence; there is no need to use @code{@@.}.
- @node @code{@@frenchspacing}
- @subsection @code{@@frenchspacing} @var{val}: Control Sentence Spacing
- @anchor{frenchspacing}@c old name
- @findex frenchspacing
- @cindex French spacing
- @cindex Sentences, spacing after
- @cindex Space, after sentences
- In American typography, it is traditional and correct to put extra
- space at the end of a sentence. This is the default in Texinfo
- (implemented in Info and printed output; for HTML, we don't try to
- override the browser). In French typography (and others), this extra
- space is wrong; all spaces are uniform.
- Therefore Texinfo provides the @code{@@frenchspacing} command to
- control the spacing after punctuation. It reads the rest of the line
- as its argument, which must be the single word @samp{on} or @samp{off}
- (always these words, regardless of the language of the document).
- Here is an example:
- @example
- @@frenchspacing on
- This is text. Two sentences. Three sentences. French spacing.
- @@frenchspacing off
- This is text. Two sentences. Three sentences. Non-French spacing.
- @end example
- @noindent produces:
- @frenchspacing on
- This is text. Two sentences. Three sentences. French spacing.
- @frenchspacing off
- This is text. Two sentences. Three sentences. Non-French spacing.
- @code{@@frenchspacing} also affects the output after @code{@@.},
- @code{@@!}, and @code{@@?} (@pxref{Ending a Sentence}).
- @code{@@frenchspacing} has no effect on the HTML or Docbook output;
- for XML, it outputs a transliteration of itself (@pxref{Output
- Formats}).
- @node @code{@@dmn}
- @subsection @code{@@dmn}@{@var{dimension}@}: Format a Dimension
- @anchor{dmn}@c old name
- @cindex Thin space between number, dimension
- @cindex Dimension formatting
- @cindex Format a dimension
- @findex dmn
- You can use the @code{@@dmn} command to format a dimension with a
- little extra space in the printed output. That is, on seeing
- @code{@@dmn}, @TeX{} inserts just enough space for proper typesetting;
- in other output formats, the formatting commands insert no space at
- all.
- To use the @code{@@dmn} command, write the number and then follow it
- immediately, with no intervening space, by @code{@@dmn}, and then by
- the dimension within braces. For example,
- @example
- A4 paper is 8.27@@dmn@{in@} wide.
- @end example
- @noindent
- produces
- @quotation
- A4 paper is 8.27@dmn{in} wide.
- @end quotation
- Not everyone uses this style. Some people prefer `8.27@tie{}in.'@: or
- `8.27@tie{}inches'. In these cases, however, you need to use
- @code{@@tie} (@pxref{@code{@@tie}}) or @code{@@w} (@pxref{@code{@@w}})
- so that no line break can occur between the number and the dimension.
- Also, if you write a period after an abbreviation within a sentence
- (as with the `in.'@: above), you should write @samp{@@:} after the
- period to prevent @TeX{} from inserting extra whitespace, as shown
- here. @xref{Not Ending a Sentence}.
- @node Inserting Accents
- @section Inserting Accents
- @cindex Inserting accents
- @cindex Accents, inserting
- @cindex Floating accents, inserting
- Here is a table with the commands Texinfo provides for inserting
- floating accents. They all need an argument, the character to accent,
- which can either be given in braces as usual (@code{@@'@{e@}}), or, as
- a special case, the braces can be omitted, in which case the argument
- is the next character (@code{@@'e}). This is to make the source as
- convenient as possible to type and read, since accented characters are
- very common in some languages.
- If the command is alphabetic, such as @code{@@dotaccent}, then there
- must be a space between the command name and argument if braces are
- not used. If the command is non-alphabetic, such as @code{@@'}, then
- there must @emph{not} be a space; the argument is the very next
- character.
- Exception: the argument to @code{@@tieaccent} must be enclosed in
- braces (since it is two characters instead of one).
- To get the true accented characters output in Info, not just the ASCII
- transliterations, it is necessary to specify @code{@@documentencoding}
- with an encoding which supports the required characters
- (@pxref{@code{@@documentencoding}}). In this case, you can also use
- non-ASCII (e.g., pre-accented) characters in the source file.
- @findex " @r{(umlaut accent)}
- @cindex Umlaut accent
- @findex ' @r{(acute accent)}
- @cindex Acute accent
- @findex = @r{(macron accent)}
- @cindex Macron accent
- @findex ^ @r{(circumflex accent)}
- @cindex Circumflex accent
- @findex ` @r{(grave accent)}
- @cindex Grave accent
- @findex ~ @r{(tilde accent)}
- @cindex Tilde accent
- @findex , @r{(cedilla accent)}
- @cindex Cedilla accent
- @findex dotaccent
- @cindex Dot accent
- @findex H @r{(Hungarian umlaut accent)}
- @cindex Hungarian umlaut accent
- @findex ogonek
- @cindex Ogonek diacritic
- @findex ringaccent
- @cindex Ring accent
- @findex tieaccent
- @cindex Tie-after accent
- @findex u @r{(breve accent)}
- @cindex Breve accent
- @findex ubaraccent
- @cindex Underbar accent
- @findex udotaccent
- @cindex Underdot accent
- @findex v @r{(caron)}
- @cindex Hacek accent
- @cindex Check accent
- @cindex Caron
- @multitable {@t{@@questiondown@{@}}} {Output} {caron/hacek/check accent}
- @headitem Command @tab Output @tab What
- @item @t{@@"o} @tab @"o @tab umlaut accent
- @item @t{@@'o} @tab @'o @tab acute accent
- @item @t{@@,@{c@}} @tab @,{c} @tab cedilla accent
- @item @t{@@=o} @tab @=o @tab macron/overbar accent
- @item @t{@@^o} @tab @^o @tab circumflex accent
- @item @t{@@`o} @tab @`o @tab grave accent
- @item @t{@@~o} @tab @~o @tab tilde accent
- @item @t{@@dotaccent@{o@}} @tab @dotaccent{o} @tab overdot accent
- @item @t{@@H@{o@}} @tab @H{o} @tab long Hungarian umlaut
- @item @t{@@ogonek@{a@}} @tab @ogonek{a} @tab ogonek
- @item @t{@@ringaccent@{o@}} @tab @ringaccent{o} @tab ring accent
- @item @t{@@tieaccent@{oo@}} @tab @tieaccent{oo} @tab tie-after accent
- @item @t{@@u@{o@}} @tab @u{o} @tab breve accent
- @item @t{@@ubaraccent@{o@}} @tab @ubaraccent{o} @tab underbar accent
- @item @t{@@udotaccent@{o@}} @tab @udotaccent{o} @tab underdot accent
- @item @t{@@v@{o@}} @tab @v{o} @tab caron/hacek/check accent
- @end multitable
- This table lists the Texinfo commands for inserting other characters
- commonly used in languages other than English.
- @findex questiondown
- @cindex @questiondown{}
- @findex exclamdown
- @cindex @exclamdown{}
- @findex aa
- @cindex @aa{}
- @findex AA
- @cindex @AA{}
- @findex ae
- @cindex @ae{}
- @findex AE
- @cindex @AE{}
- @cindex Icelandic
- @cindex Eth
- @findex dh
- @cindex @dh{}
- @findex DH
- @cindex @DH{}
- @findex dotless
- @cindex @dotless{i} (dotless i)
- @cindex @dotless{j} (dotless j)
- @cindex Dotless i, j
- @findex l
- @cindex @l{}
- @findex L
- @cindex @L{}
- @findex o
- @cindex @o{}
- @findex O
- @cindex @O{}
- @findex oe
- @cindex @oe{}
- @findex OE
- @cindex @OE{}
- @cindex Romance ordinals
- @cindex Ordinals, Romance
- @cindex Feminine ordinal
- @findex ordf
- @cindex @ordf{}
- @cindex Masculine ordinal
- @findex ordm
- @cindex @ordm{}
- @findex ss
- @cindex @ss{}
- @cindex Es-zet
- @cindex Sharp S
- @cindex German S
- @cindex Thorn
- @findex th
- @cindex @th{}
- @findex TH
- @cindex @TH{}
- @multitable {@t{@@questiondown@{@}}} {oe OE} {es-zet or sharp S}
- @item @t{@@exclamdown@{@}} @tab @exclamdown{} @tab upside-down !
- @item @t{@@questiondown@{@}} @tab @questiondown{} @tab upside-down ?
- @item @t{@@aa@{@} @@AA@{@}} @tab @aa{} @AA{} @tab a,A with circle
- @item @t{@@ae@{@} @@AE@{@}} @tab @ae{} @AE{} @tab ae,AE ligatures
- @item @t{@@dh@{@} @@DH@{@}} @tab @dh{} @DH{} @tab Icelandic eth
- @item @t{@@dotless@{i@}} @tab @dotless{i} @tab dotless i
- @item @t{@@dotless@{j@}} @tab @dotless{j} @tab dotless j
- @item @t{@@l@{@} @@L@{@}} @tab @l{} @L{} @tab suppressed-L,l
- @item @t{@@o@{@} @@O@{@}} @tab @o{} @O{} @tab O,o with slash
- @item @t{@@oe@{@} @@OE@{@}} @tab @oe{} @OE{} @tab oe,OE ligatures
- @item @t{@@ordf@{@} @@ordm@{@}} @tab @ordf{} @ordm{} @tab Spanish ordinals
- @item @t{@@ss@{@}} @tab @ss{} @tab es-zet or sharp S
- @item @t{@@th@{@} @@TH@{@}} @tab @th{} @TH{} @tab Icelandic thorn
- @end multitable
- @node Inserting Quotation Marks
- @section Inserting Quotation Marks
- @cindex Inserting quotation marks
- @cindex Quotation marks, inserting
- @cindex Quotation characters (`'), in source
- Use doubled single-quote characters to begin and end quotations:
- @w{@t{`@w{}`@dots{}'@w{}'}}. @TeX{} converts two single quotes to
- left- and right-hand doubled quotation marks,
- @c this comes out as "like this" in Info, which is just confusing.
- @iftex
- ``like this'',
- @end iftex
- and Info converts doubled single-quote characters to ASCII
- double-quotes: @w{@t{`@w{}`@dots{}'@w{}'}} becomes @w{@t{"@dots{}"}}.
- You may occasionally need to produce two consecutive single quotes;
- for example, in documenting a computer language such as Maxima where
- @t{'@w{}'} is a valid command. You can do this with the input
- @t{'@@w@{@}'}; the empty @code{@@w} command stops the combination into
- the double-quote characters.
- @cindex Unicode quotation characters
- @cindex Grave accent, vs. left quote
- The left quote character (@t{`}, ASCII code 96) used in Texinfo is a
- grave accent in ANSI and ISO character set standards. We use it as a
- quote character because that is how @TeX{} is set up, by default.
- Texinfo supports several other quotation marks used in languages other
- than English. Below is a table with the commands Texinfo provides for
- inserting quotation marks.
- @cindex UTF-8
- @cindex ISO 8859-15
- @cindex Latin 9
- @cindex ISO 8859-1
- @cindex Latin 1
- In order to get the symbols for the quotation marks in encoded Info
- output, it is necessary to specify @code{@@documentencoding UTF-8}.
- (@xref{@code{@@documentencoding}}.) Double guillemets are also
- present in ISO 8859-1 (aka Latin@tie{}1) and ISO 8859-15 (aka
- Latin@tie{}9).
- @cindex European Computer Modern fonts
- @cindex EC fonts
- The standard @TeX{} fonts support the usual quotation marks used in
- English (the ones produced with single and doubled ASCII
- single-quotes). For the other quotation marks, @TeX{} uses European
- Computer Modern (EC) fonts (@file{ecrm1000} and other variants).
- These fonts are freely available, of course; you can download them
- from @url{http://ctan.org/pkg/ec}, among other places.
- @cindex CM-Super fonts
- The free EC fonts are bitmap fonts created with Metafont. Especially
- for on-line viewing, Type@tie{}1 (vector) versions of the fonts are
- preferable; these are available in the CM-Super font package
- (@url{http://ctan.org/pkg/cm-super}).
- Both distributions include installation instructions.
- @cindex Single quotation marks
- @cindex Double quotation marks
- @cindex Left quotation marks
- @cindex Right quotation marks
- @findex quotedblleft
- @cindex `@w{}`
- @findex quoteleft
- @cindex `
- @cindex " (undirected double quote character)
- @findex quotedblright
- @cindex '@w{}'
- @findex quoteright
- @cindex '
- @cindex Double low-9 quotation mark
- @cindex Single low-9 quotation mark
- @findex quotedblbase
- @cindex @quotedblbase{} (double low-9 quotation mark)
- @findex quotesinglbase
- @cindex @quotesinglbase{} (single low-9 quotation mark)
- @cindex Angle quotation marks
- @cindex Guillemets
- @cindex Guillemots
- @cindex French quotation marks
- @cindex Quotation marks, French
- @cindex German quotation marks
- @cindex Quotation marks, German
- @cindex Double guillemets
- @cindex Single guillemets
- @cindex Double angle quotation marks
- @cindex Single angle quotation marks
- @cindex Left-pointing angle quotation marks
- @cindex Right-pointing angle quotation marks
- @cindex Double left-pointing angle quotation mark
- @cindex Double right-pointing angle quotation mark
- @cindex Single left-pointing angle quotation mark
- @cindex Single right-pointing angle quotation mark
- @findex guillemetleft
- @findex guillemotleft
- @cindex @sortas{<<} @guillemetleft{}
- @findex guillemetright
- @findex guillemotright
- @cindex @guillemetright{}
- @findex guilsinglleft
- @cindex @sortas{<} @guilsinglleft{}
- @findex guilsinglright
- @cindex @guilsinglright{}
- @c The third column doesn't have the full text in the prototype so that
- @c the Info output fits within 72 columns.
- @multitable {@t{@@quotedblright@{@} '@w{}'}} {Glyph} {Right-pointing double angle quotation}
- @headitem Command @tab Glyph @tab Unicode name (point)
- @item @verb{.@quotedblleft{} ``.} @tab @quotedblleft{} @tab Left double quotation mark (U+201C)
- @item @verb{.@quotedblright{} ''.} @tab @quotedblright{} @tab Right double quotation mark (U+201D)
- @item @verb{.@quoteleft{} `.} @tab @quoteleft{} @tab Left single quotation mark (U+2018)
- @item @verb{.@quoteright{} '.} @tab @quoteright{} @tab Right single quotation mark (U+2019)
- @item @t{@@quotedblbase@{@}} @tab @quotedblbase{} @tab Double low-9 quotation mark (U+201E)
- @item @t{@@quotesinglbase@{@}} @tab @quotesinglbase{} @tab Single low-9 quotation mark (U+201A)
- @item @t{@@guillemetleft@{@}} @tab @guillemetleft{} @tab Left-pointing double angle quotation mark (U+00AB)
- @item @t{@@guillemetright@{@}} @tab @guillemetright{} @tab Right-pointing double angle quotation mark (U+00BB)
- @item @t{@@guilsinglleft@{@}} @tab @guilsinglleft{} @tab Single left-pointing angle quotation mark (U+2039)
- @item @t{@@guilsinglright@{@}} @tab @guilsinglright{} @tab Single right-pointing angle quotation mark (U+203A)
- @end multitable
- @cindex Auk, bird species
- For the double angle quotation marks, Adobe and @LaTeX{} glyph names
- are also supported: @code{@@guillemotleft} and
- @code{@@guillemotright}. These names are incorrect; a
- ``guillemot'' is a bird species (a type of auk).
- Traditions for quotation mark usage vary to a great extent between
- languages (@url{http://en.wikipedia.org/wiki/Quotation_mark}).
- Texinfo does not provide commands or configurations for typesetting
- quotation marks according to the numerous traditions. Therefore, you
- have to choose the commands appropriate for the language of your
- manual. Sometimes aliases (@pxref{@code{@@alias}}) can simplify the
- usage and make the source code more readable. For example, in German,
- @code{@@quotedblbase} is used for the left double quote, and the right
- double quote is the glyph produced by @code{@@quotedblleft}, which is
- counter-intuitive. Thus, in this case the following aliases would be
- convenient:
- @example
- @@alias lgqq = quotedblbase
- @@alias rgqq = quotedblleft
- @end example
- @node Inserting Subscripts and Superscripts
- @section @code{@@sub} and @code{@@sup}: Inserting Subscripts and Superscripts
- @findex sub
- @findex sup
- @cindex Subscripts and superscripts, text
- You can insert subscripts and superscripts, in either text or math,
- with the @code{@@sub} and @code{@@sup} commands. (For other
- mathematical expressions, see the next section.) For example, here is
- a purely textual subscript and superscript:
- @example
- here@@sub@{below@}@@sup@{above@}
- @end example
- @noindent produces:
- @display
- here@sub{below}@sup{above}
- @end display
- @cindex Math italic font
- Inside @code{@@math}, @code{@@sub} and @code{@@sup} produce
- mathematical subscripts and superscripts. This uses a different font
- in the @TeX{} output (math italic instead of text italic); it makes no
- difference in the other output formats. Here's an example:
- @example
- @@math@{e@@sup@{x@}@}
- @end example
- @noindent produces:
- @display
- @math{e@sup{x}}
- @end display
- In Info and plain text, regardless of being used inside @code{@@math},
- @code{@@sub@{@var{text}@}} is output as @samp{_@{@var{text}@}} and
- @code{@@sup@{@var{text}@}} as @samp{^@{@var{text}@}}, including the
- literal braces (to mark the beginning and end of the ``script'' text
- to the reader).
- When the output format (and display program) permit (@TeX{} math,
- HTML), the superscript is set above the subscript when both commands
- are given consecutively.
- @node Inserting Math
- @section @code{@@math}: Inserting Mathematical Expressions
- @anchor{math}@c old name
- @findex math
- @cindex Mathematical expressions, inserting
- @cindex Formulas, mathematical
- You can write a short mathematical expression with the @code{@@math}
- command. Write the mathematical expression between braces, like this:
- @example
- @@math@{(a + b) = (b + a)@}
- @end example
- @iftex
- @noindent This produces the following in @TeX{}:
- @display
- @math{(a + b) = (b + a)}
- @end display
- @noindent and the following in other formats:
- @end iftex
- @ifnottex
- @noindent This produces the following in Info and HTML:
- @end ifnottex
- @example
- (a + b) = (b + a)
- @end example
- @cindex MathML, not used
- The @code{@@math} command has no special effect on the Info and HTML
- output. @command{makeinfo} expands any @@-commands as usual, but it
- does not try to use produce good mathematical formatting in any way
- (no use of MathML, etc.). The HTML output is enclosed by
- @code{<em>...</em>}, but nothing more.
- @findex \mathopsup
- However, as far as the @TeX{} output is concerned, plain @TeX{}
- mathematical commands are allowed in @code{@@math}, starting with
- @samp{\}. In essence, @code{@@math} switches into plain @TeX{} math
- mode. (Exception: the plain @TeX{} command @code{\sup}, which
- typesets the mathematical operator name `sup', must be accessed as
- @code{\mathopsup}, due to the conflict with Texinfo's @code{@@sup}
- command.)
- This allows you to use all the plain @TeX{} math control sequences for
- symbols, functions, and so on, and thus get proper formatting in the
- @TeX{} output, at least.
- The @code{@@sub} and @code{@@sup} commands described in the previous
- section produce subscripts and superscripts in HTML output as well as
- @TeX{}; the plain @TeX{} characters @code{_} and @code{^} for
- subscripts and superscripts are recognized by @TeX{} inside
- @code{@@math}, but do nothing special in HTML or other output formats.
- It's best to use @samp{\} instead of @samp{@@} for any such
- mathematical commands; otherwise, @command{makeinfo} will complain.
- On the other hand, @command{makeinfo} does allow input with matching
- (but unescaped) braces, such as @samp{k_@{75@}}; it complains about
- such bare braces in regular input.
- Here's an example:
- @example
- @@math@{\sin 2\pi \equiv \cos 3\pi@}
- @end example
- @iftex
- @noindent which looks like this in @TeX{}:
- @display
- @math{\sin 2\pi \equiv \cos 3\pi}
- @end display
- @noindent but
- @end iftex
- @noindent which looks like the input in Info and HTML:
- @example
- \sin 2\pi \equiv \cos 3\pi
- @end example
- @findex @sortas{\} \ @r{(literal \ in @code{@@math})}
- Since @samp{\} is an escape character inside @code{@@math}, you can
- use @code{@@\} to get a literal backslash (@code{\\} will work in
- @TeX{}, but you'd get the literal two characters @samp{\\} in Info).
- @code{@@\} is not defined outside of @code{@@math}, since a @samp{\}
- ordinarily produces a literal (typewriter) @samp{\}. You can also use
- @code{@@backslashchar@{@}} in any mode to get a typewriter backslash.
- @xref{Inserting a Backslash}.
- @cindex Displayed equations
- @cindex Equations, displayed
- For displayed equations, you must at present use @TeX{} directly
- (@pxref{Raw Formatter Commands}).
- @node Glyphs for Text
- @section Glyphs for Text
- @anchor{Glyphs}@c old name
- @anchor{TeX and copyright}@c another old node, now split into two
- @cindex Glyphs for text
- @cindex Textual glyphs
- Texinfo has support for a few additional glyphs that are commonly used
- in printed text but not available in ASCII@. Of course, there are
- many thousands more. It is possible to use Unicode characters as-is
- as far as @code{makeinfo} is concerned, but @TeX{} is not so lucky.
- @menu
- * @code{@@TeX @@LaTeX}:: The @TeX{} logos.
- * @code{@@copyright}:: The copyright symbol (c in a circle).
- * @code{@@registeredsymbol}:: The registered symbol (R in a circle).
- * @code{@@dots}:: How to insert ellipses: @dots{} and @enddots{}
- * @code{@@bullet}:: How to insert a bullet: @bullet{}
- * @code{@@euro}:: How to insert the euro currency symbol.
- * @code{@@pounds}:: How to insert the pounds currency symbol.
- * @code{@@textdegree}:: How to insert the degrees symbol.
- * @code{@@minus}:: How to insert a minus sign.
- * @code{@@geq @@leq}:: How to insert greater/less-than-or-equal signs.
- @end menu
- @node @code{@@TeX @@LaTeX}
- @subsection @code{@@TeX}@{@} (@TeX{}) and @code{@@LaTeX}@{@} (@LaTeX{})
- @anchor{tex}@c old name
- @findex TeX
- @findex LaTeX
- @cindex Logos, @TeX{}
- @cindex @TeX{} logo
- @cindex @LaTeX{} logo
- Use the @code{@@TeX@{@}} command to generate `@TeX{}'. In a printed
- manual, this is a special logo that is different from three ordinary
- letters. In Info, it just looks like @samp{TeX}.
- Similarly, use the @code{@@LaTeX@{@}} command to generate `@LaTeX{}',
- which is even more special in printed manuals (and different from the
- incorrect @code{La@@TeX@{@}}. In Info, the result is just
- @samp{LaTeX}. (@LaTeX{} is another macro package built on top of
- @TeX{}, very loosely analogous to Texinfo in that it emphasizes
- logical structure, but much (much) larger.)
- The spelling of these commands are unusual for Texinfo, in that they
- use both uppercase and lowercase letters.
- @node @code{@@copyright}
- @subsection @code{@@copyright@{@}} (@copyright{})
- @anchor{copyright symbol}@c old name
- @findex copyright
- @cindex Copyright symbol
- Use the @code{@@copyright@{@}} command to generate the copyright
- symbol, `@copyright{}'. Where possible, this is a @samp{c} inside a
- circle; in Info, this is @samp{(C)}.
- Legally, it's not necessary to use the copyright symbol; the English
- word `Copyright' suffices, according to international treaty.
- @node @code{@@registeredsymbol}
- @subsection @code{@@registeredsymbol@{@}} (@registeredsymbol{})
- @anchor{registered symbol}@c old name
- @findex registeredsymbol
- @cindex Registered symbol
- Use the @code{@@registeredsymbol@{@}} command to generate the
- registered symbol, `@registeredsymbol{}'. Where possible, this is an
- @samp{R} inside a circle; in Info, this is @samp{(R)}.
- @node @code{@@dots}
- @subsection @code{@@dots} (@dots{}) and @code{@@enddots} (@enddots{})
- @anchor{dots}@c old name
- @findex dots
- @findex enddots
- @cindex Inserting dots
- @cindex Inserting ellipsis
- @cindex Dots, inserting
- @cindex Ellipsis, inserting
- @anchor{Dots Bullets}@c old name
- An @dfn{ellipsis} (a sequence of dots) would be spaced wrong when
- typeset as a string of periods, so a special command is used in
- Texinfo: use the @code{@@dots@{@}} command to generate a normal
- ellipsis, which is three dots in a row, appropriately spaced @dots{}
- like so. To emphasize: do not simply write three periods in the input
- file; that would work for the Info file output, but would produce the
- wrong amount of space between the periods in the printed manual.
- The @code{@@enddots@{@}} command generates an end-of-sentence
- ellipsis, which also has three dots, but with different spacing
- afterwards, @enddots{} Look closely to see the difference.
- Here is an ellipsis: @dots{}
- Here are three periods in a row: ...
- In printed (and usually HTML) output, the three periods in a row are
- much closer together than the dots in the ellipsis.
- @node @code{@@bullet}
- @subsection @code{@@bullet} (@bullet{})
- @anchor{bullet}@c old name
- @findex bullet
- Use the @code{@@bullet@{@}} command to generate a large round dot, or
- the closest possible thing to one. In Info, an asterisk is used.
- Here is a bullet: @bullet{}
- When you use @code{@@bullet} in @code{@@itemize}, you do not need to
- type the braces, because @code{@@itemize} supplies them.
- (@pxref{@code{@@itemize}}).
- @node @code{@@euro}
- @subsection @code{@@euro} (@euro{}): Euro Currency Symbol
- @anchor{euro}@c old name
- @findex euro
- @cindex Euro symbol, producing
- Use the @code{@@euro@{@}} command to generate `@euro{}'. Where
- possible, this is the symbol for the Euro currency. Otherwise, the
- word @samp{Euro} is used.
- Texinfo cannot magically synthesize support for the Euro symbol where
- the underlying system (fonts, software, whatever) does not support it.
- Therefore, you may find it preferable to use the word ``Euro''. (In
- banking contexts, the abbreviation for the Euro is EUR@.)
- @cindex ISO 8859-15, and Euro
- @cindex Latin 9, and Euro
- In order to get the Euro symbol in encoded Info output, for example,
- it is necessary to specify @code{@@documentencoding ISO-8859-15} or
- @code{@@documentencoding UTF-8} (@xref{@code{@@documentencoding}}.)
- The Euro symbol is in ISO 8859-15 (aka Latin@tie{}9), and is
- @emph{not} in the more widely-used ISO 8859-1 (Latin@tie{}1).
- @pindex feymr10
- @cindex Euro font
- The Euro symbol does not exist in the standard @TeX{} fonts (which
- were designed before the Euro was legislated into existence).
- Therefore, @TeX{} uses an additional font, named @code{feymr10} (along
- with other variables). It is freely available, of course; you can
- download it from @url{http://ctan.org/pkg/eurosym}, among other
- places. The distribution includes installation instructions.
- @node @code{@@pounds}
- @subsection @code{@@pounds} (@pounds{}): Pounds Sterling
- @anchor{pounds}@c old name
- @findex pounds
- @cindex Pounds symbol
- Use the @code{@@pounds@{@}} command to generate `@pounds{}'. Where
- possible, this is the symbol for the pounds sterling British currency.
- Otherwise, it is @samp{#}.
- @node @code{@@textdegree}
- @subsection @code{@@textdegree} (@textdegree{}): Degrees Symbol
- @anchor{textdegree}@c old name
- @findex textdegree
- @cindex Degree symbol
- Use the @code{@@textdegree@{@}} command to generate `@textdegree{}'.
- Where possible, this is the normal symbol for degrees. Otherwise,
- it is an @samp{o}.
- @node @code{@@minus}
- @subsection @code{@@minus} (@minus{}): Inserting a Minus Sign
- @anchor{minus}@c old name
- @findex minus
- @cindex Minus sign
- @cindex Em dash, compared to minus sign
- @cindex Hyphen, compared to minus
- Use the @code{@@minus@{@}} command to generate a minus sign. In a
- fixed-width font, this is a single hyphen, but in a proportional font,
- the symbol is the customary length for a minus sign---a little longer
- than a hyphen, shorter than an em-dash:
- @display
- @samp{@minus{}} is a minus sign generated with @samp{@@minus@{@}},
- `-' is a hyphen generated with the character @samp{-},
- `---' is an em-dash for text.
- @end display
- @noindent
- In the fixed-width font used by Info, @code{@@minus@{@}} is the same
- as a hyphen.
- You should not use @code{@@minus@{@}} inside @code{@@code} or
- @code{@@example} because the width distinction is not made in the
- fixed-width font they use.
- When you use @code{@@minus} to specify the mark beginning each entry
- in an itemized list, you do not need to type the braces
- (@pxref{@code{@@itemize}}).
- If you actually want to typeset some math that does a subtraction, it
- is better to use @code{@@math}. Then the regular @samp{-} character
- produces a minus sign, as in @code{@@math@{a-b@}} (@pxref{Inserting
- Math}).
- @node @code{@@geq @@leq}
- @subsection @code{@@geq} (@geq{}) and @code{@@leq} (@leq{}): Inserting Relations
- @anchor{geq leq}@c old name
- @findex geq
- @findex leq
- Use the @code{@@geq@{@}} and @code{@@leq@{@}} commands to generate
- greater-than-or-equal and less-than-equal-signs, `@geq{}' and
- `@leq{}'. When those symbols are not available, the ASCII sequences
- @samp{>=} and @samp{<=} are output.
- @node Glyphs for Programming
- @section Glyphs for Programming
- @cindex Glyphs for programming
- @cindex Examples, glyphs for
- @cindex Programming, glyphs for
- In Texinfo, code is often illustrated in examples that are delimited
- by @code{@@example} and @code{@@end example}, or by @code{@@lisp} and
- @code{@@end lisp}. In such examples, you can indicate the results of
- evaluation or an expansion using @samp{@result{}} or
- @samp{@expansion{}}. Likewise, there are commands to insert glyphs to
- indicate printed output, error messages, equivalence of expressions,
- the location of point in an editor, and GUI operation sequences.
- The glyph-insertion commands do not need to be used within an example,
- but most often they are. All glyph-insertion commands are followed by
- empty braces.
- @menu
- * Glyphs Summary::
- * @code{@@result}:: How to show the result of expression.
- * @code{@@expansion}:: How to indicate an expansion.
- * @code{@@print}:: How to indicate generated output.
- * @code{@@error}:: How to indicate an error message.
- * @code{@@equiv}:: How to indicate equivalence.
- * @code{@@point}:: How to indicate the location of point.
- * Click Sequences:: Inserting GUI usage sequences.
- @end menu
- @node Glyphs Summary
- @subsection Glyphs Summary
- Here is a summary of the glyph commands:
- @table @asis
- @item @result{}
- @code{@@result@{@}} indicates the result of an expression.
- @item @expansion{}
- @code{@@expansion@{@}} indicates the results of a macro expansion.
- @item @print{}
- @code{@@print@{@}} indicates printed output.
- @item @error{}
- @code{@@error@{@}} indicates the following text is an error message.
- @item @equiv{}
- @code{@@equiv@{@}} indicates the exact equivalence of two forms.
- @item @point{}
- @code{@@point@{@}} shows the location of point.
- @item @clicksequence{A @click{} B}
- @code{@@clicksequence@{A @@click@{@} B} indicates a GUI operation
- sequence: first A, then clicking B, or choosing B from a menu, or
- otherwise selecting it.
- @end table
- @node @code{@@result}
- @subsection @code{@@result@{@}} (@result{}): Result of an Expression
- @anchor{result}@c old name
- @findex result
- @cindex Result of an expression
- @cindex Indicating evaluation
- @cindex Evaluation glyph
- @cindex Value of an expression, indicating
- Use the @code{@@result@{@}} command to indicate the result of
- evaluating an expression.
- The @code{@@result@{@}} command is displayed as @samp{@result{}},
- either a double stemmed arrow or (when that is not available) the
- ASCII sequence @samp{=>}.
- Thus, the following,
- @lisp
- (cdr '(1 2 3))
- @result{} (2 3)
- @end lisp
- @noindent
- may be read as ``@code{(cdr '(1 2 3))} evaluates to @code{(2 3)}''.
- @node @code{@@expansion}
- @subsection @code{@@expansion@{@}} (@expansion{}): Indicating an Expansion
- @anchor{expansion}@c old name
- @cindex Expansion, indicating
- @cindex Macro expansion, indicating
- @findex expansion
- When an expression is a macro call, it expands into a new expression.
- You can indicate the result of the expansion with the
- @code{@@expansion@{@}} command.
- The @code{@@expansion@{@}} command is displayed as
- @samp{@expansion{}}, either a long arrow with a flat base or (when
- that is not available) the ASCII sequence @samp{==>}.
- @need 700
- For example, the following
- @example
- @group
- @@lisp
- (third '(a b c))
- @@expansion@{@} (car (cdr (cdr '(a b c))))
- @@result@{@} c
- @@end lisp
- @end group
- @end example
- @noindent
- produces
- @lisp
- @group
- (third '(a b c))
- @expansion{} (car (cdr (cdr '(a b c))))
- @result{} c
- @end group
- @end lisp
- @noindent
- which may be read as:
- @quotation
- @code{(third '(a b c))} expands to @code{(car (cdr (cdr '(a b c))))};
- the result of evaluating the expression is @code{c}.
- @end quotation
- @noindent
- Often, as in this case, an example looks better if the
- @code{@@expansion@{@}} and @code{@@result@{@}} commands are indented.
- @node @code{@@print}
- @subsection @code{@@print@{@}} (@print{}): Indicating Generated Output
- @anchor{Print Glyph}@c old name
- @findex print
- @cindex Printed output, indicating
- Sometimes an expression will generate output during its execution.
- You can indicate such displayed output with the @code{@@print@{@}}
- command.
- The @code{@@print@{@}} command is displayed as @samp{@print{}}, either
- a horizontal dash butting against a vertical bar or (when that is not
- available) the ASCII sequence @samp{-|}.
- In the following example, the printed text is indicated with
- @samp{@print{}}, and the value of the expression follows on the
- last line.
- @lisp
- @group
- (progn (print 'foo) (print 'bar))
- @print{} foo
- @print{} bar
- @result{} bar
- @end group
- @end lisp
- @noindent
- In a Texinfo source file, this example is written as follows:
- @lisp
- @group
- @@lisp
- (progn (print 'foo) (print 'bar))
- @@print@{@} foo
- @@print@{@} bar
- @@result@{@} bar
- @@end lisp
- @end group
- @end lisp
- @node @code{@@error}
- @subsection @code{@@error@{@}} (@error{}): Indicating an Error Message
- @anchor{Error Glyph}@c old name
- @cindex Error message, indicating
- @findex error
- A piece of code may cause an error when you evaluate it. You can
- designate the error message with the @code{@@error@{@}} command.
- The @code{@@error@{@}} command is displayed as @samp{@error{}}, either
- the word `error' in a box in the printed output, the word error
- followed by an arrow in other formats or (when no arrow is available)
- @samp{error-->}.
- @need 700
- Thus,
- @example
- @@lisp
- (+ 23 'x)
- @@error@{@} Wrong type argument: integer-or-marker-p, x
- @@end lisp
- @end example
- @noindent
- produces
- @lisp
- (+ 23 'x)
- @error{} Wrong type argument: integer-or-marker-p, x
- @end lisp
- @noindent
- This indicates that the following error message is printed
- when you evaluate the expression:
- @lisp
- Wrong type argument: integer-or-marker-p, x
- @end lisp
- The word @samp{@error{}} itself is not part of the error message.
- @node @code{@@equiv}
- @subsection @code{@@equiv@{@}} (@equiv{}): Indicating Equivalence
- @anchor{Equivalence}@c oldname
- @cindex Equivalence, indicating
- @findex equiv
- Sometimes two expressions produce identical results. You can indicate
- the exact equivalence of two forms with the @code{@@equiv@{@}}
- command. The @code{@@equiv@{@}} command is displayed as
- @samp{@equiv{}}, either a standard mathematical equivalence sign
- (three parallel horizontal lines) or (when that is not available) as
- the ASCII sequence @samp{==}.
- Thus,
- @example
- @@lisp
- (make-sparse-keymap) @@equiv@{@} (list 'keymap)
- @@end lisp
- @end example
- @noindent
- produces
- @lisp
- (make-sparse-keymap) @equiv{} (list 'keymap)
- @end lisp
- @noindent
- This indicates that evaluating @code{(make-sparse-keymap)} produces
- identical results to evaluating @code{(list 'keymap)}.
- @node @code{@@point}
- @subsection @code{@@point@{@}} (@point{}): Indicating Point in a Buffer
- @anchor{Point Glyph}@c old name
- @cindex Point, indicating in a buffer
- @findex point
- Sometimes you need to show an example of text in an Emacs buffer. In
- such examples, the convention is to include the entire contents of the
- buffer in question between two lines of dashes containing the buffer
- name.
- You can use the @samp{@@point@{@}} command to show the location of
- point in the text in the buffer. (The symbol for point, of course, is
- not part of the text in the buffer; it indicates the place
- @emph{between} two characters where point is located.)
- The @code{@@point@{@}} command is displayed as @samp{@point{}}, either
- a pointed star or (when that is not available) the ASCII sequence
- @samp{-!-}.
- The following example shows the contents of buffer @file{foo} before
- and after evaluating a Lisp command to insert the word @code{changed}.
- @example
- @group
- ---------- Buffer: foo ----------
- This is the @point{}contents of foo.
- ---------- Buffer: foo ----------
- @end group
- @end example
- @example
- @group
- (insert "changed ")
- @result{} nil
- ---------- Buffer: foo ----------
- This is the changed @point{}contents of foo.
- ---------- Buffer: foo ----------
- @end group
- @end example
- In a Texinfo source file, the example is written like this:
- @example
- @@example
- ---------- Buffer: foo ----------
- This is the @@point@{@}contents of foo.
- ---------- Buffer: foo ----------
- (insert "changed ")
- @@result@{@} nil
- ---------- Buffer: foo ----------
- This is the changed @@point@{@}contents of foo.
- ---------- Buffer: foo ----------
- @@end example
- @end example
- @node Click Sequences
- @subsection Click Sequences
- @cindex Click sequences
- @cindex Sequence of clicks
- @cindex GUI click sequence
- @findex clicksequence
- When documenting graphical interfaces, it is necessary to describe
- sequences such as `Click on @samp{File}, then choose @samp{Open}, then
- @dots{}'. Texinfo offers commands @code{@@clicksequence} and
- @code{click} to represent this, typically used like this:
- @example
- @dots{} @@clicksequence@{File @@click@{@} Open@} @dots{}
- @end example
- @noindent
- which produces:
- @display
- @dots{} @clicksequence{File @click{} Open} @dots{}
- @end display
- @findex click
- @findex arrow
- The @code{@@click} command produces a right arrow by default; this
- glyph is also available independently via the command
- @code{@@arrow@{@}}.
- @findex clickstyle
- You can change the glyph produced by @code{@@click} with the command
- @code{@@clickstyle}, which takes a command name as its single argument
- on the rest of the line, much like @code{@@itemize} and friends
- (@pxref{@code{@@itemize}}). The command should produce a glyph, and
- the usual empty braces @samp{@{@}} are omitted. Here's an example:
- @example
- @@clickstyle @@result
- @dots{} @@clicksequence@{File @@click@{@} Open@} @dots{}
- @end example
- @noindent
- now produces:
- @display
- @clickstyle @result
- @dots{} @clicksequence{File @click{} Open} @dots{}
- @end display
- @node Inserting Unicode
- @section Inserting Unicode: @code{@@U}
- @cindex Unicode character, inserting
- @cindex Code point of Unicode character, inserting by
- @findex U
- The command @code{@@U@{@var{hex}@}} inserts a representation of the
- Unicode character U+@var{hex}. For example, @code{@@U@{0132@}}
- inserts the Dutch `IJ' ligature (poorly shown here as simply the two
- letters `I' and `J').
- The @var{hex} value should be at least four hex digits; leading zeros
- are @emph{not} added. In general, @var{hex} must specify a valid
- normal Unicode character; e.g., U+10FFFF (the very last code point) is
- invalid by definition, and thus cannot be inserted this way.
- @cindex ASCII, source document portability using
- @code{@@U} is useful for inserting occasional glyphs for which Texinfo
- has no dedicated command, while allowing the Texinfo source to remain
- purely 7-bit ASCII for maximum portability.
- @cindex Unicode and @TeX{}
- This command has many limitations---the same limitations as inserting
- Unicode characters in UTF-8 or another binary form. First and most
- importantly, @TeX{} knows nothing about most of Unicode. Supporting
- specific additional glyphs upon request is possible, but it's not
- viable for @file{texinfo.tex} to support whole additional scripts
- (Japanese, Urdu, @dots{}). The @code{@@U} command does nothing to
- change this. If the specified character is not supported in @TeX{},
- an error is given. (@xref{@code{@@documentencoding}}.)
- @cindex Entity reference in HTML et al.
- @cindex @samp{&#x@var{hex};}, output from @code{@@U}
- In HTML, XML, and Docbook, the output from @code{@@U} is always an
- entity reference of the form @samp{&#x@var{hex};}, as in
- @samp{IJ} for the example above. This should work even when an
- HTML document uses some other encoding (say, Latin@tie{}1) and the
- given character is not supported in that encoding.
- @cindex UTF-8, output from @code{@@U}
- In Info and plain text, if the document encoding is specified
- explicitly to be UTF-8, the output will be the UTF-8 representation of
- the character U+@var{hex} (presuming it's a valid character). In all
- other cases, the output is the ASCII sequence @samp{U+@var{hex}}, as
- in the six ASCII characters @samp{U+0132} for the example above.
- That's all. No magic!
- @node Breaks
- @chapter Forcing and Preventing Breaks
- @cindex Forcing line and page breaks
- @cindex Making line and page breaks
- @cindex Preventing line and page breaks
- @cindex Line breaks, awkward
- @cindex Page breaks, awkward
- Line and page breaks can sometimes occur in the `wrong' place in one
- or another form of output. It's up to you to ensure that text looks
- right in all the output formats.
- For example, in a printed manual, page breaks may occur awkwardly in
- the middle of an example; to prevent this, you can hold text together
- using a grouping command that keeps the text from being split across
- two pages. Conversely, you may want to force a page break where none
- would occur normally.
- You can use the break, break prevention, or pagination commands to fix
- problematic line and page breaks.
- @menu
- * Break Commands:: Summary of break-related commands.
- * Line Breaks:: Forcing line breaks.
- * @code{@@- @@hyphenation}:: Helping @TeX{} with hyphenation points.
- * @code{@@allowcodebreaks}:: Controlling line breaks within @@code text.
- * @code{@@w}:: Preventing unwanted line breaks in text.
- * @code{@@tie}:: Inserting an unbreakable but varying space.
- * @code{@@sp}:: Inserting blank lines.
- * @code{@@page}:: Forcing the start of a new page.
- * @code{@@group}:: Preventing unwanted page breaks.
- * @code{@@need}:: Another way to prevent unwanted page breaks.
- @end menu
- @node Break Commands
- @section Break Commands
- The break commands create or allow line and paragraph breaks:
- @table @code
- @item @@*
- Force a line break.
- @item @@sp @var{n}
- Skip @var{n} blank lines.
- @item @@-
- Insert a discretionary hyphen.
- @item @@hyphenation@{@var{hy-phen-a-ted words}@}
- Define hyphen points in @var{hy-phen-a-ted words}.
- @end table
- These commands hold text together on a single line:
- @table @code
- @item @@w@{@var{text}@}
- Prevent @var{text} from being split and hyphenated across two lines.
- @item @@tie@{@}
- Insert a normal interword space at which a line break may not occur.
- @end table
- The pagination commands apply only to printed output, since other
- output formats do not have pages.
- @table @code
- @item @@page
- Start a new page.
- @item @@group
- Hold text together that must appear on one page.
- @item @@need @var{mils}
- Start a new page if not enough space on this one.
- @end table
- @node Line Breaks
- @section @code{@@*} and @code{@@/}: Generate and Allow Line Breaks
- @findex * @r{(force line break)}
- @findex / @r{(allow line break)}
- @cindex Line breaks, controlling
- @cindex Controlling line breaks
- @cindex Breaks in a line
- @cindex Force line break
- @cindex Allow line break
- The @code{@@*} command forces a line break in all output formats.
- The @code{@@/} command allows a line break (printed manual only).
- Here is an example with @code{@@*}:
- @example
- This sentence is broken @@*into two lines.
- @end example
- @noindent produces
- @example
- @group
- This sentence is broken
- into two lines.
- @end group
- @end example
- The @code{@@/} command can be useful within long urls or other
- identifiers where @TeX{} can't find a good place to break. @TeX{}
- will automatically break urls at the natural places (@pxref{URL Line
- Breaking}), so only use @code{@@/} if you need it. @code{@@/} has no
- effect in the other output format.
- @node @code{@@- @@hyphenation}
- @section @code{@@-} and @code{@@hyphenation}: Helping @TeX{} Hyphenate
- @anchor{- and hyphenation}@c old name
- @findex @sortas{-} - @r{(discretionary hyphen)}
- @findex hyphenation
- @cindex Hyphenation, helping @TeX{} do
- @cindex Fine-tuning, and hyphenation
- Although @TeX{}'s hyphenation algorithm is generally pretty good, it
- does miss useful hyphenation points from time to time. (Or, far more
- rarely, insert an incorrect hyphenation.) So, for documents with an
- unusual vocabulary or when fine-tuning for a printed edition, you may
- wish to help @TeX{} out. Texinfo supports two commands for this:
- @table @code
- @item @@-
- Insert a discretionary hyphen, i.e., a place where @TeX{} can (but does
- not have to) hyphenate. This is especially useful when you notice an
- overfull hbox is due to @TeX{} missing a hyphenation (@pxref{Overfull
- hboxes}). @TeX{} will not insert any hyphenation points itself into a
- word containing @code{@@-}.
- @item @@hyphenation@{@var{hy-phen-a-ted words}@}
- Tell @TeX{} how to hyphenate @var{hy-phen-a-ted words}. As shown, you
- put a @samp{-} at each hyphenation point. For example:
- @example
- @@hyphenation@{man-u-script man-u-scripts@}
- @end example
- @noindent @TeX{} only uses the specified hyphenation points when the
- words match exactly, so give all necessary variants, such as plurals.
- @end table
- Info, HTML, and other non-@TeX{} output is not hyphenated, so none of
- these commands have any effect there.
- @node @code{@@allowcodebreaks}
- @section @code{@@allowcodebreaks}: Control Line Breaks in @code{@@code}
- @anchor{allowcodebreaks}@c old name
- @findex allowcodebreaks
- @cindex Breaks, within @code{@@code}
- @cindex @sortas{-} -, breakpoint within @code{@@code}
- @cindex Hyphen, breakpoint within @code{@@code}
- @cindex Dash, breakpoint within @code{@@code}
- @cindex _, breakpoint within @code{@@code}
- @cindex Underscore, breakpoint within @code{@@code}
- Ordinarily, @TeX{} considers breaking lines at @samp{-} and @samp{_}
- characters within @code{@@code} and related commands
- (@pxref{@code{@@code}}), more or less as if they were ``empty''
- hyphenation points.
- This is necessary since many manuals, especially for Lisp-family
- languages, must document very long identifiers. On the other hand,
- some manuals don't have this problems, and you may not wish to allow a
- line break at the underscore in, for example, @code{SIZE_MAX}, or even
- worse, after any of the four underscores in @code{__typeof__}.
- So Texinfo provides this command:
- @example
- @@allowcodebreaks false
- @end example
- @noindent to prevent from breaking at @samp{-} or @samp{_} within
- @code{@@code}. You can go back to allowing such breaks with
- @code{@@allowcodebreaks true}. Write these commands on lines by
- themselves.
- These commands can be given anywhere in the document. For example,
- you may have just one problematic paragraph where you need to turn off
- the breaks, but want them in general, or vice versa.
- This command has no effect except in HTML and @TeX{} output.
- @node @code{@@w}
- @section @code{@@w}@{@var{text}@}: Prevent Line Breaks
- @anchor{w}@c old name
- @findex w
- @cindex Line breaks, preventing
- @code{@@w@{@var{text}@}} outputs @var{text}, while prohibiting line
- breaks within @var{text}.
- @cindex Non-breakable space, fixed
- @cindex Unbreakable space, fixed
- Thus, you can use @code{@@w} to produce a non-breakable space, fixed at
- the width of a normal interword space:
- @example
- @@w@{ @} @@w@{ @} @@w@{ @} indentation.
- @end example
- @noindent produces:
- @display
- @w{ } @w{ } @w{ } indentation.
- @end display
- The space from @code{@@w@{@w{ }@}}, as well as being non-breakable,
- also will not stretch or shrink. Sometimes that is what you want, for
- instance if you're doing manual indenting. However, usually you want
- a normal interword space that does stretch and shrink (in the printed
- output); for that, see the @code{@@tie} command in the next section.
- @cindex Hyphenation, preventing
- You can also use the @code{@@w} command to prevent @TeX{} from
- automatically hyphenating a long name or phrase that happens to fall
- near the end of a line. @command{makeinfo} does not ever hyphenate
- words.
- @cindex Keyword expansion, preventing
- @cindex Version control keywords, preventing expansion of
- @cindex $Id expansion, preventing
- You can also use @code{@@w} to avoid unwanted keyword expansion in
- source control systems. For example, to literally write @t{@w{$}Id$}
- in your document, use @code{@@w@{$@}Id$}. This trick isn't effective
- in Info or plain text output, though.
- @node @code{@@tie}
- @section @code{@@tie@{@}}: Inserting an Unbreakable Space
- @anchor{tie}@c old name
- @findex tie @r{(unbreakable interword space)}
- @cindex Tied space
- @cindex Non-breakable space, variable
- @cindex Unbreakable space, variable
- The @code{@@tie@{@}} command produces a normal interword space at which
- a line break may not occur. Always write it with following (empty)
- braces, as usual for commands used within a paragraph. Here's an
- example:
- @example
- @@TeX@{@} was written by Donald E.@@tie@{@}Knuth.
- @end example
- @noindent produces:
- @display
- @TeX{} was written by Donald E.@tie{}Knuth.
- @end display
- There are two important differences between @code{@@tie@{@}} and
- @code{@@w@{@w{ }@}}:
- @itemize
- @item
- The space produced by @code{@@tie@{@}} will stretch and shrink slightly
- along with the normal interword spaces in the paragraph; the space
- produced by @code{@@w@{@w{ }@}} will not vary.
- @item
- @code{@@tie@{@}} allows hyphenation of the surrounding words, while
- @code{@@w@{@w{ }@}} inhibits hyphenation of those words (for @TeX{}nical
- reasons, namely that it produces an @samp{\hbox}).
- @end itemize
- @node @code{@@sp}
- @section @code{@@sp} @var{n}: Insert Blank Lines
- @anchor{sp}@c old name
- @findex sp @r{(line spacing)}
- @cindex Space, inserting vertical
- @cindex Blank lines
- @cindex Line spacing
- A line beginning with and containing only @code{@@sp @var{n}}
- generates @var{n} blank lines of space in both the printed manual and
- the Info file. @code{@@sp} also forces a paragraph break. For
- example,
- @example
- @@sp 2
- @end example
- @noindent
- generates two blank lines.
- The @code{@@sp} command is most often used in the title page.
- @node @code{@@page}
- @section @code{@@page}: Start a New Page
- @anchor{page}@c old name
- @findex page
- @cindex Page breaks, forcing
- A line containing only @code{@@page} starts a new page in a printed
- manual. In other formats, without the concept of pages, it starts a
- new paragraph. A @code{@@page} command is often used in the
- @code{@@titlepage} section of a Texinfo file to start the copyright
- page.
- @node @code{@@group}
- @section @code{@@group}: Prevent Page Breaks
- @anchor{group}@c old name
- @findex group
- @cindex Group (hold text together vertically)
- @cindex Holding text together vertically
- @cindex Vertically holding text together
- The @code{@@group} command (on a line by itself) is used inside an
- @code{@@example} or similar construct to begin an unsplittable vertical
- group, which will appear entirely on one page in the printed output.
- The group is terminated by a line containing only @code{@@end group}.
- These two lines produce no output of their own, and in the Info file
- output they have no effect at all.
- @c Once said that these environments
- @c turn off vertical spacing between ``paragraphs''.
- @c Also, quotation used to work, but doesn't in texinfo-2.72
- Although @code{@@group} would make sense conceptually in a wide
- variety of contexts, its current implementation works reliably only
- within @code{@@example} and variants, and within @code{@@display},
- @code{@@format}, @code{@@flushleft} and @code{@@flushright}.
- @xref{Quotations and Examples}. (What all these commands have in
- common is that each line of input produces a line of output.) In
- other contexts, @code{@@group} can cause anomalous vertical
- spacing.
- @need 750
- This formatting requirement means that you should write:
- @example
- @group
- @@example
- @@group
- @dots{}
- @@end group
- @@end example
- @end group
- @end example
- @noindent
- with the @code{@@group} and @code{@@end group} commands inside the
- @code{@@example} and @code{@@end example} commands.
- The @code{@@group} command is most often used to hold an example
- together on one page. In this Texinfo manual, more than 100 examples
- contain text that is enclosed between @code{@@group} and @code{@@end
- group}.
- If you forget to end a group, you may get strange and unfathomable
- error messages when you run @TeX{}. This is because @TeX{} keeps
- trying to put the rest of the Texinfo file onto the one page and does
- not start to generate error messages until it has processed
- considerable text. It is a good rule of thumb to look for a missing
- @code{@@end group} if you get incomprehensible error messages in
- @TeX{}.
- @node @code{@@need}
- @section @code{@@need @var{mils}}: Prevent Page Breaks
- @anchor{need}@c old name
- @findex need
- @cindex Need space at page bottom
- @cindex Mils, argument to @code{@@need}
- A line containing only @code{@@need @var{n}} starts a new page in a
- printed manual if fewer than @var{n} mils (thousandths of an inch)
- remain on the current page. Do not use braces around the argument
- @var{n}. The @code{@@need} command has no effect on other output
- formats since they are not paginated.
- @need 800
- This paragraph is preceded by a @code{@@need} command that tells
- @TeX{} to start a new page if fewer than 800 mils (eight-tenths
- inch) remain on the page. It looks like this:
- @example
- @group
- @@need 800
- This paragraph is preceded by @dots{}
- @end group
- @end example
- @cindex Orphans, preventing
- The @code{@@need} command is useful for preventing orphans: single
- lines at the bottoms of printed pages.
- @node Definition Commands
- @chapter Definition Commands
- @cindex Definition commands
- The @code{@@deffn} command and the other @dfn{definition commands}
- enable you to describe functions, variables, macros, commands, user
- options, special forms and other such artifacts in a uniform
- format.
- In the Info file, a definition causes the entity
- category---`Function', `Variable', or whatever---to appear at the
- beginning of the first line of the definition, followed by the
- entity's name and arguments. In the printed manual, the command
- causes @TeX{} to print the entity's name and its arguments on the left
- margin and print the category next to the right margin. In both
- output formats, the body of the definition is indented. Also, the
- name of the entity is entered into the appropriate index:
- @code{@@deffn} enters the name into the index of functions,
- @code{@@defvr} enters it into the index of variables, and so
- on (@pxref{Predefined Indices}).
- A manual need not and should not contain more than one definition for
- a given name. An appendix containing a summary should use
- @code{@@table} rather than the definition commands.
- @menu
- * Def Cmd Template:: Writing descriptions using definition commands.
- * Def Cmd Continuation Lines:: Continuing the heading over source lines.
- * Optional Arguments:: Handling optional and repeated arguments.
- * @code{@@deffnx}:: Group two or more `first' lines.
- * Def Cmds in Detail:: Reference for all the definition commands.
- * Def Cmd Conventions:: Conventions for writing definitions.
- * Sample Function Definition:: An example.
- @end menu
- @node Def Cmd Template
- @section The Template for a Definition
- @cindex Definition template
- @cindex Template for a definition
- The @code{@@deffn} command is used for definitions of entities that
- resemble functions. To write a definition using the @code{@@deffn}
- command, write the @code{@@deffn} command at the beginning of a line
- and follow it on the same line by the category of the entity, the name
- of the entity itself, and its arguments (if any). Then write the body
- of the definition on succeeding lines. (You may embed examples in the
- body.) Finally, end the definition with an @code{@@end deffn} command
- written on a line of its own.
- The other definition commands follow the same format: a line with the
- @code{@@def@dots{}} command and whatever arguments are appropriate for
- that command; the body of the definition; and a corresponding
- @code{@@end} line.
- The template for a definition looks like this:
- @example
- @group
- @@deffn @var{category} @var{name} @var{arguments}@dots{}
- @var{body-of-definition}
- @@end deffn
- @end group
- @end example
- @need 700
- @noindent
- For example,
- @example
- @group
- @@deffn Command forward-word count
- This command moves point forward @@var@{count@} words
- (or backward if @@var@{count@} is negative). @dots{}
- @@end deffn
- @end group
- @end example
- @noindent
- produces
- @quotation
- @deffn Command forward-word count
- This command moves point forward @var{count} words
- (or backward if @var{count} is negative). @dots{}
- @end deffn
- @end quotation
- Capitalize the category name like a title. If the name of the
- category contains spaces, as in the phrase `Interactive Command',
- enclose it in braces. For example:
- @example
- @group
- @@deffn @{Interactive Command@} isearch-forward
- @dots{}
- @@end deffn
- @end group
- @end example
- @noindent
- Otherwise, the second word will be mistaken for the name of the
- entity. As a general rule, when any of the arguments in the heading
- line @emph{except} the last one are more than one word, you need to
- enclose them in braces. This may also be necessary if the text
- contains commands, for example, @samp{@{declaraci@@'on@}} if you are
- writing in Spanish.
- Some of the definition commands are more general than others. The
- @code{@@deffn} command, for example, is the general definition command
- for functions and the like---for entities that may take arguments.
- When you use this command, you specify the category to which the
- entity belongs. Three predefined, specialized variations
- (@code{@@defun}, @code{@@defmac}, and @code{@@defspec}) specify the
- category for you: ``Function'', ``Macro'', and ``Special Form''
- respectively. (In Lisp, a special form is an entity much like a
- function.) Similarly, the general @code{@@defvr} command is
- accompanied by several specialized variations for describing
- particular kinds of variables.
- @xref{Sample Function Definition}, for a detailed example of a
- function definition, including the use of @code{@@example} inside the
- definition.
- @node Def Cmd Continuation Lines
- @section Definition Command Continuation Lines
- @cindex Continuation lines in definition commands
- @cindex Definition command headings, continuing
- @cindex @sortas{@@} @samp{@@} as continuation in definition commands
- The heading line of a definition command can get very long.
- Therefore, Texinfo has a special syntax allowing them to be continued
- over multiple lines of the source file: a lone @samp{@@} at the end of
- each line to be continued. Here's an example:
- @example
- @@defun fn-name @@
- arg1 arg2 arg3
- This is the basic continued defun.
- @@end defun
- @end example
- @noindent produces:
- @defun fn-name arg1 arg2 arg3
- This is the basic continued defun.
- @end defun
- @noindent
- As you can see, the continued lines are combined, as if they had been
- typed on one source line.
- Although this example only shows a one-line continuation,
- continuations may extend over any number of lines, in the same way;
- put an @code{@@} at the end of each line to be continued.
- @cindex Whitespace, collapsed around continuations
- @cindex Collapsing whitespace around continuations
- In general, any number of spaces or tabs before the @code{@@}
- continuation character are collapsed into a single space. There is one
- exception: the Texinfo processors will not fully collapse whitespace
- around a continuation inside braces. For example:
- @example
- @@deffn @{Category @@
- Name@} @dots{}
- @end example
- @noindent The output (not shown) has excess space between `Category'
- and `Name'. To avoid this, elide the unwanted whitespace in your
- input, or put the continuation @code{@@} outside braces.
- @code{@@} does not function as a continuation character in @emph{any}
- other context. Ordinarily, @samp{@@} followed by a whitespace
- character (space, tab, newline) produces a normal interword space
- (@pxref{Multiple Spaces}).
- @node Optional Arguments
- @section Optional and Repeated Arguments
- @cindex Optional and repeated arguments
- @cindex Repeated and optional arguments
- @cindex Arguments, repeated and optional
- @cindex Syntax, optional & repeated arguments
- @cindex Meta-syntactic chars for arguments
- @c This is consistent with the Emacs Lisp Reference Manual.
- Some entities take optional or repeated arguments, conventionally
- specified by using square brackets and ellipses: an argument enclosed
- within square brackets is optional, and an argument followed by an
- ellipsis is optional and may be repeated more than once.
- Thus, [@var{optional-arg}] means that @var{optional-arg} is optional
- and @var{repeated-args}@code{@dots{}} stands for zero or more
- arguments. Parentheses are used when several arguments are grouped
- into additional levels of list structure in Lisp.
- Here is the @code{@@defspec} line of an example of an imaginary
- (complicated) special form:
- @quotation
- @defspec foobar (var [from to [inc]]) body@dots{}
- @end defspec
- @end quotation
- @noindent
- In this example, the arguments @var{from} and @var{to} are optional,
- but must both be present or both absent. If they are present,
- @var{inc} may optionally be specified as well. These arguments are
- grouped with the argument @var{var} into a list, to distinguish them
- from @var{body}, which includes all remaining elements of the
- form.
- In a Texinfo source file, this @code{@@defspec} line is written like
- this:
- @example
- @@defspec foobar (var [from to [inc]]) body@@dots@{@}
- @end example
- @noindent
- The function is listed in the Command and Variable Index under
- @samp{foobar}.
- @node @code{@@deffnx}
- @section @code{@@deffnx}, et al.: Two or More `First' Lines
- @anchor{deffnx}@c old node
- @findex deffnx
- @cindex Two `First' Lines for @code{@@deffn}
- @cindex Grouping two definitions together
- @cindex Definitions grouped together
- To create two or more `first' or header lines for a definition, follow
- the first @code{@@deffn} line by a line beginning with
- @code{@@deffnx}. The @code{@@deffnx} command works exactly like
- @code{@@deffn} except that it does not generate extra vertical white
- space between it and the preceding line.
- @need 1000
- For example,
- @example
- @group
- @@deffn @{Interactive Command@} isearch-forward
- @@deffnx @{Interactive Command@} isearch-backward
- These two search commands are similar except @dots{}
- @@end deffn
- @end group
- @end example
- @noindent
- produces
- @deffn {Interactive Command} isearch-forward
- @deffnx {Interactive Command} isearch-backward
- These two search commands are similar except @dots{}
- @end deffn
- @findex defcvx
- @findex defivarx
- @findex defmacx
- @findex defmethodx
- @findex defoptx
- @findex defopx
- @findex defspecx
- @findex deftpx
- @findex deftypecvx
- @findex deftypefnx
- @findex deftypefunx
- @findex deftypeivarx
- @findex deftypemethodx
- @findex deftypeopx
- @findex deftypevarx
- @findex deftypevrx
- @findex defunx
- @findex defvarx
- @findex defvrx
- Each definition command has an `x' form: @code{@@defunx},
- @code{@@defvrx}, @code{@@deftypefunx}, etc.
- The `x' forms work similarly to @code{@@itemx}
- (@pxref{@code{@@itemx}}).
- @node Def Cmds in Detail
- @section The Definition Commands
- Texinfo provides more than a dozen definition commands, all of which
- are described in this section.
- The definition commands automatically enter the name of the entity in
- the appropriate index: for example, @code{@@deffn}, @code{@@defun},
- and @code{@@defmac} enter function names in the index of functions;
- @code{@@defvr} and @code{@@defvar} enter variable names in the index
- of variables.
- Although the examples that follow mostly illustrate Lisp, the commands
- can be used for other programming languages.
- @menu
- * Functions Commands:: Commands for functions and similar entities.
- * Variables Commands:: Commands for variables and similar entities.
- * Typed Functions:: Commands for functions in typed languages.
- * Typed Variables:: Commands for variables in typed languages.
- * Data Types:: The definition command for data types.
- * Abstract Objects:: Commands for object-oriented programming.
- @end menu
- @node Functions Commands
- @subsection Functions and Similar Entities
- This section describes the commands for describing functions and similar
- entities:
- @table @code
- @findex deffn
- @item @@deffn @var{category} @var{name} @var{arguments}@dots{}
- The @code{@@deffn} command is the general definition command for
- functions, interactive commands, and similar entities that may take
- arguments. You must choose a term to describe the category of entity
- being defined; for example, ``Function'' could be used if the entity is
- a function. The @code{@@deffn} command is written at the beginning of a
- line and is followed on the same line by the category of entity being
- described, the name of this particular entity, and its arguments, if
- any. Terminate the definition with @code{@@end deffn} on a line of its
- own.
- @need 750
- For example, here is a definition:
- @example
- @group
- @@deffn Command forward-char nchars
- Move point forward @@var@{nchars@} characters.
- @@end deffn
- @end group
- @end example
- @noindent
- This shows a rather terse definition for a ``command'' named
- @code{forward-char} with one argument, @var{nchars}.
- @code{@@deffn} prints argument names such as @var{nchars} in slanted
- type in the printed output, because we think of these names as
- metasyntactic variables---they stand for the actual argument values.
- Within the text of the description, however, write an argument name
- explicitly with @code{@@var} to refer to the value of the argument.
- In the example above, we used @samp{@@var@{nchars@}} in this way.
- In the extremely unusual case when an argument name contains
- @samp{--}, or another character sequence which is treated specially
- (@pxref{Conventions}), use @code{@@code} around the special
- characters. This avoids the conversion to typographic en-dashes and
- em-dashes.
- @c @var also works; that's what we used to recommend.
- The template for @code{@@deffn} is:
- @example
- @group
- @@deffn @var{category} @var{name} @var{arguments}@dots{}
- @var{body-of-definition}
- @@end deffn
- @end group
- @end example
- @findex defun
- @item @@defun @var{name} @var{arguments}@dots{}
- The @code{@@defun} command is the definition command for functions.
- @code{@@defun} is equivalent to @samp{@@deffn Function @dots{}}.
- Terminate the definition with @code{@@end defun} on a line of its own.
- Thus, the template is:
- @example
- @group
- @@defun @var{function-name} @var{arguments}@dots{}
- @var{body-of-definition}
- @@end defun
- @end group
- @end example
- @findex defmac
- @item @@defmac @var{name} @var{arguments}@dots{}
- The @code{@@defmac} command is the definition command for macros.
- @code{@@defmac} is equivalent to @samp{@@deffn Macro @dots{}} and
- works like @code{@@defun}.
- @findex defspec
- @item @@defspec @var{name} @var{arguments}@dots{}
- The @code{@@defspec} command is the definition command for special
- forms. (In Lisp, a special form is an entity much like a function;
- @pxref{Special Forms,,, elisp, GNU Emacs Lisp Reference Manual}.)
- @code{@@defspec} is equivalent to @samp{@@deffn @{Special Form@}
- @dots{}} and works like @code{@@defun}.
- @end table
- All these commands create entries in the index of functions.
- @node Variables Commands
- @subsection Variables and Similar Entities
- Here are the commands for defining variables and similar
- entities:
- @table @code
- @findex defvr
- @item @@defvr @var{category} @var{name}
- The @code{@@defvr} command is a general definition command for
- something like a variable---an entity that records a value. You must
- choose a term to describe the category of entity being defined; for
- example, ``Variable'' could be used if the entity is a variable.
- Write the @code{@@defvr} command at the beginning of a line and
- follow it on the same line by the category of the entity and the
- name of the entity.
- We recommend capitalizing the category name like a title. If the name
- of the category contains spaces, as in the name ``User Option'',
- enclose it in braces. Otherwise, the second word will be mistaken for
- the name of the entity. For example,
- @example
- @group
- @@defvr @{User Option@} fill-column
- This buffer-local variable specifies
- the maximum width of filled lines.
- @dots{}
- @@end defvr
- @end group
- @end example
- Terminate the definition with @code{@@end defvr} on a line of its
- own.
- The template is:
- @example
- @group
- @@defvr @var{category} @var{name}
- @var{body-of-definition}
- @@end defvr
- @end group
- @end example
- @code{@@defvr} creates an entry in the index of variables for @var{name}.
- @findex defvar
- @item @@defvar @var{name}
- The @code{@@defvar} command is the definition command for variables.
- @code{@@defvar} is equivalent to @samp{@@defvr Variable
- @dots{}}.
- @need 750
- For example:
- @example
- @group
- @@defvar kill-ring
- @dots{}
- @@end defvar
- @end group
- @end example
- The template is:
- @example
- @group
- @@defvar @var{name}
- @var{body-of-definition}
- @@end defvar
- @end group
- @end example
- @code{@@defvar} creates an entry in the index of variables for
- @var{name}.
- @findex defopt
- @item @@defopt @var{name}
- @cindex User options, marking
- The @code{@@defopt} command is the definition command for @dfn{user
- options}, i.e., variables intended for users to change according to
- taste; Emacs has many such (@pxref{Variables,,, emacs, The GNU Emacs
- Manual}). @code{@@defopt} is equivalent to @samp{@@defvr @{User
- Option@} @dots{}} and works like @code{@@defvar}. It creates an entry
- in the index of variables.
- @end table
- @node Typed Functions
- @subsection Functions in Typed Languages
- @cindex Typed functions
- @cindex Functions, in typed languages
- The @code{@@deftypefn} command and its variations are for describing
- functions in languages in which you must declare types of variables
- and functions, such as C and C++.
- @table @code
- @findex deftypefn
- @item @@deftypefn @var{category} @var{data-type} @var{name} @var{arguments}@dots{}
- The @code{@@deftypefn} command is the general definition command for
- functions and similar entities that may take arguments and that are
- typed. The @code{@@deftypefn} command is written at the beginning of
- a line and is followed on the same line by the category of entity
- being described, the type of the returned value, the name of this
- particular entity, and its arguments, if any.
- @need 800
- @noindent
- For example,
- @example
- @group
- @@deftypefn @{Library Function@} int foobar @@
- (int @@var@{foo@}, float @@var@{bar@})
- @dots{}
- @@end deftypefn
- @end group
- @end example
- produces:
- @quotation
- @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
- @dots{}
- @end deftypefn
- @end quotation
- This means that @code{foobar} is a ``library function'' that returns an
- @code{int}, and its arguments are @var{foo} (an @code{int}) and
- @var{bar} (a @code{float}).
- Since in typed languages, the actual names of the arguments are
- typically scattered among data type names and keywords, Texinfo cannot
- find them without help. You can either (a)@tie{}write everything as
- straight text, and it will be printed in slanted type; (b)@tie{}use
- @code{@@var} for the variable names, which will uppercase the variable
- names in Info and use the slanted typewriter font in printed output;
- (c)@tie{}use @code{@@var} for the variable names and @code{@@code} for
- the type names and keywords, which will be dutifully obeyed.
- The template for @code{@@deftypefn} is:
- @example
- @group
- @@deftypefn @var{category} @var{data-type} @var{name} @var{arguments} @dots{}
- @var{body-of-description}
- @@end deftypefn
- @end group
- @end example
- @noindent
- Note that if the @var{category} or @var{data type} is more than one
- word then it must be enclosed in braces to make it a single argument.
- If you are describing a procedure in a language that has packages,
- such as Ada, you might consider using @code{@@deftypefn} in a manner
- somewhat contrary to the convention described in the preceding
- paragraphs. For example:
- @example
- @group
- @@deftypefn stacks private push @@
- (@@var@{s@}:in out stack; @@
- @@var@{n@}:in integer)
- @dots{}
- @@end deftypefn
- @end group
- @end example
- @noindent
- (In these examples the @code{@@deftypefn} arguments are shown using
- continuations (@pxref{Def Cmd Continuation Lines}), but could be on a
- single line.)
- In this instance, the procedure is classified as belonging to the
- package @code{stacks} rather than classified as a `procedure' and its
- data type is described as @code{private}. (The name of the procedure
- is @code{push}, and its arguments are @var{s} and @var{n}.)
- @code{@@deftypefn} creates an entry in the index of functions for
- @var{name}.
- @item @@deftypefun @var{data-type} @var{name} @var{arguments}@dots{}
- @findex deftypefun
- The @code{@@deftypefun} command is the specialized definition command
- for functions in typed languages. The command is equivalent to
- @samp{@@deftypefn Function @dots{}}. The template is:
- @example
- @group
- @@deftypefun @var{type} @var{name} @var{arguments}@dots{}
- @var{body-of-description}
- @@end deftypefun
- @end group
- @end example
- @code{@@deftypefun} creates an entry in the index of functions for
- @var{name}.
- @end table
- @cindex Return type, own line for
- @findex deftypefnnewline
- Ordinarily, the return type is printed on the same line as the
- function name and arguments, as shown above. In source code, GNU
- style is to put the return type on a line by itself. So Texinfo
- provides an option to do that: @code{@@deftypefnnewline on}.
- This affects typed functions only---not untyped functions, not typed
- variables, etc.. Specifically, it affects the commands in this
- section, and the analogous commands for object-oriented languages,
- namely @code{@@deftypeop} and @code{@@deftypemethod}
- (@pxref{Object-Oriented Methods}).
- Specifying @code{@@deftypefnnewline off} reverts to the default.
- @node Typed Variables
- @subsection Variables in Typed Languages
- @cindex Typed variables
- @cindex Variables, in typed languages
- Variables in typed languages are handled in a manner similar to
- functions in typed languages. @xref{Typed Functions}. The general
- definition command @code{@@deftypevr} corresponds to
- @code{@@deftypefn} and the specialized definition command
- @code{@@deftypevar} corresponds to @code{@@deftypefun}.
- @table @code
- @findex deftypevr
- @item @@deftypevr @var{category} @var{data-type} @var{name}
- The @code{@@deftypevr} command is the general definition command for
- something like a variable in a typed language---an entity that records
- a value. You must choose a term to describe the category of the
- entity being defined; for example, ``Variable'' could be used if the
- entity is a variable.
- The @code{@@deftypevr} command is written at the beginning of a line
- and is followed on the same line by the category of the entity
- being described, the data type, and the name of this particular
- entity.
- @need 800
- @noindent
- For example:
- @example
- @group
- @@deftypevr @{Global Flag@} int enable
- @dots{}
- @@end deftypevr
- @end group
- @end example
- @noindent
- produces the following:
- @quotation
- @deftypevr {Global Flag} int enable
- @dots{}
- @end deftypevr
- @end quotation
- @need 800
- The template is:
- @example
- @@deftypevr @var{category} @var{data-type} @var{name}
- @var{body-of-description}
- @@end deftypevr
- @end example
- @findex deftypevar
- @item @@deftypevar @var{data-type} @var{name}
- The @code{@@deftypevar} command is the specialized definition command
- for variables in typed languages. @code{@@deftypevar} is equivalent
- to @samp{@@deftypevr Variable @dots{}}. The template is:
- @example
- @group
- @@deftypevar @var{data-type} @var{name}
- @var{body-of-description}
- @@end deftypevar
- @end group
- @end example
- @end table
- These commands create entries in the index of variables.
- @node Data Types
- @subsection Data Types
- Here is the command for data types:
- @table @code
- @findex deftp
- @item @@deftp @var{category} @var{name} @var{attributes}@dots{}
- The @code{@@deftp} command is the generic definition command for data
- types. The command is written at the beginning of a line and is
- followed on the same line by the category, by the name of the type
- (which is a word like @code{int} or @code{float}), and then by names of
- attributes of objects of that type. Thus, you could use this command
- for describing @code{int} or @code{float}, in which case you could use
- @code{data type} as the category. (A data type is a category of
- certain objects for purposes of deciding which operations can be
- performed on them.)
- In Lisp, for example, @dfn{pair} names a particular data
- type, and an object of that type has two slots called the
- @sc{car} and the @sc{cdr}. Here is how you would write the first line
- of a definition of @code{pair}.
- @example
- @group
- @@deftp @{Data type@} pair car cdr
- @dots{}
- @@end deftp
- @end group
- @end example
- @need 950
- The template is:
- @example
- @group
- @@deftp @var{category} @var{name-of-type} @var{attributes}@dots{}
- @var{body-of-definition}
- @@end deftp
- @end group
- @end example
- @code{@@deftp} creates an entry in the index of data types.
- @end table
- @node Abstract Objects
- @subsection Object-Oriented Programming
- @cindex Object-oriented programming
- Here are the commands for formatting descriptions about abstract
- objects, such as are used in object-oriented programming. A class is
- a defined type of abstract object. An instance of a class is a
- particular object that has the type of the class. An instance
- variable is a variable that belongs to the class but for which each
- instance has its own value.
- @menu
- * Variables: Object-Oriented Variables.
- * Methods: Object-Oriented Methods.
- @end menu
- @node Object-Oriented Variables
- @subsubsection Object-Oriented Variables
- @cindex Variables, object-oriented
- These commands allow you to define different sorts of variables in
- object-oriented programming languages.
- @table @code
- @item @@defcv @var{category} @var{class} @var{name}
- @findex defcv
- The @code{@@defcv} command is the general definition command for
- variables associated with classes in object-oriented programming. The
- @code{@@defcv} command is followed by three arguments: the category of
- thing being defined, the class to which it belongs, and its
- name. For instance:
- @example
- @group
- @@defcv @{Class Option@} Window border-pattern
- @dots{}
- @@end defcv
- @end group
- @end example
- @noindent produces:
- @defcv {Class Option} Window border-pattern
- @dots{}
- @end defcv
- @code{@@defcv} creates an entry in the index of variables.
- @item @@deftypecv @var{category} @var{class} @var{data-type} @var{name}
- @findex deftypecv
- The @code{@@deftypecv} command is the definition command for typed
- class variables in object-oriented programming. It is analogous to
- @code{@@defcv} with the addition of the @var{data-type} parameter to
- specify the type of the instance variable. Ordinarily, the data type
- is a programming language construct that should be marked with
- @code{@@code}. For instance:
- @example
- @group
- @@deftypecv @{Class Option@} Window @@code@{int@} border-pattern
- @dots{}
- @@end deftypecv
- @end group
- @end example
- @noindent produces:
- @deftypecv {Class Option} Window @code{int} border-pattern
- @dots{}
- @end deftypecv
- @code{@@deftypecv} creates an entry in the index of variables.
- @item @@defivar @var{class} @var{name}
- @findex defivar
- The @code{@@defivar} command is the definition command for instance
- variables in object-oriented programming. @code{@@defivar} is
- equivalent to @samp{@@defcv @{Instance Variable@} @dots{}}. For
- instance:
- @example
- @group
- @@defivar Window border-pattern
- @dots{}
- @@end defivar
- @end group
- @end example
- @noindent produces:
- @defivar Window border-pattern
- @dots{}
- @end defivar
- @code{@@defivar} creates an entry in the index of variables.
- @item @@deftypeivar @var{class} @var{data-type} @var{name}
- @findex deftypeivar
- The @code{@@deftypeivar} command is the definition command for typed
- instance variables in object-oriented programming. It is analogous to
- @code{@@defivar} with the addition of the @var{data-type} parameter to
- specify the type of the instance variable. Ordinarily, the data type
- is a programming language construct that should be marked with
- @code{@@code}. For instance:
- @example
- @group
- @@deftypeivar Window @@code@{int@} border-pattern
- @dots{}
- @@end deftypeivar
- @end group
- @end example
- @noindent produces:
- @deftypeivar Window @code{int} border-pattern
- @dots{}
- @end deftypeivar
- @code{@@deftypeivar} creates an entry in the index of variables.
- @end table
- @node Object-Oriented Methods
- @subsubsection Object-Oriented Methods
- @cindex Methods, object-oriented
- These commands allow you to define different sorts of function-like
- entities resembling methods in object-oriented programming languages.
- These entities take arguments, as functions do, but are associated with
- particular classes of objects.
- @table @code
- @findex defop
- @item @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
- The @code{@@defop} command is the general definition command for these
- method-like entities.
- For example, some systems have constructs called @dfn{wrappers} that
- are associated with classes as methods are, but that act more like
- macros than like functions. You could use @code{@@defop Wrapper} to
- describe one of these.
- Sometimes it is useful to distinguish methods and @dfn{operations}.
- You can think of an operation as the specification for a method.
- Thus, a window system might specify that all window classes have a
- method named @code{expose}; we would say that this window system
- defines an @code{expose} operation on windows in general. Typically,
- the operation has a name and also specifies the pattern of arguments;
- all methods that implement the operation must accept the same
- arguments, since applications that use the operation do so without
- knowing which method will implement it.
- Often it makes more sense to document operations than methods. For
- example, window application developers need to know about the
- @code{expose} operation, but need not be concerned with whether a
- given class of windows has its own method to implement this operation.
- To describe this operation, you would write:
- @example
- @@defop Operation windows expose
- @end example
- The @code{@@defop} command is written at the beginning of a line and
- is followed on the same line by the overall name of the category of
- operation, the name of the class of the operation, the name of the
- operation, and its arguments, if any.
- The template is:
- @example
- @group
- @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
- @var{body-of-definition}
- @@end defop
- @end group
- @end example
- @code{@@defop} creates an entry, such as `@code{expose} on
- @code{windows}', in the index of functions.
- @findex deftypeop
- @item @@deftypeop @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
- The @code{@@deftypeop} command is the definition command for typed
- operations in object-oriented programming. It is similar to
- @code{@@defop} with the addition of the @var{data-type} parameter to
- specify the return type of the method. @code{@@deftypeop} creates an
- entry in the index of functions.
- @item @@defmethod @var{class} @var{name} @var{arguments}@dots{}
- @findex defmethod
- The @code{@@defmethod} command is the definition command for methods
- in object-oriented programming. A method is a kind of function that
- implements an operation for a particular class of objects and its
- subclasses.
- @ignore
- @c ADR: Who cares?!?
- @c KB: Oh, I don't know, I think this info is crucial!
- In the Lisp Machine, methods actually were functions, but
- they were usually defined with @code{defmethod}.
- @end ignore
- @code{@@defmethod} is equivalent to @samp{@@defop Method @dots{}}.
- The command is written at the beginning of a line and is followed by
- the name of the class of the method, the name of the method, and its
- arguments, if any.
- @noindent
- For example:
- @example
- @group
- @@defmethod @code{bar-class} bar-method argument
- @dots{}
- @@end defmethod
- @end group
- @end example
- @noindent
- illustrates the definition for a method called @code{bar-method} of
- the class @code{bar-class}. The method takes an argument.
- @code{@@defmethod} creates an entry in the index of functions.
- @item @@deftypemethod @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
- @findex deftypemethod
- The @code{@@deftypemethod} command is the definition command for methods
- in object-oriented typed languages, such as C++ and Java. It is similar
- to the @code{@@defmethod} command with the addition of the
- @var{data-type} parameter to specify the return type of the method.
- @code{@@deftypemethod} creates an entry in the index of functions.
- @end table
- The typed commands are affected by the @code{@@deftypefnnewline}
- option (@pxref{Typed Functions,, Functions in Typed Languages}).
- @node Def Cmd Conventions
- @section Conventions for Writing Definitions
- @cindex Definition conventions
- @cindex Conventions for writing definitions
- When you write a definition using @code{@@deffn}, @code{@@defun}, or
- one of the other definition commands, please take care to use
- arguments that indicate the meaning, as with the @var{count} argument
- to the @code{forward-word} function. Also, if the name of an argument
- contains the name of a type, such as @var{integer}, take care that the
- argument actually is of that type.
- @node Sample Function Definition
- @section A Sample Function Definition
- @cindex Function definitions
- @cindex Command definitions
- @cindex Macro definitions, programming-language
- @cindex Sample function definition
- A function definition uses the @code{@@defun} and @code{@@end defun}
- commands. The name of the function follows immediately after the
- @code{@@defun} command and it is followed, on the same line, by the
- parameter list.
- Here is a definition from @ref{Calling Functions,,, elisp, The GNU Emacs
- Lisp Reference Manual}.
- @quotation
- @defun apply function &rest arguments
- @code{apply} calls @var{function} with @var{arguments}, just
- like @code{funcall} but with one difference: the last of
- @var{arguments} is a list of arguments to give to
- @var{function}, rather than a single argument. We also say
- that this list is @dfn{appended} to the other arguments.
- @code{apply} returns the result of calling @var{function}.
- As with @code{funcall}, @var{function} must either be a Lisp
- function or a primitive function; special forms and macros
- do not make sense in @code{apply}.
- @example
- (setq f 'list)
- @result{} list
- (apply f 'x 'y 'z)
- @error{} Wrong type argument: listp, z
- (apply '+ 1 2 '(3 4))
- @result{} 10
- (apply '+ '(1 2 3 4))
- @result{} 10
- (apply 'append '((a b c) nil (x y z) nil))
- @result{} (a b c x y z)
- @end example
- An interesting example of using @code{apply} is found in the description
- of @code{mapcar}.
- @end defun
- @end quotation
- In the Texinfo source file, this example looks like this:
- @example
- @group
- @@defun apply function &rest arguments
- @@code@{apply@} calls @@var@{function@} with
- @@var@{arguments@}, just like @@code@{funcall@} but with one
- difference: the last of @@var@{arguments@} is a list of
- arguments to give to @@var@{function@}, rather than a single
- argument. We also say that this list is @@dfn@{appended@}
- to the other arguments.
- @end group
- @group
- @@code@{apply@} returns the result of calling
- @@var@{function@}. As with @@code@{funcall@},
- @@var@{function@} must either be a Lisp function or a
- primitive function; special forms and macros do not make
- sense in @@code@{apply@}.
- @end group
- @group
- @@example
- (setq f 'list)
- @@result@{@} list
- (apply f 'x 'y 'z)
- @@error@{@} Wrong type argument: listp, z
- (apply '+ 1 2 '(3 4))
- @@result@{@} 10
- (apply '+ '(1 2 3 4))
- @@result@{@} 10
- (apply 'append '((a b c) nil (x y z) nil))
- @@result@{@} (a b c x y z)
- @@end example
- @end group
- @group
- An interesting example of using @@code@{apply@} is found
- in the description of @@code@{mapcar@}.
- @@end defun
- @end group
- @end example
- @noindent
- In this manual, this function is listed in the Command and Variable
- Index under @code{apply}.
- Ordinary variables and user options are described using a format like
- that for functions except that variables do not take arguments.
- @node Internationalization
- @chapter Internationalization
- @cindex Internationalization
- Texinfo has some support for writing in languages other than English,
- although this area still needs considerable work. (If you are
- the one helping to translate the fixed strings written to documents,
- @pxref{Internationalization of Document Strings}.)
- For a list of the various accented and special characters Texinfo
- supports, see @ref{Inserting Accents}.
- @menu
- * @code{@@documentlanguage}:: Declaring the current language.
- * @code{@@documentencoding}:: Declaring the input encoding.
- @end menu
- @node @code{@@documentlanguage}
- @section @code{@@documentlanguage @var{ll}[_@var{cc}]}: Set the Document Language
- @anchor{documentlanguage}
- @findex documentlanguage
- @cindex Language, declaring
- @cindex Locale, declaring
- @cindex Document language, declaring
- The @code{@@documentlanguage} command declares the current document
- locale. Write it on a line by itself, near the beginning of the file.
- @example
- @@documentlanguage @var{ll}[_@var{cc}]
- @end example
- Include a two-letter ISO@tie{}639-2 language code (@var{ll}) following
- the command name, optionally followed by an underscore and two-letter
- ISO@tie{}3166 two-letter country code (@var{cc}). If you have a
- multilingual document, the intent is to be able to use this command
- multiple times, to declare each language change. If the command is
- not used at all, the default is @code{en_US} for US English.
- As with GNU Gettext (@pxref{Top,,, gettext, Gettext}), if the country
- code is omitted, the main dialect is assumed where possible. For
- example, @code{de} is equivalent to @code{de_DE} (German as spoken in
- Germany).
- @cindex Document strings, translation of
- For Info and other online output, this command changes the translation
- of various @dfn{document strings} such as ``see'' in cross-references
- (@pxref{Cross References}), ``Function'' in defuns (@pxref{Definition
- Commands}), and so on. Some strings, such as ``Node:'', ``Next:'',
- ``Menu:'', etc., are keywords in Info output, so are not translated
- there; they are translated in other output formats.
- @cindex @file{txi-@var{cc}.tex}
- For @TeX{}, this command causes a file @file{txi-@var{locale}.tex} to
- be read (if it exists). If @code{@@documentlanguage} argument
- contains the optional @samp{_@var{cc}} suffix, this is tried first.
- For example, with @code{@@documentlanguage de_DE}, @TeX{} first looks
- for @file{txi-de_DE.tex}, then @file{txi-de.tex}.
- Such a @file{txi-*} file is intended to redefine the various English
- words used in @TeX{} output, such as `Chapter', `See', and so on. We
- are aware that individual words like these cannot always be translated
- in isolation, and that a very different strategy would be required for
- ideographic (among other) scripts. Help in improving Texinfo's
- language support is welcome.
- @cindex Hyphenation patterns, language-dependent
- @code{@@documentlanguage} also changes @TeX{}'s current hyphenation
- patterns, if the @TeX{} program being run has the necessary support
- included. This will generally not be the case for @command{tex}
- itself, but will usually be the case for up-to-date distributions of
- the extended @TeX{} programs @command{etex} (DVI output) and
- @command{pdftex} (PDF output). @command{texi2dvi} will use the
- extended @TeX{}s if they are available (@pxref{Format with
- @command{texi2dvi}}).
- In September 2006, the W3C Internationalization Activity released a
- new recommendation for specifying languages:
- @url{http://www.rfc-editor.org/rfc/bcp/bcp47.txt}. When Gettext
- supports this new scheme, Texinfo will too.
- @cindex ISO 639-2 language codes
- @cindex ISO 3166 country codes
- @cindex Language codes
- @cindex Country codes
- Since the lists of language codes and country codes are updated
- relatively frequently, we don't attempt to list them here. The valid
- language codes are on the official home page for ISO@tie{}639,
- @url{http://www.loc.gov/standards/iso639-2/}. The country codes and
- the official web site for ISO@tie{}3166 can be found via
- @url{http://en.wikipedia.org/wiki/ISO_3166}.
- @node @code{@@documentencoding}
- @section @code{@@documentencoding @var{enc}}: Set Input Encoding
- @anchor{documentencoding}@c old name
- @findex documentencoding
- @cindex Encoding, declaring
- @cindex Input encoding, declaring
- @cindex Character set, declaring
- @cindex Document input encoding
- The @code{@@documentencoding} command declares the input document
- encoding, and can also affect the encoding of the output. Write it on
- a line by itself, with a valid encoding specification following, near
- the beginning of the file.
- @example
- @@documentencoding @var{enc}
- @end example
- Texinfo supports these encodings:
- @table @code
- @item US-ASCII
- This has no particular effect, but it's included for completeness.
- @item UTF-8
- The vast global character encoding, expressed in 8-bit bytes.
- @item ISO-8859-1
- @itemx ISO-8859-15
- @itemx ISO-8859-2
- @cindex Euro symbol, and encodings
- These specify the standard encodings for Western European (the first
- two) and Eastern European languages (the third), respectively. ISO
- 8859-15 replaces some little-used characters from 8859-1 (e.g.,
- precomposed fractions) with more commonly needed ones, such as the
- Euro symbol (@euro{}).
- A full description of the encodings is beyond our scope here;
- one useful reference is @uref{http://czyborra.com/charsets/iso8859.html}.
- @item koi8-r
- This is the commonly used encoding for the Russian language.
- @item koi8-u
- This is the commonly used encoding for the Ukrainian language.
- @end table
- Specifying an encoding @var{enc} has the following effects:
- @cindex Local Variables section, for encoding
- @cindex Info output, and encoding
- In Info output, a so-called `Local Variables' section (@pxref{File
- Variables,,, emacs, The GNU Emacs Manual}) is output including
- @var{enc}. This allows Info readers to set the encoding
- appropriately. It looks like this:
- @example
- Local Variables:
- coding: @var{enc}
- End:
- @end example
- Also, in Info and plain text output, unless the option
- @option{--disable-encoding} is given to @command{makeinfo}, accent
- constructs and special characters, such as @code{@@'e}, are output as
- the actual 8-bit or UTF-8 character in the given encoding where
- possible.
- @cindex HTML output, and encodings
- @cindex @code{http-equiv}, and charset specification
- @cindex @code{<meta>} HTML tag, and charset specification
- In HTML output, a @samp{<meta>} tag is output, in the @samp{<head>}
- section of the HTML, that specifies @var{enc}. Web servers and
- browsers cooperate to use this information so the correct encoding is
- used to display the page, if supported by the system. That looks like
- this:
- @example
- <meta http-equiv="Content-Type" content="text/html;
- charset=@var{enc}">
- @end example
- In XML and Docbook output, UTF-8 is always used for the output,
- according to the conventions of those formats.
- @cindex Computer Modern fonts
- In @TeX{} output, the characters which are supported in the standard
- Computer Modern fonts are output accordingly. For example, this
- means using constructed accents rather than precomposed glyphs.
- Using a missing character generates a warning message, as does
- specifying an unimplemented encoding.
- Although modern @TeX{} systems support nearly every script in use in
- the world, this wide-ranging support is not available in
- @file{texinfo.tex}, and it's not feasible to duplicate or incorporate
- all that effort. (Our plan to support other scripts is to create a
- @LaTeX{} back-end to @command{texi2any}, where the support is already
- present.)
- For maximum portability of Texinfo documents across the many different
- user environments in the world, we recommend sticking to 7-bit ASCII
- in the input unless your particular manual needs a substantial amount
- of non-ASCII, e.g., it's written in German. You can use the
- @code{@@U} command to insert an occasional needed character
- (@pxref{Inserting Unicode}).
- @node Conditionals
- @chapter Conditionally Visible Text
- @cindex Conditionally visible text
- @cindex Text, conditionally visible
- @cindex Visibility of conditional text
- @cindex If text conditionally visible
- The @dfn{conditional commands} allow you to use different text for
- different output formats, or for general conditions that you define.
- For example, you can use them to specify different text for the
- printed manual and the Info output.
- The conditional commands comprise the following categories.
- @itemize @bullet
- @item
- Commands specific to an output format (Info, @TeX{}, HTML, @dots{}).
- @item
- Commands specific to any output format @emph{excluding} a given
- one (e.g., not Info, not @TeX{}, @dots{}).
- @item
- `Raw' formatter text for any output format, passed straight
- through with minimal (but not zero) interpretation of @@-commands.
- @item
- Format-independent variable substitutions, and testing if a variable
- is set or clear.
- @end itemize
- @menu
- * Conditional Commands:: Text for a given format.
- * Conditional Not Commands:: Text for any format other than a given one.
- * Raw Formatter Commands:: Using raw formatter commands.
- * Inline Conditionals:: Brace-delimited conditional text.
- * @code{@@set @@clear @@value}:: Variable tests and substitutions.
- * Testing for Texinfo Commands:: Testing if a Texinfo command is available.
- * Conditional Nesting:: Using conditionals inside conditionals.
- @end menu
- @node Conditional Commands
- @section Conditional Commands
- Texinfo has an @code{@@if@var{format}} environment for each output
- format, to allow conditional inclusion of text for a particular output
- format.
- @findex ifinfo
- @code{@@ifinfo} begins segments of text that should be ignored by
- @TeX{} when it typesets the printed manual, and by @command{makeinfo}
- when not producing Info output. The segment of text appears only in
- the Info file and, for historical compatibility, the plain text
- output.
- @findex ifdocbook
- @findex ifhtml
- @findex ifplaintext
- @findex iftex
- @findex ifxml
- The environments for the other formats are analogous:
- @table @code
- @item @@ifdocbook @dots{} @@end ifdocbook
- Text to appear only in the Docbook output.
- @item @@ifhtml @dots{} @@end ifhtml
- Text to appear only in the HTML output.
- @item @@ifplaintext @dots{} @@end ifplaintext
- Text to appear only in the plain text output.
- @item @@iftex @dots{} @@end iftex
- Text to appear only in the printed manual.
- @item @@ifxml @dots{} @@end ifxml
- Text to appear only in the XML output.
- @end table
- The @code{@@if@dots{}} and @code{@@end if@dots{}} commands must appear
- on lines by themselves in your source file. The newlines following
- the commands are (more or less) treated as whitespace, so that the
- conditional text is flowed normally into a surrounding paragraph.
- The @code{@@if@dots{}} constructs are intended to conditionalize
- normal Texinfo source; @pxref{Raw Formatter Commands}, for using
- underlying format commands directly.
- Here is an example showing all these conditionals:
- @example
- @@iftex
- This text will appear only in the printed manual.
- @@end iftex
- @@ifinfo
- However, this text will appear only in Info and plain text.
- @@end ifinfo
- @@ifhtml
- And this text will only appear in HTML.
- @@end ifhtml
- @@ifplaintext
- Whereas this text will only appear in plain text.
- @@end ifplaintext
- @@ifxml
- Notwithstanding that this will only appear in XML@.
- @@end ifxml
- @@ifdocbook
- Nevertheless, this will only appear in Docbook.
- @@end ifdocbook
- @end example
- @noindent
- The preceding example produces the following line:
- @iftex
- This text will appear only in the printed manual.
- @end iftex
- @ifinfo
- However, this text will appear only in Info and plain text.
- @end ifinfo
- @ifhtml
- And this text will only appear in HTML.
- @end ifhtml
- @ifplaintext
- Whereas this text will only appear in plain text.
- @end ifplaintext
- @ifxml
- Notwithstanding that this will only appear in XML@.
- @end ifxml
- @ifdocbook
- Nevertheless, this will only appear in Docbook.
- @end ifdocbook
- @noindent
- Notice that you only see one of the input lines, depending on which
- version of the manual you are reading.
- @findex errormsg
- In complex documents, you may want Texinfo to issue an error message
- in some conditionals that should not ever be processed. The
- @code{@@errormsg@{@var{text}@}} command will do this; it takes one
- argument, the text of the error message.
- We mention @code{@@errormsg@{@}} here even though it is not strictly
- related to conditionals, since in practice it is most likely to be
- useful in that context. Technically, it can be used anywhere.
- @xref{External Macro Processors}, for a caveat regarding the line
- numbers which @code{@@errormsg} emits in @TeX{}.
- @node Conditional Not Commands
- @section Conditional Not Commands
- @findex ifnotdocbook
- @findex ifnothtml
- @findex ifnotinfo
- @findex ifnotplaintext
- @findex ifnottex
- @findex ifnotxml
- You can specify text to be included in any output format @emph{other}
- than a given one with the @code{@@ifnot@dots{}} environments:
- @example
- @@ifnotdocbook @dots{} @@end ifnotdocbook
- @@ifnothtml @dots{} @@end ifnothtml
- @@ifnotinfo @dots{} @@end ifnotinfo
- @@ifnotplaintext @dots{} @@end ifnotplaintext
- @@ifnottex @dots{} @@end ifnottex
- @@ifnotxml @dots{} @@end ifnotxml
- @end example
- @noindent
- The @code{@@ifnot@dots{}} command and the @code{@@end} command must
- appear on lines by themselves in your actual source file.
- If the output file is being made in the given format, the
- region is @emph{ignored}. Otherwise, it is included.
- There is one exception (for historical compatibility):
- @code{@@ifnotinfo} text is omitted for both Info and plain text
- output, not just Info. To specify text which appears only in Info and
- not in plain text, use @code{@@ifnotplaintext}, like this:
- @example
- @@ifinfo
- @@ifnotplaintext
- This will be in Info, but not plain text.
- @@end ifnotplaintext
- @@end ifinfo
- @end example
- The regions delimited by these commands are ordinary Texinfo source as
- with @code{@@iftex}, not raw formatter source as with @code{@@tex}
- (@pxref{Raw Formatter Commands}).
- @node Raw Formatter Commands
- @section Raw Formatter Commands
- @cindex Raw formatter commands
- @cindex @TeX{} commands, using ordinary
- @cindex Ordinary @TeX{} commands, using
- @cindex Commands using raw @TeX{}
- @cindex Plain @TeX{}
- The @code{@@if@dots{}} conditionals just described must be used only
- with normal Texinfo source. For instance, most features of plain
- @TeX{} will not work within @code{@@iftex}. The purpose of
- @code{@@if@dots{}} is to provide conditional processing for Texinfo
- source, not provide access to underlying formatting features. For
- that, Texinfo provides so-called @dfn{raw formatter commands}. They
- should only be used when truly required (most documents do not need
- them).
- @findex tex
- @cindex Category codes, of plain @TeX{}
- The first raw formatter command is @code{@@tex}. You can enter plain
- @TeX{} completely, and use @samp{\} in the @TeX{} commands, by
- delineating a region with the @code{@@tex} and @code{@@end tex}
- commands. All plain @TeX{} commands and category codes are restored
- within a @code{@@tex} region. The sole exception is that the
- @code{@@} character still introduces a command, so that @code{@@end
- tex} can be recognized. Texinfo processors will not output material
- in such a region, unless @TeX{} output is being produced.
- @findex \gdef @r{within @code{@@tex}}
- @findex \globaldefs @r{within @code{@@tex}}
- In complex cases, you may wish to define new @TeX{} macros within
- @code{@@tex}. You must use @code{\gdef} to do this, not @code{\def},
- because @code{@@tex} regions are processed in a @TeX{} group. If you
- need to make several definitions, you may wish to set
- @code{\globaldefs=1} (its value will be restored to zero as usual when
- the group ends at @code{@@end tex}, so it won't cause problems with
- the rest of the document).
- @cindex Equation, displayed, in plain @TeX{}
- @cindex Displayed equation, in plain @TeX{}
- As an example, here is a displayed equation written in plain @TeX{}:
- @example
- @@tex
- $$ \chi^2 = \sum_@{i=1@}^N
- \left (y_i - (a + b x_i)
- \over \sigma_i\right)^2 $$
- @@end tex
- @end example
- @noindent
- The output of this example will appear only in a printed manual. If
- you are reading this in a format not generated by @TeX{}, you will not
- see the equation that appears in the printed manual.
- @tex
- $$ \chi^2 = \sum_{i=1}^N
- \left(y_i - (a + b x_i)
- \over \sigma_i\right)^2 $$
- @end tex
- @cindex HTML, including raw
- @findex ifhtml
- @findex html
- Analogously, you can use @code{@@ifhtml @dots{} @@end ifhtml} to
- delimit Texinfo source to be included in HTML output only, and
- @code{@@html @dots{} @@end html} for a region of raw HTML.
- @cindex XML, including raw
- @findex ifxml
- @findex xml
- Likewise, you can use @code{@@ifxml @dots{} @@end ifxml} to delimit
- Texinfo source to be included in XML output only, and @code{@@xml
- @dots{} @@end xml} for a region of raw XML@. Regions of raw text in
- other formats will also be present in the XML output, but with
- protection of XML characters and within corresponding elements. For
- example, the raw HTML text:
- @example
- @group
- @@html
- <br />
- @@end html
- @end group
- @end example
- @noindent
- will be included in the XML output as:
- @example
- @group
- <html>
- <br />
- </html>
- @end group
- @end example
- @cindex Docbook, including raw
- @findex ifdocbook
- @findex docbook
- Again likewise, you can use @code{@@ifdocbook @dots{} @@end ifdocbook}
- to delimit Texinfo source to be included in Docbook output only, and
- @code{@@docbook @dots{} @@end docbook} for a region of raw Docbook.
- The behavior of newlines in raw regions is unspecified.
- In all cases, in raw processing, @code{@@} retains the same meaning as
- in the remainder of the document. Thus, the Texinfo processors must
- recognize and even execute, to some extent, the contents of the raw
- regions, regardless of the final output format. Therefore, specifying
- changes that globally affect the document inside a raw region leads to
- unpredictable and generally undesirable behavior. For example, using
- the @code{@@kbdinputstyle} command inside a raw region is undefined.
- The remedy is simple: don't do that. Use the raw formatter commands
- for their intended purpose, of providing material directly in the
- underlying format. When you simply want to give different Texinfo
- specifications for different output formats, use the
- @code{@@if@dots{}} conditionals and stay in Texinfo syntax.
- @node Inline Conditionals
- @section Inline Conditionals: @code{@@inline}, @code{@@inlineifelse}, @code{@@inlineraw}
- @findex inlinefmt
- @findex inlinefmtifelse
- @findex inlineraw
- @cindex Inline conditionals
- @cindex Conditional commands, inline
- @cindex Brace-delimited conditional text
- @cindex Newlines, avoiding in conditionals
- @cindex Whitespace, controlling in conditionals
- Texinfo provides a set of conditional commands with arguments given
- within braces:
- @table @code
- @item @@inlinefmt@{@var{format}, @var{text}@}
- Process the Texinfo @var{text} if @var{format} output is being
- generated.
- @item @@inlinefmtifelse@{@var{format}, @var{then-text}, @var{else-text}@}
- Process the Texinfo @var{then-text} if @var{format} output is being
- generated; otherwise, process @var{else-text}.
- @item @@inlineraw@{@var{format}, @var{text}@}
- Similar, but for raw @var{text} (@pxref{Raw Formatter Commands}).
- @end table
- The supported @var{format} names are:
- @example
- docbook html info plaintext tex xml
- @end example
- For example,
- @example
- @@inlinefmt@{html, @@emph@{HTML-only text@}@}
- @end example
- @noindent is nearly equivalent to
- @example
- @@ifhtml
- @@emph@{HTML-only text@}
- @@end ifhtml
- @end example
- @noindent except that no whitespace is added, as happens in the latter
- (environment) case.
- In these commands, whitespace is ignored after the comma separating
- the arguments, as usual, but is @emph{not} ignored at the end of
- @var{text}.
- To insert a literal at sign, left brace, or right brace in one of the
- arguments, you must use the alphabetic commands @code{@@atchar@{@}}
- (@pxref{Inserting an Atsign}), and @code{@@lbracechar@{@}} or
- @code{@@rbracechar@{@}} (@pxref{Inserting Braces}), or the parsing
- will become confused.
- With @code{@@inlinefmtifelse}, it is also necessary to use
- @code{@@comma@{@}} to avoid mistaking a @samp{,} in the text for the
- delimiter. With @code{@@inlinefmt} and @code{@@inlineraw},
- @code{@@comma@{@}} is not required (though it's fine to use it), since
- these commands always have exactly two arguments.
- For @TeX{}, the processed @var{text} cannot contain newline-delimited
- commands. Text to be ignored (i.e., for non-@TeX{}) can, though.
- Two other @code{@@inline...} conditionals complement the
- @code{@@ifset} and @code{@@ifclear} commands; see the next section.
- @node @code{@@set @@clear @@value}
- @section Flags: @code{@@set}, @code{@@clear}, conditionals, and @code{@@value}
- @anchor{set clear value}@c old name
- You can direct the Texinfo formatting commands to format or ignore parts
- of a Texinfo file with the @code{@@set}, @code{@@clear}, @code{@@ifset},
- and @code{@@ifclear} commands.
- Here are brief descriptions of these commands, see the following
- sections for more details:
- @table @code
- @item @@set @var{flag} [@var{value}]
- Set the variable @var{flag}, to the optional @var{value} if specified.
- @item @@clear @var{flag}
- Undefine the variable @var{flag}, whether or not it was previously defined.
- @item @@ifset @var{flag}
- If @var{flag} is set, text through the next @code{@@end ifset} command
- is formatted. If @var{flag} is clear, text through the following
- @code{@@end ifset} command is ignored.
- @item @@inlineifset@{@var{flag}, @var{text}@}
- Brace-delimited version of @code{@@ifset}.
- @item @@ifclear @var{flag}
- If @var{flag} is set, text through the next @code{@@end ifclear} command
- is ignored. If @var{flag} is clear, text through the following
- @code{@@end ifclear} command is formatted.
- @item @@inlineifclear@{@var{flag}, @var{text}@}
- Brace-delimited version of @code{@@ifclear}.
- @end table
- @menu
- * @code{@@set @@value}:: Expand a flag variable to a string.
- * @code{@@ifset @@ifclear}:: Format a region if a flag is set.
- * @code{@@inlineifset @@inlineifclear}:: Brace-delimited flag conditionals.
- * @code{@@value} Example:: An easy way to update edition information.
- @end menu
- @node @code{@@set @@value}
- @subsection @code{@@set} and @code{@@value}
- @anchor{set value}@c old name
- @findex set
- @findex value
- @findex clear
- You use the @code{@@set} command to specify a value for a flag, which
- is later expanded by the @code{@@value} command.
- A @dfn{flag} (aka @dfn{variable}) name is an identifier starting with
- an alphanumeric, @samp{-}, or @samp{_}. Subsequent characters, if
- any, may not be whitespace, @samp{@@}, braces, angle brackets, or any
- of @samp{~`^+|}; other characters, such as @samp{%}, may work.
- However, it is best to use only letters and numerals in a flag name,
- not @samp{-} or @samp{_} or others---they will work in some contexts,
- but not all, due to limitations in @TeX{}.
- The value is the remainder of the input line, and can contain anything.
- However, unlike most other commands which take the rest of the line as
- a value, @code{@@set} need not appear at the beginning of a line.
- Write the @code{@@set} command like this:
- @example
- @@set foo This is a string.
- @end example
- @noindent
- This sets the value of the flag @code{foo} to ``This is a string.''.
- The Texinfo formatters then replace a @code{@@value@{@var{flag}@}}
- command with the string to which @var{flag} is set. Thus, when
- @code{foo} is set as shown above, the Texinfo formatters convert this:
- @example
- @group
- @@value@{foo@}
- @exdent @r{to this:}
- This is a string.
- @end group
- @end example
- You can write a @code{@@value} command within a paragraph; but you
- must write a @code{@@set} command on a line of its own.
- If you write the @code{@@set} command like this:
- @example
- @@set foo
- @end example
- @noindent
- without specifying a string, the value of @code{foo} is the empty string.
- If you clear a previously set flag with @code{@@clear @var{flag}}, a
- subsequent @code{@@value@{flag@}} command will report an error.
- For example, if you set @code{foo} as follows:
- @example
- @@set howmuch very, very, very
- @end example
- @noindent
- then the formatters transform
- @example
- @group
- It is a @@value@{howmuch@} wet day.
- @exdent @r{into}
- It is a very, very, very wet day.
- @end group
- @end example
- If you write
- @example
- @@clear howmuch
- @end example
- @noindent
- then the formatters transform
- @example
- @group
- It is a @@value@{howmuch@} wet day.
- @exdent @r{into}
- It is a @{No value for "howmuch"@} wet day.
- @end group
- @end example
- @code{@@value} cannot be reliably used as the argument to an accent
- command (@pxref{Inserting Accents}). For example, this fails:
- @example
- @@set myletter a
- @@'@@value@{myletter@} @c fails!
- @end example
- @node @code{@@ifset @@ifclear}
- @subsection @code{@@ifset} and @code{@@ifclear}
- @anchor{ifset ifclear}@c old name
- @findex ifset
- When a @var{flag} is set, the Texinfo formatting commands format text
- between subsequent pairs of @code{@@ifset @var{flag}} and @code{@@end
- ifset} commands. When the @var{flag} is cleared, the Texinfo formatting
- commands do @emph{not} format the text. @code{@@ifclear} operates
- analogously.
- Write the conditionally formatted text between @code{@@ifset @var{flag}}
- and @code{@@end ifset} commands, like this:
- @example
- @group
- @@ifset @var{flag}
- @var{conditional-text}
- @@end ifset
- @end group
- @end example
- For example, you can create one document that has two variants, such as
- a manual for a `large' and `small' model:
- @cindex Shrubbery
- @example
- You can use this machine to dig up shrubs
- without hurting them.
- @@set large
- @@ifset large
- It can also dig up fully grown trees.
- @@end ifset
- Remember to replant promptly @dots{}
- @end example
- @noindent
- In the example, the formatting commands will format the text between
- @code{@@ifset large} and @code{@@end ifset} because the @code{large}
- flag is set.
- When @var{flag} is cleared, the Texinfo formatting commands do
- @emph{not} format the text between @code{@@ifset @var{flag}} and
- @code{@@end ifset}; that text is ignored and does not appear in either
- printed or Info output.
- For example, if you clear the flag of the preceding example by writing
- an @code{@@clear large} command after the @code{@@set large} command
- (but before the conditional text), then the Texinfo formatting commands
- ignore the text between the @code{@@ifset large} and @code{@@end ifset}
- commands. In the formatted output, that text does not appear; in both
- printed and Info output, you see only the lines that say, ``You can use
- this machine to dig up shrubs without hurting them. Remember to replant
- promptly @dots{}''.
- @findex ifclear
- If a flag is cleared with a @code{@@clear @var{flag}} command, then
- the formatting commands format text between subsequent pairs of
- @code{@@ifclear} and @code{@@end ifclear} commands. But if the flag
- is set with @code{@@set @var{flag}}, then the formatting commands do
- @emph{not} format text between an @code{@@ifclear} and an @code{@@end
- ifclear} command; rather, they ignore that text. An @code{@@ifclear}
- command looks like this:
- @example
- @@ifclear @var{flag}
- @end example
- @node @code{@@inlineifset @@inlineifclear}
- @subsection @code{@@inlineifset} and @code{@@inlineifclear}
- @findex inlineifset
- @findex inlineifclear
- @cindex Flag conditionals, brace-delimited
- @cindex Brace-delimited flag conditionals
- @code{@@inlineifset} and @code{@@inlineifclear} provide
- brace-delimited alternatives to the @code{@@ifset} and
- @code{@@ifclear} forms, similar to the other @code{@@inline...}
- Commands (@pxref{Inline Conditionals}). The same caveats about
- argument parsing given there apply here too.
- @table @code
- @item @@inlineifset@{@var{var}, @var{text}@}
- Process the Texinfo @var{text} if the flag @var{var} is defined.
- @item @@inlineifclear@{@var{var}, @var{text}@}
- Process the Texinfo @var{text} if the flag @var{var} is not defined.
- @end table
- Except for the syntax, their general behavior and purposes is the same
- as with @code{@@ifset} and @code{@@ifclear}, described in the previous
- section.
- @node @code{@@value} Example
- @subsection @code{@@value} Example
- @anchor{value Example}@c old name
- You can use the @code{@@value} command to minimize the number of
- places you need to change when you record an update to a manual.
- @xref{GNU Sample Texts}, for the full text of an example of using this
- to work with Automake distributions.
- This example is adapted from @ref{Top,,, make, The GNU Make Manual}.
- @enumerate
- @item
- Set the flags:
- @example
- @group
- @@set EDITION 0.35 Beta
- @@set VERSION 3.63 Beta
- @@set UPDATED 14 August 1992
- @@set UPDATE-MONTH August 1992
- @end group
- @end example
- @item
- Write text for the @code{@@copying} section (@pxref{@code{@@copying}}):
- @example
- @group
- @@copying
- This is Edition @@value@{EDITION@},
- last updated @@value@{UPDATED@},
- of @@cite@{The GNU Make Manual@},
- for @@code@{make@}, version @@value@{VERSION@}.
- Copyright @dots{}
- Permission is granted @dots{}
- @@end copying
- @end group
- @end example
- @item
- Write text for the title page, for people reading the printed manual:
- @example
- @group
- @@titlepage
- @@title GNU Make
- @@subtitle A Program for Directing Recompilation
- @@subtitle Edition @@value@{EDITION@}, @dots{}
- @@subtitle @@value@{UPDATE-MONTH@}
- @@page
- @@insertcopying
- @dots{}
- @@end titlepage
- @end group
- @end example
- @noindent
- (On a printed cover, a date listing the month and the year looks less
- fussy than a date listing the day as well as the month and year.)
- @item
- Write text for the Top node, for people reading the Info file:
- @example
- @group
- @@ifnottex
- @@node Top
- @@top Make
- This is Edition @@value@{EDITION@},
- last updated @@value@{UPDATED@},
- of @@cite@{The GNU Make Manual@},
- for @@code@{make@}, version @@value@{VERSION@}.
- @@end ifnottex
- @end group
- @end example
- After you format the manual, the @code{@@value} constructs have been
- expanded, so the output contains text like this:
- @example
- @group
- This is Edition 0.35 Beta, last updated 14 August 1992,
- of `The GNU Make Manual', for `make', Version 3.63 Beta.
- @end group
- @end example
- @end enumerate
- When you update the manual, you change only the values of the flags; you
- do not need to edit the three sections.
- @node Testing for Texinfo Commands
- @section Testing for Texinfo Commands: @code{@@ifcommanddefined}, @code{@@ifcommandnotdefined}
- @cindex Testing for Texinfo commands
- @cindex Checking for Texinfo commands
- @cindex Texinfo commands, testing for
- @cindex Commands, testing for Texinfo
- @cindex Versions of Texinfo, adapting to
- @cindex Features of Texinfo, adapting to
- @findex ifcommanddefined
- @findex ifcommandnotdefined
- Occasionally, you may want to arrange for your manual to test if a
- given Texinfo command is available and (presumably) do some sort of
- fallback formatting if not. There are conditionals
- @code{@@ifcommanddefined} and @code{@@ifcommandnotdefined} to do this.
- For example:
- @example
- @@ifcommanddefined node
- Good, @@samp@{@@@@node@} is defined.
- @@end ifcommanddefined
- @end example
- @noindent will output the expected `Good, @samp{@@node} is defined.'.
- This conditional will also consider any new commands defined by
- the document via @code{@@macro}, @code{@@alias},
- @code{@@definfoenclose}, and @code{@@def@r{(}code@r{)}index}
- (@pxref{Defining New Texinfo Commands}) to be true. Caveat: the @TeX{}
- implementation reports internal @TeX{} commands, in addition to all
- the Texinfo commands, as being ``defined''; the @code{makeinfo}
- implementation is reliable in this regard, however.
- @pindex @file{NEWS} file for Texinfo
- You can check the @file{NEWS} file in the Texinfo source distribution
- and linked from the Texinfo home page
- (@url{http://www.gnu.org/software/texinfo}) to see when a particular
- command was added.
- @vindex txicommandconditionals
- These command-checking conditionals themselves were added in
- Texinfo@tie{}5.0, released in 2013---decades after Texinfo's
- inception. In order to test if they themselves are available,
- the predefined flag @code{txicommandconditionals} can be tested, like
- this:
- @example
- @@ifset txicommandconditionals
- @@ifcommandnotdefined foobarnode
- (Good, @@samp@{@@@@foobarnode@} is not defined.)
- @@end ifcommandnotdefined
- @@end ifset
- @end example
- Since flags (see the previous section) were added early in the
- existence of Texinfo, there is no problem with assuming they are
- available.
- We recommend avoiding these tests whenever possible---which is usually
- the case. For many software packages, it is reasonable for all
- developers to have a given version of Texinfo (or newer) installed,
- and thus no reason to worry about older versions. (It is
- straightforward for anyone to download and install the Texinfo source;
- it does not have any problematic dependencies.)
- The issue of Texinfo versions does not generally arise for end-users.
- With properly distributed packages, users need not process the Texinfo
- manual simply to build and install the package; they can use
- preformatted Info (or other) output files. This is desirable in
- general, to avoid unnecessary dependencies between packages
- (@pxref{Releases,,, standards, GNU Coding Standards}).
- @node Conditional Nesting
- @section Conditional Nesting
- @cindex Conditionals, nested
- @cindex Nesting conditionals
- Conditionals can be nested; however, the details are a little tricky.
- The difficulty comes with failing conditionals, such as
- @code{@@ifhtml} when HTML is not being produced, where the included
- text is to be ignored. However, it is not to be @emph{completely}
- ignored, since it is useful to have one @code{@@ifset} inside another,
- for example---that is a way to include text only if two conditions are
- met. Here's an example:
- @example
- @@ifset somevar
- @@ifset anothervar
- Both somevar and anothervar are set.
- @@end ifset
- @@ifclear anothervar
- Somevar is set, anothervar is not.
- @@end ifclear
- @@end ifset
- @end example
- Technically, Texinfo requires that for a failing conditional, the
- ignored text must be properly nested with respect to that failing
- conditional. Unfortunately, it's not always feasible to check that
- @emph{all} conditionals are properly nested, because then the
- processors could have to fully interpret the ignored text, which
- defeats the purpose of the command. Here's an example illustrating
- these rules:
- @example
- @@ifset a
- @@ifset b
- @@ifclear ok - ok, ignored
- @@end junky - ok, ignored
- @@end ifset
- @@c WRONG - missing @@end ifset.
- @end example
- Finally, as mentioned above, all conditional commands must be on lines
- by themselves, with no text (even spaces) before or after. Otherwise,
- the processors cannot reliably determine which commands to consider
- for nesting purposes.
- @node Defining New Texinfo Commands
- @chapter Defining New Texinfo Commands
- @cindex Macros
- @cindex Defining new Texinfo commands
- @cindex New Texinfo commands, defining
- @cindex Texinfo commands, defining new
- @cindex User-defined Texinfo commands
- Texinfo provides several ways to define new commands (in all cases,
- it's not recommended to try redefining existing commands):
- @itemize @bullet
- @item
- A Texinfo @dfn{macro} allows you to define a new Texinfo command as any
- sequence of text and/or existing commands (including other macros). The
- macro can have any number of @dfn{parameters}---text you supply each
- time you use the macro.
- Incidentally, these macros have nothing to do with the @code{@@defmac}
- command, which is for documenting macros in the subject area of the
- manual (@pxref{Def Cmd Template}).
- @item
- @samp{@@alias} is a convenient way to define a new name for an existing
- command.
- @item
- @samp{@@definfoenclose} allows you to define new commands with
- customized output for all non-@TeX{} output formats.
- @end itemize
- Most generally of all (not just for defining new commands), it is
- possible to invoke any external macro processor and have Texinfo
- recognize so-called @code{#line} directives for error reporting.
- If you want to do simple text substitution, @code{@@set} and
- @code{@@value} is the simplest approach (@pxref{@code{@@set @@clear
- @@value}}).
- @menu
- * Defining Macros:: Defining and undefining new commands.
- * Invoking Macros:: Using a macro, once you've defined it.
- * Macro Details:: Limitations of Texinfo macros.
- * @code{@@alias}:: Command aliases.
- * @code{@@definfoenclose}:: Customized highlighting.
- * External Macro Processors:: @code{#line} directives.
- @end menu
- @node Defining Macros
- @section Defining Macros
- @cindex Defining macros
- @cindex Macro definitions, Texinfo
- @findex macro
- You use the Texinfo @code{@@macro} command to define a macro, like this:
- @example
- @@macro @var{macroname}@{@var{param1}, @var{param2}, @dots{}@}
- @var{text} @dots{} \@var{param1}\ @dots{}
- @@end macro
- @end example
- The @dfn{parameters} @var{param1}, @var{param2}, @dots{} correspond to
- arguments supplied when the macro is subsequently used in the document
- (described in the next section).
- @cindex Macro names, valid characters in
- @cindex Names of macros, valid characters of
- For a macro to work consistently with @TeX{}, @var{macroname} must
- consist entirely of letters: no digits, hyphens, underscores, or other
- special characters. So, we recommend using only letters. However,
- @command{makeinfo} will accept anything consisting of alphanumerics,
- and (except as the first character) @samp{-}. The @samp{_} character
- is excluded so that macros can be called inside @code{@@math} without
- a following space (@pxref{Inserting Math}).
- If a macro needs no parameters, you can define it either with an empty
- list (@samp{@@macro foo @{@}}) or with no braces at all (@samp{@@macro
- foo}).
- @cindex Body of a macro
- The definition or @dfn{body} of the macro can contain most Texinfo
- commands, including macro invocations. However, a macro definition
- that defines another macro does not work in @TeX{} due to limitations
- in the design of @code{@@macro}.
- @cindex Parameters to macros
- In the macro body, instances of a parameter name surrounded by
- backslashes, as in @samp{\@var{param1}\} in the example above, are
- replaced by the corresponding argument from the macro invocation. You
- can use parameter names any number of times in the body, including zero.
- @cindex Backslash in macros
- To get a single @samp{\} in the macro expansion, use @samp{\\}. Any
- other use of @samp{\} in the body yields a warning.
- @cindex Spaces in macros
- @cindex Whitespace in macros
- The newline characters after the @code{@@macro} line and before the
- @code{@@end macro} line are ignored, that is, not included in the
- macro body. All other whitespace is treated according to the usual
- Texinfo rules.
- @cindex Recursive macro invocations
- @findex rmacro
- To allow a macro to be used recursively, that is, in an argument to a
- call to itself, you must define it with @samp{@@rmacro}, like this:
- @example
- @@rmacro rmac @{arg@}
- a\arg\b
- @@end rmacro
- @dots{}
- @@rmac@{1@@rmac@{text@}2@}
- @end example
- This produces the output `a1atextb2b'. With @samp{@@macro} instead of
- @samp{@@rmacro}, an error message is given.
- @findex unmacro
- @cindex Macros, undefining
- @cindex Undefining macros
- You can undefine a macro @var{foo} with @code{@@unmacro @var{foo}}.
- It is not an error to undefine a macro that is already undefined.
- For example:
- @example
- @@unmacro foo
- @end example
- @node Invoking Macros
- @section Invoking Macros
- @cindex Invoking macros
- @cindex Expanding macros
- @cindex Running macros
- @cindex Macro invocation
- After a macro is defined (see the previous section), you can
- @dfn{invoke} (use) it in your document like this:
- @example
- @@@var{macroname} @{@var{arg1}, @var{arg2}, @dots{}@}
- @end example
- @noindent and the result will be more or less as if you typed the body of
- @var{macroname} at that spot. For example:
- @example
- @@macro foo @{p, q@}
- Together: \p\ & \q\.
- @@end macro
- @@foo@{a, b@}
- @end example
- @noindent produces:
- @display
- Together: a & b.
- @end display
- @cindex Backslash, and macros
- Thus, the arguments and parameters are separated by commas and
- delimited by braces; any whitespace after (but not before) a comma is
- ignored. The braces are required in the invocation even when the
- macro takes no arguments, consistent with other Texinfo commands. For
- example:
- @example
- @@macro argless @{@}
- No arguments here.
- @@end macro
- @@argless@{@}
- @end example
- @noindent produces:
- @display
- No arguments here.
- @end display
- @cindex Comma, in macro arguments
- Passing macro arguments containing commas requires care, since
- commas also separate the arguments. To include a comma character in
- an argument, the most reliable method is to use the @code{@@comma@{@}}
- command. For @code{makeinfo}, you can also prepend a backslash
- character, as in @samp{\,}, but this does not work with @TeX{}.
- @cindex Automatic quoting of commas for some macros
- @cindex Quoting, automatic for some macros
- It's not always necessary to worry about commas. To facilitate use of
- macros, @command{makeinfo} implements two rules for @dfn{automatic
- quoting} in some circumstances:
- @enumerate 1
- @item If a macro takes only one argument, all commas in its invocation
- are quoted by default. For example:
- @example
- @group
- @@macro TRYME@{text@}
- @@strong@{TRYME: \text\@}
- @@end macro
- @@TRYME@{A nice feature, though it can be dangerous.@}
- @end group
- @end example
- @noindent
- will produce the following output
- @example
- @strong{TRYME: A nice feature, though it can be dangerous.}
- @end example
- And indeed, it can. Namely, @command{makeinfo} does not control the
- number of arguments passed to one-argument macros, so be careful when
- you invoke them.
- @item If a macro invocation includes another command (including a
- recursive invocation of itself), any commas in the nested command
- invocation(s) are quoted by default. For example, in
- @example
- @@say@{@@strong@{Yes, I do@}, person one@}
- @end example
- the comma after @samp{Yes} is implicitly quoted. Here's another
- example, with a recursive macro:
- @example
- @group
- @@rmacro cat@{a,b@}
- \a\\b\
- @@end rmacro
- @@cat@{@@cat@{foo, bar@}, baz@}
- @end group
- @end example
- @noindent
- will produce the string @samp{foobarbaz}.
- @item Otherwise, a comma should be explicitly quoted, as above, for it
- to be treated as a part of an argument.
- @end enumerate
- @cindex Backslash, in macro arguments
- @cindex Braces, in macro arguments
- The backslash itself can be quoted in macro arguments with another
- backslash. For example:
- @example
- @@@var{macname} @{\\bleh@}
- @end example
- @noindent
- will pass the argument @samp{\bleh} to @var{macname}.
- @command{makeinfo} also recognizes @samp{\@{} and @samp{\@}} sequences
- for curly braces, but these are not recognized by the implementation in
- @TeX{}. There should, however, rarely be a need for these, as they are
- only needed when a macro argument contains unbalanced braces.
- If a macro is defined to take exactly one argument, it can be
- invoked without any braces, taking all of the line after the macro name
- as the argument. For example:
- @example
- @@macro bar @{p@}
- Twice: \p\ & \p\.
- @@end macro
- @@bar aah
- @end example
- @noindent produces:
- @display
- Twice: aah & aah.
- @end display
- @noindent
- In these arguments, there is no escaping of special characters, so each
- @samp{\} stands for itself.
- If a macro is defined to take more than one argument, but is called
- with only one (in braces), the remaining arguments are set to the
- empty string, and no error is given. For example:
- @example
- @@macro addtwo @{p, q@}
- Both: \p\\q\.
- @@end macro
- @@addtwo@{a@}
- @end example
- @noindent produces simply:
- @display
- Both: a.
- @end display
- @node Macro Details
- @section Macro Details and Caveats
- @cindex Macro details
- @cindex Details of macro usage
- @cindex Caveats for macro usage
- @cindex Macro expansion, contexts for
- @cindex Expansion of macros, contexts for
- By design, macro expansion does not happen in the following contexts
- in @command{makeinfo}:
- @itemize @bullet
- @item @code{@@macro} and @code{@@unmacro} lines;
- @item @code{@@if...} lines, including @code{@@ifset} and similar;
- @item @code{@@set}, @code{@@clear}, @code{@@value};
- @item @code{@@clickstyle} lines;
- @item @code{@@end} lines.
- @end itemize
- @noindent Unfortunately, @TeX{} may do some expansion in these situations,
- possibly yielding errors.
- Also, quite a few macro-related constructs cause problems with @TeX{};
- some of the caveats are listed below. Thus, if you get macro-related
- errors when producing the printed version of a manual, you might try
- expanding the macros with @command{makeinfo} by invoking
- @command{texi2dvi} with the @samp{-E} option (@pxref{Format with
- @command{texi2dvi}}). Or, more reliably, eschew Texinfo macros altogether
- and use a language designed for macro processing, such as M4
- (@pxref{External Macro Processors}).
- @itemize @bullet
- @item
- As mentioned earlier, macro names must consist entirely of letters.
- @item
- It is not advisable to redefine any @TeX{} primitive, plain, or
- Texinfo command name as a macro. Unfortunately this is a large and
- open-ended set of names, and the possible resulting errors are
- unpredictable.
- @item
- Arguments to macros taking more than one argument cannot cross lines.
- @item
- Macros containing a command which must be on a line by itself, such as
- a conditional, cannot be invoked in the middle of a line. Similarly,
- macros containing line-oriented commands or text, such as
- @code{@@example} environments, may behave unpredictably in @TeX{}.
- @item
- If you have problems using conditionals within a macro, an alternative
- is to use separate macro definitions inside conditional blocks. For
- example, instead of
- @example
- @@macro Mac
- @@iftex
- text for TeX output
- @@end iftex
- @@ifnottex
- text for not TeX output
- @@end ifnottex
- @@end macro
- @end example
- @noindent you can do the following instead:
- @example
- @@iftex
- @@macro Mac
- text for TeX output
- @@end macro
- @@end iftex
- @@ifnottex
- @@macro Mac
- text for not TeX output
- @@end macro
- @@end ifnottex
- @end example
- @item
- Texinfo commands in the expansion of a macro in the text of an index
- entry may end up being typeset as literal text (including an ``@@''
- sign), instead of being interpreted with their intended meaning.
- @item
- White space is ignored at the beginnings of lines.
- @item
- Macros can't be reliably used in the argument to accent commands
- (@pxref{Inserting Accents}).
- @item
- The backslash escape for commas in macro arguments does not work;
- @code{@@comma@{@}} must be used.
- @item
- Likewise, if you want to pass an argument with the Texinfo command
- @code{@@,} (to produce a cedilla, see @ref{Inserting Accents}), you have
- to use @code{@@value} or another work-around. Otherwise, the comma
- may be taken as separating the arguments. For example,
- @example
- @@macro mactwo@{argfirst, argsecond@}
- \argfirst\+\argsecond\.
- @@end macro
- @@set fc Fran@@,cois
- @@mactwo@{@@value@{fc@},@}
- @end example
- @noindent produces:
- @display
- Fran@,cois+.
- @end display
- @c currently @mactwo{Fran@,cois} works in TeX, but @mactwo{Franc@\,cois}
- @c works in makeinfo. better to avoid commas altogether using this trick.
- @c an alternative to @, could be invented if needed.
- @item
- Ending a macro body with @samp{@@c} may cause text following the macro
- invocation to be ignored as a comment in @command{makeinfo}. This is
- not the case when processing with @TeX{}. This was often done
- to ``comment out'' an unwanted newline at the end of a macro body, but
- this is not necessary any more, as the final newline before @samp{@@end
- macro} is not included in the macro body anyway.
- @item
- In general, you can't arbitrarily substitute a macro (or
- @code{@@value}) call for Texinfo command arguments, even when the text
- is the same. Texinfo is not M4 (or even plain @TeX{}). It might work
- with some commands, it fails with others. Best not to do it at all.
- For instance, this fails:
- @example
- @@macro offmacro
- off
- @@end macro
- @@headings @@offmacro
- @end example
- @noindent
- This looks equivalent to @code{@@headings off}, but for @TeX{}nical
- reasons, it fails with a mysterious error message (namely,
- @samp{Paragraph ended before @@headings was complete}).
- @item
- Macros cannot define macros in the natural way. To do this, you must
- use conditionals and raw @TeX{}. For example:
- @example
- @@ifnottex
- @@macro ctor @{name, arg@}
- @@macro \name\
- something involving \arg\ somehow
- @@end macro
- @@end macro
- @@end ifnottex
- @@tex
- \gdef\ctor#1@{\ctorx#1,@}
- \gdef\ctorx#1,#2,@{\def#1@{something involving #2 somehow@}@}
- @@end tex
- @end example
- @end itemize
- The @command{makeinfo} implementation also has the following
- limitations (by design):
- @itemize
- @item
- @code{@@verbatim} and macros do not mix; for instance, you can't start
- a verbatim block inside a macro and end it outside
- (@pxref{@code{@@verbatim}}). Starting any environment inside a macro
- and ending it outside may or may not work, for that matter.
- @item
- Macros that completely define macros are ok, but it's not possible to
- have incompletely nested macro definitions. That is, @code{@@macro}
- and @code{@@end macro} (likewise for @code{@@rmacro}) must be
- correctly paired. For example, you cannot start a macro definition
- within a macro, and then end that nested definition outside the macro.
- @end itemize
- In the @code{makeinfo} implementation before Texinfo 5.0, ends of
- lines from expansion of a @code{@@macro} definition did not end an
- @@-command line-delimited argument (@code{@@chapter}, @code{@@center},
- etc.). This is no longer the case. For example:
- @example
- @@macro twolines@{@}
- aaa
- bbb
- @@end macro
- @@center @@twolines@{@}
- @end example
- In the current @code{makeinfo}, this is equivalent to:
- @example
- @@center aaa
- bbb
- @end example
- @noindent with just @samp{aaa} as the argument to @code{@@center}. In
- the earlier implementation, it would have been parsed as this:
- @example
- @@center aaa bbb
- @end example
- @node @code{@@alias}
- @section @samp{@@alias @var{new}=@var{existing}}
- @anchor{alias}@c old name
- @cindex Aliases, command
- @cindex Command aliases
- @findex alias
- The @samp{@@alias} command defines a new command to be just like an
- existing one. This is useful for defining additional markup names,
- thus preserving additional semantic information in the input even
- though the output result may be the same.
- Write the @samp{@@alias} command on a line by itself, followed by the
- new command name, an equals sign, and the existing command name.
- Whitespace around the equals sign is optional and ignored if present.
- Thus:
- @example
- @@alias @var{new} = @var{existing}
- @end example
- For example, if your document contains citations for both books and
- some other media (movies, for example), you might like to define a
- macro @code{@@moviecite@{@}} that does the same thing as an ordinary
- @code{@@cite@{@}} but conveys the extra semantic information as well.
- You'd do this as follows:
- @example
- @@alias moviecite = cite
- @end example
- Macros do not always have the same effect as aliases, due to vagaries
- of argument parsing. Also, aliases are much simpler to define than
- macros. So the command is not redundant.
- Unfortunately, it's not possible to alias Texinfo environments; for
- example, @code{@@alias lang=example} is an error.
- Aliases must not be recursive, directly or indirectly.
- It is not advisable to redefine any @TeX{} primitive, plain @TeX{}, or
- Texinfo command name as an alias. Unfortunately this is a very large
- set of names, and the possible resulting errors from @TeX{} are
- unpredictable.
- @command{makeinfo} will accept the same identifiers for aliases as it
- does for macro names, that is, alphanumerics and (except as the first
- character) @samp{-}.
- @node @code{@@definfoenclose}
- @section @code{@@definfoenclose}: Customized Highlighting
- @anchor{definfoenclose}@c old name
- @cindex Highlighting, customized
- @cindex Customized highlighting
- @findex definfoenclose
- An @code{@@definfoenclose} command may be used to define a
- highlighting command for all the non-@TeX{} output formats. A command
- defined using @code{@@definfoenclose} marks text by enclosing it in
- strings that precede and follow the text. You can use this to get
- closer control of your output.
- Presumably, if you define a command with @code{@@definfoenclose}, you
- will create a corresponding command for @TeX{}, either in
- @file{texinfo.tex}, @file{texinfo.cnf}, or within an @samp{@@iftex} or
- @samp{@@tex} in your document.
- Write a @code{@@definfoenclose} command at the beginning of a line
- followed by three comma-separated arguments. The first argument to
- @code{@@definfoenclose} is the @@-command name (without the
- @code{@@}); the second argument is the start delimiter string; and the
- third argument is the end delimiter string. The latter two arguments
- enclose the highlighted text in the output.
- A delimiter string may contain spaces. Neither the start nor end
- delimiter is required. If you do not want a start delimiter but do
- want an end delimiter, you must follow the command name with two
- commas in a row; otherwise, the end delimiter string you intended will
- naturally be (mis)interpreted as the start delimiter string.
- If you do a @code{@@definfoenclose} on the name of a predefined
- command (such as @code{@@emph}, @code{@@strong}, @code{@@t}, or
- @code{@@i}), the enclosure definition will override the built-in
- definition. We don't recommend this.
- An enclosure command defined this way takes one argument in braces,
- since it is intended for new markup commands (@pxref{Marking Text}).
- @findex phoo
- For example, you can write:
- @example
- @@definfoenclose phoo,//,\\
- @end example
- @noindent
- near the beginning of a Texinfo file to define @code{@@phoo} as an Info
- formatting command that inserts `//' before and `\\' after the argument
- to @code{@@phoo}. You can then write @code{@@phoo@{bar@}} wherever you
- want `//bar\\' highlighted in Info.
- For @TeX{} formatting, you could write
- @example
- @@iftex
- @@global@@let@@phoo=@@i
- @@end iftex
- @end example
- @noindent
- to define @code{@@phoo} as a command that causes @TeX{} to typeset the
- argument to @code{@@phoo} in italics.
- Each definition applies to its own formatter: one for @TeX{}, the
- other for everything else. The raw @TeX{} commands need to be in
- @samp{@@iftex}. @code{@@definfoenclose} command need not be within
- @samp{@@ifinfo}, unless you want to use different definitions for
- different output formats.
- @findex headword
- Here is another example: write
- @example
- @@definfoenclose headword, , :
- @end example
- @noindent
- near the beginning of the file, to define @code{@@headword} as an Info
- formatting command that inserts nothing before and a colon after the
- argument to @code{@@headword}.
- @samp{@@definfoenclose} definitions must not be recursive, directly or
- indirectly.
- @node External Macro Processors
- @section External Macro Processors: Line Directives
- @cindex External macro processors
- @cindex Macro processors, external
- Texinfo macros (and its other text substitution facilities) work fine
- in straightforward cases. If your document needs unusually complex
- processing, however, their fragility and limitations can be a problem.
- In this case, you may want to use a different macro processor
- altogether, such as M4 (@pxref{Top,,, m4, M4}) or CPP (@pxref{Top,,,
- cpp, The C Preprocessor}).
- With one exception, Texinfo does not need to know whether its input is
- ``original'' source or preprocessed from some other source file.
- Therefore, you can arrange your build system to invoke whatever
- programs you like to handle macro expansion or other preprocessing
- needs. Texinfo does not offer built-in support for any particular
- preprocessor, since no one program seemed likely to suffice for the
- requirements of all documents.
- @cindex Line numbers, in error messages
- @cindex Error messages, line numbers in
- The one exception is line numbers in error messages. In that case,
- the line number should refer to the original source file, whatever it
- may be. There's a well-known mechanism for this: the so-called
- @samp{#line} directive. Texinfo supports this.
- @menu
- * @samp{#line} Directive::
- * TeX: @samp{#line} and @TeX{}.
- * Syntax: @samp{#line} Syntax Details.
- @end menu
- @node @samp{#line} Directive
- @subsection @samp{#line} Directive
- @cindex @samp{#line} directive
- An input line such as this:
- @example
- @hashchar{}line 100 "foo.ptexi"
- @end example
- @noindent indicates that the next line was line 100 of the file
- @file{foo.ptexi}, and so that's what an error message should refer to.
- Both M4 (@pxref{Preprocessor features,,, m4, GNU M4}) and CPP
- (@pxref{Line Control,,, cpp, The C Preprocessor}, and
- @ref{Preprocessor Output,,, cpp, The C Preprocessor}) can generate
- such lines.
- @vindex CPP_LINE_DIRECTIVES
- The @command{makeinfo} program recognizes these lines by default,
- except within @code{@@verbatim} blocks (@pxref{@code{@@verbatim}}.
- Their recognition can be turned off completely with
- @code{CPP_LINE_DIRECTIVES} (@pxref{Other Customization Variables}),
- though there is normally no reason to do so.
- For those few programs (M4, CPP, Texinfo) which need to document
- @samp{#line} directives and therefore have examples which would
- otherwise match the pattern, the command @code{@@hashchar@{@}} can be
- used (@pxref{Inserting a Hashsign}). The example line above looks
- like this in the source for this manual:
- @example
- @@hashchar@{@}line 100 "foo.ptexi"
- @end example
- The @code{@@hashchar} command was added to Texinfo in 2013. If you
- don't want to rely on it, you can also use @code{@@set} and
- @code{@@value} to insert the literal @samp{#}:
- @example
- @@set hash #
- @@value@{hash@}line 1 "example.c"
- @end example
- Or, if suitable, a @code{@@verbatim} environment can be used instead
- of @code{@@example}. As mentioned above, @code{#line}-recognition is
- disabled inside verbatim blocks.
- @node @samp{#line} and @TeX{}
- @subsection @samp{#line} and @TeX{}
- @cindex @TeX{} and @samp{#line} directives
- @cindex @samp{#line} directives, not processing with @TeX{}
- As mentioned, @command{makeinfo} recognizes the @samp{#line}
- directives described in the previous section. However,
- @file{texinfo.tex} does not and cannot. Therefore, such a line will
- be incorrectly typeset verbatim if @TeX{} sees it. The solution is to
- use @command{makeinfo}'s macro expansion options before running
- @TeX{}. There are three approaches:
- @itemize @bullet
- @item
- If you run @command{texi2dvi} or its variants (@pxref{Format with
- @command{texi2dvi}}), you can pass @option{-E} and @command{texi2dvi}
- will run @command{makeinfo} first to expand macros and eliminate
- @samp{#line}.
- @item
- If you run @command{makeinfo} or its variants (@pxref{Generic
- Translator @command{texi2any}}), you can specify @option{--no-ifinfo
- --iftex -E somefile.out}, and then give @file{somefile.out} to
- @code{texi2dvi} in a separate command.
- @item
- Or you can run @option{makeinfo --dvi --Xopt -E}. (Or @option{--pdf}
- instead of @option{--dvi}.) @command{makeinfo} will then call
- @command{texi2dvi -E}.
- @end itemize
- @findex errormsg@r{, and line numbers in @TeX{}}
- One last caveat regarding use with @TeX{}: since the @code{#line}
- directives are not recognized, the line numbers emitted by the
- @code{@@errormsg@{@}} command (@pxref{Conditional Commands}), or by
- @TeX{} itself, are the (incorrect) line numbers from the derived file
- which @TeX{} is reading, rather than the preprocessor-specified line
- numbers. This is another example of why we recommend running
- @command{makeinfo} for the best diagnostics (@pxref{@command{makeinfo}
- Advantages}).
- @node @samp{#line} Syntax Details
- @subsection @samp{#line} Syntax Details
- @cindex @samp{#line} syntax details
- @cindex Syntax details, @samp{#line}
- @cindex Regular expression, for @samp{#line}
- Syntax details for the @samp{#line} directive: the @samp{#} character
- can be preceded or followed by whitespace, the word @samp{line} is
- optional, and the file name can be followed by a whitespace-separated
- list of integers (these are so-called ``flags'' output by CPP in some
- cases). For those who like to know the gory details, the actual
- (Perl) regular expression which is matched is this:
- @example
- /^\s*#\s*(line)? (\d+)(( "([^"]+)")(\s+\d+)*)?\s*$/
- @end example
- As far as we've been able to tell, the trailing integer flags only
- occur in conjunction with a filename, so that is reflected in the
- regular expression.
- As an example, the following is a syntactically valid @samp{#line}
- directive, meaning line 1 of @file{/usr/include/stdio.h}:
- @example
- @hashchar{} 1 "/usr/include/stdio.h" 2 3 4
- @end example
- Unfortunately, the quoted filename (@samp{"..."}) has to be optional,
- because M4 (especially) can often generate @samp{#line} directives
- within a single file. Since the @samp{line} is also optional, the
- result is that lines might match which you wouldn't expect, e.g.,
- @example
- @hashchar{} 1
- @end example
- The possible solutions are described above (@pxref{@samp{#line} Directive}).
- @node Include Files
- @chapter Include Files
- @cindex Include files
- When a Texinfo processor sees an @code{@@include} command in a Texinfo
- file, it processes the contents of the file named by the
- @code{@@include} and incorporates them into the output files being
- created. Include files thus let you keep a single large document as a
- collection of conveniently small parts.
- @menu
- * Using Include Files:: How to use the @code{@@include} command.
- * @code{texinfo-multiple-files-update}:: How to create and update nodes and
- menus when using included files.
- * Include Files Requirements:: @code{texinfo-multiple-files-update} needs.
- * Sample Include File:: A sample outer file with included files
- within it; and a sample included file.
- * @code{@@verbatiminclude}:: Including a file verbatim.
- * Include Files Evolution:: How use of the @code{@@include} command
- has changed over time.
- @end menu
- @node Using Include Files
- @section How to Use Include Files
- @findex include
- To include another file within a Texinfo file, write the
- @code{@@include} command at the beginning of a line and follow it on
- the same line by the name of a file to be included. For example:
- @example
- @@include buffers.texi
- @end example
- @@-commands are expanded in file names. The one most likely to be
- useful is @code{@@value} (@pxref{@code{@@set @@value}}), and even then
- only in complicated situations.
- An included file should simply be a segment of text that you expect to
- be included as is into the overall or @dfn{outer} Texinfo file; it
- should not contain the standard beginning and end parts of a Texinfo
- file. In particular, you should not start an included file with a
- line saying @samp{\input texinfo}; if you do, that text is inserted
- into the output file literally. Likewise, you should not end an
- included file with a @code{@@bye} command; nothing after @code{@@bye}
- is formatted.
- In the long-ago past, you were required to write an
- @code{@@setfilename} line at the beginning of an included file, but no
- longer. Now, it does not matter whether you write such a line. If an
- @code{@@setfilename} line exists in an included file, it is ignored.
- @node @code{texinfo-multiple-files-update}
- @section @code{texinfo-multiple-files-update}
- @findex texinfo-multiple-files-update
- GNU Emacs Texinfo mode provides the
- @code{texinfo-multiple-files-update} command. This command creates or
- updates `Next', `Previous', and `Up' pointers of included files as
- well as those in the outer or overall Texinfo file, and it creates or
- updates a main menu in the outer file. Depending on whether you call
- it with optional arguments, the command updates only the pointers in
- the first @code{@@node} line of the included files or all of them:
- @table @kbd
- @item M-x texinfo-multiple-files-update
- Called without any arguments:
- @itemize @minus
- @item
- Create or update the `Next', `Previous', and `Up' pointers of the
- first @code{@@node} line in each file included in an outer or overall
- Texinfo file.
- @item
- Create or update the `Top' level node pointers of the outer or
- overall file.
- @item
- Create or update a main menu in the outer file.
- @end itemize
- @item C-u M-x texinfo-multiple-files-update
- Called with @kbd{C-u} as a prefix argument:
- @itemize @minus{}
- @item
- Create or update pointers in the first @code{@@node} line in each
- included file.
- @item
- Create or update the `Top' level node pointers of the outer file.
- @item
- Create and insert a master menu in the outer file. The master menu
- is made from all the menus in all the included files.
- @end itemize
- @item C-u 8 M-x texinfo-multiple-files-update
- Called with a numeric prefix argument, such as @kbd{C-u 8}:
- @itemize @minus
- @item
- Create or update @emph{all} the `Next', `Previous', and `Up' pointers
- of all the included files.
- @item
- Create or update @emph{all} the menus of all the included
- files.
- @item
- Create or update the `Top' level node pointers of the outer or
- overall file.
- @item
- And then create a master menu in the outer file. This is similar to
- invoking @code{texinfo-master-menu} with an argument when you are
- working with just one file.
- @end itemize
- @end table
- Note the use of the prefix argument in interactive use: with a regular
- prefix argument, just @w{@kbd{C-u}}, the
- @code{texinfo-multiple-files-update} command inserts a master menu;
- with a numeric prefix argument, such as @kbd{C-u 8}, the command
- updates @emph{every} pointer and menu in @emph{all} the files and
- then inserts a master menu.
- @node Include Files Requirements
- @section Include Files Requirements
- @cindex Include files requirements
- @cindex Requirements for include files
- If you plan to use the @code{texinfo-multiple-files-update} command,
- the outer Texinfo file that lists included files within it should
- contain nothing but the beginning and end parts of a Texinfo file, and
- a number of @code{@@include} commands listing the included files. It
- should not even include indices, which should be listed in an included
- file of their own.
- Moreover, each of the included files must contain exactly one highest
- level node (conventionally, @code{@@chapter} or equivalent),
- and this node must be the first node in the included file.
- Furthermore, each of these highest level nodes in each included file
- must be at the same hierarchical level in the file structure.
- Usually, each is a @code{@@chapter}, an @code{@@appendix}, or an
- @code{@@unnumbered} node. Thus, normally, each included file contains
- one, and only one, chapter or equivalent-level node.
- The outer file should contain only @emph{one} node, the `Top' node. It
- should @emph{not} contain any nodes besides the single `Top' node. The
- @code{texinfo-multiple-files-update} command will not process
- them.
- @node Sample Include File
- @section Sample File with @code{@@include}
- @cindex Sample @code{@@include} file
- @cindex Include file sample
- @cindex @code{@@include} file sample
- Here is an example of an outer Texinfo file with @code{@@include} files
- within it before running @code{texinfo-multiple-files-update}, which
- would insert a main or master menu:
- @example
- @group
- \input texinfo @@c -*-texinfo-*-
- @c %**start of header
- @@settitle Include Example
- @c %**end of header
- @end group
- ... @xref{Sample Texinfo Files}, for
- examples of the rest of the frontmatter ...
- @group
- @@ifnottex
- @@node Top
- @@top Include Example
- @@end ifnottex
- @end group
- @group
- @@include foo.texinfo
- @@include bar.texinfo
- @@include concept-index.texinfo
- @@bye
- @end group
- @end example
- An included file, such as @file{foo.texinfo}, might look like this:
- @example
- @group
- @@node First
- @@chapter First Chapter
- Contents of first chapter @dots{}
- @end group
- @end example
- The full contents of @file{concept-index.texinfo} might be as simple as this:
- @example
- @group
- @@node Concept Index
- @@unnumbered Concept Index
- @@printindex cp
- @end group
- @end example
- The outer Texinfo source file for @cite{The GNU Emacs Lisp Reference
- Manual} is named @file{elisp.texi}. This outer file contains a master
- menu with 417 entries and a list of 41 @code{@@include}
- files.
- @node @code{@@verbatiminclude}
- @section @code{@@verbatiminclude} @var{file}: Include a File Verbatim
- @anchor{verbatiminclude}@c old name
- @findex verbatiminclude
- @cindex Verbatim, include file
- @cindex Including a file verbatim
- You can include the exact contents of a file in the document with the
- @code{@@verbatiminclude} command:
- @example
- @@verbatiminclude @var{filename}
- @end example
- The contents of @var{filename} is printed in a verbatim environment
- (@pxref{@code{@@verbatim}}). Generally, the file is printed exactly
- as it is, with all special characters and white space retained. No
- indentation is added; if you want indentation, enclose the
- @code{@@verbatiminclude} within @code{@@example}
- (@pxref{@code{@@example}}).
- The name of the file is taken literally, with a single exception:
- @code{@@value@{@var{var}@}} references are expanded. This makes it
- possible to include files in other directories within a distribution,
- for instance:
- @example
- @@verbatiminclude @@value@{top_srcdir@}/NEWS
- @end example
- @noindent (You still have to get @code{top_srcdir} defined in the
- first place.)
- For a method on printing the file contents in a smaller font size, see
- the end of the section on @code{@@verbatim}.
- @node Include Files Evolution
- @section Evolution of Include Files
- When Info was first created, it was customary to create many small
- Info files on one subject. Each Info file was formatted from its own
- Texinfo source file. This custom meant that Emacs did not need to
- make a large buffer to hold the whole of a large Info file when
- someone wanted information; instead, Emacs allocated just enough
- memory for the small Info file that contained the particular
- information sought. This way, Emacs could avoid wasting memory.
- References from one file to another were made by referring to the file
- name as well as the node name. (@xref{Other Info Files, , Referring to
- Other Info Files}. Also, see @ref{Four and Five Arguments, ,
- @code{@@xref} with Four and Five Arguments}.)
- Include files were designed primarily as a way to create a single,
- large printed manual out of several smaller Info files. In a printed
- manual, all the references were within the same document, so @TeX{}
- could automatically determine the references' page numbers. The Info
- formatting commands used include files only for creating joint
- indices; each of the individual Texinfo files had to be formatted for
- Info individually. (Each, therefore, required its own
- @code{@@setfilename} line.)
- However, because large Info files are now split automatically, it is
- no longer necessary to keep them small.
- Nowadays, multiple Texinfo files are used mostly for large documents,
- such as @cite{The GNU Emacs Lisp Reference Manual}, and for projects
- in which several different people write different sections of a
- document simultaneously.
- In addition, the Info formatting commands have been extended to work
- with the @code{@@include} command so as to create a single large Info
- file that is split into smaller files if necessary. This means that
- you can write menus and cross-references without naming the different
- Texinfo files.
- @node Hardcopy
- @chapter Formatting and Printing Hardcopy
- @cindex Format and print hardcopy
- @cindex Printing hardcopy
- @cindex Hardcopy, printing it
- @cindex Making a printed manual
- @cindex Sorting indices
- @cindex Indices, sorting
- @cindex @TeX{} index sorting
- Running the @command{texi2dvi} or @command{texi2pdf} command is the
- simplest way to create printable output. These commands are installed
- as part of the Texinfo package.
- In more detail, three major shell commands are used to print formatted
- output from a Texinfo manual: one converts the Texinfo source into
- something printable, a second sorts indices, and a third actually
- prints the formatted document. When you use the shell commands, you
- can either work directly in the operating system shell or work within
- a shell inside GNU Emacs (or some other computing environment).
- If you are using GNU Emacs, you can use commands provided by Texinfo
- mode instead of shell commands. In addition to the three commands to
- format a file, sort the indices, and print the result, Texinfo mode
- offers key bindings for commands to recenter the output buffer, show the
- print queue, and delete a job from the print queue.
- Details are in the following sections.
- @menu
- * Use @TeX{}:: Use @TeX{} to format for hardcopy.
- * Format with @command{texi2dvi}:: The simplest way to format.
- * Format with @command{tex}/@command{texindex}:: Formatting with explicit shell commands.
- * Print with @command{lpr}:: How to print.
- * Within Emacs:: How to format and print from an Emacs shell.
- * Texinfo Mode Printing:: How to format and print in Texinfo mode.
- * Compile-Command:: How to print using Emacs's compile command.
- * Requirements Summary:: @TeX{} formatting requirements summary.
- * Preparing for @TeX{}:: What to do before you use @TeX{}.
- * Overfull hboxes:: What are and what to do with overfull hboxes.
- * @code{@@smallbook}:: How to print small format books and manuals.
- * A4 Paper:: How to print on A4 or A5 paper.
- * @code{@@pagesizes}:: How to print with customized page sizes.
- * Cropmarks and Magnification:: How to print marks to indicate the size
- of pages and how to print scaled up output.
- * PDF Output:: Portable Document Format output.
- * Obtaining @TeX{}:: How to obtain @TeX{}.
- @end menu
- @node Use @TeX{}
- @section Use @TeX{}
- The typesetting program called @TeX{} is used to format a Texinfo
- document for printable output. @TeX{} is a very powerful typesetting
- program and, when used correctly, does an exceptionally good job.
- @xref{Obtaining @TeX{}}, for information on how to obtain @TeX{}. It
- is not included in the Texinfo package, being a vast suite of software
- in itself.
- @node Format with @command{texi2dvi}
- @section Format with @command{texi2dvi}
- @pindex texi2dvi @r{(shell script)}
- @cindex DVI, output in
- The @code{texi2dvi} program takes care of all the steps for producing
- a @TeX{} DVI file from a Texinfo document. Similarly, @code{texi2pdf}
- produces a PDF file.
- To run @code{texi2dvi} or @code{texi2pdf} on an input file
- @file{foo.texi}, do this (where @samp{prompt$ } is your shell prompt):
- @example
- prompt$ @kbd{texi2dvi foo.texi}
- prompt$ @kbd{texi2pdf foo.texi}
- @end example
- As shown in this example, the input filenames to @code{texi2dvi} and
- @code{texi2pdf} must include any extension, such as @samp{.texi}.
- (Under MS-DOS and perhaps in other circumstances, you may need to run
- @samp{sh texi2dvi foo.texi} instead of relying on the operating system
- to invoke the shell on the @samp{texi2dvi} script.)
- For a list of all the options, run @samp{texi2dvi --help}. Some of the
- options are discussed below.
- @opindex --pdf@r{, for @command{texi2dvi}}
- @pindex pdftexi2dvi
- With the @option{--pdf} option, @command{texi2dvi} produces PDF output
- instead of DVI (@pxref{PDF Output}), by running @command{pdftex}
- instead of @command{tex}. Alternatively, the command
- @command{texi2pdf} is an abbreviation for running @samp{texi2dvi
- --pdf}. The command @command{pdftexi2dvi} is also provided as a
- convenience for AUC-@TeX{} (@pxref{Top,,, auctex, AUC-@TeX{}}), as it
- prefers to merely prepend @samp{pdf} to DVI producing tools to have
- PDF producing tools.
- @opindex --dvipdf@r{, for @command{texi2dvi}}
- @pindex dvipdfmx
- With the @option{--dvipdf} option, @command{texi2dvi} produces PDF
- output by running @TeX{} and then a DVI-to-PDF program: if the
- @env{DVIPDF} environment variable is set, that value is used, else the
- first program extant among @code{dvipdfmx}, @code{dvipdfm},
- @code{dvipdf}, @code{dvi2pdf}, @code{dvitopdf}. This method generally
- supports CJK typesetting better than @command{pdftex}.
- @opindex --ps@r{, for @command{texi2dvi}}
- @pindex dvips
- With the @option{--ps} option, @command{texi2dvi} produces PostScript
- instead of DVI, by running @command{tex} and then @command{dvips}
- (@pxref{Top,,, dvips, Dvips}). (Or the value of the @env{DVIPS}
- environment variable, if set.)
- @opindex --language@r{, for @command{texi2dvi}}
- @cindex @LaTeX{}, processing with @command{texi2dvi}
- @command{texi2dvi} can also be used to process @LaTeX{} files.
- Normally @command{texi2dvi} is able to guess the input file language
- by its contents and file name extension; however, if it guesses wrong
- you can explicitly specify the input language using
- @option{--language=@var{lang}} command line option, where @var{lang}
- is either @samp{latex} or @samp{texinfo}.
- @opindex --command@r{, for @command{texi2dvi}}
- One useful option to @code{texi2dvi} is @samp{--command=@var{cmd}}.
- This inserts @var{cmd} on a line by itself, after a
- @code{@@setfilename} line in a temporary copy of the input file, before
- running @TeX{}. With this, you can specify different printing
- formats, such as @code{@@smallbook} (@pxref{@code{@@smallbook}}),
- @code{@@afourpaper} (@pxref{A4 Paper}), or @code{@@pagesizes}
- (@pxref{@code{@@pagesizes}}), without actually changing the document
- source. (You can also do this on a site-wide basis with
- @file{texinfo.cnf}; @pxref{Preparing for @TeX{}}).
- The option @option{-E} (equivalently, @option{-e} and
- @option{--expand}) does Texinfo macro expansion using
- @command{makeinfo} instead of the @TeX{} implementation (@pxref{Macro
- Details}). Each implementation has its own limitations and
- advantages. If this option is used, no line in the source file
- may begin with the string @code{@@c@tie{}_texi2dvi} or the
- string @code{@@c@tie{}(_texi2dvi)}.
- @command{texi2dvi} takes the @option{--build=@var{mode}} option to
- specify where the @TeX{} compilation takes place, and, as a
- consequence, how auxiliary files are treated. The build mode
- can also be set using the environment variable
- @env{TEXI2DVI_BUILD_MODE}. The valid values for @var{mode} are:
- @table @samp
- @item local
- Compile in the current directory, leaving all the auxiliary
- files around. This is the traditional TeX use.
- @item tidy
- Compile in a local @code{*.t2d} directory, where the auxiliary files
- are left. Output files are copied back to the original file.
- Using the @samp{tidy} mode brings several advantages:
- @itemize -
- @item the current directory is not cluttered with plethora of temporary files.
- @item clutter can be even further reduced using @option{--build-dir=dir}: all
- the @code{*.t2d} directories are stored there.
- @item clutter can be reduced to zero using, e.g.,
- @option{--build-dir=/tmp/\$USER.t2d} or @option {--build-dir=\$HOME/.t2d}.
- @item the output file is updated after every successful @TeX{} run, for
- sake of concurrent visualization of the output. In a @samp{local} build
- the viewer stops during the whole @TeX{} run.
- @item if the compilation fails, the previous state of the output file
- is preserved.
- @item @acronym{PDF} and @acronym{DVI} compilation are kept in separate
- subdirectories
- preventing any possibility of auxiliary file incompatibility.
- @end itemize
- On the other hand, because @samp{tidy} compilation takes place in another
- directory, occasionally @TeX{} won't be able to find some files (e.g., when
- using @code{\graphicspath}): in that case, use @option{-I} to specify the
- additional directories to consider.
- @item clean
- Same as @samp{tidy}, but remove the auxiliary directory afterwards.
- Every compilation therefore requires the full cycle.
- @end table
- @pindex etex
- @pindex pdfetex
- @command{texi2dvi} will use @command{etex} (or @command{pdfetex}) if
- it is available, because it runs faster in some cases, and
- provides additional tracing information when debugging
- @file{texinfo.tex}. Nevertheless, this extended version of @TeX{} is
- not required, and the DVI output is identical.
- (These days, @command{pdftex} and @command{pdfetex} are exactly the
- same, but we still run @command{pdfetex} to cater to ancient @TeX{}
- installations.)
- @cindex filename recorder for @TeX{}
- @cindex @samp{\openout} line in log file
- @command{texi2dvi} attempts to detect auxiliary files output by @TeX{},
- either by using the @option{-recorder} option, or by scanning for
- @samp{\openout} in the log file that a run of @TeX{} produces. You may
- control how @command{texi2dvi} does this with the @env{TEXI2DVI_USE_RECORDER}
- environment variable. Valid values are:
- @table @samp
- @item yes
- use the @option{-recorder} option, no checks.
- @item no
- scan for @samp{\openout} in the log file, no checks.
- @item yesmaybe
- check whether @option{-recorder} option is supported, and if yes
- use it, otherwise check for tracing @samp{\openout} in the log file is
- supported, and if yes use it, else it is an error.
- @item nomaybe
- same as @samp{yesmaybe}, except that the @samp{\openout} trace in log
- file is checked first.
- @end table
- The default is @samp{nomaybe}. This environment variable is provided
- for troubleshooting purposes, and may change or disappear in the future.
- @node Format with @command{tex}/@command{texindex}
- @section Format with @command{tex}/@command{texindex}
- @cindex Shell formatting with @code{tex} and @code{texindex}
- @cindex Formatting with @code{tex} and @code{texindex}
- @cindex DVI file
- You can do the basic formatting of a Texinfo file with the shell
- command @code{tex} followed by the name of the Texinfo file. For
- example:
- @example
- tex foo.texi
- @end example
- @noindent @TeX{} will produce a @dfn{DVI file} as well as several auxiliary
- files containing information for indices, cross-references, etc. The
- DVI file (for @dfn{DeVice Independent} file) can be printed on
- virtually any device, perhaps after a further conversion (see the
- previous section).
- @pindex texindex
- The @code{tex} formatting command itself does not sort the indices; it
- writes an output file of unsorted index data. To generate a printed
- index after running the @command{tex} command, you first need a sorted
- index to work from. The @command{texindex} command sorts indices.
- (@command{texi2dvi}, described in the previous section, runs
- @command{tex} and @command{texindex} as necessary.)
- @anchor{Names of index files}
- @cindex Names of index files
- @cindex Index file names
- @code{tex} outputs unsorted index files under names following a
- standard convention: the name of your main input file with any
- @samp{.texi} or similar extension replaced by the two letter index
- name. For example, the raw index output files for the input file
- @file{foo.texi} would be, by default, @file{foo.cp}, @file{foo.vr},
- @file{foo.fn}, @file{foo.tp}, @file{foo.pg} and @file{foo.ky}. Those
- are exactly the arguments to give to @code{texindex}.
- @need 1000
- @cindex Wildcards
- @cindex Globbing
- Instead of specifying all the unsorted index file names explicitly,
- it's typical to use @samp{??} as shell wildcards and give the command
- in this form:
- @example
- texindex foo.??
- @end example
- @noindent
- This command will run @code{texindex} on all the unsorted index files,
- including any two letter indices that you have defined yourself using
- @code{@@defindex} or @code{@@defcodeindex}. You can safely run
- @samp{texindex foo.??} even if there are files with two letter
- extensions that are not index files, such as @samp{foo.el}. The
- @code{texindex} command reports but otherwise ignores such files.
- For each file specified, @code{texindex} generates a sorted index file
- whose name is made by appending @samp{s} to the input file name; for
- example, @file{foo.cps} is made from @file{foo.cp}. The
- @code{@@printindex} command looks for a file with that name
- (@pxref{Printing Indices & Menus}). @TeX{} does not read the raw
- index output file, and @code{texindex} does not alter it.
- After you have sorted the indices, you need to rerun @code{tex} on the
- Texinfo file. This regenerates the output file, this time with
- up-to-date index entries.
- Finally, you may need to run @code{tex} one more time, to get the page
- numbers in the cross-references correct.
- To summarize, this is a five step process. (Alternatively, it's a
- one-step process: run @code{texi2dvi}; see the previous section.)
- @enumerate
- @item
- Run @code{tex} on your Texinfo file. This generates a DVI file (with
- undefined cross-references and no indices), and the raw index files
- (with two letter extensions).
- @item
- Run @code{texindex} on the raw index files. This creates the
- corresponding sorted index files (with three letter extensions).
- @item
- Run @code{tex} again on your Texinfo file. This regenerates the DVI
- file, this time with indices and defined cross-references, but with
- page numbers for the cross-references from the previous run, generally
- incorrect.
- @item
- Sort the indices again, with @code{texindex}.
- @item
- Run @code{tex} one last time. This time the correct page numbers are
- written for the cross-references.
- @end enumerate
- @menu
- * Formatting Partial Documents::
- * Details of @command{texindex}::
- @end menu
- @node Formatting Partial Documents
- @subsection Formatting Partial Documents
- @cindex Formatting partial documents
- @cindex Partial documents, formatting
- @cindex Chapters, formatting one at a time
- @cindex Auxiliary files, omitting
- @cindex Pointer validation, suppressing
- @findex novalidate
- Sometimes you may wish to print a document while you know it is
- incomplete, or to print just one chapter of a document. In such a
- case, the usual auxiliary files that @TeX{} creates and warnings
- @TeX{} gives about undefined cross-references are just nuisances. You
- can avoid them with the @code{@@novalidate} command, which you must
- give @emph{before} any sectioning or cross-reference commands.
- Thus, the beginning of your file would look approximately like this:
- @example
- \input texinfo
- @@novalidate
- @dots{}
- @end example
- @noindent @code{@@novalidate} also turns off validation in
- @code{makeinfo}, just like its @code{--no-validate} option
- (@pxref{Pointer Validation}).
- Furthermore, you need not run @code{texindex} each time after you run
- @code{tex}. The @code{tex} formatting command simply uses whatever
- sorted index files happen to exist from a previous use of
- @code{texindex}. If those are out of date, that is usually ok while
- you are creating or debugging a document.
- @node Details of @command{texindex}
- @subsection Details of @command{texindex}
- @cindex Braces, in index entries
- In Texinfo version 6, released in 2015, the @command{texindex} program
- was completely reimplemented. The principal functional difference is
- that index entries beginning with a left brace or right brace
- (@samp{@{} resp.@: @samp{@}}) can work properly. For example, these
- simple index entries are processed correctly, including the ``index
- initial'' shown in the index:
- @example
- @@cindex @@@{
- @@cindex @@@}
- ...
- @@printindex cp
- @end example
- @findex \usebracesinindexestrue
- However, to enable this behavior, it's necessary (for the time being)
- to give a special option to @TeX{} early in a source document:
- @example
- @@tex
- \global\usebracesinindexestrue
- @@end tex
- @end example
- @cindex Sort string, incorrect @samp{|}
- This is because the previous @command{texindex} implementation aborted
- with an incorrect error message (@samp{No page number in \entry...})
- on such index entries when handled in the normal way. Therefore
- @TeX{} wrote out an incorrect ``sort string'' using the @samp{|}
- character; this did not affect the text of the entry, but the index
- initial was the incorrect @samp{|}, and sorting was not perfect.
- Because of that fatal error, and because relatively few documents have
- index entries beginning with braces, we want to provide some
- transition time for installations to have the new @command{texindex}.
- At some point in the future, we'll make @code{\usebracesinindexes}
- true by default (the above @TeX{} code will continue to work fine).
- @cindex Literate programming, with Texinfo and @code{awk}
- @cindex Texinfo, and literate programming
- @cindex Robbins, Arnold
- @pindex texiwebjr
- @pindex ti.twjr
- Although not a matter of functionality, readers may be interested to
- know that the new @command{texindex} is a literate program
- (@url{http://en.wikipedia.org/wiki/Literate_programming}) using
- Texinfo for documentation and (portable) @code{awk} for code. A
- single source file, @file{texindex/ti.twjr} in this case, produces the
- runnable program, a printable document, and an online document.
- The system is called TexiWeb Jr.@: and was created by Arnold
- Robbins, who also wrote the new @command{texindex}. Not
- coincidentally, he is also the long-time maintainer of @command{gawk}
- (GNU Awk, @pxref{Top,,, gawk, The GNU Awk User's Guide}). The file
- @file{texindex/Makefile.am} shows example usage of the system.
- @node Print with @command{lpr}
- @section Print with @command{lpr} from Shell
- @pindex lpr @r{(DVI print command)}
- The way to print a DVI file depends on your system installation. Two
- common ones are @samp{dvips foo.dvi -o} to make a PostScript file
- first and then print that, and @samp{lpr -d foo.dvi} to print a DVI
- file directly.
- For example, the following commands will (probably) suffice to sort
- the indices, format, and print this manual using the @code{texi2dvi}
- shell script (@pxref{Format with @command{texi2dvi}}).
- @example
- @group
- texi2dvi texinfo.texi
- dvips texinfo.dvi -o
- lpr texinfo.ps
- @end group
- @end example
- Depending on the @code{lpr} setup on your machine, you might able to
- combine the last two steps into @code{lpr -d texinfo.dvi}.
- @cindex PCL file, for printing
- You can also generate a PDF file by running @code{texi2pdf} instead of
- @code{texi2dvi}; a PDF is often directly printable. Or you can
- generate a PCL file by using @code{dvilj} instead of @code{dvips}, if
- you have a printer that prefers that format.
- @cindex Shell printing, on MS-DOS/MS-Windows
- @cindex Printing DVI files, on MS-DOS/MS-Windows
- @pindex lpr@r{-d, replacements on MS-DOS/MS-Windows}
- @code{lpr} is a standard program on Unix systems, but it is usually
- absent on MS-DOS/MS-Windows. If so, just create a PostScript or PDF
- or PCL file, whatever is most convenient, and print that in the usual
- way for your machine (e.g., by sending to the appropriate port,
- usually @samp{PRN}).
- @node Within Emacs
- @section Printing From an Emacs Shell
- @cindex Print, format from Emacs shell
- @cindex Format, print from Emacs shell
- @cindex Shell, format, print from
- @cindex Emacs shell, format, print from
- @cindex GNU Emacs shell, format, print from
- You can give formatting and printing commands from a shell within GNU
- Emacs, just like any other shell command. To create a shell within
- Emacs, type @kbd{M-x shell} (@pxref{Shell,,, emacs, The GNU Emacs
- Manual}). In this shell, you can format and print the document.
- @xref{Hardcopy, , Format and Print Hardcopy}, for details.
- You can switch to and from the shell buffer while @code{tex} is
- running and do other editing. If you are formatting a long document
- on a slow machine, this can be very convenient.
- For example, you can use @code{texi2dvi} from an Emacs shell. Here is
- one way to use @code{texi2pdf} to format and print @cite{Using and
- Porting GNU CC} from a shell within Emacs:
- @example
- @group
- texi2pdf gcc.texi
- lpr gcc.pdf
- @end group
- @end example
- See the next section for more information about formatting
- and printing in Texinfo mode.
- @node Texinfo Mode Printing
- @section Formatting and Printing in Texinfo Mode
- @cindex Region printing in Texinfo mode
- @cindex Format and print in Texinfo mode
- @cindex Print and format in Texinfo mode
- Texinfo mode provides several predefined key commands for @TeX{}
- formatting and printing. These include commands for sorting indices,
- looking at the printer queue, killing the formatting job, and
- recentering the display of the buffer in which the operations
- occur.
- @table @kbd
- @item C-c C-t C-b
- @itemx M-x texinfo-tex-buffer
- Run @code{texi2dvi} on the current buffer.
- @item C-c C-t C-r
- @itemx M-x texinfo-tex-region
- Run @TeX{} on the current region.
- @item C-c C-t C-i
- @itemx M-x texinfo-texindex
- Sort the indices of a Texinfo file formatted with
- @code{texinfo-tex-region}.
- @item C-c C-t C-p
- @itemx M-x texinfo-tex-print
- Print a DVI file that was made with @code{texinfo-tex-region} or
- @code{texinfo-tex-buffer}.
- @item C-c C-t C-q
- @itemx M-x tex-show-print-queue
- Show the print queue.
- @item C-c C-t C-d
- @itemx M-x texinfo-delete-from-print-queue
- Delete a job from the print queue; you will be prompted for the job
- number shown by a preceding @kbd{C-c C-t C-q} command
- (@code{texinfo-show-tex-print-queue}).
- @item C-c C-t C-k
- @itemx M-x tex-kill-job
- Kill the currently running @TeX{} job started by either
- @code{texinfo-tex-region} or @code{texinfo-tex-buffer}, or any other
- process running in the Texinfo shell buffer.
- @item C-c C-t C-x
- @itemx M-x texinfo-quit-job
- Quit a @TeX{} formatting job that has stopped because of an error by
- sending an @key{x} to it. When you do this, @TeX{} preserves a record
- of what it did in a @file{.log} file.
- @item C-c C-t C-l
- @itemx M-x tex-recenter-output-buffer
- Redisplay the shell buffer in which the @TeX{} printing and formatting
- commands are run to show its most recent output.
- @end table
- @need 1000
- Thus, the usual sequence of commands for formatting a buffer is as
- follows (with comments to the right):
- @example
- @group
- C-c C-t C-b @r{Run @code{texi2dvi} on the buffer.}
- C-c C-t C-p @r{Print the DVI file.}
- C-c C-t C-q @r{Display the printer queue.}
- @end group
- @end example
- The Texinfo mode @TeX{} formatting commands start a subshell in Emacs
- called the @file{*tex-shell*}. The @code{texinfo-tex-command},
- @code{texinfo-texindex-command}, and @code{tex-dvi-print-command}
- commands are all run in this shell.
- You can watch the commands operate in the @samp{*tex-shell*} buffer,
- and you can switch to and from and use the @samp{*tex-shell*} buffer
- as you would any other shell buffer.
- @need 1500
- The formatting and print commands depend on the values of several variables.
- The default values are:
- @example
- @group
- @r{Variable} @r{Default value}
- texinfo-texi2dvi-command "texi2dvi"
- texinfo-tex-command "tex"
- texinfo-texindex-command "texindex"
- texinfo-delete-from-print-queue-command "lprm"
- texinfo-tex-trailer "@@bye"
- tex-start-of-header "%**start"
- tex-end-of-header "%**end"
- tex-dvi-print-command "lpr -d"
- tex-show-queue-command "lpq"
- @end group
- @end example
- You can change the values of these variables with the @kbd{M-x
- set-variable} command (@pxref{Examining, , Examining and Setting
- Variables, emacs, The GNU Emacs Manual}), or with your @file{.emacs}
- initialization file (@pxref{Init File, , , emacs, The GNU Emacs
- Manual}).
- @cindex Customize Emacs package (@t{Development/Docs/Texinfo})
- Beginning with version 20, GNU Emacs offers a user-friendly interface,
- called @dfn{Customize}, for changing values of user-definable variables.
- @xref{Easy Customization, , Easy Customization Interface, emacs, The GNU
- Emacs Manual}, for more details about this. The Texinfo variables can
- be found in the @samp{Development/Docs/Texinfo} group, once you invoke
- the @kbd{M-x customize} command.
- @node Compile-Command
- @section Using the Local Variables List
- @cindex Local variables
- @cindex Compile command for formatting
- @cindex Format with the compile command
- Yet another way to apply the @TeX{} formatting command to a Texinfo file
- is to put that command in a @dfn{local variables list} at the end of the
- Texinfo file. You can then specify the @code{tex} or @code{texi2dvi}
- commands as a @code{compile-command} and have Emacs run it by typing
- @kbd{M-x compile}. This creates a special shell called the
- @file{*compilation*} buffer in which Emacs runs the compile command.
- For example, at the end of the @file{gdb.texi} file, after the
- @code{@@bye}, you could put the following:
- @example
- @group
- Local Variables:
- compile-command: "texi2dvi gdb.texi"
- End:
- @end group
- @end example
- @noindent
- This technique is most often used by programmers who also compile programs
- this way; see @ref{Compilation, , , emacs, The GNU Emacs Manual}.
- @node Requirements Summary
- @section @TeX{} Formatting Requirements Summary
- @cindex Requirements for formatting
- @cindex Minimal requirements for formatting
- @cindex Formatting requirements
- Every Texinfo file that is to be input to @TeX{} must begin with a
- @code{\input} command:
- @example
- \input texinfo
- @end example
- @noindent
- This instructs @TeX{} to load the macros it needs to process a Texinfo
- file.
- Every Texinfo file must end with a line that terminates @TeX{}'s
- processing and forces out unfinished pages:
- @example
- @@bye
- @end example
- Strictly speaking, these two lines are all a Texinfo file needs to be
- processed successfully by @TeX{}.
- Usually, however, the beginning includes a @code{@@settitle} command
- to define the title of the printed manual, a title page, a copyright
- page, permissions, and a table of contents. Besides @code{@@bye}, the
- end of a file usually includes indices. (Not to mention that most
- manuals contain a body of text as well.)
- For more information, see:
- @itemize @bullet
- @item @ref{@code{@@settitle}}.
- @item @ref{@code{@@setchapternewpage}}.
- @item @ref{Headings}.
- @item @ref{Titlepage & Copyright Page}.
- @item @ref{Printing Indices & Menus}.
- @item @ref{Contents}.
- @end itemize
- @node Preparing for @TeX{}
- @section Preparing for @TeX{}
- @cindex Preparing for @TeX{}
- @cindex @TeX{} input initialization
- @cindex @sortas{profile init} @file{.profile} initialization file
- @cindex @sortas{cshrc init} @file{.cshrc} initialization file
- @cindex Initialization file for @TeX{} input
- @TeX{} needs to know where to find the @file{texinfo.tex} file that the
- @samp{\input texinfo} command on the first line reads. The
- @file{texinfo.tex} file tells @TeX{} how to handle @@-commands; it is
- included in all standard GNU distributions. The latest version
- released for general use is available
- from the usual GNU servers and mirrors:
- @smalldisplay
- @uref{http://ftp.gnu.org/gnu/texinfo/texinfo.tex}
- @uref{http://ftpmirror.gnu.org/texinfo/texinfo.tex}
- @end smalldisplay
- The latest development version is available from the Texinfo source
- repository:
- @smalldisplay
- @uref{http://svn.savannah.gnu.org/viewvc/trunk/doc/texinfo.tex?root=texinfo&view=log}
- @end smalldisplay
- @pindex texinfo.tex@r{, installing}
- @file{texinfo.tex} is essentially a standalone file, and compatibility
- is of utmost concern; so, if you need or want to try a newer version
- than came with your system, it nearly always suffices to download it
- and put it anywhere that @TeX{} will find it (first). You can replace
- any existing @file{texinfo.tex} with a newer version (of course saving
- the original in case of disaster).
- @pindex epsf.tex@r{, installing}
- Also, you should install @file{epsf.tex}, if it is not already installed
- from another distribution. More details are at the end of the description
- of the @code{@@image} command (@pxref{Images}).
- @cindex European Computer Modern fonts, installing
- @cindex EC fonts, installing
- @cindex CM-Super fonts, installing
- To use quotation marks other than those used in English, you'll need
- to have the European Computer Modern fonts (e.g., @file{ecrm1000}) and
- (for PDF output) CM-Super fonts (@pxref{Inserting Quotation Marks}).
- @pindex feymr10@r{, installing}
- @cindex Euro font, installing
- To use the @code{@@euro} command, you'll need the @samp{feym*} fonts
- (e.g., @file{feymr10}). @xref{@code{@@euro}}.
- All of the above files (and a whole lot more) should be installed by
- default in a reasonable @TeX{} installation.
- @pindex texinfo.cnf @r{installation}
- @cindex Customizing of @TeX{} for Texinfo
- @cindex Site-wide Texinfo configuration file
- Optionally, you may create a file @file{texinfo.cnf} for site configuration.
- This file is read by @TeX{} at the beginning of a Texinfo file.
- You can put any commands you like there, according to local site-wide
- conventions. They will be read by @TeX{} when processing any Texinfo
- document. For example, if @file{texinfo.cnf} contains the line
- @samp{@@afourpaper} (@pxref{A4 Paper}), then all Texinfo documents
- will be processed with that page size in effect. If you have nothing
- to put in @file{texinfo.cnf}, you do not need to create it.
- @cindex Environment variable @code{TEXINPUTS}
- @vindex TEXINPUTS
- If neither of the above locations for these system files suffice, you
- can specify the directories explicitly. For @file{texinfo.tex}, you
- can do this by writing the complete path for the file after the
- @code{\input} command. Another way, that works for both
- @file{texinfo.tex} and @file{texinfo.cnf} (and any other file @TeX{}
- might read), is to set the @code{TEXINPUTS} environment variable in
- your @file{.profile} or @file{.cshrc} file.
- Whether you use @file{.profile} or @file{.cshrc} depends on
- whether you use a Bourne shell-compatible (@code{sh}, @code{bash},
- @code{ksh}, @dots{}) or C shell-compatible (@code{csh}, @code{tcsh})
- command interpreter, respeictvely.
- In a @file{.profile} file, you could use the following @code{sh} command
- sequence:
- @example
- @group
- TEXINPUTS=.:/home/me/mylib:
- export TEXINPUTS
- @end group
- @end example
- @need 1000
- While in a @file{.cshrc} file, you could use the following @code{csh}
- command sequence:
- @example
- setenv TEXINPUTS .:/home/me/mylib:
- @end example
- On MS-DOS/MS-Windows, you'd do this (note the use of the @samp{;}
- character as directory separator, instead of @samp{:}):
- @example
- @group
- set TEXINPUTS=.;d:/home/me/mylib;c:
- @end group
- @end example
- @noindent
- It is customary for DOS/Windows users to put such commands in the
- @file{autoexec.bat} file, or in the Windows registry.
- @noindent
- These settings would cause @TeX{} to look for @file{\input} file first
- in the current directory, indicated by the @samp{.}, then in a
- hypothetical user @samp{me}'s @file{mylib} directory, and finally in
- the system directories. (A leading, trailing, or doubled @samp{:}
- indicates searching the system directories at that point.)
- @node Overfull hboxes
- @section Overfull ``hboxes''
- @cindex Overfull @samp{hboxes}
- @cindex @samp{hbox}, overfull
- @cindex Final output
- @TeX{} is sometimes unable to typeset a line within the normal
- margins. This most often occurs when @TeX{} comes upon what it
- interprets as a long word that it cannot hyphenate, such as an
- electronic mail network address or a very long identifier. When this
- happens, @TeX{} prints an error message like this:
- @example
- Overfull @@hbox (20.76302pt too wide)
- @end example
- @findex hbox
- @noindent
- (In @TeX{}, lines are in ``horizontal boxes'', hence the term, ``hbox''.
- @samp{@@hbox} is a @TeX{} primitive not used in the Texinfo language.)
- @TeX{} also provides the line number in the Texinfo source file and
- the text of the offending line, which is marked at all the places that
- @TeX{} considered hyphenation. @xref{Debugging with @TeX{}}, for more
- information about typesetting errors.
- If the Texinfo file has an overfull hbox, you can rewrite the sentence
- so the overfull hbox does not occur, or you can decide to leave it. A
- small excursion into the right margin often does not matter and may not
- even be noticeable.
- If you have many overfull boxes and/or an antipathy to rewriting, you
- can coerce @TeX{} into greatly increasing the allowable interword
- spacing, thus (if you're lucky) avoiding many of the bad line breaks,
- like this:
- @findex \emergencystretch
- @example
- @@tex
- \global\emergencystretch = .9\hsize
- @@end tex
- @end example
- @noindent
- (You should adjust the fraction as needed.) This huge value for
- @code{\emergencystretch} cannot be the default, since then the typeset
- output would generally be of noticeably lower quality; its default
- value is @samp{.15\hsize}. @code{\hsize} is the @TeX{} dimension
- containing the current line width.
- @cindex Black rectangle in hardcopy
- @cindex Rectangle, black in hardcopy
- @cindex Box, ugly black in hardcopy
- @cindex Ugly black rectangles in hardcopy
- For any overfull boxes you do have, @TeX{} will print a large, ugly,
- black rectangle beside the line that contains the overfull hbox unless
- told otherwise. This is so you will notice the location of the
- problem if you are correcting a draft.
- @findex finalout
- To prevent such a monstrosity from marring your final printout, write
- the following in the beginning of the Texinfo file on a line of its own,
- before the @code{@@titlepage} command:
- @example
- @@finalout
- @end example
- @node @code{@@smallbook}
- @section @code{@@smallbook}: Printing ``Small'' Books
- @anchor{smallbook}@c old name
- @findex smallbook
- @cindex Small book size
- @cindex Book, printing small
- @cindex Page sizes for books
- @cindex Size of printed book
- By default, @TeX{} typesets pages for printing in an 8.5 by 11 inch
- format. However, you can direct @TeX{} to typeset a document in a 7 by
- 9.25 inch format that is suitable for bound books by inserting the
- following command on a line by itself at the beginning of the Texinfo
- file, before the title page:
- @example
- @@smallbook
- @end example
- @noindent
- (Since many books are about 7 by 9.25 inches, this command might better
- have been called the @code{@@regularbooksize} command, but it came to be
- called the @code{@@smallbook} command by comparison to the 8.5 by 11
- inch format.)
- If you write the @code{@@smallbook} command between the
- start-of-header and end-of-header lines, the Texinfo mode @TeX{}
- region formatting command, @code{texinfo-tex-region}, will format the
- region in ``small'' book size (@pxref{Start of Header}).
- @xref{@code{@@small@dots{}}}, for information about commands that make
- it easier to produce examples for a smaller manual.
- @xref{Format with @command{texi2dvi}}, and @ref{Preparing for @TeX{}},
- for other ways to format with @code{@@smallbook} that do not require
- changing the source file.
- @node A4 Paper
- @section Printing on A4 Paper
- @cindex A4 paper, printing on
- @cindex A5 paper, printing on
- @cindex Paper size, A4
- @cindex European A4 paper
- @findex afourpaper
- @findex afivepaper
- You can tell @TeX{} to format a document for printing on European size
- A4 paper (or A5) with the @code{@@afourpaper} (or @code{@@afivepaper})
- command. Write the command on a line by itself near the beginning of
- the Texinfo file, before the title page. For example, this is how you
- would write the header for this manual:
- @example
- @group
- \input texinfo @@c -*-texinfo-*-
- @@c %**start of header
- @@settitle Texinfo
- @@afourpaper
- @@c %**end of header
- @end group
- @end example
- @xref{Format with @command{texi2dvi}}, and @ref{Preparing for @TeX{}},
- for other ways to format for different paper sizes that do not require
- changing the source file.
- @findex afourlatex
- @findex afourwide
- You may or may not prefer the formatting that results from the command
- @code{@@afourlatex}. There's also @code{@@afourwide} for A4 paper in
- wide format.
- @node @code{@@pagesizes}
- @section @code{@@pagesizes} [@var{width}][, @var{height}]: Custom Page Sizes
- @anchor{pagesizes}@c old node name
- @findex pagesizes
- @cindex Custom page sizes
- @cindex Page sizes, customized
- @cindex Text width and height
- @cindex Width of text area
- @cindex Height of text area
- @cindex Depth of text area
- You can explicitly specify the height and (optionally) width of the main
- text area on the page with the @code{@@pagesizes} command. Write this
- on a line by itself near the beginning of the Texinfo file, before the
- title page. The height comes first, then the width if desired,
- separated by a comma. Examples:
- @example
- @@pagesizes 200mm,150mm @c for b5 paper
- @end example
- @noindent and
- @example
- @@pagesizes 11.5in @c for legal paper
- @end example
- @cindex B5 paper, printing on
- @cindex Legal paper, printing on
- This would be reasonable for printing on B5-size paper. To emphasize,
- this command specifies the size of the @emph{text area}, not the size of
- the paper (which is 250@dmn{mm} by 177@dmn{mm} for B5, 14@dmn{in} by
- 8.5@dmn{in} for legal).
- @cindex Margins on page, not controllable
- To make more elaborate changes, such as changing any of the page
- margins, you must define a new command in @file{texinfo.tex} or
- @file{texinfo.cnf}.
- @xref{Format with @command{texi2dvi}}, and @ref{Preparing for @TeX{}},
- for other ways to specify @code{@@pagesizes} that do not require
- changing the source file.
- @node Cropmarks and Magnification
- @section Cropmarks and Magnification
- @findex cropmarks
- @cindex Cropmarks for printing
- @cindex Printing cropmarks
- You can (attempt to) direct @TeX{} to print cropmarks at the corners
- of pages with the @code{@@cropmarks} command. Write the
- @code{@@cropmarks} command on a line by itself near the beginning of
- the Texinfo file, before the title page, like this:
- @example
- @@cropmarks
- @end example
- This command is mainly for printers that typeset several pages on one
- sheet of film; but you can attempt to use it to mark the corners of a
- book set to 7 by 9.25 inches with the @code{@@smallbook} command.
- (Printers will not produce cropmarks for regular sized output that is
- printed on regular sized paper.) Since different printing machines
- work in different ways, you should explore the use of this command
- with a spirit of adventure. You may have to redefine the command in
- @file{texinfo.tex}.
- The @code{@@cropmarks} command is recognized and ignored in non-@TeX{}
- output formats.
- @findex \mag @r{(raw @TeX{} magnification)}
- @cindex Magnified printing
- @cindex Larger or smaller pages
- You can attempt to direct @TeX{} to typeset pages larger or smaller
- than usual with the @code{\mag} @TeX{} command. Everything that is
- typeset is scaled proportionally larger or smaller. (@code{\mag}
- stands for ``magnification''.) This is @emph{not} a Texinfo
- @@-command, but is a raw @TeX{} command that is prefixed with a
- backslash. You have to write this command between @code{@@tex} and
- @code{@@end tex} (@pxref{Raw Formatter Commands}).
- Follow the @code{\mag} command with an @samp{=} and then a number that
- is 1000 times the magnification you desire. For example, to print pages
- at 1.2 normal size, write the following near the beginning of the
- Texinfo file, before the title page:
- @example
- @group
- @@tex
- \global\mag=1200
- @@end tex
- @end group
- @end example
- With some printing technologies, you can print normal-sized copies that
- look better than usual by giving a larger-than-normal master to your
- print shop. They do the reduction, thus effectively increasing the
- resolution.
- Depending on your system, DVI files prepared with a
- nonstandard-@code{\mag} may not print or may print only with certain
- magnifications. Be prepared to experiment.
- @node PDF Output
- @section PDF Output
- @cindex PDF output
- @cindex Output, in PDF
- @pindex pdftex
- The simplest way to generate PDF output from Texinfo source is to run
- the convenience script @command{texi2pdf} (or @command{pdftexi2dvi});
- this executes the @command{texi2dvi} script with the @option{--pdf}
- option (@pxref{Format with @command{texi2dvi}}). If for some reason you
- want to process the document by hand, you can run the @command{pdftex}
- program instead of plain @command{tex}. That is, run @samp{pdftex
- foo.texi} instead of @samp{tex foo.texi}.
- @dfn{PDF} stands for `Portable Document Format'. It was invented by
- Adobe Systems some years ago for document interchange, based on their
- PostScript language. Related links:
- @itemize
- @item
- GNU GV, a @uref{http://www.gnu.org/software/gv/, Ghostscript-based PDF
- reader}. (It can also preview PostScript documents.)
- @item
- @code{xpdf}, a freely available standalone
- @uref{http://www.foolabs.com/xpdf/, PDF reader} for the X window
- system.
- @item
- @uref{https://en.wikipedia.org/wiki/Portable_Document_Format, PDF at
- Wikipedia}.
- @end itemize
- At present, Texinfo does not provide @samp{@@ifpdf} or @samp{@@pdf}
- commands as for the other output formats, since PDF documents contain
- many internal low-level offsets and cross-references that would be
- hard or impossible to specify at the Texinfo source level.
- PDF files require dedicated software to be displayed, unlike the plain
- ASCII formats (Info, HTML) that Texinfo supports. They also tend to
- be much larger than the DVI files output by @TeX{} by default.
- Nevertheless, a PDF file does define an actual typeset document in a
- self-contained file, notably including all the fonts that are used, so
- it has its place.
- @node Obtaining @TeX{}
- @section Obtaining @TeX{}
- @cindex Obtaining @TeX{}
- @cindex @TeX{}, how to obtain
- @TeX{} is a document formatter that is used by the FSF for its
- documentation. It is the easiest way to get printed output (e.g., PDF
- and PostScript) for Texinfo manuals. TeX is freely redistributable,
- and you can get it over the Internet or on physical media. See
- @url{http://tug.org/texlive}.
- @c please keep that text in sync with www.gnu.org/prep/FTP
- @node Generic Translator @command{texi2any}
- @chapter @command{texi2any}: The Generic Translator for Texinfo
- @command{texi2any} is the generic translator for Texinfo that can
- produce different output formats and is highly customizable. It
- supports these formats:
- @table @asis
- @item Info (by default, or with @option{--info}),
- @item HTML (with @option{--html}),
- @item plain text (with @option{--plaintext}),
- @item Docbook (with @option{--docbook}),
- @item Texinfo XML (with @option{--xml}).
- @end table
- @command{makeinfo} is an alias for @command{texi2any}. By default,
- both @command{texi2any} and @command{makeinfo} generate Info output;
- indeed, there are no differences in behavior based on the name.
- Beside these default formats, command line options to
- @command{texi2any} can change many aspects of the output. Beyond
- that, initialization files provide even more control over the final
- output---nearly anything not specified in the Texinfo input file.
- Initialization files are written in Perl, like the main program, and
- anything which can be specified on the command line can also be
- specified within a initialization file.
- The rest of this chapter goes into the details.
- @menu
- * Reference Implementation:: @command{texi2any}: the reference implementation.
- * Invoking @command{texi2any}:: Running the translator from a shell.
- * @command{texi2any} Environment Variables::
- * @command{texi2any} Printed Output:: Calling @command{texi2dvi}.
- * Pointer Validation:: How to check that pointers point somewhere.
- * Customization Variables:: Configuring @command{texi2any}.
- * Internationalization of Document Strings:: Translating program-inserted text.
- * Invoking @command{pod2texi}:: Translating Perl pod to Texinfo.
- * @command{texi2html}:: An ancestor of @command{texi2any}.
- @end menu
- @node Reference Implementation
- @section @command{texi2any}: A Texinfo Reference Implementation
- @cindex @command{texi2any}, as reference implementation
- @cindex Reference implementation
- @cindex Implementation, @command{texi2any} as reference
- Above, we called @command{texi2any} ``the'' translator for Texinfo
- instead of just ``a'' translator, even though (of course) it's
- technically and legally possible for other implementations to be
- written. The reason is that alternative implementations are very
- likely to have subtle, or not-so-subtle, differences in behavior, and
- thus Texinfo documents would become dependent on the processor.
- Therefore, it is important to have a reference implementation that
- defines parts of the language not fully specified by the manual (often
- intentionally so). It is equally important to have consistent
- command-line options and other behavior for all processors.
- @cindex Tree representation of documents
- @cindex Syntax tree representation of documents
- @cindex Abstract syntax tree representation of documents
- For this reason, the once-independent @command{texi2html} Perl Texinfo
- processor was made compatible with the C implementation of
- @command{makeinfo}, to avoid continuing with two different
- implementations (@pxref{History}). The current implementation,
- @command{texi2any}, serves as the reference implementation. It
- inherited the design of customization and other features from
- @command{texi2html} (for more on @command{texi2html} compatibility,
- @pxref{@command{texi2html}}). However, @code{texi2any} is a full
- reimplementation: it constructs a tree-based representation of the
- input document for all back-ends to work from.
- @cindex Texinfo language tests
- @cindex Tests, of Texinfo language
- Extensive tests of the language were developed at the same time as
- @command{texi2any}; we plead with anyone thinking of writing a program
- to parse Texinfo input to at least make use of these tests.
- @cindex Examples of using @command{texi2any}
- @findex Texinfo::Parser module
- The @command{texi2html} wrapper script (@pxref{@command{texi2html}})
- provides a very simple example of calling @command{texi2any} from a
- shell script; it's in @file{util/texi2html} in the Texinfo sources.
- More consequentially, @command{texi-elements-by-size} is an example
- Perl script using the @code{Texinfo::Parser} module interface; it's
- also in the @file{util} source directory. (Its functionality may also
- be useful to authors; @pxref{texi-elements-by-size}.)
- @cindex Future of Texinfo implementations
- With the release of @command{texi2any} as the reference
- implementation, development of both the C implementation of
- @command{makeinfo} and @command{texi2html} has been halted. Going
- forward, we ask authors of Texinfo documents to use only
- @command{texi2any}.
- @node Invoking @command{texi2any}
- @section Invoking @command{texi2any}/@command{makeinfo} from a Shell
- @anchor{Invoking makeinfo}
- @pindex makeinfo
- @pindex texi2any
- To process a Texinfo file, invoke @command{texi2any} or
- @command{makeinfo} (the two names are synonyms for the same program;
- we'll use the names interchangeably) followed by the name of the
- Texinfo file. Also select the format you want to output with the
- appropriate command line option (default is Info). Thus, to create
- the Info file for Bison, type the following to the shell:
- @example
- texi2any --info bison.texinfo
- @end example
- You can specify more than one input file name; each is processed in
- turn. If an input file name is @samp{-}, standard input is read.
- @anchor{@command{makeinfo} Options}
- @c anchor{makeinfo options}@c prev name, but case-insensitive clash
- @cindex @code{makeinfo} options
- @cindex Options for @code{makeinfo}
- @anchor{texi2any Options}
- @cindex @code{texi2any} options
- @cindex Options for @code{texi2any}
- The @command{texi2any} program accepts many options. Perhaps the
- most basic are those that change the output format. By default,
- @command{texi2any} outputs Info.
- Each command line option is either a long name preceded by @samp{--}
- or a single letter preceded by @samp{-}. You can use abbreviations
- for the long option names as long as they are unique.
- For example, you could use the following shell command to create an
- Info file for @file{bison.texinfo} in which lines are filled to only
- 68 columns:
- @example
- texi2any --fill-column=68 bison.texinfo
- @end example
- You can write two or more options in sequence, like this:
- @example
- texi2any --no-split --fill-column=70 @dots{}
- @end example
- @noindent
- (This would keep the Info file together as one possibly very long
- file and would also set the fill column to 70.)
- The options are (approximately in alphabetical order):
- @table @code
- @item --commands-in-node-names
- @opindex --commands-in-node-names
- This option now does nothing, but remains for compatibility. (It used
- to ensure that @@-commands in node names were expanded throughout the
- document, especially @code{@@value}. This is now done by default.)
- @item --conf-dir=@var{path}
- @opindex --conf-dir=@var{path}
- Prepend @var{path} to the directory search list for finding
- customization files that may be loaded with @option{--init-file} (see
- below). The @var{path} value can be a single directory, or a list of
- several directories separated by the usual path separator character
- (@samp{:} on Unix-like systems, @samp{;} on Windows). @c @xref{Loading
- @c Init Files}.
- @item --css-include=@var{file}
- @opindex --css-include
- When producing HTML, literally include the contents of @var{file},
- which should contain W3C cascading style sheets specifications, in the
- @samp{<style>} block of the HTML output. If @var{file} is @samp{-},
- read standard input. @xref{HTML CSS}.
- @item --css-ref=@var{url}
- @opindex --css-ref
- When producing HTML, add a @samp{<link>} tag to the output which
- references a cascading style sheet at @var{url}. This allows using
- standalone style sheets.
- @item -D @var{var}
- @itemx -D '@var{var} @var{value}'
- @opindex -D @var{var}
- Cause the Texinfo variable @var{var} to be defined. This is
- equivalent to @code{@@set @var{var}} in the Texinfo file
- (@pxref{@code{@@set @@clear @@value}}).
- The argument to the option is always one word to the shell; if it
- contains internal whitespace, the first word is taken as the variable
- name and the remainder as the value. For example, @code{-D 'myvar
- someval'} is equivalent to @code{@@set myvar someval}.
- @item --disable-encoding
- @itemx --enable-encoding
- @opindex --disable-encoding
- @opindex --enable-encoding
- By default, or with @option{--enable-encoding}, output accented and
- special characters in Info and plain text output based on
- @samp{@@documentencoding}. With @option{--disable-encoding}, 7-bit
- ASCII transliterations are output. @xref{@code{@@documentencoding}},
- and @ref{Inserting Accents}.
- @item --docbook
- @opindex --docbook
- Generate Docbook output (rather than Info).
- @item --document-language=@var{lang}
- @opindex --document-language
- Use @var{lang} to translate Texinfo keywords which end up in the
- output document. The default is the locale specified by the
- @code{@@documentlanguage} command if there is one, otherwise English
- (@pxref{@code{@@documentlanguage}}).
- @item --dvi
- @opindex --dvi
- Generate a TeX DVI file using @command{texi2dvi}, rather than Info
- (@pxref{@command{texi2any} Printed Output}).
- @item --dvipdf
- @opindex --dvipdf
- Generate a PDF file using @command{texi2dvi --dvipdf}, rather than
- Info (@pxref{@command{texi2any} Printed Output}).
- @item --error-limit=@var{limit}
- @itemx -e @var{limit}
- @opindex --error-limit=@var{limit}
- @opindex -e @var{limit}
- Report @var{LIMIT} errors before aborting (on the assumption that
- continuing would be useless); default 100.
- @item --fill-column=@var{width}
- @itemx -f @var{width}
- @opindex --fill-column=@var{width}
- @opindex -f @var{width}
- Specify the maximum number of columns in a line; this is the
- right-hand edge of a line. Paragraphs that are filled will be filled
- to this width. (Filling is the process of breaking up and connecting
- lines so that lines are the same length as or shorter than the number
- specified as the fill column. Lines are broken between words.) The
- default value is 72.
- @item --footnote-style=@var{style}
- @itemx -s @var{style}
- @opindex --footnote-style=@var{style}
- @opindex -s @var{style}
- Set the footnote style to @var{style}: either @samp{end} for the end
- node style (the default) or @samp{separate} for the separate node
- style. The value set by this option overrides the value set in a
- Texinfo file by a @code{@@footnotestyle} command (@pxref{Footnote
- Styles}).
- When the footnote style is @samp{separate}, @code{makeinfo} makes a
- new node containing the footnotes found in the current node. When the
- footnote style is @samp{end}, @code{makeinfo} places the footnote
- references at the end of the current node.
- In HTML, when the footnote style is @samp{end}, or if the output is
- not split, footnotes are put at the end of the output. If set to
- @samp{separate}, and the output is split, they are placed in a
- separate file.
- @item --force
- @itemx -F
- @opindex --force
- @opindex -F
- Ordinarily, if the input file has errors, the output files are not
- created. With this option, they are preserved.
- @item --help
- @itemx -h
- @opindex --help@r{, for @command{texi2any}}
- @opindex -h
- Print a message with available options and basic usage, then exit
- successfully.
- @item --html
- @opindex --html
- Generate HTML output (rather than Info). By default, the HTML output
- is split into one output file per Texinfo source node, and the split
- output is written into a subdirectory based on the name of the
- top-level Info file. @xref{Generating HTML}.
- @item -I @var{path}
- @opindex -I @var{path}
- Append @var{path} to the directory search list for finding files that
- are included using the @code{@@include} command. By default,
- @code{texi2any} searches only the current directory. If @var{path} is
- not given, the current directory is appended. The @var{path} value
- can be a single directory or a list of several directories separated
- by the usual path separator character (@samp{:} on Unix-like systems,
- @samp{;} on Windows).
- @item --ifdocbook
- @opindex --ifdocbook
- @itemx --ifhtml
- @opindex --ifhtml
- @itemx --ifinfo
- @opindex --ifinfo
- @itemx --ifplaintext
- @opindex --ifplaintext
- @itemx --iftex
- @opindex --iftex
- @itemx --ifxml
- @opindex --ifxml
- For the given format, process @samp{@@if@var{format}} and
- @samp{@@@var{format}} commands, and do not process
- @samp{@@ifnot@var{format}}, regardless of the format being output.
- For instance, if @option{--iftex} is given, then @samp{@@iftex} and
- @samp{@@tex} blocks will be read, and @samp{@@ifnottex} blocks will be
- ignored.
- @item --info
- @opindex --info
- Generate Info output. By default, if the output file contains more
- than about 300,000 bytes, it is split into shorter subfiles of about
- that size. The name of the output file and any subfiles is determined
- by @code{@@setfilename} (@pxref{@code{@@setfilename}}). @xref{Tag and
- Split Files}.
- @item --init-file=@var{file}
- @opindex --init-file=@var{file}
- Load @var{file} as code to modify the behavior and output of the
- generated manual. It is customary to use the @code{.pm} or the
- @code{.init} extensions for these customization files, but that is not
- enforced; the @var{file} name can be anything. The
- @option{--conf-dir} option (see above) can be used to add to the list
- of directories in which these customization files are searched for.
- @c @xref{Loading Init Files}.
- @item --internal-links=@var{file}
- @opindex --internal-links=@var{file}
- @cindex Internal links, of HTML
- In HTML mode, output a tab-separated file containing three columns:
- the internal link to an indexed item or item in the table of contents,
- the name of the index (or table of contents) in which it occurs, and
- the term which was indexed or entered. The items are in the natural
- sorting order for the given element. This dump can be useful for
- post-processors.
- @item --macro-expand=@var{file}
- @itemx -E @var{file}
- @opindex --macro-expand=@var{file}
- @opindex -E @var{file}
- Output the Texinfo source, with all Texinfo macros expanded, to
- @var{file}. Normally, the result of macro expansion is used
- internally by @code{makeinfo} and then discarded.
- @item --no-headers
- @opindex --no-headers
- @cindex Node separators, omitting with @option{--no-headers}
- @cindex Generating plain text files with @option{--no-headers}
- @cindex Menus, omitting with @option{--no-headers}
- Do not include menus or node separator lines in the output.
- When generating Info, this is the same as using @option{--plaintext},
- resulting in a simple plain text file. Furthermore,
- @code{@@setfilename} is ignored, and output is to standard output
- unless overridden with @option{-o}. (This behavior is for backward
- compatibility.)
- @cindex Navigation links, omitting
- When generating HTML, and output is split, also output navigation
- links only at the beginning of each file. If output is not split, do
- not include navigation links at the top of each node at all.
- @xref{Generating HTML}.
- @item --no-ifdocbook
- @opindex --no-ifdocbook
- @itemx --no-ifhtml
- @opindex --no-ifhtml
- @itemx --no-ifinfo
- @opindex --no-ifinfo
- @itemx --no-ifplaintext
- @opindex --no-ifplaintext
- @itemx --no-iftex
- @opindex --no-iftex
- @itemx --no-ifxml
- @opindex --no-ifxml
- For the given format, do not process @samp{@@if@var{format}} and
- @samp{@@@var{format}} commands, and do process
- @samp{@@ifnot@var{format}}, regardless of the format being output.
- For instance, if @option{--no-ifhtml} is given, then @samp{@@ifhtml}
- and @samp{@@html} blocks will not be read, and @samp{@@ifnothtml}
- blocks will be.
- @item --no-node-files
- @itemx --node-files
- @opindex --no-node-files
- @opindex --node-files
- When generating HTML, create redirection files for anchors and any
- nodes not already output with the file name corresponding to the node
- name (@pxref{HTML Xref Node Name Expansion}). This makes it possible
- for section- and chapter-level cross-manual references to succeed
- (@pxref{HTML Xref Configuration}).
- If the output is split, this is enabled by default. If the output is
- not split, @option{--node-files} enables the creation of the
- redirection files, in addition to the monolithic main output file.
- @option{--no-node-files} suppresses the creation of redirection files
- in any case. This option has no effect with any output format other
- than HTML@. @xref{Generating HTML}.
- @item --no-number-footnotes
- @opindex --no-number-footnotes
- Suppress automatic footnote numbering. By default, footnotes are
- numbered sequentially within a node, i.e., the current footnote number
- is reset to 1 at the start of each node.
- @item --no-number-sections
- @itemx --number-sections
- @opindex --no-number-sections
- @opindex --number-sections
- With @option{--number_sections} (the default), output chapter,
- section, and appendix numbers as in printed manuals. This works only
- with hierarchically-structured manuals. You should specify
- @code{--no-number-sections} if your manual is not normally structured.
- @item --no-pointer-validate
- @itemx --no-validate
- @opindex --no-pointer-validate
- @opindex --no-validate
- @cindex Pointer validation, suppressing from command line
- Suppress the pointer-validation phase of @code{makeinfo}---a dangerous
- thing to do. This can also be done with the @code{@@novalidate}
- command (@pxref{Use @TeX{}}). Normally, consistency checks are made
- to ensure that cross-references can be resolved, etc. @xref{Pointer
- Validation}.
- @item --no-warn
- @opindex --no-warn
- Suppress warning messages (but not error messages).
- @item --output=@var{file}
- @itemx -o @var{file}
- @opindex --output=@var{file}
- @opindex -o @var{file}
- Specify that the output should be directed to @var{file}. This
- overrides any file name specified in a @code{@@setfilename} command
- found in the Texinfo source. If neither @code{@@setfilename} nor this
- option are specified, the input file name is used to determine the
- output name. @xref{@code{@@setfilename}}.
- If @var{file} is @samp{-}, output goes to standard output and
- @samp{--no-split} is implied.
- If @var{file} is a directory or ends with a @samp{/} the usual rules
- are used to determine the output file name (namely, use
- @code{@@setfilename} or the input file name) but the files are written
- to the @var{file} directory. For example, @samp{makeinfo -o bar/
- foo.texi}, with or without @option{--no-split}, will write
- @file{bar/foo.info}, and possibly other files, under @file{bar/}.
- When generating HTML and output is split, @var{file} is used as the
- name for the directory into which all files are written. For example,
- @samp{makeinfo -o bar --html foo.texi} will write
- @file{bar/index.html}, among other files.
- @item --output-indent=@var{val}
- @opindex --outputindent
- This option now does nothing, but remains for compatibility. (It used
- to alter indentation in XML/Docbook output.)
- @item -P @var{path}
- @opindex -P @var{path}
- Prepend @var{path} to the directory search list for @code{@@include}.
- If @var{path} is not given, the current directory is prepended. See
- @samp{-I} above.
- @item --paragraph-indent=@var{indent}
- @itemx -p @var{indent}
- @opindex --paragraph-indent=@var{indent}
- @opindex -p @var{indent}
- Set the paragraph indentation style to @var{indent}. The value set by
- this option overrides the value set in a Texinfo file by an
- @code{@@paragraphindent} command (@pxref{@code{@@paragraphindent}}).
- The value of @var{indent} is interpreted as follows:
- @table @asis
- @item @samp{asis}
- Preserve any existing indentation (or lack thereof) at the beginnings
- of paragraphs.
- @item @samp{0} or @samp{none}
- Delete any existing indentation.
- @item @var{num}
- Indent each paragraph by @var{num} spaces.
- @end table
- The default is to indent by two spaces, except for paragraphs
- following a section heading, which are not indented.
- @item --pdf
- @opindex --pdf
- Generate a PDF file using @command{texi2dvi --pdf}, rather than Info
- (@pxref{@command{texi2any} Printed Output}).
- @item --plaintext
- @opindex --plaintext
- @cindex Plain text output with @option{--plaintext}
- @cindex ASCII text output with @option{--plaintext}
- @cindex Generating plain text files with @option{--plaintext}
- @cindex Node separators, omitting with @option{--plaintext}
- @cindex Menus, omitting with @option{--plaintext}
- @cindex @file{INSTALL} file, generating
- Output a plain text file (rather than Info): do not include menus or
- node separator lines in the output. This results in a straightforward
- plain text file that you can (for example) send in email without
- complications, or include in a distribution (for example, an
- @file{INSTALL} file).
- With this option, @code{@@setfilename} is ignored and the output goes
- to standard output by default; this can be overridden with @option{-o}.
- @item --ps
- @opindex --ps
- Generate a PostScript file using @command{texi2dvi --ps}, rather than
- Info (@pxref{@command{texi2any} Printed Output}).
- @item --set-customization-variable @var{var}=@var{value}
- @itemx -c @var{var}=@var{value}
- @opindex --set-customization-variable @var{var}=@var{value}
- @opindex -c @var{var}=@var{value}
- Set the customization variable @var{var} to @var{value}. The @code{=}
- is optional, but both @var{var} and @var{value} must be quoted to the
- shell as necessary so the result is a single word. Many aspects of
- @command{texi2any} behavior and output may be controlled by
- customization variables, beyond what can be set in the document by
- @@-commands and with other command line switches. @xref{Customization
- Variables}.
- @item --split=@var{how}
- @itemx --no-split
- @opindex --split=@var{how}
- @opindex --no-split
- @cindex Splitting of output files
- @cindex Output file splitting
- @anchor{Splitting Output}
- @c
- When generating Info, by default large output files are split into
- smaller subfiles, of approximately 300k bytes. When generating HTML,
- by default each output file contains one node (@pxref{Generating
- HTML}). @option{--no-split} suppresses this splitting of the output.
- Alternatively, @option{--split=@var{how}} may be used to specify at
- which level the HTML output should be split. The possible values for
- @var{how} are:
- @table @samp
- @item chapter
- The output is split at @code{@@chapter} and other sectioning
- @@-commands at this level (@code{@@appendix}, etc.).
- @item section
- The output is split at @code{@@section} and similar.
- @item node
- The output is split at every node. This is the default.
- @end table
- Plain text output can be split similarly to HTML@. This may be useful
- for extracting sections from a Texinfo document and making them
- available as separate files.
- @item --split-size=@var{num}
- @opindex --split-size=@var{num}
- Keep Info files to at most @var{num} characters if possible; default
- is 300,000. (However, a single node will never be split across Info
- files.)
- @item --transliterate-file-names
- @opindex --transliterate-file-names
- Enable transliteration of 8-bit characters in node names for the
- purpose of file name creation. @xref{HTML Xref 8-bit Character Expansion}.
- @item -U @var{var}
- Cause @var{var} to be undefined. This is equivalent to @code{@@clear
- @var{var}} in the Texinfo file (@pxref{@code{@@set @@clear @@value}}).
- @item --verbose
- @opindex --verbose
- Cause @code{makeinfo} to display messages saying what it is doing.
- Normally, @code{makeinfo} only outputs messages if there are errors or
- warnings.
- @item --version
- @itemx -V
- @opindex --version@r{, for @command{texi2any}}
- @opindex -V
- Print the version number, then exit successfully.
- @item --Xopt @var{str}
- @opindex --Xopt @var{str}
- Pass @var{str} (a single shell word) to @command{texi2dvi}; may be
- repeated (@pxref{@command{texi2any} Printed Output}).
- @item --xml
- @opindex --xml
- Generate Texinfo XML output (rather than Info).
- @end table
- @node @command{texi2any} Environment Variables
- @section Environment Variables Recognized by @command{texi2any}
- @vindex TEXINFO_OUTPUT_FORMAT
- @cindex Environment variable @code{TEXINFO_OUTPUT_FORMAT}
- @command{makeinfo} also reads the environment variable
- @env{TEXINFO_OUTPUT_FORMAT} to determine the output format, if not
- overridden by a command line option. The value should be one of:
- @example
- docbook dvi dvipdf html info pdf plaintext ps xml
- @end example
- If not set or otherwise specified, Info output is the default.
- The customization variable of the same name is also read; if set, that
- overrides an environment variable setting, but not a command-line
- option. @xref{Customization Variables and Options}.
- @vindex TEXINFO_XS
- @cindex Perl extension modules (XS)
- You can control @command{texi2any}'s use of Perl extension modules
- by setting the @env{TEXINFO_XS} environment variable. These modules
- are compiled native code that the interpreted Perl code can use.
- Ideally, these extension modules should just work, and the only noticable
- difference they should make is that @command{texi2any} finishes running
- sooner. However, you can use this environment variable for the purposes
- of troubleshooting: for example, if you have problems with the output of
- @command{texi2any} varying depending on whether the extension modules are
- in use.
- The following values of @env{TEXINFO_XS} are recognized by
- @command{texi2any}:
- @table @samp
- @item default
- The default behavior. Try to load extension modules, and silently fall
- back to the interpreted Perl implementations if this fails.
- @item warn
- Try to load extension modules, and if this fails, give a warning message
- before falling back to the interpreted Perl implementations.
- @item debug
- Try to load extension modules, printing many messages while doing so.
- @item omit
- Do not use extension modules.
- @end table
- @node @command{texi2any} Printed Output
- @section @command{texi2any} Printed Output
- @cindex Printed output, through @command{texi2any}
- @cindex Output, printed through @command{texi2any}
- To justify the name Texinfo-to-@emph{any}, @command{texi2any} has
- basic support for creating printed output in the various formats:
- @TeX{} DVI, PDF, and PostScript. This is done via the simple method
- of executing the @command{texi2dvi} program when those output formats
- are requested, after checking the validity of the input to give users
- the benefit of @command{texi2any}'s error checking. If you don't want
- such error checking, perhaps because your manual plays advanced @TeX{}
- tricks together with @file{texinfo.tex}, just invoke
- @command{texi2dvi} directly.
- The output format options for this are @option{--dvi},
- @option{--dvipdf}, @option{--pdf}, and @option{--ps}. @xref{Format
- with @command{texi2dvi}}, for more details on these options and general
- @command{texi2dvi} operation. In addition, the @option{--verbose},
- @option{--silent}, and @option{--quiet} options are passed on if
- specified; the @option{-I} and @option{-o} options are likewise passed
- on with their arguments, and @option{--debug} without its argument.
- The only option remaining that is related to the @command{texi2dvi}
- invocation is @option{--Xopt}. Here, just the argument is passed on
- and multiple @option{--Xopt} options accumulate. This provides a way
- to construct an arbitrary command line for @command{texi2dvi}. For
- example, running
- @example
- texi2any --Xopt -t --Xopt @@a4paper --pdf foo.texi
- @end example
- @noindent is equivalent to running
- @example
- texi2dvi -t @@a4paper --pdf foo.texi
- @end example
- @noindent except for the validity check.
- Although one might wish that other options to @command{texi2any} would
- take effect, they don't. For example, running @samp{texi2any
- --no-number-sections --dvi foo.texi} still results in a DVI file with
- numbered sections. (Perhaps this could be improved in the future, if
- requests are received.)
- The actual name of the command that is invoked is specified by the
- @code{TEXI2DVI} customization variable (@pxref{Other Customization
- Variables}). As you might guess, the default is @samp{texi2dvi}.
- @command{texi2any} itself does not generate any normal output when it
- invokes @command{texi2dvi}, only diagnostic messages.
- @node Pointer Validation
- @section Pointer Validation
- @cindex Pointer validation with @code{makeinfo}
- @cindex Validation of pointers
- If you do not suppress pointer validation with the
- @samp{--no-validate} option or the @code{@@novalidate} command in the
- source file (@pxref{Use @TeX{}}), @code{makeinfo} will check the
- validity of the Texinfo file.
- Most validation checks are different depending on whether node
- pointers are explicitly or implicitly determined. With explicit node
- pointers, here is the list of what is checked:
- @enumerate
- @item
- If a `Next', `Previous', or `Up' node reference is a reference to a
- node in the current file and is not an external reference such as to
- @file{(dir)}, then the referenced node must exist.
- @item
- Every node except the `Top' node must have an `Up' pointer.
- @item
- The node referenced by an `Up' pointer must itself reference the
- current node through a menu item, unless the node referenced by `Up'
- has the form @samp{(@var{file})}.
- @end enumerate
- With implicit node pointers, the above error cannot occur, as such.
- (Which is a major reason why we recommend using this feature of
- @code{makeinfo}, and not specifying any node pointers yourself.)
- Instead, @code{makeinfo} checks that the tree constructed from the
- document's menus matches the tree constructed from the sectioning
- commands. For example, if a chapter-level menu mentions nodes
- @var{n1} and @var{n2}, in that order, nodes @var{n1} and @var{n2} must
- be associated with @code{@@section} commands in the chapter.
- Finally, with both explicit and implicit node pointers,
- @code{makeinfo} checks that every node except the `Top' node is
- referenced in a menu.
- @node Customization Variables
- @section Customization Variables
- @quotation Warning
- These customization variable names and meanings may change in any
- Texinfo release. We always try to avoid incompatible changes, but we
- cannot absolutely promise, since needs change over time.
- @end quotation
- Many aspects of the behavior and output of @command{texi2any} may be
- modified by modifying so-called @dfn{customization variables}. These
- fall into a few general categories:
- @itemize @bullet
- @item
- Those associated with @@-commands; for example,
- @code{@@documentlanguage}.
- @item
- Those associated with command-line options; for example, the
- customization variable @code{SPLIT} is associated with the
- @option{--split} command-line option, and @code{TEXINFO_OUTPUT_FORMAT}
- allows specifying the output format.
- @item
- Those associated with customizing the HTML output.
- @item
- Other ad hoc variables.
- @end itemize
- Customization variables may set on the command line using
- @code{--set-customization-variable '@var{var} @var{value}'} (quoting
- the variable/value pair to the shell) or
- @code{--set-customization-variable @var{var}=@var{value}} (using
- @code{=}). A special @var{value} is @samp{undef}, which sets the
- variable to this special ``undefined'' Perl value.
- The sections below give the details for each of these.
- @menu
- * Commands: Customization Variables for @@-Commands.
- * Options: Customization Variables and Options.
- * HTML: HTML Customization Variables.
- * Other: Other Customization Variables.
- @end menu
- @node Customization Variables for @@-Commands
- @subsection Customization Variables for @@-Commands
- @cindex Customization variables for @@-commands
- @cindex @@-commands, customization variables for
- Each of the following @@-commands has an associated customization
- variable with the same name (minus the leading @code{@@}):
- @smallexample
- @@allowcodebreaks @@clickstyle @@codequotebacktick
- @@codequoteundirected @@contents @@deftypefnnewline
- @@documentdescription @@documentencoding @@documentlanguage
- @@evenfooting @@evenfootingmarks
- @@evenheading @@evenheadingmarks
- @@everyfooting @@everyfootingmarks
- @@everyheading @@everyheadingmarks
- @@exampleindent @@firstparagraphindent
- @@fonttextsize @@footnotestyle @@frenchspacing @@headings
- @@kbdinputstyle @@novalidate
- @@oddfooting @@oddfootingmarks
- @@oddheading @@oddheadingmarks
- @@pagesizes @@paragraphindent
- @@setchapternewpage @@setfilename
- @@shortcontents @@urefbreakstyle
- @@validatemenus @@xrefautomaticsectiontitle
- @end smallexample
- Setting such a customization variable to a value @samp{foo} is similar
- to executing @code{@@@var{cmd} foo}. It is not exactly the same,
- though, since any side effects of parsing the Texinfo source are not
- redone. Also, some variables do not take Texinfo code when generating
- particular formats, but an argument that is already formatted. This
- is the case, for example, for HTML for @code{documentdescription}.
- @node Customization Variables and Options
- @subsection Customization Variables and Options
- @cindex Customization variables for options
- @cindex Options, customization variables for
- The following table gives the customization variables associated with
- some command line options. @xref{Invoking @command{texi2any}}, for the
- meaning of the options.
- @multitable @columnfractions 0.5 0.5
- @headitem Option @tab Variable
- @item
- @vindex ENABLE_ENCODING
- @option{--enable-encoding} @tab @code{ENABLE_ENCODING}
- @item
- @option{--document-language} @tab @code{documentlanguage}
- @item
- @vindex ERROR_LIMIT
- @option{--error-limit} @tab @code{ERROR_LIMIT}
- @item
- @vindex FILLCOLUMN
- @option{--fill-column} @tab @code{FILLCOLUMN}
- @vindex footnotestyle
- @item
- @option{--footnote-style} @tab @code{footnotestyle}
- @item
- @vindex FORCE
- @option{--force} @tab @code{FORCE}
- @vindex INTERNAL_LINKS
- @item
- @option{--internal-links} @tab @code{INTERNAL_LINKS}
- @item
- @vindex MACRO_EXPAND
- @option{--macro-expand} @tab @code{MACRO_EXPAND}
- @item
- @option{--headers} @tab @code{HEADERS}, @code{SHOW_MENU}
- @item
- @vindex NO_WARN
- @option{--no-warn} @tab @code{NO_WARN}
- @item
- @vindex novalidate
- @option{--no-validate} @tab @code{novalidate}
- @item
- @vindex NUMBER_FOOTNOTES
- @option{--number-footnotes} @tab @code{NUMBER_FOOTNOTES}
- @item
- @vindex NUMBER_SECTIONS
- @option{--number-sections} @tab @code{NUMBER_SECTIONS}
- @item
- @vindex NODE_FILES
- @option{--node-files} @tab @code{NODE_FILES}
- @item
- @vindex OUT
- @vindex OUTFILE
- @vindex SUBDIR
- @option{--output} @tab @code{OUT}, @code{OUTFILE},
- @code{SUBDIR}
- @item
- @vindex paragraphindent
- @option{--paragraph-indent} @tab @code{paragraphindent}
- @item
- @vindex SILENT
- @option{--silent} @tab @code{SILENT}
- @item
- @vindex SPLIT
- @option{--split} @tab @code{SPLIT}
- @item
- @vindex SPLIT_SIZE
- @option{--split-size} @tab @code{SPLIT_SIZE}
- @item
- @vindex TRANSLITERATE_FILE_NAMES
- @option{--transliterate-file-names} @tab @code{TRANSLITERATE_FILE_NAMES}
- @item
- @vindex VERBOSE
- @option{--verbose} @tab @code{VERBOSE}
- @end multitable
- Setting such a customization variable to a value @samp{foo} is
- essentially the same as specifying the @code{--@var{opt}=foo} if the
- option takes an argument, or @code{--@var{opt}} if not.
- @vindex TEXINFO_OUTPUT_FORMAT
- In addition, the customization variable @code{TEXINFO_OUTPUT_FORMAT}
- allows specifying what @code{makeinfo} outputs, either one of the usual
- output formats that can be specified with options, or various other
- forms:
- @ftable @samp
- @item docbook
- @itemx dvi
- @itemx dvipdf
- @itemx html
- @itemx info
- @itemx pdf
- @itemx plaintext
- @itemx ps
- @itemx xml
- These correspond to the command-line options (and
- @code{TEXINFO_OUTPUT_FORMAT} environment variable values) of the same
- name. @xref{Invoking @command{texi2any}}.
- @item debugtree
- @cindex tree representation, for debugging
- @cindex debugging document, with tree representation
- Instead of generating a regular output format, output a text representation
- of the tree obtained by parsing the input texinfo document.
- @item parse
- Do only Texinfo source parsing; there is no output.
- @item plaintexinfo
- Output the Texinfo source with all the macros, @code{@@include} and
- @code{@@value@{@}} expanded. This is similar to setting
- @option{--macro-expand}, but instead of being output in addition to
- the normal conversion, output of Texinfo is the main output.
- @item rawtext
- @cindex raw text output
- Output raw text, with minimal formatting. For example, footnotes are
- ignored and there is no paragraph filling. This is used by the parser
- for file names and copyright text in HTML comments, for example.
- @item structure
- Do only Texinfo source parsing and determination of the document
- structure; there is no output.
- @item texinfosxml
- @cindex SXML output
- @cindex S-expressions, output format
- Output the document in TexinfoSXML representation, a syntax for
- writing XML data using Lisp S-expressions.
- @item textcontent
- @cindex spell checking
- @cindex word counting
- @pindex detexinfo
- @cindex stripping Texinfo commands
- Output the text content only, stripped of commands; this is useful for
- spell checking or word counting, for example. The trivial
- @code{detexinfo} script setting this is in the @file{util} directory
- of the Texinfo source as an example. It's one line:
- @example
- exec texi2any -c TEXINPUT_OUTPUT_FORMAT=textcontent "$@@"
- @end example
- @end ftable
- @node HTML Customization Variables
- @subsection HTML Customization Variables
- This table gives the customization variables which apply to HTML
- output only. A few other customization variable apply to both HTML
- and other output formats; those are given in the next section.
- @vtable @code
- @item AVOID_MENU_REDUNDANCY
- For HTML@. If set, and the menu entry and menu description are the
- same, then do not print the menu description; default false.
- @item AFTER_BODY_OPEN
- For HTML@. If set, the corresponding text will appear at the
- beginning of each HTML file; default unset.
- @item AFTER_ABOUT
- For HTML, when an About-element is output. If set, the corresponding
- text will appear at the end of the About element; default unset.
- @item AFTER_OVERVIEW
- @itemx AFTER_TOC_LINES
- For HTML@. If set, the corresponding text is output after the short
- table of contents for @code{AFTER_OVERVIEW} and after the table of
- contents for @code{AFTER_TOC_LINES}; otherwise, a default string is
- used. At the time of writing, a @code{</div>} element is closed.
- In general, you should set @code{BEFORE_OVERVIEW} if
- @code{AFTER_OVERVIEW} is set, and you should set
- @code{BEFORE_TOC_LINES} if @code{AFTER_TOC_LINES} is set.
- @item BASEFILENAME_LENGTH
- For HTML@. The maximum length of the base filenames; default 245.
- Changing this would make cross-manual references to such long node
- names invalid (@pxref{HTML Xref Link Basics}).
- @item BEFORE_OVERVIEW
- @itemx BEFORE_TOC_LINES
- For HTML@. If set, the corresponding text is output before the short
- table of contents for @code{BEFORE_OVERVIEW} and before the table of
- contents for @code{BEFORE_TOC_LINES}, otherwise a default string is
- used. At the time of writing, a @code{<div ...>} element is opened.
- In general you should set @code{AFTER_OVERVIEW} if
- @code{BEFORE_OVERVIEW} is set, and you should set
- @code{AFTER_TOC_LINES} if @code{BEFORE_TOC_LINES} is set.
- @item BIG_RULE
- For HTML@. Rule used after and before the top element and before
- special elements, but not for footers and headers; default
- @code{<hr>}.
- @item BODYTEXT
- @cindex @code{<body>} text, customizing
- @opindex lang@r{, HTML attribute}
- For HTML, the text appearing in @code{<body>}. By default, sets the
- HTML @code{lang} attribute to the document language
- (@pxref{@code{@@documentlanguage}}).
- @item CASE_INSENSITIVE_FILENAMES
- For HTML@. Construct output file names as if the filesystem were case
- insensitive (@pxref{HTML Splitting}); default false.
- @item CHAPTER_HEADER_LEVEL
- For HTML@. Header formatting level used for chapter level sectioning
- commands; default @samp{2}.
- @item CHECK_HTMLXREF
- For HTML@. Check that manuals which are the target of external
- cross-references (@pxref{Four and Five Arguments}) are present in
- @file{htmlxref.cnf} (@pxref{HTML Xref Configuration}); default false.
- @item COMPLEX_FORMAT_IN_TABLE
- For HTML@. If set, use tables for indentation of complex formats; default
- false.
- @item CSS_LINES
- For HTML@. CSS output, automatically determined by default (@pxref{HTML CSS}).
- @item DATE_IN_HEADER
- For HTML@. Put the document generation date in the header; off by default.
- @item DEF_TABLE
- For HTML@. If set, a @code{<table>} construction for @code{@@deffn}
- and similar @@-commands is used (looking more like the @TeX{} output),
- instead of definition lists; default false.
- @item DEFAULT_RULE
- For HTML@. Rule used between element, except before and after the
- top element, and before special elements, and for footers and headers;
- default @code{<hr>}.
- @item DO_ABOUT
- For HTML@. If set to 0 never do an About special element;
- if set to 1 always do an About special element;
- default 0.
- @c @xref{Output Elements Defined}.
- @item EXTERNAL_DIR
- For HTML@. Base directory for external manuals; default none. It is
- better to use the general external cross-reference mechanism
- (@pxref{HTML Xref Configuration}) than this variable.
- @item EXTRA_HEAD
- For HTML@. Additional text appearing within @code{<head>}; default unset.
- @item FOOTNOTE_END_HEADER_LEVEL
- For HTML@. Header formatting level used for the footnotes header with
- the `end' footnotestyle; default @samp{4}. @xref{Footnote Styles}.
- @item FOOTNOTE_SEPARATE_HEADER_LEVEL
- For HTML@. Header formatting level used for the footnotes header with
- the `separate' footnotestyle; default @samp{4}. @xref{Footnote
- Styles}.
- @item FRAMES
- For HTML@. If set, a file describing the frame layout is generated,
- together with a file with the short table of contents; default false.
- @item FRAMESET_DOCTYPE
- For HTML@. Same as DOCTYPE, but for the file containing the frame
- description.
- @item HEADER_IN_TABLE
- For HTML@. Use tables for header formatting rather than a simple
- @code{<div>} element; default false.
- @item ICONS
- For HTML@. Use icons for the navigation panel; default false.
- @item IMAGE_LINK_PREFIX
- For HTML@. If set, the associated value is prepended to the image file
- links; default unset.
- @item INLINE_CONTENTS
- For HTML@. If set, output the contents where the @code{@@contents} and
- similar @@-commands are located; default true. This is ignored if
- @code{@@set*contentsaftertitlepage} is set (@pxref{Contents}).
- @item INLINE_CSS_STYLE
- For HTML@. Put CSS directly in HTML elements rather than at the
- beginning of the output; default false.
- @item KEEP_TOP_EXTERNAL_REF
- For HTML@. If set, do not ignore @samp{Top} as the first
- argument for an external ref to a manual, as is done by default.
- @xref{Referring to a Manual as a Whole}.
- @item L2H
- For HTML@. If set, @command{latex2html} is used to convert @code{@@math}
- and @code{@@tex} sections; default false. Best used with @option{--iftex}.
- @item L2H_CLEAN
- (Relevant only if @code{L2H} is set.) If set, the intermediate files
- generated in relation with @command{latex2html} are removed; default
- true.
- @item L2H_FILE
- (Relevant only if @code{L2H} is set.) If set, the given file is used
- as @command{latex2html}'s init file; default unset.
- @item L2H_HTML_VERSION
- (Relevant only if @code{L2H} is set.) The HTML version used in the
- @command{latex2html} call; default unset.
- @item L2H_L2H
- (Relevant only if @code{L2H} is set.) The program invoked as
- @command{latex2html}; default is @code{latex2html}.
- @item L2H_SKIP
- (Relevant only if @code{L2H} is set.) If set to a true value, the
- actual call to @command{latex2html} is skipped; previously generated
- content is reused instead. If set to 0, the cache is not used at all.
- If set to @samp{undef}, the cache is used for as many @TeX{} fragments as
- possible and for any remaining the command is run. The default is
- @samp{undef}.
- @item L2H_TMP
- (Relevant only if @code{L2H} is set.) Set the directory used for
- temporary files. None of the file name components in this directory
- name may start with @samp{.}; otherwise, @command{latex2html} will
- fail (because of @command{dvips}). The default is the empty string,
- which means the current directory.
- @item MAX_HEADER_LEVEL
- For HTML@. Maximum header formatting level used (higher header
- formatting level numbers correspond to lower sectioning levels);
- default @samp{4}.
- @item MENU_SYMBOL
- For HTML@. Symbol used in front of menu entries when node names are used
- for menu entries formatting; default @samp{•}.
- @item MONOLITHIC
- For HTML@. Output only one file including the table of contents. Set
- by default, but only relevant when the output is not split.
- @item NO_CSS
- For HTML@. Do not use CSS; default false. @xref{HTML CSS}.
- @item NODE_FILE_EXTENSION
- For HTML@. Extension for node files if @code{NODE_FILENAMES} is set;
- default @samp{html}.
- @item PRE_ABOUT
- For HTML, when an About element is output. If set to a text string,
- this text will appear at the beginning of the About element. If set
- to a reference on a subroutine, the result of the subroutine call will
- appear at the beginning of the About element. If not set (the
- default), default text is used.
- @item PRE_BODY_CLOSE
- For HTML@. If set, the given text will appear at the footer of each
- HTML file; default unset.
- @item PROGRAM_NAME_IN_FOOTER
- For HTML@. If set, output the program name and miscellaneous related
- information in the page footers; default false.
- @item SHORTEXTN
- For HTML@. If set, use @samp{.htm} as extension; default false.
- @item SHOW_TITLE
- For HTML@. If set, output the title at the beginning of the document;
- default true.
- @item SIMPLE_MENU
- For HTML@. If set, use a simple preformatted style for the menu,
- instead of breaking down the different parts of the menu; default false.
- @xref{Menu Parts}.
- @item TOC_LINKS
- For HTML@. If set, links from headings to toc entries are created;
- default false.
- @item TOP_FILE
- This file name may be used for the top-level file. The extension is
- set appropriately, if necessary. This is used to override the default,
- and is, in general, only taken into account when output is split, and
- for HTML@.
- @item TOP_NODE_FILE
- For HTML@. File name used for the Top node, if @code{NODE_FILENAMES}
- is set; default is @code{index}.
- @item TOP_NODE_FILE_TARGET
- For HTML@. File name used for the Top node in cross-references;
- default is @code{index}.
- @item TOP_NODE_UP_URL
- For HTML@. A url used for @code{(dir)} references; the default is
- @code{undef}, meaning that the normal rules apply, typically leading
- to a link to @samp{dir.html} from an implicit or explicit reference to
- @samp{(dir)} (@pxref{HTML Xref}). For more about the Top node
- pointers, @pxref{First Node}. For overriding the Up pointer in other
- formats, see @code{TOP_NODE_UP} in @ref{Other Customization
- Variables}.
- @item USE_ACCESSKEY
- @cindex @code{accesskey}, customization variable for
- For HTML@. Use @code{accesskey} in cross-references; default true.
- @item USE_ISO
- For HTML@. Use entities for doubled single-quote characters
- (@pxref{Inserting Quotation Marks}), and @samp{---} and @samp{--}
- (@pxref{Conventions}); default true.
- @item USE_LINKS
- @cindex @code{<link>} HTML tag, in @code{<head>}
- @cindex @code{<head>} HTML tag, and @code{<link>}
- For HTML@. Generate @code{<link>} elements in the HTML @code{<head>}
- output; default true.
- @item USE_REL_REV
- For HTML@. Use @code{rel} in cross-references; default true.
- @item VERTICAL_HEAD_NAVIGATION
- For HTML@. If set, a vertical navigation panel is used; default false.
- @item WORDS_IN_PAGE
- @cindex Navigation panel, bottom of page
- @cindex Navigation footer
- For HTML, with output split at nodes. Specifies the approximate
- minimum page length at which a navigation panel is placed at the
- bottom of a page. To avoid ever having the navigation buttons at the
- bottom of a page, set this to a sufficiently large number. The
- default is 300.
- @item XREF_USE_FLOAT_LABEL
- For HTML@. If set, for the float name in cross-references, use the
- float label instead of the type followed by the float number
- (@pxref{@code{@@float}}). The default is off.
- @item XREF_USE_NODE_NAME_ARG
- For HTML@. Only relevant for cross-reference commands with no cross
- reference name (second argument). If set to@tie{}1, use the node name
- (first) argument in cross-reference @@-commands for the text displayed
- as the hyperlink. If set to@tie{}0, use the node name if
- @code{USE_NODES} is set, otherwise the section name. If set to
- @samp{undef}, use the first argument in preformatted environments,
- otherwise use the node name or section name depending on
- @code{USE_NODES}. The default is @samp{undef}.
- @end vtable
- @node Other Customization Variables
- @subsection Other Customization Variables
- This table gives the remaining customization variables, which apply to
- multiple formats, or affect global behavior, or otherwise don't fit
- into the categories of the previous sections.
- @vtable @code
- @item CLOSE_QUOTE_SYMBOL
- When a closing quote is needed, use this character; default @code{’}
- in HTML, @code{’} in Docbook. The default for Info is the same
- as @code{OPEN_QUOTE_SYMBOL} (see below).
- @c @item COMPLETE_IMAGE_PATHS
- @c If set, the image files are computed to be relative from the document
- @c directory to the source manual directory, and then to the image.
- @item CPP_LINE_DIRECTIVES
- Recognize @code{#line} directives in a ``preprocessing'' pass
- (@pxref{External Macro Processors}); on by default.
- @item DEBUG
- If set, debugging output is generated; default is off (zero).
- @c The integer value specifies what kinds of debugging output are
- @c generated. It is a bitmask. Setting it to 255 ensures having all
- @c available debugging output.
- @item DOCTYPE
- @vindex SystemLiteral
- For Docbook, HTML, XML@. Specifies the @code{SystemLiteral}, the
- entity's system identifier. This is a URI which may be used to
- retrieve the entity, and identifies the canonical DTD for the
- document. The default value is different for each of HTML, Docbook
- and Texinfo@tie{}XML.
- @item DUMP_TEXI
- For debugging. If set, no conversion is done, only parsing and macro
- expansion. If the option @option{--macro-expand} is set, the Texinfo
- source is also expanded to the corresponding file. Default false.
- @item DUMP_TREE
- For debugging. If set, the tree constructed upon parsing a Texinfo
- document is output to standard error; default false.
- @item ENABLE_ENCODING_USE_ENTITY
- For HTML, XML@. If @option{--enable-encoding} is set, and there is an
- entity corresponding with the letter or the symbol being output,
- prefer the entity. Set by default for HTML, but not XML.
- @item EXTERNAL_CROSSREF_SPLIT
- For cross-references to other manuals, this determines if the other
- manual is considered to be split or monolithic. By default, it is set
- based on the value of @code{SPLIT}. @xref{HTML Xref}, and @pxref{HTML
- Xref Configuration}.
- @item EXTENSION
- The extension added to the output file name. The default is different
- for each output format.
- @item FIX_TEXINFO
- For ``plain Texinfo'' (see the @code{PLAINTEXINFO} item). If set to
- false, the resulting Texinfo does not have all errors corrected, such
- as missing @samp{@@end}; default true. This variable is only
- relevant when expanding Texinfo; other converters always try to
- output something sane even if the input is erroneous.
- @c @item IDX_SUMMARY
- @c If set, for each @code{@@printindex} a file named
- @c @file{@var{docname}_@var{idxname}.idx} is created, containing lines of
- @c the form:
- @c
- @c @example
- @c @var{key} @var{reference}
- @c @end example
- @c
- @c @noindent sorted alphabetically (case matters).
- @item IGNORE_BEFORE_SETFILENAME
- If set, begin outputting at @code{@@setfilename}, if
- @code{@@setfilename} is present; default true.
- @item IGNORE_SPACE_AFTER_BRACED_COMMAND_NAME
- If set, spaces are ignored after an @@-command that takes braces.
- Default true, matching the @TeX{} behavior.
- @item INDEX_ENTRY_COLON
- Symbol used between the index entry and the associated node or section;
- default @samp{:}.
- @item INDEX_SPECIAL_CHARS_WARNING
- If set, warn about @samp{:} in index entry, as it leads to invalid entries in
- index menus in output Info files. For Info and plaintext only.
- @anchor{INFO_SPECIAL_CHARS_QUOTE}
- @item INFO_SPECIAL_CHARS_QUOTE
- If set, whenever there are problematic characters for Info output in
- places such as node names or menu items, surround the part of the
- construct where they appear with quoting characters, as described in
- @ref{Info Format Specification}. @xref{Node Line Requirements}.
- @item INFO_SPECIAL_CHARS_WARNING
- If set, warn about problematic constructs for Info output (such as the
- string @samp{::}) in node names, menu items, and cross-references;
- default true. Do not warn about index entries, since parsing problems
- there don't prevent navigation; readers can still relatively easily
- find their way to the node in question.
- @item INLINE_INSERTCOPYING
- If set, @code{@@insertcopying} is replaced by the @code{@@copying}
- content (@pxref{@code{@@copying}}) as if @code{@@insertcopying} were a
- user-defined macro; default false.
- @item INPUT_ENCODING_NAME
- Normalized encoding name suitable for output. Should be a usable
- charset name in HTML, typically one of the preferred IANA encoding
- names. You should not need to use this variable, since it is set by
- @code{@@documentencoding} (@pxref{@code{@@documentencoding}}).
- @item INPUT_PERL_ENCODING
- Perl encoding used to process the Texinfo source. You should not need
- to use that variable, since it is set by @code{@@documentencoding}
- (@pxref{@code{@@documentencoding}}).
- @item MAX_MACRO_CALL_NESTING
- The maximal number of recursive calls of @@-commands defined through
- @code{@@rmacro}; default 100000. The purpose of this variable is to
- avoid infinite recursions.
- @item MENU_ENTRY_COLON
- Symbol used between the menu entry and the description; default
- @samp{:}.
- @item NO_USE_SETFILENAME
- If set, do not use @code{@@setfilename} to set the document name;
- instead, base the output document name only on the input file name.
- The default is false.
- @item NODE_FILENAMES
- If set, node names are used to construct file names. By default, it
- is set if the output is split by node, or if @code{NODE_FILES} is set
- and the output is split in any way.
- @item NODE_NAME_IN_INDEX
- If set, use node names in index entries, otherwise prefer section names;
- default true.
- @item NODE_NAME_IN_MENU
- If set, use node names in menu entries, otherwise prefer section names;
- default true.
- @item OPEN_QUOTE_SYMBOL
- When an opening quote is needed, e.g., for @samp{@@samp} output, use
- the specified character; default @code{‘} for HTML,
- @code{‘} for Docbook. For Info, the default depends on the
- enabled document encoding (@pxref{@code{@@documentencoding}}); if no
- document encoding is set, or the encoding is US-ASCII, etc., @samp{'}
- is used. This character usually appears as an undirected single quote
- on modern systems. If the document encoding is Unicode, the Info
- output uses a Unicode left quote.
- @item OUTPUT_ENCODING_NAME
- Normalized encoding name used for output files. Should be a usable
- charset name in HTML, typically one of the preferred IANA encoding
- names. By default, if an input encoding is set (typically through
- @code{@@documentencoding} or @code{INPUT_ENCODING_NAME}), this
- information is used to set the output encoding name. If no input
- encoding is specified, the default output encoding name may be set by
- the output format. In particular, the XML-based formats use
- @code{utf-8} for @code{OUTPUT_ENCODING_NAME} if the encoding is not
- otherwise specified. @xref{@code{@@documentencoding}}.
- @item OVERVIEW_LINK_TO_TOC
- If set, the cross-references in the Overview link to the corresponding
- Table of Contents entries; default true.
- @item PACKAGE
- @itemx PACKAGE_VERSION
- @itemx PACKAGE_AND_VERSION
- @itemx PACKAGE_URL
- @itemx PACKAGE_NAME
- The implementation's short package name, package version, package name
- and version concatenated, package url, and full package name,
- respectively. By default, these variables are all set through
- Autoconf, Automake, and @code{configure}.
- @item PREFIX
- The output file prefix, which is prepended to some output file names.
- By default it is set by @code{@@setfilename} or from the input file
- (@pxref{@code{@@setfilename}}). How this value is used depends on the
- value of other customization variables or command line options, such
- as whether the output is split and @code{NODE_FILENAMES}. The default
- is unset.
- @item PROGRAM
- Name of the program used. By default, it is set to the name of the
- program launched, with a trailing @samp{.pl} removed.
- @item RENAMED_NODES_FILE
- If set, use the value for the renamed nodes description file. If not
- set, the file is @file{@var{doc_basename}-noderename.cnf}.
- @xref{HTML Xref Link Preservation}.
- @item RENAMED_NODES_REDIRECTIONS
- If set, create redirection files for renamed nodes. Set by default
- when generating HTML@.
- @item SHOW_MENU
- @vindex HEADERS
- @opindex --no-headers
- If set, Texinfo menus are output. By default, it is set unless
- generating Docbook or if @option{--no-headers} is specified.
- @item SORT_ELEMENT_COUNT
- @pindex texi-elements-by-size
- @cindex Longest nodes, finding
- @cindex Sorting nodes by size
- If set, the name of a file to which a list of elements (nodes or
- sections, depending on the output format) is dumped, sorted by the
- number of lines they contain after removal of @@-commands; default
- unset. This is used by the program @code{texi-elements-by-size} in
- the @file{util/} directory of the Texinfo source distribution
- (@pxref{texi-elements-by-size}).
- @item SORT_ELEMENT_COUNT_WORDS
- When dumping the elements-by-size file (see preceding item), use word
- counts instead of line counts; default false.
- @c @item SPLIT_INDEX
- @c For HTML@. If set, the output is split, and the output from
- @c @code{@@printindex} happens in a sectioning element at the level of
- @c splitting, then split index pages at the next letter after they have
- @c more than that many entries. If set to 0, no index splitting.
- @item TEST
- If set to true, some variables which are normally dynamically
- generated anew for each run (date, program name, version) are set to
- fixed and given values. This is useful to compare the output to a
- reference file, as is done for the tests. The default is false.
- @item TEXI2DVI
- Name of the command used to produce PostScript, PDF, and DVI; default
- @samp{texi2dvi}. @xref{@command{texi2any} Printed Output}.
- @item TEXI2HTML
- @cindex compatibility, with @command{texi2html}
- Generate HTML and try to be as compatible as possible with
- @command{texi2html}; default false.
- @item TEXINFO_DTD_VERSION
- For XML@. Version of the DTD used in the XML output preamble. The
- default is set based on a variable in @file{configure.ac}.
- @item TEXTCONTENT_COMMENT
- For stripped text content output (i.e., when
- @code{TEXINFO_OUTPUT_FORMAT} is set to @code{textcontent}). If set,
- also output comments. Default false.
- @item TOP_NODE_UP
- Up node for the Top node; default @samp{(dir)}. For overriding the
- url in HTML output, see @code{TOP_NODE_UP_URL} in @ref{HTML
- Customization Variables}.
- @item TREE_TRANSFORMATIONS
- The associated value is a comma separated list of transformations that
- can be applied to the Texinfo tree prior to outputting the result. If
- more than one is specified, the ordering is irrelevant; each is always
- applied at the necessary point during processing.
- The only one executed by default is
- @samp{move_index_entries_after_items} for HTML and Docbook output.
- Here's an example of updating the master menu in a document:
- @example
- makeinfo \
- -c TREE_TRANSFORMATIONS=regenerate_master_menu \
- -c PLAINTEXINFO=1 \
- mydoc.texi \
- -o /tmp/out
- @end example
- @noindent (Caveat: Since @code{PLAINTEXINFO} output does expand
- Texinfo macros and conditionals, it's necessary to remove any such
- differences before installing the updates in the original document.
- This will be remedied in a future release.)
- The following transformations are currently supported (many are used
- in the @code{pod2texi} utility distributed with Texinfo;
- @pxref{Invoking @command{pod2texi}}):
- @ftable @samp
- @item complete_tree_nodes_menus
- Add menu entries or whole menus for nodes associated with sections of
- any level, based on the sectioning tree.
- @item fill_gaps_in_sectioning
- Adds empty @code{@@unnumbered...} sections in a tree to fill gaps in
- sectioning. For example, an @code{@@unnumberedsec} will be inserted
- if a @code{@@chapter} is followed by a @code{@@subsection}.
- @item insert_nodes_for_sectioning_commands
- Insert nodes for sectioning commands lacking a corresponding node.
- @item move_index_entries_after_items
- In @code{@@enumerate} and @code{@@itemize}, move index entries
- appearing just before an @code{@@item} to just after the
- @code{@@item}. Comment lines between index entries are moved too. As
- mentioned, this is always done for HTML and Docbook output.
- @item regenerate_master_menu
- Update the Top node master menu, either replacing the (first)
- @code{@@detailmenu} in the Top node menu, or creating it at the end of
- the Top node menu.
- @item simple_menu
- Mostly the same as @code{SIMPLE_MENU}: use a simple preformatted style
- for the menu. It differs from setting @code{SIMPLE_MENU} in that
- @code{SIMPLE_MENU} only has an effect in HTML output.
- @end ftable
- @item USE_NODES
- Preferentially use nodes to decide where elements are separated. If
- set to false, preferentially use sectioning to decide where elements
- are separated. The default is true.
- @item USE_NODE_TARGET
- If set, use the node associated with a section for the section target
- in cross-references; default true.
- @item USE_NUMERIC_ENTITY
- For HTML and XML@. If set, use numeric entities instead of ASCII
- characters when there is no named entity. By default, set to true for
- HTML.
- @item USE_UP_NODE_FOR_ELEMENT_UP
- Fill in up sectioning direction with node direction when there is no
- sectioning up direction. In practice this can only happen when there
- is no @@top section. Not set by default.
- @item USE_SETFILENAME_EXTENSION
- Default is on for Info, off for other output. If set, use exactly
- what @code{@@setfilename} gives for the output file name, including
- the extension. You should not need to explicitly set this variable.
- @item USE_TITLEPAGE_FOR_TITLE
- Use the full @code{@@titlepage} as the title, not a simple title string;
- default false.
- @item USE_UNIDECODE
- @pindex Text::Unidecode
- If set to false, do not use the @code{Text::Unidecode} Perl module to
- transliterate more characters; default true.
- @end vtable
- @node Internationalization of Document Strings
- @section Internationalization of Document Strings
- @cindex I18n, of document strings
- @cindex Internationalization of document strings
- @cindex Document strings, internationalization of
- @cindex Output document strings, internationalization of
- @cindex Translating strings in output documents
- @vindex documentlanguage @r{customization variable}
- @command{texi2any} writes fixed strings into the output document at
- various places: cross-references, page footers, the help page,
- alternate text for images, and so on. The string chosen depends on
- the value of the @code{documentlanguage} at the time of the string
- being output (@pxref{@code{@@documentlanguage}}, for the Texinfo
- command interface).
- @pindex libintl-perl @r{Gettext implementation}
- The Gettext framework is used for those strings (@pxref{Top,,,
- gettext, Gettext}). The @code{libintl-perl} package is used as the
- @code{gettext} implementation; more specifically, the pure Perl
- implementation is used, so Texinfo can support consistent behavior
- across all platforms and installations, which would not otherwise be
- possible. @code{libintl-perl} is included in the Texinfo distribution
- and always installed, to ensure that it is available if needed. It is
- also possible to use the system @code{gettext} (the choice can be made
- at build-time).
- @vindex texinfo_document @r{Gettext domain}
- @cindex Perl format strings for translation
- The Gettext domain @samp{texinfo_document} is used for the strings.
- Translated strings are written as Texinfo, and may include
- @@-commands. In translated strings, the varying parts of the string
- are not usually denoted by @code{%s} and the like, but by
- @samp{@{arg_name@}}. (This convention is common for @code{gettext} in
- Perl and is fully supported in GNU Gettext; @pxref{perl-format,, Perl
- Format Strings, gettext, GNU Gettext}.) For example, in the
- following, @samp{@{section@}} will be replaced by the section name:
- @example
- see @{section@}
- @end example
- These Perl-style brace format strings are used for two reasons: first,
- changing the order of @code{printf} arguments is only available since
- Perl@tie{}5.8.0; second, and more importantly, the order of arguments
- is unpredictable, since @@-command expansion may lead to different
- orders depending on the output format.
- The expansion of a translation string is done like this:
- @enumerate
- @item First, the string is translated. The locale
- is @var{@@documentlanguage}@code{.}@var{@@documentencoding}.
- @cindex @code{us-ascii} encoding, and translations
- If the @var{@@documentlanguage} has the form @samp{ll_CC}, that is
- tried first, and then just @samp{ll}. If that does not exist, and the
- encoding is not @code{us-ascii}, then @code{us-ascii} is tried.
- The idea is that if there is a @code{us-ascii} encoding, it means that
- all the characters in the charset may be expressed as @@-commands.
- For example, there is a @code{fr.us-ascii} locale that can accommodate
- any encoding, since all the Latin@tie{}1 characters have associated
- @@-commands. On the other hand, Japanese has only a translation
- @code{ja.utf-8}, since there are no @@-commands for Japanese
- characters.
- @item Next, the string is expanded as Texinfo, and converted.
- The arguments are substituted; for example, @samp{@{arg_name@}} is
- replaced by the corresponding actual argument.
- @end enumerate
- In the following example, @samp{@{date@}}, @samp{@{program_homepage@}}
- and @samp{@{program@}} are the arguments of the string. Since they
- are used in @code{@@uref}, their order is not predictable.
- @samp{@{date@}}, @samp{@{program_homepage@}} and @samp{@{program@}} are
- substituted after the expansion:
- @example
- Generated on @@emph@{@{date@}@} using
- @@uref@{@{program_homepage@}, @@emph@{@{program@}@}@}.
- @end example
- This approach is admittedly a bit complicated. Its usefulness is that
- it supports having translations available in different encodings for
- encodings which can be covered by @@-commands, and also specifying how
- the formatting for some commands is done, independently of the output
- format---yet still be language-dependent. For example, the
- @samp{@@pxref} translation string can be like this:
- @example
- see @{node_file_href@} section `@{section@}\' in @@cite@{@{book@}@}
- @end example
- @noindent
- which allows for specifying a string independently of the output
- format, while nevertheless with rich formatting it may be translated
- appropriately in many languages.
- @node Invoking @command{pod2texi}
- @section Invoking @command{pod2texi}: Convert POD to Texinfo
- @pindex pod2texi
- @cindex Invoking @code{pod2texi}
- @cindex POD, converting to Texinfo
- @cindex Perl POD, converting to Texinfo
- The @code{pod2texi} program translates Perl pod documentation file(s)
- to Texinfo. There are two basic modes of operation: generating a
- standalone manual from each input pod, or (if @code{--base-level=1} or
- higher is given) generating Texinfo subfiles suitable for use
- with @code{@@include}.
- Although ordinarily this documentation in the Texinfo manual would be
- the best place to look, in this case we have documented all the
- options and examples in the @code{pod2texi} program itself, since it
- may be useful outside of the rest of Texinfo. Thus, please see the
- output of @code{pod2texi --help}, the version on the web at
- @url{http://www.gnu.org/software/texinfo/manual/pod2texi.html}, etc.
- For an example of using @code{pod2texi} to make Texinfo out of the
- Perl documentation itself, see
- @url{http://svn.savannah.gnu.org/viewvc/trunk/contrib/perldoc-all/?root=texinfo,
- @file{contrib/perldoc-all}} in the Texinfo source distribution (the
- output is available at @url{http://www.gnu.org/software/perl/manual}).
- @node @command{texi2html}
- @section @command{texi2html}: Ancestor of @command{texi2any}
- @pindex texi2html
- @cindex Cons, Lionel
- Conceptually, the @command{texi2html} program is the parent of today's
- @command{texi2any} program. @command{texi2html} was developed
- independently, originally by Lionel Cons in 1998; at the time,
- @command{makeinfo} could not generate HTML@. Many other people
- contributed to @command{texi2html} over the years.
- The present @command{texi2any} uses little of the actual code of
- @command{texi2html}, and has quite a different basic approach to the
- implementation (namely, parsing the Texinfo document into a tree), but
- still, there is a family resemblance.
- By design, @command{texi2any} supports nearly all the features of
- @command{texi2html} in some way. However, we did not attempt to
- maintain strict compatibility, so no @command{texi2html} executable is
- installed by the Texinfo package. An approximation can be run with an
- invocation like this (available as @file{util/texi2html} in the
- Texinfo source):
- @example
- texi2any --set-customization-variable TEXI2HTML=1 ...
- @end example
- @noindent but, to emphasize, this is @emph{not} a drop-in replacement
- for the previous @command{texi2html}. Here are the biggest differences:
- @itemize @bullet
- @item Most blatantly, the command line options of @command{texi2html}
- are now customization variables, for the most part. A table of
- approximate equivalents is given below.
- @item The program-level customization API is very different in
- @command{texi2any}.
- @item Indices cannot be split.
- @item Translated strings cannot be customized; we hope to introduce
- this feature in @command{texi2any} in the future.
- @end itemize
- Aside from the last, we do not intend to reimplement these
- differences. Therefore, the route forward for authors is alter
- manuals and build processes as necessary to use the new features and
- methods of @command{texi2any}. The @command{texi2html} maintainers
- (one of whom is the principal author of @command{texi2any}) do not
- intend to make further releases.
- @cindex Options of @command{texi2html}
- @cindex Command-line options of @command{texi2html}
- Here is the table showing @command{texi2html} options and
- corresponding @command{texi2any} customization variables.
- @c (@pxref{texi2any Output Customization,, @command{texi2any} Output
- @c Customization}).
- @multitable {@option{--ignore-preamble-text}} {@code{IGNORE_PREAMBLE_TEXT}}
- @item @option{--toc-links} @tab @code{TOC_LINKS}
- @item @option{--short-ext} @tab @code{SHORTEXTN}
- @item @option{--prefix} @tab @code{PREFIX}
- @item @option{--short-ref} @tab @code{SHORT_REF}
- @item @option{--idx-sum} @tab @code{IDX_SUMMARY}
- @item @option{--def-table} @tab @code{DEF_TABLE}
- @item @option{--ignore-preamble-text} @tab @code{IGNORE_PREAMBLE_TEXT}
- @item @option{--html-xref-prefix} @tab @code{EXTERNAL_DIR}
- @item @option{--l2h} @tab @code{L2H}
- @item @option{--l2h-l2h} @tab @code{L2H_L2H}
- @item @option{--l2h-skip} @tab @code{L2H_SKIP}
- @item @option{--l2h-tmp} @tab @code{L2H_TMP}
- @item @option{--l2h-file} @tab @code{L2H_FILE}
- @item @option{--l2h-clean} @tab @code{L2H_CLEAN}
- @item @option{--use-nodes} @tab @code{USE_NODES}
- @item @option{--monolithic} @tab @code{MONOLITHIC}
- @item @option{--top-file} @tab @code{TOP_FILE}
- @item @option{--toc-file} @tab @code{TOC_FILE}
- @item @option{--frames} @tab @code{FRAMES}
- @item @option{--menu} @tab @code{SHOW_MENU}
- @item @option{--debug} @tab @code{DEBUG}
- @item @option{--doctype} @tab @code{DOCTYPE}
- @item @option{--frameset-doctype} @tab @code{FRAMESET_DOCTYPE}
- @item @option{--test} @tab @code{TEST}
- @end multitable
- @cindex @file{texi2oldapi.texi}, for @command{texi2any}
- Finally, any @command{texi2html} users seeking more detailed
- information can check the draft file @file{doc/texi2oldapi.texi} in
- the Texinfo source repository. It consists mainly of very rough
- notes, but may still be useful to some.
- @node Creating and Installing Info Files
- @chapter Creating and Installing Info Files
- This chapter describes how to create and install Info files.
- @xref{Info Files}, for general information about the file format
- itself.
- @menu
- * Creating an Info File::
- * Installing an Info File::
- @end menu
- @node Creating an Info File
- @section Creating an Info File
- @cindex Creating an Info file
- @cindex Info, creating an online file
- @cindex Formatting a file for Info
- @code{makeinfo} is a program that converts a Texinfo file into an Info
- file, HTML file, or plain text. @code{texinfo-format-region} and
- @code{texinfo-format-buffer} are GNU Emacs functions that convert
- Texinfo to Info.
- For information on installing the Info file in the Info system,
- @pxref{Installing an Info File}.
- @menu
- * @command{makeinfo} Advantages:: @command{makeinfo} provides better error checking.
- * @code{makeinfo} in Emacs:: How to run @code{makeinfo} from Emacs.
- * @code{texinfo-format} commands:: Two Info formatting commands written
- in Emacs Lisp are an alternative
- to @code{makeinfo}.
- * Batch Formatting:: How to format for Info in Emacs batch mode.
- * Tag and Split Files:: How tagged and split files help Info
- to run better.
- @end menu
- @node @command{makeinfo} Advantages
- @subsection @code{makeinfo} Advantages
- @anchor{makeinfo advantages}@c old name
- The @code{makeinfo} utility creates an Info file from a Texinfo source
- providing better error messages than either of the Emacs formatting
- commands. We recommend it. The @code{makeinfo} program is
- independent of Emacs. You can run @code{makeinfo} in any of three
- ways: from an operating system shell, from a shell inside Emacs, or by
- typing the @kbd{C-c C-m C-r} or the @kbd{C-c C-m C-b} command in
- Texinfo mode in Emacs.
- The @code{texinfo-format-region} and the @code{texinfo-format-buffer}
- commands may be useful if you cannot run @code{makeinfo}.
- @node @code{makeinfo} in Emacs
- @subsection Running @code{makeinfo} Within Emacs
- @c anchor{makeinfo in Emacs}@c prev name
- @cindex Running @code{makeinfo} in Emacs
- @cindex @code{makeinfo} inside Emacs
- @cindex Shell, running @code{makeinfo} in
- You can run @code{makeinfo} in GNU Emacs Texinfo mode by using either the
- @code{makeinfo-region} or the @code{makeinfo-buffer} commands. In
- Texinfo mode, the commands are bound to @kbd{C-c C-m C-r} and @kbd{C-c
- C-m C-b} by default.
- @table @kbd
- @item C-c C-m C-r
- @itemx M-x makeinfo-region
- Format the current region for Info.
- @findex makeinfo-region
- @item C-c C-m C-b
- @itemx M-x makeinfo-buffer
- Format the current buffer for Info.
- @findex makeinfo-buffer
- @end table
- When you invoke @code{makeinfo-region} the output goes to a temporary
- buffer. When you invoke @code{makeinfo-buffer} output goes to the
- file set with @code{@@setfilename} (@pxref{@code{@@setfilename}}).
- The Emacs @code{makeinfo-region} and @code{makeinfo-buffer} commands
- run the @code{makeinfo} program in a temporary shell buffer. If
- @code{makeinfo} finds any errors, Emacs displays the error messages in
- the temporary buffer.
- @cindex Errors, parsing
- @cindex Parsing errors
- @findex next-error
- You can parse the error messages by typing @kbd{C-x `}
- (@code{next-error}). This causes Emacs to go to and position the
- cursor on the line in the Texinfo source that @code{makeinfo} thinks
- caused the error. @xref{Compilation, , Running @code{make} or
- Compilers Generally, emacs, The GNU Emacs Manual}, for more
- information about using the @code{next-error} command.
- In addition, you can kill the shell in which the @code{makeinfo}
- command is running or make the shell buffer display its most recent
- output.
- @table @kbd
- @item C-c C-m C-k
- @itemx M-x makeinfo-kill-job
- @findex makeinfo-kill-job
- Kill the current running @code{makeinfo} job
- (from @code{makeinfo-region} or @code{makeinfo-buffer}).
- @item C-c C-m C-l
- @itemx M-x makeinfo-recenter-output-buffer
- @findex makeinfo-recenter-output-buffer
- Redisplay the @code{makeinfo} shell buffer to display its most recent
- output.
- @end table
- @noindent
- (Note that the parallel commands for killing and recentering a @TeX{}
- job are @kbd{C-c C-t C-k} and @kbd{C-c C-t C-l}. @xref{Texinfo Mode
- Printing}.)
- You can specify options for @code{makeinfo} by setting the
- @code{makeinfo-options} variable with either the @kbd{M-x
- customize} or the @kbd{M-x set-variable} command, or by setting the
- variable in your @file{.emacs} initialization file.
- For example, you could write the following in your @file{.emacs} file:
- @example
- @group
- (setq makeinfo-options
- "--paragraph-indent=0 --no-split
- --fill-column=70 --verbose")
- @end group
- @end example
- @noindent
- @c Writing these three cross-references using xref results in
- @c three references to the same named manual, which looks strange.
- @iftex
- For more information, see @ref{@command{makeinfo} Options}, as well as
- ``Easy Customization Interface,'' ``Examining and Setting Variables,''
- and ``Init File'' in @cite{The GNU Emacs Manual}.
- @end iftex
- @ifnottex
- For more information, see@*
- @ref{Easy Customization, , Easy Customization Interface, emacs, The GNU Emacs Manual},@*
- @ref{Examining, , Examining and Setting Variables, emacs, The GNU Emacs Manual},@*
- @ref{Init File, , , emacs, The GNU Emacs Manual}, and@*
- @ref{@command{makeinfo} Options}.
- @end ifnottex
- @node @code{texinfo-format} commands
- @subsection The @code{texinfo-format@dots{}} Commands
- @c anchor{texinfo-format commands}@c prev name
- In GNU Emacs in Texinfo mode, you can format part or all of a Texinfo
- file with the @code{texinfo-format-region} command. This formats the
- current region and displays the formatted text in a temporary buffer
- called @samp{*Info Region*}.
- Similarly, you can format a buffer with the
- @code{texinfo-format-buffer} command. This command creates a new
- buffer and generates the Info file in it. Typing @kbd{C-x C-s} will
- save the Info file under the name specified by the
- @code{@@setfilename} line which must be near the beginning of the
- Texinfo file.
- @table @kbd
- @item C-c C-e C-r
- @itemx @code{texinfo-format-region}
- @findex texinfo-format-region
- Format the current region for Info.
- @item C-c C-e C-b
- @itemx @code{texinfo-format-buffer}
- @findex texinfo-format-buffer
- Format the current buffer for Info.
- @end table
- The @code{texinfo-format-region} and @code{texinfo-format-buffer}
- commands provide you with some error checking, and other functions can
- provide you with further help in finding formatting errors. These
- procedures are described in an appendix; see @ref{Catching Mistakes}.
- However, the @code{makeinfo} program provides better error checking
- (@pxref{@code{makeinfo} in Emacs}).
- A peculiarity of the @code{texinfo-format-buffer} and
- @code{texinfo-format-region} commands is that they do not indent (nor
- fill) paragraphs that contain @code{@@w} or @code{@@*} commands.
- @node Batch Formatting
- @subsection Batch Formatting
- @cindex Batch formatting for Info
- @cindex Info batch formatting
- You can format Texinfo files for Info using @code{batch-texinfo-format}
- and Emacs batch mode. You can run Emacs in batch mode from any shell,
- including a shell inside of Emacs. (@xref{Initial Options,,,
- emacs, The GNU Emacs Manual}.)
- Here is a shell command to format all the files that end in
- @file{.texinfo} in the current directory:
- @example
- emacs -batch -funcall batch-texinfo-format *.texinfo
- @end example
- @noindent
- Emacs processes all the files listed on the command line, even if an
- error occurs while attempting to format some of them.
- Run @code{batch-texinfo-format} only with Emacs in batch mode as shown;
- it is not interactive. It kills the batch mode Emacs on completion.
- @code{batch-texinfo-format} is convenient if you lack @code{makeinfo}
- and want to format several Texinfo files at once. When you use Batch
- mode, you create a new Emacs process. This frees your current Emacs, so
- you can continue working in it. (When you run
- @code{texinfo-format-region} or @code{texinfo-format-buffer}, you cannot
- use that Emacs for anything else until the command finishes.)
- @node Tag and Split Files
- @subsection Tag Files and Split Files
- @cindex Making a tag table automatically
- @cindex Tag table, making automatically
- If a Texinfo file has more than 30,000 bytes,
- @code{texinfo-format-buffer} automatically creates a tag table
- for its Info file; @code{makeinfo} always creates a tag table. With
- a @dfn{tag table}, Info can jump to new nodes more quickly than it can
- otherwise.
- @cindex Indirect subfiles
- In addition, if the Texinfo file contains more than about 300,000
- bytes, @code{texinfo-format-buffer} and @code{makeinfo} split the
- large Info file into shorter @dfn{indirect} subfiles of about 300,000
- bytes each. Big files are split into smaller files so that Emacs does
- not need to make a large buffer to hold the whole of a large Info
- file; instead, Emacs allocates just enough memory for the small, split-off
- file that is needed at the time. This way, Emacs avoids wasting
- memory when you run Info. (Before splitting was implemented, Info
- files were always kept short and @dfn{include files} were designed as
- a way to create a single, large printed manual out of the smaller Info
- files. @xref{Include Files}, for more information. Include files are
- still used for very large documents, such as @cite{The Emacs Lisp
- Reference Manual}, in which each chapter is a separate file.)
- When a file is split, Info itself makes use of a shortened version of
- the original file that contains just the tag table and references to
- the files that were split off. The split-off files are called
- @dfn{indirect} files.
- The split-off files have names that are created by appending @w{@samp{-1}},
- @w{@samp{-2}}, @w{@samp{-3}} and so on to the file name specified by the
- @code{@@setfilename} command. The shortened version of the original file
- continues to have the name specified by @code{@@setfilename}.
- At one stage in writing this document, for example, the Info file was saved
- as the file @file{test-texinfo} and that file looked like this:
- @example
- @group
- Info file: test-texinfo, -*-Text-*-
- produced by texinfo-format-buffer
- from file: new-texinfo-manual.texinfo
- ^_
- Indirect:
- test-texinfo-1: 102
- test-texinfo-2: 50422
- @end group
- @group
- test-texinfo-3: 101300
- ^_^L
- Tag table:
- (Indirect)
- Node: overview^?104
- Node: info file^?1271
- @end group
- @group
- Node: printed manual^?4853
- Node: conventions^?6855
- @dots{}
- @end group
- @end example
- @noindent
- (But @file{test-texinfo} had far more nodes than are shown here.) Each of
- the split-off, indirect files, @file{test-texinfo-1},
- @file{test-texinfo-2}, and @file{test-texinfo-3}, is listed in this file
- after the line that says @samp{Indirect:}. The tag table is listed after
- the line that says @samp{Tag table:}.
- In the list of indirect files, the number following the file name
- records the cumulative number of bytes in the preceding indirect
- files, not counting the file list itself, the tag table, or any
- permissions text in the first file. In the tag table, the number
- following the node name records the location of the beginning of the
- node, in bytes from the beginning of the (unsplit) output.
- If you are using @code{texinfo-format-buffer} to create Info files,
- you may want to run the @code{Info-validate} command. (The
- @code{makeinfo} command does such a good job on its own, you do not
- need @code{Info-validate}.) However, you cannot run the @kbd{M-x
- Info-validate} node-checking command on indirect files. For
- information on how to prevent files from being split and how to
- validate the structure of the nodes, see @ref{Using
- @code{Info-validate}}.
- @node Installing an Info File
- @section Installing an Info File
- @cindex Installing an Info file
- @cindex Info file installation
- @cindex @file{dir} directory for Info installation
- Info files are usually kept in the @file{info} directory. You can
- read Info files using the standalone Info program or the Info reader
- built into Emacs. (@xref{Top,,, info, Info}, for an introduction to
- Info.)
- @menu
- * Directory File:: The top level menu for all Info files.
- * New Info File:: Listing a new Info file.
- * Other Info Directories:: How to specify Info files that are
- located in other directories.
- * Installing Dir Entries:: How to specify what menu entry to add
- to the Info directory.
- * Invoking @command{install-info}:: @code{install-info} options.
- @end menu
- @node Directory File
- @subsection The Directory File @file{dir}
- For Info to work, the @file{info} directory must contain a file that
- serves as a top level directory for the Info system. By convention,
- this file is called @file{dir}. (You can find the location of this file
- within Emacs by typing @kbd{C-h i} to enter Info and then typing
- @kbd{C-x C-f} to see the pathname to the @file{info} directory.)
- The @file{dir} file is itself an Info file. It contains the top level
- menu for all the Info files in the system. The menu looks like
- this:
- @example
- @group
- * Menu:
- * Info: (info). Documentation browsing system.
- * Emacs: (emacs). The extensible, self-documenting
- text editor.
- * Texinfo: (texinfo). With one source file, make
- either a printed manual using
- @@TeX@{@} or an Info file.
- @dots{}
- @end group
- @end example
- Each of these menu entries points to the `Top' node of the Info file
- that is named in parentheses. (The menu entry does not need to
- specify the `Top' node, since Info goes to the `Top' node if no node
- name is mentioned. @xref{Other Info Files, , Nodes in Other Info
- Files}.)
- Thus, the @samp{Info} entry points to the `Top' node of the
- @file{info} file and the @samp{Emacs} entry points to the `Top' node
- of the @file{emacs} file.
- In each of the Info files, the `Up' pointer of the `Top' node refers
- back to the @code{dir} file. For example, the line for the `Top'
- node of the Emacs manual looks like this in Info:
- @example
- File: emacs Node: Top, Up: (DIR), Next: Distrib
- @end example
- @noindent
- In this case, the @file{dir} file name is written in uppercase
- letters---it can be written in either upper- or lowercase. This is not
- true in general, it is a special case for @file{dir}.
- @node New Info File
- @subsection Listing a New Info File
- @cindex Adding a new Info file
- @cindex Listing a new Info file
- @cindex New Info file, listing it in @file{dir} file
- @cindex Info file, listing a new
- @cindex @file{dir} file listing
- To add a new Info file to your system, you must write a menu entry to
- add to the menu in the @file{dir} file in the @file{info} directory.
- For example, if you were adding documentation for GDB, you would write
- the following new entry:
- @example
- * GDB: (gdb). The source-level C debugger.
- @end example
- @noindent
- The first part of the menu entry is the menu entry name, followed by a
- colon. The second part is the name of the Info file, in parentheses,
- followed by a period. The third part is the description.
- The name of an Info file often has a @file{.info} extension. Thus, the
- Info file for GDB might be called either @file{gdb} or @file{gdb.info}.
- The Info reader programs automatically try the file name both with and
- without @file{.info}@footnote{On MS-DOS/MS-Windows systems, Info will
- try the @file{.inf} extension as well.}; so it is better to avoid
- clutter and not to write @samp{.info} explicitly in the menu entry. For
- example, the GDB menu entry should use just @samp{gdb} for the file
- name, not @samp{gdb.info}.
- @node Other Info Directories
- @subsection Info Files in Other Directories
- @cindex Installing Info in another directory
- @cindex Info installed in another directory
- @cindex Another Info directory
- @cindex @file{dir} files and Info directories
- If an Info file is not in the @file{info} directory, there are three
- ways to specify its location:
- @enumerate
- @item
- Write the pathname in the @file{dir} file as the second part of the menu.
- @item
- Specify the Info directory name in the @code{INFOPATH} environment
- variable in your @file{.profile} or @file{.cshrc} initialization file.
- (Only you and others who set this environment variable will be able to
- find Info files whose location is specified this way.)
- @item
- If you are using Emacs, list the name of the file in a second @file{dir}
- file, in its directory; and then add the name of that directory to the
- @code{Info-directory-list} variable in your personal or site
- initialization file.
- This variable tells Emacs where to look for @file{dir} files (the files
- must be named @file{dir}). Emacs merges the files named @file{dir} from
- each of the listed directories. (In Emacs version 18, you can set the
- @code{Info-directory} variable to the name of only one
- directory.)
- @end enumerate
- For example, to reach a test file in the @file{/home/bob/info}
- directory, you could add an entry like this to the menu in the
- standard @file{dir} file:
- @example
- * Test: (/home/bob/info/info-test). Bob's own test file.
- @end example
- @noindent
- In this case, the absolute file name of the @file{info-test} file is
- written as the second part of the menu entry.
- @vindex INFOPATH
- @cindex Environment variable @code{INFOPATH}
- If you don't want to edit the system @file{dir} file, you can tell
- Info where to look by setting the @code{INFOPATH} environment variable
- in your shell startup file. This works with both the Emacs and
- standalone Info readers.
- Specifically, if you use a Bourne-compatible shell such as @code{sh}
- or @code{bash} for your shell command interpreter, you set the
- @code{INFOPATH} environment variable in the @file{.profile}
- initialization file; but if you use @code{csh} or @code{tcsh}, you set
- the variable in the @file{.cshrc} initialization file. On
- MS-DOS/MS-Windows systems, you must set @code{INFOPATH} in your
- @file{autoexec.bat} file or in the registry. Each type of shell uses
- a different syntax.
- @itemize @bullet
- @item
- In a @file{.cshrc} file, you could set the @code{INFOPATH}
- variable as follows:
- @smallexample
- setenv INFOPATH .:~/info:/usr/local/emacs/info
- @end smallexample
- @item
- In a @file{.profile} file, you would achieve the same effect by writing:
- @smallexample
- INFOPATH=.:$HOME/info:/usr/local/emacs/info
- export INFOPATH
- @end smallexample
- @item
- @pindex autoexec.bat
- In a @file{autoexec.bat} file, you write this command (note the
- use of @samp{;} as the directory separator, and a different syntax for
- using values of other environment variables):
- @smallexample
- set INFOPATH=.;%HOME%/info;c:/usr/local/emacs/info
- @end smallexample
- @end itemize
- @noindent
- The @samp{.} indicates the current directory as usual. Emacs uses the
- @code{INFOPATH} environment variable to initialize the value of Emacs's
- own @code{Info-directory-list} variable. The standalone Info reader
- merges any files named @file{dir} in any directory listed in the
- @env{INFOPATH} variable into a single menu presented to you in the node
- called @samp{(dir)Top}.
- @cindex Colon, last in @env{INFOPATH}
- However you set @env{INFOPATH}, if its last character is a colon (on
- MS-DOS/MS-Windows systems, use a semicolon instead), this is replaced
- by the default (compiled-in) path. This gives you a way to augment
- the default path with new directories without having to list all the
- standard places. For example (using @code{sh} syntax):
- @example
- INFOPATH=/home/bob/info:
- export INFOPATH
- @end example
- @noindent
- will search @file{/home/bob/info} first, then the standard directories.
- Leading or doubled colons are not treated specially.
- @cindex @file{dir} file, creating your own
- When you create your own @file{dir} file for use with
- @code{Info-directory-list} or @env{INFOPATH}, it's easiest to start by
- copying an existing @file{dir} file and replace all the text after the
- @samp{* Menu:} with your desired entries. That way, the punctuation
- and special @kbd{CTRL-_} characters that Info needs will be present.
- As one final alternative, which works only with Emacs Info, you can
- change the @code{Info-directory-list} variable. For example:
- @example
- (add-hook 'Info-mode-hook '(lambda ()
- (add-to-list 'Info-directory-list
- (expand-file-name "~/info"))))
- @end example
- @node Installing Dir Entries
- @subsection Installing Info Directory Files
- When you install an Info file onto your system, you can use the program
- @code{install-info} to update the Info directory file @file{dir}.
- Normally the makefile for the package runs @code{install-info}, just
- after copying the Info file into its proper installed location.
- @findex dircategory
- @findex direntry
- In order for the Info file to work with @code{install-info}, you include
- the commands @code{@@dircategory} and
- @code{@@direntry}@dots{}@code{@@end direntry} in the Texinfo source
- file. Use @code{@@direntry} to specify the menu entries to add to the
- Info directory file, and use @code{@@dircategory} to specify which part
- of the Info directory to put it in. Here is how these commands are used
- in this manual:
- @smallexample
- @@dircategory Texinfo documentation system
- @@direntry
- * Texinfo: (texinfo). The GNU documentation format.
- * install-info: (texinfo)Invoking install-info. @dots{}
- @dots{}
- @@end direntry
- @end smallexample
- Here's what this produces in the Info file:
- @smallexample
- INFO-DIR-SECTION Texinfo documentation system
- START-INFO-DIR-ENTRY
- * Texinfo: (texinfo). The GNU documentation format.
- * install-info: (texinfo)Invoking install-info. @dots{}
- @dots{}
- END-INFO-DIR-ENTRY
- @end smallexample
- @noindent
- The @code{install-info} program sees these lines in the Info file, and
- that is how it knows what to do.
- Always use the @code{@@direntry} and @code{@@dircategory} commands near
- the beginning of the Texinfo input, before the first @code{@@node}
- command. If you use them later on in the input, @code{install-info}
- will not notice them.
- @code{install-info} will automatically reformat the description of the
- menu entries it is adding. As a matter of convention, the description
- of the main entry (above, @samp{The GNU documentation format}) should
- start at column 32, starting at zero (as in
- @code{what-cursor-position} in Emacs). This will make it align with
- most others. Description for individual utilities best start in
- column 48, where possible. For more information about formatting see
- the @samp{--calign}, @samp{--align}, and @samp{--max-width} options in
- @ref{Invoking @command{install-info}}.
- If you use @code{@@dircategory} more than once in the Texinfo source,
- each usage specifies the `current' category; any subsequent
- @code{@@direntry} commands will add to that category.
- @cindex Free Software Directory
- @cindex Dir categories, choosing
- @cindex Categories, choosing
- When choosing a category name for the @code{@@dircategory} command, we
- recommend consulting the @uref{http://www.gnu.org/directory,
- Free Software Directory}. If your program is not listed there,
- or listed incorrectly or incompletely, please report the situation to
- the directory maintainers (@url{http://directory.fsf.org}) so that the
- category names can be kept in sync.
- Here are a few examples (see the @file{util/dir-example} file in the
- Texinfo distribution for large sample @code{dir} file):
- @display
- Emacs
- Localization
- Printing
- Software development
- Software libraries
- Text creation and manipulation
- @end display
- @cindex Invoking nodes, including in dir file
- Each `Invoking' node for every program installed should have a
- corresponding @code{@@direntry}. This lets users easily find the
- documentation for the different programs they can run, as with the
- traditional @command{man} system.
- @node Invoking @command{install-info}
- @subsection Invoking @command{install-info}
- @pindex install-info
- @code{install-info} inserts menu entries from an Info file into the
- top-level @file{dir} file in the Info system (see the previous sections
- for an explanation of how the @file{dir} file works). @code{install-info}
- also removes menu entries from the @file{dir} file. It's most often
- run as part of software installation, or when constructing a @file{dir} file
- for all manuals on a system. Synopsis:
- @example
- install-info [@var{option}@dots{}] [@var{info-file} [@var{dir-file}]]
- @end example
- If @var{info-file} or @var{dir-file} are not specified, the options
- (described below) that define them must be. There are no compile-time
- defaults, and standard input is never used. @code{install-info} can
- read only one Info file and write only one @file{dir} file per invocation.
- @cindex @file{dir}, created by @code{install-info}
- If @var{dir-file} (however specified) does not exist,
- @code{install-info} creates it if possible (with no entries).
- @cindex Compressed dir files, reading
- @cindex XZ-compressed dir files, reading
- @cindex Bzipped dir files, reading
- @cindex Lzip-compressed dir files, reading
- @cindex LZMA-compressed dir files, reading
- @cindex Dir files, compressed
- If any input file is compressed with @code{gzip} (@pxref{Top,,, gzip,
- Gzip}), @code{install-info} automatically uncompresses it for reading.
- And if @var{dir-file} is compressed, @code{install-info} also
- automatically leaves it compressed after writing any changes. If
- @var{dir-file} itself does not exist, @code{install-info} tries to
- open @file{@var{dir-file}.gz}, @file{@var{dir-file}.xz},
- @file{@var{dir-file}.bz2}, @file{@var{dir-file}.lz}, and
- @file{@var{dir-file}.lzma}, in that order.
- Options:
- @table @code
- @item --add-once
- @opindex --add-once@r{, for @command{install-info}}
- Specifies that the entry or entries will only be put into a single section.
- @item --align=@var{column}
- @opindex --align=@var{column}@r{, for @command{install-info}}
- Specifies the column that the second and subsequent lines of menu entry's
- description will be formatted to begin at. The default for this option is
- @samp{35}. It is used in conjunction with the @samp{--max-width} option.
- @var{column} starts counting at 1.
- @item --append-new-sections
- @opindex --append-new-sections@r{, for @command{install-info}}
- Instead of alphabetizing new sections, place them at the end of the DIR file.
- @item --calign=@var{column}
- @opindex --calign=@var{column}@r{, for @command{install-info}}
- Specifies the column that the first line of menu entry's description will
- be formatted to begin at. The default for this option is @samp{33}. It is
- used in conjunction with the @samp{--max-width} option.
- When the name of the menu entry exceeds this column, entry's description
- will start on the following line.
- @var{column} starts counting at 1.
- @item --debug
- @opindex --debug@r{, for @command{install-info}}
- Report what is being done.
- @item --delete
- @opindex --delete@r{, for @command{install-info}}
- Delete the entries in @var{info-file} from @var{dir-file}. The file
- name in the entry in @var{dir-file} must be @var{info-file} (except for
- an optional @samp{.info} in either one). Don't insert any new entries.
- Any empty sections that result from the removal are also removed.
- @item --description=@var{text}
- @opindex --description=@var{text}@r{, for @command{install-info}}
- Specify the explanatory portion of the menu entry. If you don't specify
- a description (either via @samp{--entry}, @samp{--item} or this option),
- the description is taken from the Info file itself.
- @item --dir-file=@var{name}
- @opindex --dir-file=@var{name}@r{, for @command{install-info}}
- Specify file name of the Info directory file. This is equivalent to
- using the @var{dir-file} argument.
- @item --dry-run
- @opindex --dry-run@r{, for @command{install-info}}
- Same as @samp{--test}.
- @item --entry=@var{text}
- @opindex --entry=@var{text}@r{, for @command{install-info}}
- Insert @var{text} as an Info directory entry; @var{text} should have the
- form of an Info menu item line plus zero or more extra lines starting
- with whitespace. If you specify more than one entry, they are all
- added. If you don't specify any entries, they are determined from
- information in the Info file itself.
- @item --help
- @opindex --help@r{, for @command{texindex}}
- Display a usage message with basic usage and all available options,
- then exit successfully.
- @item --info-file=@var{file}
- @opindex --info-file=@var{file}@r{, for @command{install-info}}
- Specify Info file to install in the directory. This is
- equivalent to using the @var{info-file} argument.
- @item --info-dir=@var{dir}
- @opindex --info-dir=@var{dir}@r{, for @command{install-info}}
- Specify the directory where the directory file @file{dir} resides.
- Equivalent to @samp{--dir-file=@var{dir}/dir}.
- @item --infodir=@var{dir}
- @opindex --infodir=@var{dir}@r{, for @command{install-info}}
- Same as @samp{--info-dir}.
- @item --item=@var{text}
- @opindex --item=@var{text}@r{, for @command{install-info}}
- Same as @samp{--entry=@var{text}}. An Info directory entry is actually
- a menu item.
- @item --keep-old
- @opindex --keep-old@r{, for @command{install-info}}
- Do not replace pre-existing menu entries. When @samp{--remove} is specified,
- this option means that empty sections are not removed.
- @item --max-width=@var{column}
- @opindex --max-width=@var{column}@r{, for @command{install-info}}
- Specifies the column that the menu entry's description will be word-wrapped
- at. @var{column} starts counting at 1.
- @item --maxwidth=@var{column}
- @opindex --maxwidth=@var{column}@r{, for @command{install-info}}
- Same as @samp{--max-width}.
- @item --menuentry=@var{text}
- @opindex --menuentry=@var{text}@r{, for @command{install-info}}
- Same as @samp{--name}.
- @item --name=@var{text}
- @opindex --name=@var{text}@r{, for @command{install-info}}
- Specify the name portion of the menu entry. If the @var{text} does
- not start with an asterisk @samp{*}, it is presumed to be the text
- after the @samp{*} and before the parentheses that specify the Info
- file. Otherwise @var{text} is taken verbatim, and is taken as
- defining the text up to and including the first period (a space is
- appended if necessary). If you don't specify the name (either via
- @samp{--entry}, @samp{--item} or this option), it is taken from the
- Info file itself. If the Info does not contain the name, the basename
- of the Info file is used.
- @item --no-indent
- @opindex --no-indent@r{, for @command{install-info}}
- Suppress formatting of new entries into the @file{dir} file.
- @item --quiet
- @itemx --silent
- @opindex --quiet@r{, for @command{install-info}}
- @opindex --silent@r{, for @command{install-info}}
- Suppress warnings, etc., for silent operation.
- @item --remove
- @opindex --remove@r{, for @command{install-info}}
- Same as @samp{--delete}.
- @item --remove-exactly
- @opindex --remove-exactly@r{, for @command{install-info}}
- Also like @samp{--delete}, but only entries if the Info file name
- matches exactly; @code{.info} and/or @code{.gz} suffixes are
- @emph{not} ignored.
- @item --section=@var{sec}
- @opindex --section=@var{sec}@r{, for @command{install-info}}
- Put this file's entries in section @var{sec} of the directory. If you
- specify more than one section, all the entries are added in each of the
- sections. If you don't specify any sections, they are determined from
- information in the Info file itself. If the Info file doesn't specify
- a section, the menu entries are put into the Miscellaneous section.
- @item --section @var{regex} @var{sec}
- @opindex --section @var{regex} @var{sec}@r{, for @command{install-info}}
- Same as @samp{--regex=@var{regex} --section=@var{sec} --add-once}.
- @code{install-info} tries to detect when this alternate syntax is used,
- but does not always guess correctly. Here is the heuristic that
- @code{install-info} uses:
- @enumerate
- @item
- If the second argument to @code{--section} starts with a hyphen, the
- original syntax is presumed.
- @item
- If the second argument to @code{--section} is a file that can be
- opened, the original syntax is presumed.
- @item
- Otherwise the alternate syntax is used.
- @end enumerate
- When the heuristic fails because your section title starts with a
- hyphen, or it happens to be a filename that can be opened, the syntax
- should be changed to @samp{--regex=@var{regex} --section=@var{sec}
- --add-once}.
- @item --regex=@var{regex}
- @opindex --regex=@var{regex}@r{, for @command{install-info}}
- Put this file's entries into any section that matches @var{regex}. If
- more than one section matches, all of the entries are added in each of the
- sections. Specify @var{regex} using basic regular expression syntax, more
- or less as used with @command{grep}, for example.
- @item --test
- @opindex --test@r{, for @command{install-info}}
- Suppress updating of the directory file.
- @item --version
- @opindex --version@r{, for @command{install-info}}
- @cindex Version number, for install-info
- Display version information and exit successfully.
- @end table
- @node Generating HTML
- @chapter Generating HTML
- @cindex Generating HTML
- @cindex Outputting HTML
- @command{makeinfo} generates Info output by default, but given the
- @option{--html} option, it will generate HTML, for web browsers and
- other programs. This chapter gives some details on such HTML output.
- @command{makeinfo} has many user-definable customization variables
- with which you can influence the HTML output. @xref{Customization
- Variables}.
- @command{makeinfo} can also produce output in XML and Docbook formats,
- but we do not as yet describe these in detail. @xref{Output Formats},
- for a brief overview of all the output formats.
- @menu
- * HTML Translation:: Details of the HTML output.
- * HTML Splitting:: How HTML output is split.
- * HTML CSS:: Influencing HTML output with Cascading Style Sheets.
- * HTML Xref:: Cross-references in HTML output.
- @end menu
- @node HTML Translation
- @section HTML Translation
- @cindex HTML translation
- @cindex HTML output, browser compatibility of
- First, the HTML generated by @command{makeinfo} is standard
- HTML@tie{}4. It also tries to be compatible with earlier standards
- (e.g., HTML@tie{}2.0, RFC-1866). Thus, please report output from an
- error-free run of @code{makeinfo} which has practical browser
- portability problems as a bug (@pxref{Reporting Bugs}).
- @pindex html32.pm
- Some known exceptions to HTML@tie{}3.2 (using
- @samp{--init-file=html32.pm} produces strict HTML@tie{}3.2 output;
- @pxref{Invoking @command{texi2any}}):
- @enumerate
- @item
- HTML@tie{}3.2 tables are generated for the @code{@@multitable} command
- (@pxref{Multi-column Tables}), but they should degrade reasonably in
- browsers without table support.
- @item
- The HTML@tie{}4 @samp{lang} attribute on the @samp{<html>} attribute
- is used.
- @item
- Entities that are not in the HTML@tie{}3.2 standard are also used.
- @item
- CSS is used (@pxref{HTML CSS}).
- @item
- A few HTML@tie{}4 elements are used: @code{thead}, @code{abbr},
- @code{acronym}.
- @end enumerate
- To achieve maximum portability and accessibility among browsers (both
- graphical and text-based), systems, and users, the HTML output is
- intentionally quite plain and generic. It has always been our goal
- for users to be able to customize the output to their wishes via CSS
- (@pxref{HTML CSS}) or other means (@pxref{Customization Variables}).
- If you cannot accomplish a reasonable customization, feel free to
- report that.
- However, we do not wish to depart from our basic goal of widest
- readability for the core output. For example, using fancy CSS may
- make it possible for the HTML output to more closely resemble the
- @TeX{} output in some details, but this result is not even close to
- being worth the ensuing difficulties.
- It is also intentionally not our goal, and not even possible, to pass
- through every conceivable validation test without any diagnostics.
- Different validation tests have different goals, often about pedantic
- enforcement of some standard or another. Our overriding goal is to
- help users, not blindly comply with standards.
- To repeat what was said at the top: please report output from an
- error-free run of @code{makeinfo} which has @emph{practical} browser
- portability problems as a bug (@pxref{Reporting Bugs}).
- A few other general points about the HTML output follow.
- @cindex Navigation bar, in HTML output
- @strong{Navigation bar:} By default, a navigation bar is inserted at the
- start of each node, analogous to Info output. If the
- @samp{--no-headers} option is used, the navigation bar is only
- inserted at the beginning of split files. Header @code{<link>}
- elements in split output can support Info-like navigation with
- browsers like Lynx and @w{Emacs W3} which implement this HTML@tie{}1.0
- feature.
- @cindex Footnote styles, in HTML
- @strong{Footnotes:} for HTML, when the footnote style is @samp{end},
- or if the output is not split, footnotes are put at the end of the
- output. If the footnoet style is set to @samp{separate}, and the
- output is split, they are placed in a separate file. @xref{Footnote
- Styles}.
- @cindex Escaping to HTML
- @cindex Raw HTML
- @strong{Raw HTML}: @command{makeinfo} will include segments of Texinfo
- source between @code{@@ifhtml} and @code{@@end ifhtml} in the HTML
- output (but not any of the other conditionals, by default). Source
- between @code{@@html} and @code{@@end html} is passed without change
- to the output (i.e., suppressing the normal escaping of input
- @samp{<}, @samp{>} and @samp{&} characters which have special
- significance in HTML)@. @xref{Conditional Commands}.
- @node HTML Splitting
- @section HTML Splitting
- @cindex Split HTML output
- @cindex HTML output, split
- When splitting output at nodes (which is the default),
- @command{makeinfo} writes HTML output into (basically) one output file
- per Texinfo source @code{@@node}.
- Each output file name is the node name with spaces replaced by
- @samp{-}'s and special characters changed to @samp{_} followed by
- their code point in hex (@pxref{HTML Xref}). This is to make it
- portable and easy to use as a filename. In the unusual case of two
- different nodes having the same name after this treatment, they are
- written consecutively to the same file, with HTML anchors so each can
- be referred to independently.
- If @command{makeinfo} is run on a system which does not distinguish
- case in file names, nodes which are the same except for case (e.g.,
- @samp{index} and @samp{Index}) will also be folded into the same
- output file with anchors. You can also pretend to be on a case
- insensitive filesystem by setting the customization variable
- @code{CASE_INSENSITIVE_FILENAMES}.
- It is also possible to split at chapters or sections with
- @option{--split} (@pxref{Invoking @command{texi2any}}). In that case,
- the file names are constructed after the name of the node associated
- with the relevant sectioning command. Also, unless
- @option{--no-node-files} is specified, a redirection file is output
- for every node in order to more reliably support cross-references to
- that manual (@pxref{HTML Xref}).
- When splitting, the HTML output files are written into a subdirectory,
- with the name chosen as follows:
- @enumerate
- @item
- @command{makeinfo} first tries the subdirectory with the base name
- from @code{@@setfilename} (that is, any extension is removed). For
- example, HTML output for @code{@@setfilename gcc.info} would be
- written into a subdirectory named @samp{gcc/}.
- @item
- If that directory cannot be created for any reason, then
- @command{makeinfo} tries appending @samp{.html} to the directory name.
- For example, output for @code{@@setfilename texinfo} would be written
- to @samp{texinfo.html/}.
- @item
- If the @samp{@var{name}.html} directory can't be created either,
- @code{makeinfo} gives up.
- @end enumerate
- @noindent In any case, the top-level output file within the directory
- is always named @samp{index.html}.
- Monolithic output (@code{--no-split}) is named according to
- @code{@@setfilename} (with any @samp{.info} extension is replaced with
- @samp{.html}), @code{--output} (the argument is used literally), or
- based on the input file name as a last resort
- (@pxref{@code{@@setfilename}}).
- @node HTML CSS
- @section HTML CSS
- @cindex HTML, and CSS
- @cindex CSS, and HTML output
- @cindex Cascading Style Sheets, and HTML output
- Cascading Style Sheets (CSS for short) is an Internet standard for
- influencing the display of HTML documents: see
- @uref{http://www.w3.org/Style/CSS/}.
- By default, @command{makeinfo} includes a few simple CSS commands to
- better implement the appearance of some Texinfo environments. Here
- are two of them, as an example:
- @example
- pre.display @{ font-family:inherit @}
- pre.smalldisplay @{ font-family:inherit; font-size:smaller @}
- @end example
- A full explanation of CSS is (far) beyond this manual; please see the
- reference above. In brief, however, the above tells the web browser
- to use a `smaller' font size for @code{@@smalldisplay} text, and to
- use the same font as the main document for both @code{@@smalldisplay}
- and @code{@@display}. By default, the HTML @samp{<pre>} command uses
- a monospaced font.
- You can influence the CSS in the HTML output with two
- @command{makeinfo} options: @option{--css-include=@var{file}} and
- @option{--css-ref=@var{url}}.
- @pindex texinfo-bright-colors.css
- @cindex Visualizing Texinfo CSS
- The option @option{--css-ref=@var{url}} adds to each output HTML file
- a @samp{<link>} tag referencing a CSS at the given @var{url}. This
- allows using external style sheets. You may find the file
- @file{texi2html/examples/texinfo-bright-colors.css} useful for
- visualizing the CSS elements in Texinfo output.
- The option @option{--css-include=@var{file}} includes the contents
- @var{file} in the HTML output, as you might expect. However, the
- details are somewhat tricky, as described in the following, to provide
- maximum flexibility.
- @cindex @samp{@@import} specifications, in CSS files
- The CSS file may begin with so-called @samp{@@import} directives,
- which link to external CSS specifications for browsers to use when
- interpreting the document. Again, a full description is beyond our
- scope here, but we'll describe how they work syntactically, so we can
- explain how @command{makeinfo} handles them.
- @cindex Comments, in CSS files
- There can be more than one @samp{@@import}, but they have to come
- first in the file, with only whitespace and comments interspersed, no
- normal definitions. (Technical exception: a @samp{@@charset}
- directive may precede the @samp{@@import}'s. This does not alter
- @command{makeinfo}'s behavior, it just copies the @samp{@@charset} if
- present.) Comments in CSS files are delimited by @samp{/* ... */}, as
- in C@. An @samp{@@import} directive must be in one of these two forms:
- @example
- @@import url(http://example.org/foo.css);
- @@import "http://example.net/bar.css";
- @end example
- As far as @command{makeinfo} is concerned, the crucial characters are
- the @samp{@@} at the beginning and the semicolon terminating the
- directive. When reading the CSS file, it simply copies any such
- @samp{@@}-directive into the output, as follows:
- @itemize
- @item If @var{file} contains only normal CSS declarations, it is
- included after @command{makeinfo}'s default CSS, thus overriding it.
- @item If @var{file} begins with @samp{@@import} specifications (see
- below), then the @samp{import}'s are included first (they have to come
- first, according to the standard), and then @command{makeinfo}'s
- default CSS is included. If you need to override @command{makeinfo}'s
- defaults from an @samp{@@import}, you can do so with the @samp{!@:
- important} CSS construct, as in:
- @example
- pre.smallexample @{ font-size: inherit ! important @}
- @end example
- @item If @var{file} contains both @samp{@@import} and inline CSS
- specifications, the @samp{@@import}'s are included first, then
- @command{makeinfo}'s defaults, and lastly the inline CSS from
- @var{file}.
- @item Any @@-directive other than @samp{@@import} and @samp{@@charset}
- is treated as a CSS declaration, meaning @command{makeinfo} includes
- its default CSS and then the rest of the file.
- @end itemize
- If the CSS file is malformed or erroneous, @command{makeinfo}'s output
- is unspecified. @command{makeinfo} does not try to interpret the
- meaning of the CSS file in any way; it just looks for the special
- @samp{@@} and @samp{;} characters and blindly copies the text into the
- output. Comments in the CSS file may or may not be included in the
- output.
- In addition to the possibilities offered by CSS, @command{makeinfo}
- has many user-definable customization variables with which you can
- influence the HTML output. @xref{Customization Variables}.
- @node HTML Xref
- @section HTML Cross-references
- @cindex HTML cross-references
- @cindex Cross-references, in HTML output
- Cross-references between Texinfo manuals in HTML format become, in the
- end, a standard HTML @code{<a>} link, but the details are
- unfortunately complex. This section describes the algorithm used in
- detail, so that Texinfo can cooperate with other programs, such as
- @command{texi2html}, by writing mutually compatible HTML files.
- This algorithm may or may not be used for links @emph{within} HTML
- output for a Texinfo file. Since no issues of compatibility arise in
- such cases, we do not need to specify this.
- We try to support references to such ``external'' manuals in both
- monolithic and split forms. A @dfn{monolithic} (mono) manual is
- entirely contained in one file, and a @dfn{split} manual has a file
- for each node. (@xref{HTML Splitting}.)
- @cindex Dumas, Patrice
- The algorithm was primarily devised by Patrice Dumas in 2003--04.
- @menu
- * Link Basics: HTML Xref Link Basics.
- * Node Expansion: HTML Xref Node Name Expansion.
- * Command Expansion: HTML Xref Command Expansion.
- * 8-bit Expansion: HTML Xref 8-bit Character Expansion.
- * Mismatch: HTML Xref Mismatch.
- * Configuration: HTML Xref Configuration. htmlxref.cnf.
- * Preserving links: HTML Xref Link Preservation. MANUAL-noderename.cnf.
- @end menu
- @node HTML Xref Link Basics
- @subsection HTML Cross-reference Link Basics
- @cindex HTML cross-reference link basics
- For our purposes, an HTML link consists of four components: a host
- name, a directory part, a file part, and a target part. We
- always assume the @code{http} protocol. For example:
- @example
- http://@var{host}/@var{dir}/@var{file}.html#@var{target}
- @end example
- The information to construct a link comes from the node name and
- manual name in the cross-reference command in the Texinfo source
- (@pxref{Cross References}), and from @dfn{external information}
- (@pxref{HTML Xref Configuration}).
- We now consider each part in turn.
- The @var{host} is hardwired to be the local host. This could either
- be the literal string @samp{localhost}, or, according to the rules for
- HTML links, the @samp{http://localhost/} could be omitted entirely.
- The @var{dir} and @var{file} parts are more complicated, and depend on
- the relative split/mono nature of both the manual being processed and
- the manual that the cross-reference refers to. The underlying idea is
- that there is one directory for Texinfo manuals in HTML, and a given
- @var{manual} is either available as a monolithic file
- @file{@var{manual}.html}, or a split subdirectory
- @file{@var{manual}/*.html}. Here are the cases:
- @itemize @bullet
- @item
- If the present manual is split, and the referent manual is also split,
- the directory is @samp{../@var{referent/}} and the file is the
- expanded node name (described later).
- @item
- If the present manual is split, and the referent manual is mono, the
- directory is @samp{../} and the file is @file{@var{referent}.html}.
- @item
- If the present manual is mono, and the referent manual is split, the
- directory is @file{@var{referent}/} and the file is the expanded node
- name.
- @item
- If the present manual is mono, and the referent manual is also mono,
- the directory is @file{./} (or just the empty string), and the file is
- @file{@var{referent}.html}.
- @end itemize
- @vindex BASEFILENAME_LENGTH
- Another rule, that only holds for filenames, is that base filenames
- are truncated to 245 characters, to allow for an extension to be
- appended and still comply with the 255-character limit which is common
- to many filesystems. Although technically this can be changed with
- the @code{BASEFILENAME_LENGTH} customization variable (@pxref{Other
- Customization Variables}), doing so would make cross-manual references
- to such nodes invalid.
- Any directory part in the filename argument of the source cross
- reference command is ignored. Thus, @code{@@xref@{,,,../foo@}} and
- @code{@@xref@{,,,foo@}} both use @samp{foo} as the manual name. This
- is because any such attempted hardwiring of the directory is very
- unlikely to be useful for both Info and HTML output.
- Finally, the @var{target} part is always the expanded node name.
- Whether the present manual is split or mono is determined by user
- option; @command{makeinfo} defaults to split, with the
- @option{--no-split} option overriding this.
- Whether the referent manual is split or mono, however, is another bit
- of the external information (@pxref{HTML Xref Configuration}). By
- default, @command{makeinfo} uses the same form of the referent manual
- as the present manual.
- Thus, there can be a mismatch between the format of the referent
- manual that the generating software assumes, and the format it's
- actually present in. @xref{HTML Xref Mismatch}.
- @node HTML Xref Node Name Expansion
- @subsection HTML Cross-reference Node Name Expansion
- @cindex HTML cross-reference node name expansion
- @cindex node name expansion, in HTML cross-references
- @cindex expansion, of node names in HTML cross-references
- As mentioned in the previous section, the key part of the HTML cross
- reference algorithm is the conversion of node names in the Texinfo
- source into strings suitable for XHTML identifiers and filenames. The
- restrictions are similar for each: plain ASCII letters, numbers, and
- the @samp{-} and @samp{_} characters are all that can be used.
- (Although HTML anchors can contain most characters, XHTML is more
- restrictive.)
- Cross-references in Texinfo can refer either to nodes or anchors
- (@pxref{@code{@@anchor}}). However, anchors are treated identically
- to nodes in this context, so we'll continue to say ``node'' names for
- simplicity.
- A special exception: the Top node (@pxref{The Top Node}) is always
- mapped to the file @file{index.html}, to match web server software.
- However, the HTML @emph{target} is @samp{Top}. Thus (in the split case):
- @example
- @@xref@{Top,,, emacs, The GNU Emacs Manual@}.
- @result{} <a href="emacs/index.html#Top">
- @end example
- @enumerate
- @item
- The standard ASCII letters (a-z and A-Z) are not modified. All other
- characters may be changed as specified below.
- @item
- The standard ASCII numbers (0-9) are not modified except when a number
- is the first character of the node name. In that case, see below.
- @item
- Multiple consecutive space, tab and newline characters are transformed
- into just one space. (It's not possible to have newlines in node
- names with the current implementation, but we specify it anyway, just
- in case.)
- @item
- Leading and trailing spaces are removed.
- @item
- After the above has been applied, each remaining space character is
- converted into a @samp{-} character.
- @item
- Other ASCII 7-bit characters are transformed into @samp{_00@var{xx}},
- where @var{xx} is the ASCII character code in (lowercase) hexadecimal.
- This includes @samp{_}, which is mapped to @samp{_005f}.
- @item
- If the node name does not begin with a letter, the literal string
- @samp{g_t} is prefixed to the result. (Due to the rules above, that
- string can never occur otherwise; it is an arbitrary choice, standing
- for ``GNU Texinfo''.) This is necessary because XHTML requires that
- identifiers begin with a letter.
- @end enumerate
- For example:
- @example
- @@node A node --- with _'%
- @result{} A-node-_002d_002d_002d-with-_005f_0027_0025
- @end example
- Example translations of common characters:
- @itemize @bullet
- @item @samp{_} @result{} @samp{_005f}
- @item @samp{-} @result{} @samp{_002d}
- @item @samp{A node} @result{} @samp{A-node}
- @end itemize
- On case-folding computer systems, nodes differing only by case will be
- mapped to the same file. In particular, as mentioned above, Top
- always maps to the file @file{index.html}. Thus, on a case-folding
- system, Top and a node named `Index' will both be written to
- @file{index.html}. Fortunately, the targets serve to distinguish
- these cases, since HTML target names are always case-sensitive,
- independent of operating system.
- @node HTML Xref Command Expansion
- @subsection HTML Cross-reference Command Expansion
- @cindex HTML cross-reference command expansion
- Node names may contain @@-commands (@pxref{Node Line Requirements}).
- This section describes how they are handled.
- First, comments are removed.
- Next, any @code{@@value} commands (@pxref{@code{@@set @@value}}) and
- macro invocations (@pxref{Invoking Macros}) are fully expanded.
- Then, for the following commands, the command name and braces are removed,
- and the text of the argument is recursively transformed:
- @example
- @@asis @@b @@cite @@code @@command @@dfn @@dmn @@dotless
- @@emph @@env @@file @@i @@indicateurl @@kbd @@key
- @@samp @@sansserif @@sc @@slanted @@strong @@sub @@sup
- @@t @@U @@var @@verb @@w
- @end example
- @noindent For @code{@@sc}, any letters are capitalized.
- In addition, the following commands are replaced by constant text, as
- shown below. If any of these commands have non-empty arguments, as in
- @code{@@TeX@{bad@}}, it is an error, and the result is unspecified.
- In this table, `(space)' means a space character and `(nothing)' means
- the empty string. The notation `U+@var{hhhh}' means Unicode code
- point @var{hhhh} (in hex, as usual).
- There are further transformations of many of these expansions to yield
- the final file or other target name, such as space characters to
- @samp{-}, etc., according to the other rules.
- @multitable @columnfractions .3 .5
- @item @code{@@(newline)} @tab (space)
- @item @code{@@(space)} @tab (space)
- @item @code{@@(tab)} @tab (space)
- @item @code{@@!} @tab @samp{!}
- @item @code{@@*} @tab (space)
- @item @code{@@-} @tab (nothing)
- @item @code{@@.} @tab @samp{.}
- @item @code{@@:} @tab (nothing)
- @item @code{@@?} @tab @samp{?}
- @item @code{@@@@} @tab @samp{@@}
- @item @code{@@@{} @tab @samp{@{}
- @item @code{@@@}} @tab @samp{@}}
- @item @code{@@LaTeX} @tab @samp{LaTeX}
- @item @code{@@TeX} @tab @samp{TeX}
- @item @code{@@arrow} @tab U+2192
- @item @code{@@bullet} @tab U+2022
- @item @code{@@comma} @tab @samp{,}
- @item @code{@@copyright} @tab U+00A9
- @item @code{@@dots} @tab U+2026
- @item @code{@@enddots} @tab @samp{...}
- @item @code{@@equiv} @tab U+2261
- @item @code{@@error} @tab @samp{error-->}
- @item @code{@@euro} @tab U+20AC
- @item @code{@@exclamdown} @tab U+00A1
- @item @code{@@expansion} @tab U+21A6
- @item @code{@@geq} @tab U+2265
- @item @code{@@leq} @tab U+2264
- @item @code{@@minus} @tab U+2212
- @item @code{@@ordf} @tab U+00AA
- @item @code{@@ordm} @tab U+00BA
- @item @code{@@point} @tab U+2605
- @item @code{@@pounds} @tab U+00A3
- @item @code{@@print} @tab U+22A3
- @item @code{@@questiondown} @tab U+00BF
- @item @code{@@registeredsymbol} @tab U+00AE
- @item @code{@@result} @tab U+21D2
- @item @code{@@textdegree} @tab U+00B0
- @item @code{@@tie} @tab (space)
- @end multitable
- Quotation mark @@-commands (@code{@@quotedblright@{@}} and the like),
- are likewise replaced by their Unicode values. Normal quotation
- @emph{characters} (e.g., ASCII ` and ') are not altered.
- @xref{Inserting Quotation Marks}.
- Any @code{@@acronym}, @code{@@abbr}, @code{@@email}, and
- @code{@@image} commands are replaced by their first argument. (For
- these commands, all subsequent arguments are optional, and ignored
- here.) @xref{@code{@@acronym}}, and @ref{@code{@@email}}, and @ref{Images}.
- Accents are handled according to the next section.
- Any other command is an error, and the result is unspecified.
- @node HTML Xref 8-bit Character Expansion
- @subsection HTML Cross-reference 8-bit Character Expansion
- @cindex HTML cross-reference 8-bit character expansion
- @cindex 8-bit characters, in HTML cross-references
- @cindex Expansion of 8-bit characters in HTML cross-references
- @cindex Transliteration of 8-bit characters in HTML cross-references
- Usually, characters other than plain 7-bit ASCII are transformed into
- the corresponding Unicode code point(s) in Normalization Form@tie{}C,
- which uses precomposed characters where available. (This is the
- normalization form recommended by the W3C and other bodies.) This
- holds when that code point is @code{0xffff} or less, as it almost
- always is.
- These will then be further transformed by the rules above into the
- string @samp{_@var{hhhh}}, where @var{hhhh} is the code point in hex.
- For example, combining this rule and the previous section:
- @example
- @@node @@b@{A@} @@TeX@{@} @@u@{B@} @@point@{@}@@enddots@{@}
- @result{} A-TeX-B_0306-_2605_002e_002e_002e
- @end example
- Notice: 1)@tie{}@code{@@enddots} expands to three periods which in
- turn expands to three @samp{_002e}'s; 2)@tie{}@code{@@u@{B@}} is a `B'
- with a breve accent, which does not exist as a pre-accented Unicode
- character, therefore expands to @samp{B_0306} (B with combining
- breve).
- When the Unicode code point is above @code{0xffff}, the transformation
- is @samp{__@var{xxxxxx}}, that is, two leading underscores followed by
- six hex digits. Since Unicode has declared that their highest code
- point is @code{0x10ffff}, this is sufficient. (We felt it was better
- to define this extra escape than to always use six hex digits, since
- the first two would nearly always be zeros.)
- This method works fine if the node name consists mostly of ASCII
- characters and contains only few 8-bit ones. But if the document is
- written in a language whose script is not based on the Latin alphabet
- (for example, Ukrainian), it will create file names consisting almost
- entirely of @samp{_@var{xxxx}} notations, which is inconvenient and
- all but unreadable. To handle such cases, @command{makeinfo} offers
- the @option{--transliterate-file-names} command line option. This
- option enables @dfn{transliteration} of node names into ASCII
- characters for the purposes of file name creation and referencing.
- The transliteration is based on phonetic principles, which makes the
- generated file names more easily understanable.
- @cindex Normalization Form C, Unicode
- For the definition of Unicode Normalization Form@tie{}C, see Unicode
- report UAX#15, @uref{http://www.unicode.org/reports/tr15/}. Many
- related documents and implementations are available elsewhere on the
- web.
- @node HTML Xref Mismatch
- @subsection HTML Cross-reference Mismatch
- @cindex HTML cross-reference mismatch
- @cindex Mismatched HTML cross-reference source and target
- As mentioned earlier (@pxref{HTML Xref Link Basics}), the generating
- software may need to guess whether a given manual being cross
- referenced is available in split or monolithic form---and, inevitably,
- it might guess wrong. However, when the @emph{referent} manual is
- generated, it is possible to handle at least some mismatches.
- In the case where we assume the referent is split, but it is actually
- available in mono, the only recourse would be to generate a
- @file{manual/} subdirectory full of HTML files which redirect back to
- the monolithic @file{manual.html}. Since this is essentially the same
- as a split manual in the first place, it's not very appealing.
- On the other hand, in the case where we assume the referent is mono,
- but it is actually available in split, it is possible to use
- JavaScript to redirect from the putatively monolithic
- @file{manual.html} to the different @file{manual/node.html} files.
- Here's an example:
- @example
- function redirect() @{
- switch (location.hash) @{
- case "#Node1":
- location.replace("manual/Node1.html#Node1"); break;
- case "#Node2" :
- location.replace("manual/Node2.html#Node2"); break;
- @dots{}
- default:;
- @}
- @}
- @end example
- Then, in the @code{<body>} tag of @file{manual.html}:
- @example
- <body onLoad="redirect();">
- @end example
- Once again, this is something the software which generated the
- @emph{referent} manual has to do in advance, it's not something the
- software generating the cross-reference in the present manual can
- control.
- @node HTML Xref Configuration
- @subsection HTML Cross-reference Configuration: @file{htmlxref.cnf}
- @pindex htmlxref.cnf
- @cindex HTML cross-reference configuration
- @cindex Cross-reference configuration, for HTML
- @cindex Configuration, for HTML cross-manual references
- @command{makeinfo} reads a file named @file{htmlxref.cnf} to gather
- information for cross-references to other manuals in HTML output. It
- is looked for in the following directories:
- @table @file
- @item ./
- (the current directory)
- @item ./.texinfo/
- (under the current directory)
- @item ~/.texinfo/
- (where @code{~} is the current user's home directory)
- @item @var{sysconfdir}/texinfo/
- (where @var{sysconfdir} is the system configuration directory
- specified at compile-time, e.g., @file{/usr/local/etc})
- @item @var{datadir}/texinfo/
- (likewise specified at compile time, e.g., @file{/usr/local/share})
- @end table
- All files found are used, with earlier entries overriding later ones.
- The Texinfo distribution includes a default file which handles many
- GNU manuals; it is installed in the last of the above directories,
- i.e., @file{@var{datadir}/texinfo/htmlxref.cnf}.
- The file is line-oriented. Lines consisting only of whitespace are
- ignored. Comments are indicated with a @samp{#} at the beginning of a
- line, optionally preceded by whitespace. Since @samp{#} can occur in
- urls (like almost any character), it does not otherwise start a
- comment.
- Each non-blank non-comment line must be either a @dfn{variable
- assignment} or @dfn{manual information}.
- A variable assignment line looks like this:
- @example
- @var{varname} = @var{varvalue}
- @end example
- Whitespace around the @samp{=} is optional and ignored. The
- @var{varname} should consist of letters; case is significant. The
- @var{varvalue} is an arbitrary string, continuing to the end of the
- line. Variables are then referenced with @samp{$@{@var{varname}@}};
- variable references can occur in the @var{varvalue}.
- A manual information line looks like this:
- @example
- @var{manual} @var{keyword} @var{urlprefix}
- @end example
- @noindent
- with @var{manual} the short identifier for a manual, @var{keyword}
- being one of: @code{mono}, @code{node}, @code{section},
- @code{chapter}, and @var{urlprefix} described below. Variable
- references can occur only in the @var{urlprefix}. For example (used
- in the canonical @file{htmlxref.cnf}):
- @smallexample
- G = http://www.gnu.org
- GS = $@{G@}/software
- hello mono $@{GS@}/hello/manual/hello.html
- hello chapter $@{GS@}/hello/manual/html_chapter/
- hello section $@{GS@}/hello/manual/html_section/
- hello node $@{GS@}/hello/manual/html_node/
- @end smallexample
- @cindex monolithic manuals, for HTML cross-references
- If the keyword is @code{mono}, @var{urlprefix} gives the host,
- directory, and file name for @var{manual} as one monolithic file.
- @cindex split manuals, for HTML cross-references
- If the keyword is @code{node}, @code{section}, or @code{chapter},
- @var{urlprefix} gives the host and directory for @var{manual} split
- into nodes, sections, or chapters, respectively.
- When available, @command{makeinfo} will use the ``corresponding''
- value for cross-references between manuals. That is, when generating
- monolithic output (@option{--no-split}), the @code{mono} url will be
- used, when generating output that is split by node, the @code{node}
- url will be used, etc. However, if a manual is not available in that
- form, anything that is available can be used. Here is the search
- order for each style:
- @smallexample
- node @result{} node, section, chapter, mono
- section @result{} section, chapter, node, mono
- chapter @result{} chapter, section, node, mono
- mono @result{} mono, chapter, section, node
- @end smallexample
- @opindex --node-files@r{, and HTML cross-references}
- These section- and chapter-level cross-manual references can succeed
- only when the target manual was created using @option{--node-files};
- this is the default for split output.
- If you have additions or corrections to the @file{htmlxref.cnf}
- distributed with Texinfo, please email @email{bug-texinfo@@gnu.org} as
- usual. You can get the latest version from
- @url{http://ftpmirror.gnu.org/@/texinfo/@/htmlxref.cnf}.
- @node HTML Xref Link Preservation
- @subsection HTML Cross-reference Link Preservation: @var{manual}@file{-noderename.cnf}
- @pindex noderename.cnf
- @pindex @var{manual}-noderename.cnf
- @cindex HTML cross-reference link preservation
- @cindex Preserving HTML links to old nodes
- @cindex Old nodes, preserving links to
- @cindex Renaming nodes, and preserving links
- @cindex Links, preserving to renamed nodes
- @cindex Node renaming, and preserving links
- Occasionally changes in a program require removing (or renaming) nodes
- in the manual in order to have the best documentation. Given the
- nature of the web, however, links may exist anywhere to such a removed
- node (renaming appears the same as removal for this purpose), and it's
- not ideal for those links to simply break.
- @vindex RENAMED_NODES_FILE
- Therefore, Texinfo provides a way for manual authors to specify old
- node names and the new nodes to which the old names should be
- redirected, via the file @var{manual}@file{-noderename.cnf}, where
- @var{manual} is the base name of the manual. For example, the manual
- @file{texinfo.texi} would be supplemented by a file
- @file{texinfo-noderename}.cnf. (This name can be overridden by
- setting the @file{RENAMED_NODES_FILE} customization variable;
- @pxref{Customization Variables}).
- The file is read in pairs of lines, as follows:
- @example
- @var{old-node-name}
- @@@@@{@} @var{new-node-name}
- @end example
- The usual conversion from Texinfo node names to HTML names is applied;
- see this entire section for details (@pxref{HTML Xref}). The unusual
- @samp{@@@@@{@}} separator is used because it is not a valid Texinfo
- construct, so can't appear in the node names.
- The effect is that @command{makeinfo} generates a redirect from
- @var{old-node-name} to @var{new-node-name} when producing HTML output.
- Thus, external links to the old node are preserved.
- Lines consisting only of whitespace are ignored. Comments are
- indicated with a @samp{@@c} at the beginning of a line, optionally
- preceded by whitespace.
- Another approach to preserving links to deleted or renamed nodes is to
- use anchors (@pxref{@code{@@anchor}}). There is no effective
- difference between the two approaches.
- @node @@-Command Details
- @appendix @@-Command Details
- Here are the details of @@-commands: information about their syntax, a
- list of commands, and information about where commands can appear.
- @node Command Syntax
- @section @@-Command Syntax
- @cindex @@-command syntax
- @cindex Syntax, of @@-commands
- @cindex Command syntax
- Texinfo has the following types of @@-command:
- @table @asis
- @item 1. Brace commands
- These commands start with @@ followed by a letter or a word, followed by an
- argument within braces. For example, the command @code{@@dfn} indicates
- the introductory or defining use of a term; it is used as follows: @samp{In
- Texinfo, @@@@-commands are @@dfn@{mark-up@} commands.}
- @item 2. Line commands
- These commands occupy an entire line. The line starts with @@,
- followed by the name of the command (a word); for example, @code{@@center}
- or @code{@@cindex}. If no argument is needed, the word is followed by
- the end of the line. If there is an argument, it is separated from
- the command name by a space. Braces are not used.
- @item 3. Block commands
- These commands are written at the start of a line, with general text on
- following lines, terminated by a matching @code{@@end} command on a
- line of its own. For example, @code{@@example}, then the lines of a
- coding example, then @code{@@end example}. Some of these block commands
- take arguments as line commands do; for example, @code{@@enumerate A}
- opening an environment terminated by @code{@@end enumerate}. Here
- @samp{A} is the argument.
- @item 4. Symbol insertion commands with no arguments
- These commands start with @@ followed by a word followed by a
- left and right- brace. These commands insert special symbols in
- the document; they do not take arguments. Some examples:
- @code{@@dots@{@}} @result{} @samp{@dots{}}, @code{@@equiv@{@}}
- @result{} @samp{@equiv{}}, @code{@@TeX@{@}} @result{} `@TeX{}', and
- @code{@@bullet@{@}} @result{} @samp{@bullet{}}.
- @item 5. Non-alphabetic commands
- The names of commands in all of the above categories consist of
- alphabetic characters, almost entirely in lower-case. Unlike those, the
- non-alphabetic commands commands consist of an @@ followed by a
- punctuation mark or other character that is not part of the Latin
- alphabet. Non-alphabetic commands are almost always part of text
- within a paragraph. The non-alphabetic commands include @code{@@@@},
- @code{@@@{}, @code{@@@}}, @code{@@.}, @code{@@@kbd{SPACE}}, and most of
- the accent commands.
- @item 6. Miscellaneous commands
- There are a handful of commands that don't fit into any of the above
- categories; for example, the obsolete command @code{@@refill}, which is
- always used at the end of a paragraph immediately following the final
- period or other punctuation character. @code{@@refill} takes no
- argument and does not require braces. Likewise, @code{@@tab} used in a
- @code{@@multitable} block does not take arguments, and is not followed
- by braces.
- @end table
- @cindex Braces and argument syntax
- Thus, the alphabetic commands fall into classes that have
- different argument syntaxes. You cannot tell to which class a command
- belongs by the appearance of its name, but you can tell by the
- command's meaning: if the command stands for a glyph, it is in
- class 4 and does not require an argument; if it makes sense to use the
- command among other text as part of a paragraph, the command
- is in class 1 and must be followed by an argument in braces. The
- non-alphabetic commands, such as @code{@@:}, are exceptions to the
- rule; they do not need braces.
- The purpose of having different syntax for commands is to make Texinfo
- files easier to read, and also to help the GNU Emacs paragraph and
- filling commands work properly.
- @node Command List
- @section @@-Command List
- @cindex Alphabetical @@-command list
- @cindex List of @@-commands
- @cindex @@-command list
- @cindex Reference to @@-commands
- Here is an alphabetical list of the @@-commands in Texinfo. Square
- brackets, @t{[}@w{ }@t{]}, indicate optional arguments; an ellipsis,
- @samp{@dots{}}, indicates repeated text.
- @table @code
- @item @@@var{whitespace}
- An @code{@@} followed by a space, tab, or newline produces a normal,
- stretchable, interword space. @xref{Multiple Spaces}.
- @item @@!
- Produce an exclamation point that ends a sentence (usually after an
- end-of-sentence capital letter). @xref{Ending a Sentence}.
- @item @@"
- @itemx @@'
- Generate an umlaut or acute accent, respectively, over the next
- character, as in @"o and @'o. @xref{Inserting Accents}.
- @item @@*
- Force a line break. @xref{Line Breaks}.
- @item @@,@{@var{c}@}
- Generate a cedilla accent under @var{c}, as in @,{c}. @xref{Inserting
- Accents}.
- @item @@-
- Insert a discretionary hyphenation point. @xref{@code{@@- @@hyphenation}}.
- @item @@.
- Produce a period that ends a sentence (usually after an
- end-of-sentence capital letter). @xref{Ending a Sentence}.
- @item @@/
- Produces no output, but allows a line break. @xref{Line Breaks}.
- @item @@:
- Tell @TeX{} to refrain from inserting extra whitespace after an
- immediately preceding period, question mark, exclamation mark, or
- colon, as @TeX{} normally would. @xref{Not Ending a Sentence}.
- @item @@=
- Generate a macron (bar) accent over the next character, as in @=o.
- @xref{Inserting Accents}.
- @item @@?
- Produce a question mark that ends a sentence (usually after an
- end-of-sentence capital letter). @xref{Ending a Sentence}.
- @item @@@@
- @itemx @@atchar@{@}
- Insert an at sign, @samp{@@}. @xref{Inserting an Atsign}.
- @item @@\
- @itemx @@backslashchar@{@}
- Insert a backslash, @samp{\}; @code{@@backslashchar@{@}} works
- anywhere, while @code{@@\} works only inside @code{@@math}.
- @xref{Inserting a Backslash}, and @ref{Inserting Math}.
- @item @@^
- @itemx @@`
- Generate a circumflex (hat) or grave accent, respectively, over the next
- character, as in @^o and @`e.
- @xref{Inserting Accents}.
- @item @@@{
- @itemx @@lbracechar@{@}
- Insert a left brace, @samp{@{}. @xref{Inserting Braces}.
- @item @@@}
- @itemx @@rbracechar@{@}
- Insert a right brace, @samp{@}}. @xref{Inserting Braces}.
- @item @@~
- Generate a tilde accent over the next character, as in @~N.
- @xref{Inserting Accents}.
- @item @@AA@{@}
- @itemx @@aa@{@}
- Generate the uppercase and lowercase Scandinavian A-ring letters,
- respectively: @AA{}, @aa{}. @xref{Inserting Accents}.
- @item @@abbr@{@var{abbreviation}@}
- Indicate a general abbreviation, such as `Comput.'.
- @xref{@code{@@abbr}}.
- @item @@acronym@{@var{acronym}@}
- Indicate an acronym in all capital letters, such as `NASA'.
- @xref{@code{@@acronym}}.
- @item @@AE@{@}
- @itemx @@ae@{@}
- Generate the uppercase and lowercase AE ligatures, respectively:
- @AE{}, @ae{}. @xref{Inserting Accents}.
- @item @@afivepaper
- Change page dimensions for the A5 paper size. @xref{A4 Paper}.
- @item @@afourlatex
- @itemx @@afourpaper
- @itemx @@afourwide
- Change page dimensions for the A4 paper size. @xref{A4 Paper}.
- @item @@alias @var{new}=@var{existing}
- Make the command @samp{@@@var{new}} a synonym for the existing command
- @samp{@@@var{existing}}. @xref{@code{@@alias}}.
- @item @@allowcodebreaks @var{true-false}
- Control breaking at @samp{-} and @samp{_} in @TeX{}.
- @xref{@code{@@allowcodebreaks}}.
- @item @@anchor@{@var{name}@}
- Define @var{name} as the current location for use as a cross-reference
- target. @xref{@code{@@anchor}}.
- @item @@appendix @var{title}
- Begin an appendix. The title appears in the table of contents. In
- Info, the title is underlined with asterisks.
- @xref{@code{@@unnumbered @@appendix}}.
- @item @@appendixsec @var{title}
- @itemx @@appendixsection @var{title}
- Begin an appendix section within an appendix. The section title
- appears in the table of contents. In Info, the title is underlined
- with equal signs. @code{@@appendixsection} is a longer spelling of
- the @code{@@appendixsec} command. @xref{@code{@@unnumberedsec
- @@appendixsec @@heading}}.
- @item @@appendixsubsec @var{title}
- Begin an appendix subsection. The title appears in the table of
- contents. In Info, the title is underlined with hyphens.
- @xref{@code{@@unnumberedsubsec @@appendixsubsec @@subheading}}.
- @item @@appendixsubsubsec @var{title}
- Begin an appendix subsubsection. The title appears in the table of
- contents. In Info, the title is underlined with periods.
- @xref{@code{@@subsubsection}}.
- @item @@arrow@{@}
- Generate a right arrow glyph: @samp{@arrow{}}. Used by default
- for @code{@@click}. @xref{Click Sequences}.
- @item @@asis
- Used following @code{@@table}, @code{@@ftable}, and @code{@@vtable} to
- print the table's first column without highlighting (``as is'').
- @xref{@code{@@asis}}.
- @item @@author @var{author}
- Typeset @var{author} flushleft and underline it. @xref{@code{@@title
- @@subtitle @@author}}.
- @item @@b@{@var{text}@}
- Set @var{text} in a @b{bold} font. No effect in Info. @xref{Fonts}.
- @item @@bullet@{@}
- Generate a large round dot, @bullet{} (@samp{*} in Info). Often used
- with @code{@@table}. @xref{@code{@@bullet}}.
- @item @@bye
- Stop formatting a file. The formatters do not see anything in the
- input file following @code{@@bye}. @xref{Ending a File}.
- @item @@c @var{comment}
- Begin a comment in Texinfo. The rest of the line does not appear in
- any output. A synonym for @code{@@comment}. @kbd{DEL} also
- starts a comment. @xref{Comments}.
- @item @@caption
- Define the full caption for a @code{@@float}. @xref{@code{@@caption
- @@shortcaption}}.
- @item @@cartouche
- Highlight an example or quotation by drawing a box with rounded
- corners around it. Pair with @code{@@end cartouche}. No effect in
- Info. @xref{@code{@@cartouche}}.
- @item @@center @var{line-of-text}
- Center the line of text following the command.
- @xref{@code{@@titlefont @@center @@sp}}.
- @item @@centerchap @var{line-of-text}
- Like @code{@@chapter}, but centers the chapter title. @xref{@code{@@chapter}}.
- @item @@chapheading @var{title}
- Print an unnumbered chapter-like heading, but omit from the table of
- contents. In Info, the title is underlined with asterisks.
- @xref{@code{@@majorheading @@chapheading}}.
- @item @@chapter @var{title}
- Begin a numbered chapter. The chapter title appears in the table of
- contents. In Info, the title is underlined with asterisks.
- @xref{@code{@@chapter}}.
- @item @@cindex @var{entry}
- Add @var{entry} to the index of concepts. @xref{Index Entries, ,
- Defining the Entries of an Index}.
- @item @@cite@{@var{reference}@}
- Highlight the name of a book or other reference that has no companion
- Info file. @xref{@code{@@cite}}.
- @item @@clear @var{flag}
- Unset @var{flag}, preventing the Texinfo formatting commands from
- formatting text between subsequent pairs of @code{@@ifset @var{flag}}
- and @code{@@end ifset} commands, and preventing
- @code{@@value@{@var{flag}@}} from expanding to the value to which
- @var{flag} is set. @xref{@code{@@set @@clear @@value}}.
- @item @@click@{@}
- Represent a single ``click'' in a GUI@. Used within
- @code{@@clicksequence}. @xref{Click Sequences}.
- @item @@clicksequence@{@var{action} @@click@{@} @var{action}@}
- Represent a sequence of clicks in a GUI@. @xref{Click Sequences}.
- @item @@clickstyle @@@var{cmd}
- Execute @@@var{cmd} for each @code{@@click}; the default is
- @code{@@arrow}. The usual following empty braces on @@@var{cmd} are
- omitted. @xref{Click Sequences}.
- @item @@code@{@var{sample-code}@}
- Indicate an expression, a syntactically complete token of a program,
- or a program name. Unquoted in Info output. @xref{@code{@@code}}.
- @item @@codequotebacktick @var{on-off}
- @itemx @@codequoteundirected @var{on-off}
- Control output of @code{`} and @code{'} in code examples.
- @xref{Inserting Quote Characters}.
- @item @@comma@{@}
- Insert a comma `,' character; only needed when a literal comma would
- be taken as an argument separator. @xref{Inserting a Comma}.
- @item @@command@{@var{command-name}@}
- Indicate a command name, such as @command{ls}. @xref{@code{@@command}}.
- @item @@comment @var{comment}
- Begin a comment in Texinfo. The rest of the line does not appear in
- any output. A synonym for @code{@@c}.
- @xref{Comments}.
- @item @@contents
- Print a complete table of contents. Has no effect in Info, which uses
- menus instead. @xref{Contents, , Generating a Table of Contents}.
- @item @@copying
- Specify copyright holders and copying conditions for the document. Pair
- with @code{@@end copying}. @xref{@code{@@copying}}.
- @item @@copyright@{@}
- Generate the copyright symbol @copyright{}.
- @xref{@code{@@copyright}}.
- @item @@defcodeindex @var{index-name}
- Define a new index and its indexing command. Print entries in an
- @code{@@code} font. @xref{New Indices, , Defining New Indices}.
- @item @@defcv @var{category} @var{class} @var{name}
- @itemx @@defcvx @var{category} @var{class} @var{name}
- Format a description for a variable associated with a class in
- object-oriented programming. Takes three arguments: the category of
- thing being defined, the class to which it belongs, and its name.
- @xref{Definition Commands}.
- @item @@deffn @var{category} @var{name} @var{arguments}@dots{}
- @itemx @@deffnx @var{category} @var{name} @var{arguments}@dots{}
- Format a description for a function, interactive command, or similar
- entity that may take arguments. @code{@@deffn} takes as arguments the
- category of entity being described, the name of this particular
- entity, and its arguments, if any. @xref{Definition Commands}.
- @item @@defindex @var{index-name}
- Define a new index and its indexing command. Print entries in a roman
- font. @xref{New Indices, , Defining New Indices}.
- @item @@definfoenclose @var{newcmd}, @var{before}, @var{after}
- Must be used within @code{@@ifinfo}; create a new command
- @code{@@@var{newcmd}} for Info that marks text by enclosing it in
- strings that precede and follow the text.
- @xref{@code{@@definfoenclose}}.
- @item @@defivar @var{class} @var{instance-variable-name}
- @itemx @@defivarx @var{class} @var{instance-variable-name}
- Format a description for an instance variable in object-oriented
- programming. The command is equivalent to @samp{@@defcv @{Instance
- Variable@} @dots{}}. @xref{Definition Commands}.
- @item @@defmac @var{macroname} @var{arguments}@dots{}
- @itemx @@defmacx @var{macroname} @var{arguments}@dots{}
- Format a description for a macro; equivalent to @samp{@@deffn Macro
- @dots{}}. @xref{Definition Commands}.
- @item @@defmethod @var{class} @var{method-name} @var{arguments}@dots{}
- @itemx @@defmethodx @var{class} @var{method-name} @var{arguments}@dots{}
- Format a description for a method in object-oriented programming;
- equivalent to @samp{@@defop Method @dots{}}. @xref{Definition
- Commands}.
- @item @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
- @itemx @@defopx @var{category} @var{class} @var{name} @var{arguments}@dots{}
- Format a description for an operation in object-oriented programming.
- @code{@@defop} takes as arguments the name of the category of
- operation, the name of the operation's class, the name of the
- operation, and its arguments, if any. @xref{Definition Commands}, and
- @ref{Abstract Objects}.
- @item @@defopt @var{option-name}
- @itemx @@defoptx @var{option-name}
- Format a description for a user option; equivalent to @samp{@@defvr
- @{User Option@} @dots{}}. @xref{Definition Commands}.
- @item @@defspec @var{special-form-name} @var{arguments}@dots{}
- @itemx @@defspecx @var{special-form-name} @var{arguments}@dots{}
- Format a description for a special form; equivalent to @samp{@@deffn
- @{Special Form@} @dots{}}. @xref{Definition Commands}.
- @item @@deftp @var{category} @var{name-of-type} @var{attributes}@dots{}
- @itemx @@deftpx @var{category} @var{name-of-type} @var{attributes}@dots{}
- Format a description for a data type; its arguments are the category,
- the name of the type (e.g., @samp{int}) , and then the names of
- attributes of objects of that type. @xref{Definition Commands}, and
- @ref{Data Types}.
- @item @@deftypecv @var{category} @var{class} @var{data-type} @var{name}
- @itemx @@deftypecvx @var{category} @var{class} @var{data-type} @var{name}
- Format a description for a typed class variable in object-oriented programming.
- @xref{Definition Commands}, and @ref{Abstract Objects}.
- @item @@deftypefn @var{category} @var{data-type} @var{name} @var{arguments}@dots{}
- @itemx @@deftypefnx @var{category} @var{data-type} @var{name} @var{arguments}@dots{}
- Format a description for a function or similar entity that may take
- arguments and that is typed. @code{@@deftypefn} takes as arguments the
- category of entity being described, the type, the name of the
- entity, and its arguments, if any. @xref{Definition Commands}.
- @item @@deftypefnnewline @var{on-off}
- Specifies whether return types for @code{@@deftypefn} and similar are
- printed on lines by themselves; default is off. @xref{Typed
- Functions,, Functions in Typed Languages}.
- @item @@deftypefun @var{data-type} @var{function-name} @var{arguments}@dots{}
- @itemx @@deftypefunx @var{data-type} @var{function-name} @var{arguments}@dots{}
- Format a description for a function in a typed language.
- The command is equivalent to @samp{@@deftypefn Function @dots{}}.
- @xref{Definition Commands}.
- @item @@deftypeivar @var{class} @var{data-type} @var{variable-name}
- @itemx @@deftypeivarx @var{class} @var{data-type} @var{variable-name}
- Format a description for a typed instance variable in object-oriented
- programming. @xref{Definition Commands}, and @ref{Abstract Objects}.
- @item @@deftypemethod @var{class} @var{data-type} @var{method-name} @var{arguments}@dots{}
- @itemx @@deftypemethodx @var{class} @var{data-type} @var{method-name} @var{arguments}@dots{}
- Format a description for a typed method in object-oriented programming.
- @xref{Definition Commands}.
- @item @@deftypeop @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
- @itemx @@deftypeopx @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
- Format a description for a typed operation in object-oriented programming.
- @xref{Definition Commands}, and @ref{Abstract Objects}.
- @item @@deftypevar @var{data-type} @var{variable-name}
- @itemx @@deftypevarx @var{data-type} @var{variable-name}
- Format a description for a variable in a typed language. The command is
- equivalent to @samp{@@deftypevr Variable @dots{}}. @xref{Definition
- Commands}.
- @item @@deftypevr @var{category} @var{data-type} @var{name}
- @itemx @@deftypevrx @var{category} @var{data-type} @var{name}
- Format a description for something like a variable in a typed
- language---an entity that records a value. Takes as arguments the
- category of entity being described, the type, and the name of the
- entity. @xref{Definition Commands}.
- @item @@defun @var{function-name} @var{arguments}@dots{}
- @itemx @@defunx @var{function-name} @var{arguments}@dots{}
- Format a description for a function; equivalent to
- @samp{@@deffn Function @dots{}}. @xref{Definition Commands}.
- @item @@defvar @var{variable-name}
- @itemx @@defvarx @var{variable-name}
- Format a description for a variable; equivalent to @samp{@@defvr
- Variable @dots{}}. @xref{Definition Commands}.
- @item @@defvr @var{category} @var{name}
- @itemx @@defvrx @var{category} @var{name}
- Format a description for any kind of variable. @code{@@defvr} takes
- as arguments the category of the entity and the name of the entity.
- @xref{Definition Commands}.
- @item @@detailmenu
- Mark the (optional) detailed node listing in a master menu.
- @xref{Master Menu Parts}.
- @item @@dfn@{@var{term}@}
- Indicate the introductory or defining use of a term. @xref{@code{@@dfn}}.
- @item @@DH@{@}
- @itemx @@dh@{@}
- Generate the uppercase and lowercase Icelandic letter eth, respectively:
- @DH{}, @dh{}. @xref{Inserting Accents}.
- @item @@dircategory @var{dirpart}
- Specify a part of the Info directory menu where this file's entry should
- go. @xref{Installing Dir Entries}.
- @item @@direntry
- Begin the Info directory menu entry for this file. Pair with
- @code{@@end direntry}. @xref{Installing Dir Entries}.
- @item @@display
- Begin a kind of example. Like @code{@@example} (indent text, do not
- fill), but do not select a new font. Pair with @code{@@end display}.
- @xref{@code{@@display}}.
- @item @@dmn@{@var{dimension}@}
- Format a unit of measure, as in 12@dmn{pt}. Causes @TeX{} to insert a
- thin space before @var{dimension}. No effect in Info.
- @xref{@code{@@dmn}}.
- @item @@docbook
- Enter Docbook completely. Pair with @code{@@end docbook}. @xref{Raw
- Formatter Commands}.
- @item @@documentdescription
- Set the document description text, included in the HTML output. Pair
- with @code{@@end documentdescription}. @xref{@code{@@documentdescription}}.
- @item @@documentencoding @var{enc}
- Declare the input encoding to be @var{enc}.
- @xref{@code{@@documentencoding}}.
- @item @@documentlanguage @var{CC}
- Declare the document language as the two-character ISO-639 abbreviation
- @var{CC}. @xref{@code{@@documentlanguage}}.
- @item @@dotaccent@{@var{c}@}
- Generate a dot accent over the character @var{c}, as in @dotaccent{o}.
- @xref{Inserting Accents}.
- @item @@dotless@{@var{i-or-j}@}
- Generate dotless i (`@dotless{i}') and dotless j (`@dotless{j}').
- @xref{Inserting Accents}.
- @item @@dots@{@}
- Generate an ellipsis, @samp{@dots{}}.
- @xref{@code{@@dots}}.
- @item @@email@{@var{address}[, @var{displayed-text}]@}
- Indicate an electronic mail address. @xref{@code{@@email}}.
- @item @@emph@{@var{text}@}
- Emphasize @var{text}, by using @emph{italics} where possible, and
- enclosing in asterisks in Info. @xref{Emphasis, , Emphasizing Text}.
- @item @@end @var{environment}
- Ends @var{environment}, as in @samp{@@end example}. @xref{Formatting
- Commands,,@@-commands}.
- @item @@enddots@{@}
- Generate an end-of-sentence ellipsis, like this: @enddots{}
- @xref{@code{@@dots}}.
- @item @@enumerate [@var{number-or-letter}]
- Begin a numbered list, using @code{@@item} for each entry.
- Optionally, start list with @var{number-or-letter}. Pair with
- @code{@@end enumerate}. @xref{@code{@@enumerate}}.
- @item @@env@{@var{environment-variable}@}
- Indicate an environment variable name, such as @env{PATH}.
- @xref{@code{@@env}}.
- @item @@equiv@{@}
- Indicate to the reader the exact equivalence of two forms with a
- glyph: @samp{@equiv{}}. @xref{@code{@@equiv}}.
- @item @@error@{@}
- Indicate to the reader with a glyph that the following text is
- an error message: @samp{@error{}}. @xref{@code{@@error}}.
- @item @@errormsg@{@var{msg}@}
- Report @var{msg} as an error to standard error, and exit unsuccessfully.
- Texinfo commands within @var{msg} are expanded to plain text.
- @xref{Conditionals}, and @ref{External Macro Processors}.
- @item @@euro@{@}
- Generate the Euro currency sign. @xref{@code{@@euro}}.
- @item @@evenfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
- @itemx @@evenheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
- Specify page footings resp.@: headings for even-numbered (left-hand)
- pages. @xref{Custom Headings, ,
- How to Make Your Own Headings}.
- @item @@everyfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
- @itemx @@everyheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
- Specify page footings resp.@: headings for every page. Not relevant to
- Info. @xref{Custom Headings, , How to Make Your Own Headings}.
- @item @@example
- Begin an example. Indent text, do not fill, and select fixed-width
- font. Pair with @code{@@end example}. @xref{@code{@@example}}.
- @item @@exampleindent @var{indent}
- Indent example-like environments by @var{indent} number of spaces
- (perhaps 0). @xref{@code{@@exampleindent}}.
- @item @@exclamdown@{@}
- Generate an upside-down exclamation point. @xref{Inserting Accents}.
- @item @@exdent @var{line-of-text}
- Remove any indentation a line might have. @xref{@code{@@exdent}}.
- @item @@expansion@{@}
- Indicate the result of a macro expansion to the reader with a special
- glyph: @samp{@expansion{}}. @xref{@code{@@expansion}}.
- @item @@file@{@var{filename}@}
- Highlight the name of a file, buffer, node, directory, etc.
- @xref{@code{@@file}}.
- @item @@finalout
- Prevent @TeX{} from printing large black warning rectangles beside
- over-wide lines. @xref{Overfull hboxes}.
- @item @@findex @var{entry}
- Add @var{entry} to the index of functions. @xref{Index Entries, ,
- Defining the Entries of an Index}.
- @item @@firstparagraphindent @var{word}
- Control indentation of the first paragraph after section headers
- according to @var{word}, one of `none' or `insert'.
- @xref{@code{@@firstparagraphindent}}.
- @item @@float
- Environment to define floating material. Pair with @code{@@end float}.
- @xref{Floats}.
- @item @@flushleft
- @itemx @@flushright
- Do not fill text; left (right) justify every line while leaving the
- right (left) end ragged. Leave font as is. Pair with @code{@@end
- flushleft} (@code{@@end flushright}). @xref{@code{@@flushleft
- @@flushright}}.
- @item @@fonttextsize @var{10-11}
- Change the size of the main body font in the @TeX{} output.
- @xref{Fonts}.
- @item @@footnote@{@var{text-of-footnote}@}
- Enter a footnote. Footnote text is printed at the bottom of the page
- by @TeX{}; Info may format in either `End' node or `Separate' node style.
- @xref{Footnotes}.
- @item @@footnotestyle @var{style}
- Specify an Info file's footnote style, either @samp{end} for the end
- node style or @samp{separate} for the separate node style.
- @xref{Footnotes}.
- @item @@format
- Begin a kind of example. Like @code{@@display}, but do not indent.
- Pair with @code{@@end format}. @xref{@code{@@example}}.
- @item @@frenchspacing @var{on-off}
- Control spacing after punctuation. @xref{@code{@@frenchspacing}}.
- @item @@ftable @var{formatting-command}
- Begin a two-column table, using @code{@@item} for each entry.
- Automatically enter each of the items in the first column into the
- index of functions. Pair with @code{@@end ftable}. The same as
- @code{@@table}, except for indexing. @xref{@code{@@ftable @@vtable}}.
- @item @@geq@{@}
- Generate a greater-than-or-equal sign, `@geq{}'. @xref{@code{@@geq @@leq}}.
- @item @@group
- Disallow page breaks within following text. Pair with @code{@@end
- group}. Ignored in Info. @xref{@code{@@group}}.
- @item @@guillemetleft@{@}
- @itemx @@guillemetright@{@}
- @item @@guillemotleft@{@}
- @itemx @@guillemotright@{@}
- @itemx @@guilsinglleft@{@}
- @itemx @@guilsinglright@{@}
- Double and single angle quotation marks: @guillemetleft{}
- @guillemetright{} @guilsinglleft{} @guilsinglright{}.
- @code{@@guillemotleft} and @code{@@guillemotright} are synonyms for
- @code{@@guillemetleft} and @code{@@guillemetright}. @xref{Inserting
- Quotation Marks}.
- @item @@H@{@var{c}@}
- Generate the long Hungarian umlaut accent over @var{c}, as in @H{o}.
- @item @@hashchar@{@}
- Insert a hash `#' character; only needed when a literal hash would
- introduce @code{#line} directive. @xref{Inserting a Hashsign}, and
- @ref{External Macro Processors}.
- @item @@heading @var{title}
- Print an unnumbered section-like heading, but omit from the table of
- contents. In Info, the title is underlined with equal signs.
- @xref{@code{@@unnumberedsec @@appendixsec @@heading}}.
- @item @@headings @var{on-off-single-double}
- Turn page headings on or off, and/or specify single-sided or double-sided
- page headings for printing. @xref{@code{@@headings}}.
- @item @@headitem
- Begin a heading row in a multitable. @xref{Multitable Rows}.
- @item @@headitemfont@{@var{text}@}
- Set @var{text} in the font used for multitable heading rows; mostly
- useful in multitable templates. @xref{Multitable Rows}.
- @item @@html
- Enter HTML completely. Pair with @code{@@end html}. @xref{Raw
- Formatter Commands}.
- @item @@hyphenation@{@var{hy-phen-a-ted words}@}
- Explicitly define hyphenation points. @xref{@code{@@- @@hyphenation}}.
- @item @@i@{@var{text}@}
- Set @var{text} in an @i{italic} font. No effect in Info. @xref{Fonts}.
- @item @@ifclear @var{txivar}
- If the Texinfo variable @var{txivar} is not set, format the following
- text. Pair with @code{@@end ifclear}. @xref{@code{@@set @@clear
- @@value}}.
- @item @@ifcommanddefined @var{txicmd}
- @itemx @@ifcommandnotdefined @var{txicmd}
- If the Texinfo code @samp{@@@var{txicmd}} is (not) defined, format the
- follow text. Pair with the corresponding @code{@@end ifcommand...}.
- @xref{Testing for Texinfo Commands}.
- @item @@ifdocbook
- @itemx @@ifhtml
- @itemx @@ifinfo
- Begin text that will appear only in the given output format.
- @code{@@ifinfo} output appears in both Info and (for historical
- compatibility) plain text output. Pair with @code{@@end ifdocbook}
- resp.@: @code{@@end ifhtml} resp.@: @code{@@end ifinfo}.
- @xref{Conditionals}.
- @item @@ifnotdocbook
- @itemx @@ifnothtml
- @itemx @@ifnotplaintext
- @itemx @@ifnottex
- @itemx @@ifnotxml
- Begin text to be ignored in one output format but not the others.
- @code{@@ifnothtml} text is omitted from HTML output, etc. Pair with
- the corresponding @code{@@end ifnot@var{format}}.
- @xref{Conditionals}.
- @item @@ifnotinfo
- Begin text to appear in output other than Info and (for historical
- compatibility) plain text. Pair with @code{@@end ifnotinfo}.
- @xref{Conditionals}.
- @item @@ifplaintext
- Begin text that will appear only in the plain text output.
- Pair with @code{@@end ifplaintext}. @xref{Conditionals}.
- @item @@ifset @var{txivar}
- If the Texinfo variable @var{txivar} is set, format the following
- text. Pair with @code{@@end ifset}. @xref{@code{@@set @@clear
- @@value}}.
- @item @@iftex
- Begin text to appear only in the @TeX{} output. Pair with @code{@@end
- iftex}. @xref{Conditionals, , Conditionally Visible Text}.
- @item @@ifxml
- Begin text that will appear only in the XML output. Pair with
- @code{@@end ifxml}. @xref{Conditionals}.
- @item @@ignore
- Begin text that will not appear in any output. Pair with @code{@@end
- ignore}. @xref{Comments, , Comments and Ignored Text}.
- @item @@image@{@var{filename}, [@var{width}], [@var{height}], [@var{alt}], [@var{ext}]@}
- Include graphics image in external @var{filename} scaled to the given
- @var{width} and/or @var{height}, using @var{alt} text and looking for
- @samp{@var{filename}.@var{ext}} in HTML@. @xref{Images}.
- @item @@include @var{filename}
- Read the contents of Texinfo source file @var{filename}. @xref{Include Files}.
- @item @@indent
- Insert paragraph indentation. @xref{@code{@@indent}}.
- @item @@indentedblock
- Indent a block of arbitary text on the left. Pair with @code{@@end
- indentedblock}. @xref{@code{@@indentedblock}}.
- @item @@indicateurl@{@var{indicateurl}@}
- Indicate text that is a uniform resource locator for the World Wide
- Web. @xref{@code{@@indicateurl}}.
- @item @@inforef@{@var{node-name}, [@var{entry-name}], @var{info-file-name}@}
- Make a cross-reference to an Info file for which there is no printed
- manual. @xref{@code{@@inforef}}.
- @item @@inlinefmt@{@var{fmt}, @var{text}@}
- Insert @var{text} only if the output format is @var{fmt}.
- @xref{Inline Conditionals}.
- @item @@inlinefmtifelse@{@var{fmt}, @var{text}, @var{else-text}@}
- Insert @var{text} if the output format is @var{fmt}, else @var{else-text}.
- @item @@inlineifclear@{@var{var}, @var{text}@}
- @itemx @@inlineifset@{@var{var}, @var{text}@}
- Insert @var{text} only if the Texinfo variable @var{var} is (not) set.
- @item @@inlineraw@{@var{fmt}, @var{raw-text}@}
- Insert @var{text} as in a raw conditional, only if the output format
- is @var{fmt}.
- @item \input @var{macro-definitions-file}
- Use the specified macro definitions file. This command is used only
- in the first line of a Texinfo file to cause @TeX{} to make use of the
- @file{texinfo} macro definitions file. The @code{\} in @code{\input}
- is used instead of an @code{@@} because @TeX{} does not recognize
- @code{@@} until after it has read the definitions file. @xref{Texinfo
- File Header}.
- @item @@insertcopying
- Insert the text previously defined with the @code{@@copying}
- environment. @xref{@code{@@insertcopying}}.
- @item @@item
- Indicate the beginning of a marked paragraph for @code{@@itemize} and
- @code{@@enumerate}; indicate the beginning of the text of a first column
- entry for @code{@@table}, @code{@@ftable}, and @code{@@vtable}.
- @xref{Lists and Tables}.
- @item @@itemize @var{mark-generating-character-or-command}
- Begin an unordered list: indented paragraphs with a mark, such as
- @code{@@bullet}, inside the left margin at the beginning of each item.
- Pair with @code{@@end itemize}. @xref{@code{@@itemize}}.
- @item @@itemx
- Like @code{@@item} but do not generate extra vertical space above the
- item text. Thus, when several items have the same description, use
- @code{@@item} for the first and @code{@@itemx} for the others.
- @xref{@code{@@itemx}}.
- @item @@kbd@{@var{keyboard-characters}@}
- Indicate characters of input to be typed by users. @xref{@code{@@kbd}}.
- @item @@kbdinputstyle @var{style}
- Specify when @code{@@kbd} should use a font distinct from
- @code{@@code} according to @var{style}: @code{code}, @code{distinct},
- @code{example}. @xref{@code{@@kbd}}.
- @item @@key@{@var{key-name}@}
- Indicate the name of a key on a keyboard. @xref{@code{@@key}}.
- @item @@kindex @var{entry}
- Add @var{entry} to the index of keys.
- @xref{Index Entries, , Defining the Entries of an Index}.
- @item @@L@{@}
- @itemx @@l@{@}
- Generate the uppercase and lowercase Polish suppressed-L letters,
- respectively: @L{}, @l{}.
- @item @@LaTeX@{@}
- Generate the @LaTeX{} logo. @xref{@code{@@TeX @@LaTeX}}.
- @item @@leq@{@}
- Generate a less-than-or-equal sign, `@leq{}'. @xref{@code{@@geq @@leq}}.
- @item @@lisp
- Begin an example of Lisp code. Indent text, do not fill, and select
- fixed-width font. Pair with @code{@@end lisp}. @xref{@code{@@lisp}}.
- @item @@listoffloats
- Produce a table-of-contents-like listing of @code{@@float}s.
- @xref{@code{@@listoffloats}}.
- @item @@lowersections
- Change subsequent chapters to sections, sections to subsections, and so
- on. @xref{Raise/lower sections, , @code{@@raisesections} and
- @code{@@lowersections}}.
- @item @@macro @var{macroname} @{@var{params}@}
- Define a new Texinfo command @code{@@@var{macroname}@{@var{params}@}}.
- Pair with @code{@@end macro}. @xref{Defining Macros}.
- @item @@majorheading @var{title}
- Print an unnumbered chapter-like heading, but omit from the table of
- contents. This generates more vertical whitespace before the heading
- than the @code{@@chapheading} command. @xref{@code{@@majorheading
- @@chapheading}}.
- @item @@math@{@var{mathematical-expression}@}
- Format a mathematical expression. @xref{Inserting Math}.
- @item @@menu
- Mark the beginning of a menu of nodes. No effect in a printed manual.
- Pair with @code{@@end menu}. @xref{Menus}.
- @item @@minus@{@}
- Generate a minus sign, `@minus{}'. @xref{@code{@@minus}}.
- @item @@multitable @var{column-width-spec}
- Begin a multi-column table. Begin each row with @code{@@item} or
- @code{@@headitem}, and separate columns with @code{@@tab}. Pair with
- @code{@@end multitable}. @xref{Multitable Column Widths}.
- @item @@need @var{n}
- Start a new page in a printed manual if fewer than @var{n} mils
- (thousandths of an inch) remain on the current page.
- @xref{@code{@@need}}.
- @item @@node @var{name}, @var{next}, @var{previous}, @var{up}
- Begin a new node. @xref{Writing a Node}.
- @item @@noindent
- Prevent text from being indented as if it were a new paragraph.
- @xref{@code{@@noindent}}.
- @item @@novalidate
- Suppress validation of node references and omit creation of auxiliary
- files with @TeX{}. Use before any sectioning or cross-reference
- commands. @xref{Pointer Validation}.
- @item @@O@{@}
- @itemx @@o@{@}
- Generate the uppercase and lowercase O-with-slash letters, respectively:
- @O{}, @o{}.
- @item @@oddfooting [@var{left}] @@| [@var{center}] @@| [@var{right}]
- @itemx @@oddheading [@var{left}] @@| [@var{center}] @@| [@var{right}]
- Specify page footings resp.@: headings for odd-numbered (right-hand)
- pages. @xref{Custom Headings, ,
- How to Make Your Own Headings}.
- @item @@OE@{@}
- @itemx @@oe@{@}
- Generate the uppercase and lowercase OE ligatures, respectively:
- @OE{}, @oe{}. @xref{Inserting Accents}.
- @item @@ogonek@{@var{c}@}
- Generate an ogonek diacritic under the next character, as in
- @ogonek{a}. @xref{Inserting Accents}.
- @item @@option@{@var{option-name}@}
- Indicate a command-line option, such as @option{-l} or
- @option{--help}. @xref{@code{@@option}}.
- @item @@ordf@{@}
- @itemx @@ordm@{@}
- Generate the feminine and masculine Spanish ordinals, respectively:
- @ordf{}, @ordm{}. @xref{Inserting Accents}.
- @item @@page
- Start a new page in a printed manual. No effect in Info.
- @xref{@code{@@page}}.
- @item @@pagesizes [@var{width}][, @var{height}]
- Change page dimensions. @xref{pagesizes}.
- @item @@paragraphindent @var{indent}
- Indent paragraphs by @var{indent} number of spaces (perhaps 0); preserve
- source file indentation if @var{indent} is @code{asis}.
- @xref{@code{@@paragraphindent}}.
- @item @@part @var{title}
- Begin a group of chapters or appendixes; included in the tables of
- contents and produces a page of its own in printed output.
- @xref{@code{@@part}}.
- @item @@pindex @var{entry}
- Add @var{entry} to the index of programs. @xref{Index Entries, , Defining
- the Entries of an Index}.
- @item @@point@{@}
- Indicate the position of point in a buffer to the reader with a glyph:
- @samp{@point{}}. @xref{@code{@@point}}.
- @item @@pounds@{@}
- Generate the pounds sterling currency sign.
- @xref{@code{@@pounds}}.
- @item @@print@{@}
- Indicate printed output to the reader with a glyph: @samp{@print{}}.
- @xref{@code{@@print}}.
- @item @@printindex @var{index-name}
- Generate the alphabetized index for @var{index-name} (using two
- columns in a printed manual). @xref{Printing Indices & Menus}.
- @item @@pxref@{@var{node}, [@var{entry}], [@var{node-title}], [@var{info-file}], [@var{manual}]@}
- Make a reference that starts with a lowercase `see' in a printed
- manual. Use within parentheses only. Only the first argument is
- mandatory. @xref{@code{@@pxref}}.
- @item @@questiondown@{@}
- Generate an upside-down question mark. @xref{Inserting Accents}.
- @item @@quotation
- Narrow the margins to indicate text that is quoted from another work.
- Takes optional argument specifying prefix text, e.g., an author name.
- Pair with @code{@@end quotation}. @xref{@code{@@quotation}}.
- @item @@quotedblleft@{@}
- @itemx @@quotedblright@{@}
- @itemx @@quoteleft@{@}
- @itemx @@quoteright@{@}
- @itemx @@quotedblbase@{@}
- @itemx @@quotesinglbase@{@}
- Produce various quotation marks: @quotedblleft{} @quotedblright{}
- @quoteleft{} @quoteright{} @quotedblbase{} @quotesinglbase{}.
- @xref{Inserting Quotation Marks}.
- @item @@r@{@var{text}@}
- Set @var{text} in the regular @r{roman} font. No effect in Info.
- @xref{Fonts}.
- @item @@raggedright
- Fill text; left justify every line while leaving the right end ragged.
- Leave font as is. Pair with @code{@@end raggedright}. No effect in
- Info. @xref{@code{@@raggedright}}.
- @item @@raisesections
- Change subsequent sections to chapters, subsections to sections, and so
- on. @xref{Raise/lower sections}.
- @item @@ref@{@var{node}, [@var{entry}], [@var{node-title}], [@var{info-file}], [@var{manual}]@}
- Make a plain reference that does not start with any special text.
- Follow command with a punctuation mark. Only the first argument is
- mandatory. @xref{@code{@@ref}}.
- @item @@refill
- @findex refill
- This command used to refill and indent the paragraph after all the
- other processing has been done. It is no longer needed, since all
- formatters now automatically refill as needed, but you may still see
- it in the source to some manuals, as it does no harm.
- @item @@registeredsymbol@{@}
- Generate the legal symbol @registeredsymbol{}.
- @xref{@code{@@registeredsymbol}}.
- @item @@result@{@}
- Indicate the result of an expression to the reader with a special
- glyph: @samp{@result{}}. @xref{@code{@@result}}.
- @item @@ringaccent@{@var{c}@}
- Generate a ring accent over the next character, as in @ringaccent{o}.
- @xref{Inserting Accents}.
- @item @@samp@{@var{text}@}
- Indicate a literal example of a sequence of characters, in general.
- Quoted in Info output. @xref{@code{@@samp}}.
- @item @@sansserif@{@var{text}@}
- Set @var{text} in a @sansserif{sans serif} font if possible. No
- effect in Info. @xref{Fonts}.
- @item @@sc@{@var{text}@}
- Set @var{text} in a small caps font in printed output, and uppercase
- in Info. @xref{Smallcaps}.
- @item @@section @var{title}
- Begin a section within a chapter. The section title appears in the
- table of contents. In Info, the title is underlined with equal signs.
- Within @code{@@chapter} and @code{@@appendix}, the section title is
- numbered; within @code{@@unnumbered}, the section is unnumbered.
- @xref{@code{@@section}}.
- @item @@set @var{txivar} [@var{string}]
- Define the Texinfo variable @var{txivar}, optionally to the value
- @var{string}. @xref{@code{@@set @@clear @@value}}.
- @item @@setchapternewpage @var{on-off-odd}
- Specify whether chapters start on new pages, and if so, whether on
- odd-numbered (right-hand) new pages. @xref{@code{@@setchapternewpage}}.
- @item @@setfilename @var{info-file-name}
- Provide a name to be used for the output files. This command is ignored
- for @TeX{} formatting. @xref{@code{@@setfilename}}.
- @item @@settitle @var{title}
- Specify the title for page headers in a printed manual, and the
- default document title for HTML @samp{<head>}.
- @xref{@code{@@settitle}}.
- @item @@shortcaption
- Define the short caption for a @code{@@float}. @xref{@code{@@caption
- @@shortcaption}}.
- @item @@shortcontents
- Print a short table of contents, with chapter-level entries only. Not
- relevant to Info, which uses menus rather than tables of contents.
- @xref{Contents, , Generating a Table of Contents}.
- @item @@shorttitlepage @var{title}
- Generate a minimal title page. @xref{@code{@@titlepage}}.
- @item @@slanted@{@var{text}@}
- Set @var{text} in a @slanted{slanted} font if possible. No effect
- in Info. @xref{Fonts}.
- @item @@smallbook
- Cause @TeX{} to produce a printed manual in a 7 by 9.25 inch format
- rather than the regular 8.5 by 11 inch format.
- @xref{@code{@@smallbook}}. Also, see @ref{@code{@@small@dots{}}}.
- @item @@smalldisplay
- Begin a kind of example. Like @code{@@display}, but use a smaller
- font size where possible. Pair with @code{@@end smalldisplay}.
- @xref{@code{@@small@dots{}}}.
- @item @@smallexample
- Begin an example. Like @code{@@example}, but use a smaller font size
- where possible. Pair with @code{@@end smallexample}.
- @xref{@code{@@small@dots{}}}.
- @item @@smallformat
- Begin a kind of example. Like @code{@@format}, but use a smaller font
- size where possible. Pair with @code{@@end smallformat}.
- @xref{@code{@@small@dots{}}}.
- @item @@smallindentedblock
- Like @code{@@indentedblock}, but use a smaller font size where
- possible. Pair with @code{@@end smallindentedblock}.
- @xref{@code{@@small@dots{}}}.
- @item @@smalllisp
- Begin an example of Lisp code. Same as @code{@@smallexample}. Pair
- with @code{@@end smalllisp}. @xref{@code{@@small@dots{}}}.
- @item @@smallquotation
- Like @code{@@quotation}, but use a smaller font size where possible.
- Pair with @code{@@end smallquotation}. @xref{@code{@@small@dots{}}}.
- @item @@sortas @{@var{key}@}
- Used in the arguments to index commands to give a string by which the
- index entry should be sorted. @xref{Indexing Commands}.
- @item @@sp @var{n}
- Skip @var{n} blank lines. @xref{@code{@@sp}}.
- @item @@ss@{@}
- Generate the German sharp-S es-zet letter, @ss{}. @xref{Inserting Accents}.
- @item @@strong @{@var{text}@}
- Emphasize @var{text} more strongly than @code{@@emph}, by using
- @strong{boldface} where possible; enclosed in asterisks in Info.
- @xref{emph & strong, , Emphasizing Text}.
- @item @@sub @{@var{text}@}
- Set @var{text} as a subscript. @xref{Inserting Subscripts and Superscripts}.
- @item @@subheading @var{title}
- Print an unnumbered subsection-like heading, but omit from the table
- of contents of a printed manual. In Info, the title is underlined
- with hyphens. @xref{@code{@@unnumberedsubsec @@appendixsubsec @@subheading}}.
- @item @@subsection @var{title}
- Begin a subsection within a section. The subsection title appears in
- the table of contents. In Info, the title is underlined with hyphens.
- Same context-dependent numbering as @code{@@section}.
- @xref{@code{@@subsection}}.
- @item @@subsubheading @var{title}
- Print an unnumbered subsubsection-like heading, but omit from the
- table of contents of a printed manual. In Info, the title is
- underlined with periods. @xref{@code{@@subsubsection}}.
- @item @@subsubsection @var{title}
- Begin a subsubsection within a subsection. The subsubsection title
- appears in the table of contents. In Info, the title is underlined
- with periods. Same context-dependent numbering as @code{@@section}.
- @xref{@code{@@subsubsection}}.
- @item @@subtitle @var{title}
- In a printed manual, set a subtitle in a normal sized font flush to
- the right-hand side of the page. Not relevant to Info, which does not
- have title pages. @xref{@code{@@title @@subtitle @@author}}.
- @item @@summarycontents
- Print a short table of contents. Synonym for @code{@@shortcontents}.
- @xref{Contents, , Generating a Table of Contents}.
- @item @@sup @{@var{text}@}
- Set @var{text} as a superscript. @xref{Inserting Subscripts and Superscripts}.
- @item @@syncodeindex @var{from-index} @var{to-index}
- Merge the index named in the first argument into the index named in
- the second argument, formatting the entries from the first index with
- @code{@@code}. @xref{Combining Indices}.
- @item @@synindex @var{from-index} @var{to-index}
- Merge the index named in the first argument into the index named in
- the second argument. Do not change the font of @var{from-index}
- entries. @xref{Combining Indices}.
- @item @@t@{@var{text}@}
- Set @var{text} in a @t{fixed-width}, typewriter-like font. No effect
- in Info. @xref{Fonts}.
- @item @@tab
- Separate columns in a row of a multitable. @xref{Multitable Rows}.
- @item @@table @var{formatting-command}
- Begin a two-column table (description list), using @code{@@item} for
- each entry. Write each first column entry on the same line as
- @code{@@item}. First column entries are printed in the font resulting
- from @var{formatting-command}. Pair with @code{@@end table}.
- @xref{Two-column Tables, , Making a Two-column Table}. Also see
- @ref{@code{@@ftable @@vtable}}, and @ref{@code{@@itemx}}.
- @item @@TeX@{@}
- Generate the @TeX{} logo. @xref{@code{@@TeX @@LaTeX}}.
- @item @@tex
- Enter @TeX{} completely. Pair with @code{@@end tex}. @xref{Raw
- Formatter Commands}.
- @item @@textdegree@{@}
- Generate the degree symbol. @xref{@code{@@textdegree}}.
- @item @@thischapter
- @itemx @@thischaptername
- @itemx @@thischapternum
- @itemx @@thisfile
- @itemx @@thispage
- @itemx @@thistitle
- Only allowed in a heading or footing. Stands for, respectively, the
- number and name of the current chapter (in the format `Chapter 1:
- Title'), the current chapter name only, the current chapter number
- only, the filename, the current page number, and the title of the
- document, respectively. @xref{Custom Headings, , How to Make Your Own
- Headings}.
- @item @@TH@{@}
- @itemx @@th@{@}
- Generate the uppercase and lowercase Icelandic letter thorn, respectively:
- @TH{}, @th{}. @xref{Inserting Accents}.
- @item @@tie@{@}
- Generate a normal interword space at which a line break is not
- allowed. @xref{@code{@@tie}}.
- @item @@tieaccent@{@var{cc}@}
- Generate a tie-after accent over the next two characters @var{cc}, as in
- `@tieaccent{oo}'. @xref{Inserting Accents}.
- @item @@tindex @var{entry}
- Add @var{entry} to the index of data types. @xref{Index Entries, ,
- Defining the Entries of an Index}.
- @item @@title @var{title}
- In a printed manual, set a title flush to the left-hand side of the
- page in a larger than normal font and underline it with a black rule.
- Not relevant to Info, which does not have title pages.
- @xref{@code{@@title @@subtitle @@author}}.
- @item @@titlefont@{@var{text}@}
- In a printed manual, print @var{text} in a larger than normal font.
- @xref{@code{@@titlefont @@center @@sp}}.
- @item @@titlepage
- Begin the title page. Write the command on a line of its own, paired
- with @code{@@end titlepage}. Nothing between @code{@@titlepage} and
- @code{@@end titlepage} appears in Info. @xref{@code{@@titlepage}}.
- @item @@today@{@}
- Insert the current date, in `1 Jan 1900' style. @xref{Custom
- Headings, , How to Make Your Own Headings}.
- @item @@top @var{title}
- Mark the topmost @code{@@node} in the file, which must be defined on
- the line immediately preceding the @code{@@top} command. The title is
- formatted as a chapter-level heading. The entire top node, including
- the @code{@@node} and @code{@@top} lines, are normally enclosed with
- @code{@@ifnottex ... @@end ifnottex}. In @TeX{} and
- @code{texinfo-format-buffer}, the @code{@@top} command is merely a
- synonym for @code{@@unnumbered}. @xref{@command{makeinfo} Pointer
- Creation}.
- @item @@U@{@var{hex}@}
- Output a representation of Unicode character U+@var{hex}.
- @xref{Inserting Unicode}.
- @item @@u@{@var{c}@}
- @itemx @@ubaraccent@{@var{c}@}
- @itemx @@udotaccent@{@var{c}@}
- Generate a breve, underbar, or underdot accent, respectively, over or
- under the character @var{c}, as in @u{o}, @ubaraccent{o},
- @udotaccent{o}. @xref{Inserting Accents}.
- @item @@unmacro @var{macroname}
- Undefine the macro @code{@@@var{macroname}} if it has been defined.
- @xref{Defining Macros}.
- @item @@unnumbered @var{title}
- Begin a chapter that appears without chapter numbers of any kind. The
- title appears in the table of contents. In Info, the title is
- underlined with asterisks. @xref{@code{@@unnumbered @@appendix}}.
- @item @@unnumberedsec @var{title}
- Begin a section that appears without section numbers of any kind. The
- title appears in the table of contents of a printed manual. In Info,
- the title is underlined with equal signs. @xref{@code{@@unnumberedsec
- @@appendixsec @@heading}}.
- @item @@unnumberedsubsec @var{title}
- Begin an unnumbered subsection. The title appears in the table of
- contents. In Info, the title is underlined with hyphens.
- @xref{@code{@@unnumberedsubsec @@appendixsubsec @@subheading}}.
- @item @@unnumberedsubsubsec @var{title}
- Begin an unnumbered subsubsection. The title appears in the table of
- contents. In Info, the title is underlined with periods.
- @xref{@code{@@subsubsection}}.
- @item @@uref@{@var{url}[, @var{displayed-text}][, @var{replacement}@}
- @itemx @@url@{@var{url}[, @var{displayed-text}][, @var{replacement}@}
- Define a cross-reference to an external uniform resource locator,
- e.g., for the World Wide Web. @xref{@code{@@url}}.
- @item @@urefbreakstyle @var{style}
- Specify how @code{@@uref}/@code{@@url} should break at special
- characters: @code{after}, @code{before}, @code{none}.
- @xref{@code{@@url}}.
- @item @@v@{@var{c}@}
- Generate check accent over the character @var{c}, as in @v{o}.
- @xref{Inserting Accents}.
- @item @@validatemenus @var{on-off}
- Control whether menus can be automatically generated. @xref{Writing a
- Menu}.
- @item @@value@{@var{txivar}@}
- Insert the value, if any, of the Texinfo variable @var{txivar},
- previously defined by @code{@@set}. @xref{@code{@@set @@clear
- @@value}}.
- @item @@var@{@var{metasyntactic-variable}@}
- Highlight a metasyntactic variable, which is something that stands for
- another piece of text. @xref{@code{@@var}}.
- @item @@verb@{@var{delim} @var{literal} @var{delim}@}
- Output @var{literal}, delimited by the single character @var{delim},
- exactly as is (in the fixed-width font), including any whitespace or
- Texinfo special characters. @xref{@code{@@verb}}.
- @item @@verbatim
- Output the text of the environment exactly as is (in the fixed-width
- font). Pair with @code{@@end verbatim}. @xref{@code{@@verbatim}}.
- @item @@verbatiminclude @var{filename}
- Output the contents of @var{filename} exactly as is (in the
- fixed-width font). @xref{@code{@@verbatiminclude}}.
- @item @@vindex @var{entry}
- Add @var{entry} to the index of variables. @xref{Index Entries, ,
- Defining the Entries of an Index}.
- @item @@vskip @var{amount}
- In a printed manual, insert whitespace so as to push text on the
- remainder of the page towards the bottom of the page. Used in
- formatting the copyright page with the argument @samp{0pt plus
- 1filll}. (Note spelling of @samp{filll}.) @code{@@vskip} may be used
- only in contexts ignored for Info. @xref{Copyright}.
- @item @@vtable @var{formatting-command}
- Begin a two-column table, using @code{@@item} for each entry.
- Automatically enter each of the items in the first column into the
- index of variables. Pair with @code{@@end vtable}. The same as
- @code{@@table}, except for indexing. @xref{@code{@@ftable @@vtable}}.
- @item @@w@{@var{text}@}
- Disallow line breaks within @var{text}. @xref{@code{@@w}}.
- @item @@xml
- Enter XML completely. Pair with @code{@@end xml}. @xref{Raw
- Formatter Commands}.
- @item @@xref@{@var{node}, [@var{entry}], [@var{node-title}], [@var{info-file}], [@var{manual}]@}
- Make a reference that starts with `See' in a printed manual. Follow
- command with a punctuation mark. Only the first argument is
- mandatory. @xref{@code{@@xref}}.
- @item @@xrefautomaticsectiontitle @var{on-off}
- By default, use the section title instead of the node name in cross
- references. @xref{Three Arguments}.
- @end table
- @node Command Contexts
- @section @@-Command Contexts
- @cindex Contexts, of @@-commands
- Here we describe approximately which @@-commands can be used in which
- contexts. It not exhaustive or meant to be a complete reference.
- Discrepancies between the information here and the @code{makeinfo} or
- @TeX{} implementations are most likely to be resolved in favor of the
- implementation.
- By @dfn{general text} below, we mean anything except sectioning and
- other such outer-level document commands, such as @code{@@section},
- @code{@@node}, and @code{@@setfilename}.
- @code{@@c}, @code{@@comment} and @code{@@if ... @@end if} conditional
- commands may appear anywhere (except the conditionals must still be on
- lines by themselves). @code{@@caption} may only appear in
- @code{@@float} but may contain general text. @code{@@footnote}
- content likewise.
- @@-commands with braces marking text (such as @code{@@strong},
- @code{@@sc}, @code{@@asis}) may contain raw formatter commands such as
- @code{@@html} but no other block commands (other commands terminated
- by @code{@@end}) and may not be split across paragraphs, but may
- otherwise contain general text.
- In addition to the block command restriction, on @code{@@center},
- @code{@@exdent} and @code{@@item} in @code{@@table} lines, @@-commands
- that makes only sense in a paragraph are not accepted, such as
- @code{@@indent}.
- In addition to the above, sectioning commands cannot contain
- @code{@@anchor}, @code{@@footnote} or @code{@@verb}.
- In addition to the above, remaining commands (@code{@@node},
- @code{@@anchor}, @code{@@printindex}, @code{@@ref}, @code{@@math},
- @code{@@cindex}, @code{@@url}, @code{@@image}, and so on) cannot
- contain cross-reference commands (@code{@@ref}, @code{@@xref},
- @code{@@pxref} and @code{@@inforef}). In one last addition,
- @code{@@shortcaption} may only appear inside @code{@@float}.
- For precise and complete information, we suggest looking into the
- test suite in the sources, which exhaustively tries combinations.
- @node Obsolete @@-Commands
- @section Obsolete @@-Commands
- Here are Texinfo @@-commands which are obsolete or have been removed
- completely. This section is for historical purposes.
- @ftable @code
- @item @@setcontentsaftertitlepage
- @cindex Contents, after title page
- @cindex Table of contents, after title page
- In the past, the contents commands were sometimes placed at the end of
- the file, after any indices and just before the @code{@@bye}, but we
- no longer recommend this.
- This command could be used by a user printing a manual, to force the
- contents to be printed after the title page
- (after the @samp{@@end titlepage} line)
- even if the @code{@@contents} command was at the end of the manual. It
- now does nothing.
- @item @@setshortcontentsaftertitlepage
- This placed the short table of contents after the @samp{@@end titlepage}
- command even if the @code{@@shortcontents} command was at the end. It
- now does nothing.
- @end ftable
- @node Tips
- @appendix Tips and Hints
- Here are some tips for writing Texinfo documentation:
- @cindex Tips
- @cindex Usage tips
- @cindex Hints
- @itemize @bullet
- @item
- Write in the present tense, not in the past or the future.
- @item
- Write actively! For example, write ``We recommend that @dots{}'' rather
- than ``It is recommended that @dots{}''.
- @item
- Use 70 or 72 as your fill column. Longer lines are hard to read.
- @item
- Include a copyright notice and copying permissions.
- @end itemize
- @subsubheading Index, Index, Index!
- Write many index entries, in different ways.
- Readers like indices; they are helpful and convenient.
- Although it is easiest to write index entries as you write the body of
- the text, some people prefer to write entries afterwards. In either
- case, write an entry before the paragraph to which it applies. This
- way, an index entry points to the first page of a paragraph that is
- split across pages.
- Here are more index-related hints we have found valuable:
- @itemize @bullet
- @item
- Write each index entry differently, so each entry refers to a different
- place in the document.
- @item
- Write index entries only where a topic is discussed significantly. For
- example, it is not useful to index ``debugging information'' in a
- chapter on reporting bugs. Someone who wants to know about debugging
- information will certainly not find it in that chapter.
- @item
- Consistently capitalize the first word of every concept index entry,
- or else consistently use lowercase. Terse entries often call for
- lowercase; longer entries for capitalization. Whichever case
- convention you use, please use one or the other consistently! Mixing
- the two styles looks bad.
- @item
- Always capitalize or use uppercase for those words in an index for
- which this is proper, such as names of countries or acronyms. Always
- use the appropriate case for case-sensitive names, such as those in C or
- Lisp.
- @item
- Write the indexing commands that refer to a whole section immediately
- after the section command, and write the indexing commands that refer to
- a paragraph before that paragraph.
- In the example that follows, a blank line comes after the index
- entry for ``Leaping'':
- @example
- @group
- @@section The Dog and the Fox
- @@cindex Jumping, in general
- @@cindex Leaping
- @@cindex Dog, lazy, jumped over
- @@cindex Lazy dog jumped over
- @@cindex Fox, jumps over dog
- @@cindex Quick fox jumps over dog
- The quick brown fox jumps over the lazy dog.
- @end group
- @end example
- @noindent
- (Note that the example shows entries for the same concept that are
- written in different ways---@samp{Lazy dog}, and @samp{Dog, lazy}---so
- readers can look up the concept in different ways.)
- @end itemize
- @subsubheading Blank Lines
- @itemize @bullet
- @item
- Insert a blank line between a sectioning command and the first following
- sentence or paragraph, or between the indexing commands associated with
- the sectioning command and the first following sentence or paragraph, as
- shown in the tip on indexing. It makes the source easier to read.
- @item
- Always insert a blank line before a @code{@@table} command and after an
- @code{@@end table} command; but never insert a blank line after an
- @code{@@table} command.
- @need 1000
- For example,
- @example
- @group
- Types of fox:
- @@table @@samp
- @@item Quick
- Jump over lazy dogs.
- @end group
- @group
- @@item Brown
- Also jump over lazy dogs.
- @@end table
- @end group
- @group
- @@noindent
- On the other hand, @dots{}
- @end group
- @end example
- Insert blank lines before and after @code{@@itemize} @dots{} @code{@@end
- itemize} and @code{@@enumerate} @dots{} @code{@@end enumerate} in the
- same way.
- @end itemize
- @subsubheading Complete Phrases
- Complete phrases are easier to read than @dots{}
- @itemize @bullet
- @item
- Write entries in an itemized list as complete sentences; or at least, as
- complete phrases. Incomplete expressions @dots{} awkward @dots{} like
- this.
- @item
- Write the prefatory sentence or phrase for a multi-item list or table as
- a complete expression. Do not write ``You can set:''; instead, write
- ``You can set these variables:''. The former expression sounds cut off.
- @end itemize
- @subsubheading Editions, Dates and Versions
- Include edition numbers, version numbers, and dates in the
- @code{@@copying} text (for people reading the Texinfo file, and for the
- legal copyright in the output files). Then use @code{@@insertcopying}
- in the @code{@@titlepage} section for people reading the printed
- output (@pxref{Short Sample}).
- It is easiest to handle such version information using @code{@@set}
- and @code{@@value}. @xref{@code{@@value} Example}, and @ref{GNU
- Sample Texts}.
- @subsubheading Definition Commands
- Definition commands are @code{@@deffn}, @code{@@defun},
- @code{@@defmac}, and the like, and enable you to write descriptions in
- a uniform format.
- @itemize @bullet
- @item
- Write just one definition command for each entity you define with a
- definition command. The automatic indexing feature creates an index
- entry that leads the reader to the definition.
- @item
- Use @code{@@table} @dots{} @code{@@end table} in an appendix that
- contains a summary of functions, not @code{@@deffn} or other definition
- commands.
- @end itemize
- @subsubheading Capitalization
- @itemize @bullet
- @item
- Capitalize ``Texinfo''; it is a name. Do not write the @samp{x} or
- @samp{i} in uppercase.
- @item
- Capitalize ``Info''; it is a name.
- @item
- Write @TeX{} using the @code{@@TeX@{@}} command. Note the uppercase
- @samp{T} and @samp{X}. This command causes the formatters to
- typeset the name according to the wishes of Donald Knuth, who wrote
- @TeX{}. (Likewise @code{@@LaTeX@{@}} for @LaTeX{}.)
- @end itemize
- @subsubheading Spaces
- Do not use spaces to format a Texinfo file, except inside of
- @code{@@example} @dots{} @code{@@end example} and other literal
- environments and commands.
- @need 700
- For example, @TeX{} fills the following:
- @example
- @group
- @@kbd@{C-x v@}
- @@kbd@{M-x vc-next-action@}
- Perform the next logical operation
- on the version-controlled file
- corresponding to the current buffer.
- @end group
- @end example
- @need 950
- @noindent
- so it looks like this:
- @iftex
- @quotation
- @kbd{C-x v}
- @kbd{M-x vc-next-action}
- Perform the next logical operation on the version-controlled file
- corresponding to the current buffer.
- @end quotation
- @end iftex
- @ifnottex
- @quotation
- `C-x v' `M-x vc-next-action' Perform the next logical operation on the
- version-controlled file corresponding to the current buffer.
- @end quotation
- @end ifnottex
- @noindent
- In this case, the text should be formatted with
- @code{@@table}, @code{@@item}, and @code{@@itemx}, to create a table.
- @subsubheading @@code, @@samp, @@var, and @samp{---}
- @itemize @bullet
- @item
- Use @code{@@code} around Lisp symbols, including command names.
- For example,
- @example
- The main function is @@code@{vc-next-action@}, @dots{}
- @end example
- @item
- Avoid putting letters such as @samp{s} immediately after an
- @samp{@@code}. Such letters look bad.
- @item
- Use @code{@@var} around meta-variables. Do not write angle brackets
- around them.
- @item
- Use three hyphens in a row, @samp{---}, to indicate a long dash. @TeX{}
- typesets these as a long dash and the Info formatters reduce three
- hyphens to two.
- @end itemize
- @subsubheading Periods Outside of Quotes
- Place periods and other punctuation marks @emph{outside} of quotations,
- unless the punctuation is part of the quotation. This practice goes
- against some publishing conventions in the United States, but enables the
- reader to distinguish between the contents of the quotation and the
- whole passage.
- For example, you should write the following sentence with the period
- outside the end quotation marks:
- @example
- Evidently, @samp{au} is an abbreviation for ``author''.
- @end example
- @noindent
- since @samp{au} does @emph{not} serve as an abbreviation for
- @samp{author.} (with a period following the word).
- @subsubheading Introducing New Terms
- @itemize @bullet
- @item
- Introduce new terms so that a reader who does not know them can
- understand them from context; or write a definition for the term.
- For example, in the following, the terms ``check in'', ``register'' and
- ``delta'' are all appearing for the first time; the example sentence should be
- rewritten so they are understandable.
- @quotation
- The major function assists you in checking in a file to your
- version control system and registering successive sets of changes to
- it as deltas.
- @end quotation
- @item
- Use the @code{@@dfn} command around a word being introduced, to indicate
- that the reader should not expect to know the meaning already, and
- should expect to learn the meaning from this passage.
- @end itemize
- @subsubheading Program Invocation Nodes
- You can invoke programs such as Emacs, GCC, and @code{gawk} from a
- shell. The documentation for each program should contain a section that
- describes this. Unfortunately, if the node names and titles for these
- sections are all different, they are difficult for users to find.
- So, there is a convention to name such sections with a phrase beginning
- with the word `Invoking', as in `Invoking Emacs'; this way, users can
- find the section easily.
- @subsubheading ANSI C Syntax
- When you use @code{@@example} to describe a C function's calling
- conventions, use the ANSI C syntax, like this:
- @example
- void dld_init (char *@@var@{path@});
- @end example
- @noindent
- And in the subsequent discussion, refer to the argument values by
- writing the same argument names, again highlighted with
- @code{@@var}.
- @need 800
- Avoid the obsolete style that looks like this:
- @example
- #include <dld.h>
- dld_init (path)
- char *path;
- @end example
- Also, it is best to avoid writing @code{#include} above the
- declaration just to indicate that the function is declared in a
- header file. The practice may give the misimpression that the
- @code{#include} belongs near the declaration of the function. Either
- state explicitly which header file holds the declaration or, better
- yet, name the header file used for a group of functions at the
- beginning of the section that describes the functions.
- @anchor{texi-elements-by-size}
- @subsubheading Node Length
- Keep nodes (sections) to a reasonable length, whatever reasonable
- might be in the given context. Don't hesitate to break up long nodes
- into subnodes and have an extensive tree structure; that's what it's
- there for. Many times, readers will probably try to find a single
- specific point in the manual, using search, indexing, or just plain
- guessing, rather than reading the whole thing from beginning to end.
- You can use the @command{texi-elements-by-size} utility to see a list
- of all nodes (or sections) in the document, sorted by size (either
- lines or words), to find candidates for splitting. It's in the
- @file{util/} subdirectory of the Texinfo sources.
- @subsubheading Bad Examples
- Here are several examples of bad writing to avoid:
- In this example, say, `` @dots{} you must @code{@@dfn}@{check
- in@} the new version.'' That flows better.
- @quotation
- When you are done editing the file, you must perform a
- @code{@@dfn}@{check in@}.
- @end quotation
- In the following example, say, ``@dots{} makes a unified interface such as VC
- mode possible.''
- @quotation
- SCCS, RCS and other version-control systems all perform similar
- functions in broadly similar ways (it is this resemblance which makes
- a unified control mode like this possible).
- @end quotation
- And in this example, you should specify what `it' refers to:
- @quotation
- If you are working with other people, it assists in coordinating
- everyone's changes so they do not step on each other.
- @end quotation
- @subsubheading And Finally @dots{}
- @itemize @bullet
- @item
- Pronounce @TeX{} as if the @samp{X} were a Greek `chi', as the last
- sound in the name `Bach'. But pronounce Texinfo as in `speck':
- ``teckinfo''.
- @item
- Write notes for yourself at the very end of a Texinfo file after the
- @code{@@bye}. None of the formatters process text after the
- @code{@@bye}; it is as if the text were within @code{@@ignore} @dots{}
- @code{@@end ignore}.
- @end itemize
- @node Sample Texinfo Files
- @appendix Sample Texinfo Files
- @cindex Sample Texinfo files
- The first example from the first chapter (@pxref{Short Sample}) is
- given here in its entirety, without commentary. The second example
- includes the full texts to be used in GNU manuals.
- @menu
- * Short Sample Texinfo File::
- * GNU Sample Texts::
- * Verbatim Copying License::
- * All-permissive Copying License::
- @end menu
- @node Short Sample Texinfo File
- @section Short Sample
- @cindex Sample Texinfo file, no comments
- Here is a complete, short sample Texinfo file. You can see this file,
- with comments, in the first chapter. @xref{Short Sample}.
- In a nutshell: The @command{makeinfo} program transforms a Texinfo
- source file such as this into an Info file or HTML; and @TeX{} typesets
- it for a printed manual.
- @sp 1
- @example
- \input texinfo
- @@settitle Sample Manual 1.0
- @@copying
- This is a short example of a complete Texinfo file.
- Copyright @@copyright@{@} 2016 Free Software Foundation, Inc.
- @@end copying
- @@titlepage
- @@title Sample Title
- @@page
- @@vskip 0pt plus 1filll
- @@insertcopying
- @@end titlepage
- @@c Output the table of the contents at the beginning.
- @@contents
- @@ifnottex
- @@node Top
- @@top GNU Sample
- This manual is for GNU Sample
- (version @@value@{VERSION@}, @@value@{UPDATED@}).
- @@end ifnottex
- @@menu
- * First Chapter:: The first chapter is the
- only chapter in this sample.
- * Index:: Complete index.
- @@end menu
- @@node First Chapter
- @@chapter First Chapter
- @@cindex chapter, first
- This is the first chapter.
- @@cindex index entry, another
- Here is a numbered list.
- @@enumerate
- @@item
- This is the first item.
- @@item
- This is the second item.
- @@end enumerate
- @@node Index
- @@unnumbered Index
- @@printindex cp
- @@bye
- @end example
- @node GNU Sample Texts
- @section GNU Sample Texts
- @cindex GNU sample texts
- @cindex Sample texts, GNU
- @cindex Full texts, GNU
- Following is a sample Texinfo document with the full texts that should
- be used (adapted as necessary) in GNU manuals.
- As well as the legal texts, it also serves as a practical example of how
- many elements in a GNU system can affect the manual. If you're not
- familiar with all these different elements, don't worry. They're not
- required and a perfectly good manual can be written without them.
- They're included here nonetheless because many manuals do (or could)
- benefit from them.
- @xref{Short Sample}, for a minimal example of a Texinfo file.
- @xref{Beginning and Ending a File}, for a full explanation of that
- minimal example.
- Here are some notes on the example:
- @itemize @bullet
- @item
- @cindex $Id
- @cindex CVS $Id
- @cindex RCS $Id
- @cindex Documentation identification
- @cindex Identification of documentation
- The @samp{$Id:} comment is for the CVS
- (@url{http://www.nongnu.org/cvs/}), RCS (@pxref{Top,,, rcs, Revision
- Control System}) and other version control systems, which expand it
- into a string such as:
- @example
- $Id$
- @end example
- (This is potentially useful in all sources that use version control,
- not just manuals.) You may wish to include the @samp{$Id:} comment in
- the @code{@@copying} text, if you want a completely unambiguous
- reference to the documentation source version.
- If you want to literally write @t{@w{$}Id$}, use @code{@@w}:
- @code{@@w@{$@}Id$}. Unfortunately, this technique does not work in
- plain text output, where it's not clear what should be done.
- @item
- @pindex automake@r{, and version info}
- @vindex UPDATED @r{Automake variable}
- @vindex VERSION @r{Automake variable}
- @pindex time-stamp.el
- The @file{version.texi} in the @code{@@include} command is maintained
- automatically by Automake (@pxref{Top,,, automake, GNU Automake}). It
- sets the @samp{VERSION} and @samp{UPDATED} values used elsewhere. If
- your distribution doesn't use Automake, but you do use Emacs, you may
- find the time-stamp.el package helpful (@pxref{Time Stamps,,, emacs,
- The GNU Emacs Manual}).
- @item
- The @code{@@syncodeindex} command reflects the recommendation to use
- only one index where possible, to make it easier for readers to look up
- index entries.
- @item
- The @code{@@dircategory} is for constructing the Info directory.
- @xref{Installing Dir Entries}, which includes a variety of recommended
- category names.
- @item
- The `Invoking' node is a GNU standard to help users find the basic
- information about command-line usage of a given program. @xref{Manual
- Structure Details,,, standards, GNU Coding Standards}.
- @item
- @cindex GNU Free Documentation License, including entire
- @cindex Free Documentation License, including entire
- It is best to include the entire GNU Free Documentation License in a GNU
- manual, unless the manual is only a few pages long. Of course this
- sample is even shorter than that, but it includes the FDL anyway in
- order to show one conventional way to do so. The @file{fdl.texi} file
- is available on the GNU machines and in the Texinfo and other GNU
- source distributions.
- The FDL provides for omitting itself under certain conditions, but in
- that case the sample texts given here have to be modified. @xref{GNU
- Free Documentation License}.
- @item
- If the FSF is not the copyright holder, then use the appropriate name.
- @item
- If your manual is published on paper by the FSF or is longer than 400
- pages, you should include the standard FSF cover texts (@pxref{License
- Notices for Documentation,,, maintain, GNU Maintainer Information}).
- @item
- For documents that express your personal views, feelings or
- experiences, it is more appropriate to use a license permitting only
- verbatim copying, rather than the FDL@. @xref{Verbatim Copying
- License}.
- @end itemize
- Here is the sample document:
- @verbatim
- \input texinfo @c -*-texinfo-*-
- @comment $Id@w{$}
- @comment %**start of header
- @include version.texi
- @settitle GNU Sample @value{VERSION}
- @syncodeindex pg cp
- @comment %**end of header
- @copying
- This manual is for GNU Sample (version @value{VERSION}, @value{UPDATED}),
- which is an example in the Texinfo documentation.
- Copyright @copyright{} 2016 Free Software Foundation, Inc.
- @quotation
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
- Texts. A copy of the license is included in the section entitled
- ``GNU Free Documentation License''.
- @end quotation
- @end copying
- @dircategory Texinfo documentation system
- @direntry
- * sample: (sample)Invoking sample.
- @end direntry
- @titlepage
- @title GNU Sample
- @subtitle for version @value{VERSION}, @value{UPDATED}
- @author A.U. Thor (@email{bug-sample@@gnu.org})
- @page
- @vskip 0pt plus 1filll
- @insertcopying
- @end titlepage
- @contents
- @ifnottex
- @node Top
- @top GNU Sample
- This manual is for GNU Sample (version @value{VERSION}, @value{UPDATED}).
- @end ifnottex
- @menu
- * Invoking sample::
- * GNU Free Documentation License::
- * Index::
- @end menu
- @node Invoking sample
- @chapter Invoking sample
- @pindex sample
- @cindex invoking @command{sample}
- This is a sample manual. There is no sample program to
- invoke, but if there were, you could see its basic usage
- and command line options here.
- @node GNU Free Documentation License
- @appendix GNU Free Documentation License
- @include fdl.texi
- @node Index
- @unnumbered Index
- @printindex cp
- @bye
- @end verbatim
- @node Verbatim Copying License
- @section Verbatim Copying License
- @cindex Verbatim copying license
- @cindex License for verbatim copying
- For software manuals and other documentation, it is critical to use a
- license permitting free redistribution and updating, so that when a free
- program is changed, the documentation can be updated as well.
- On the other hand, for documents that express your personal views,
- feelings or experiences, it is more appropriate to use a license
- permitting only verbatim copying.
- Here is sample text for such a license permitting verbatim copying only.
- This is just the license text itself. For a complete sample document,
- see the previous sections.
- @verbatim
- @copying
- This document is a sample for allowing verbatim copying only.
- Copyright @copyright{} 2016 Free Software Foundation, Inc.
- @quotation
- Permission is granted to make and distribute verbatim copies
- of this entire document without royalty provided the
- copyright notice and this permission notice are preserved.
- @end quotation
- @end copying
- @end verbatim
- @node All-permissive Copying License
- @section All-permissive Copying License
- @cindex All-permissive copying license
- @cindex License for all-permissive copying
- For software manuals and other documentation, it is important to use a
- license permitting free redistribution and updating, so that when a free
- program is changed, the documentation can be updated as well.
- On the other hand, for small supporting files, short manuals (under 300
- lines long) and rough documentation (README files, INSTALL files, etc.),
- the full FDL would be overkill. They can use a simple all-permissive
- license.
- Here is sample text for such an all-permissive license. This is just
- the license text itself. For a complete sample document, see the
- previous sections.
- @example
- Copyright @@copyright@{@} 2016 Free Software Foundation, Inc.
- Copying and distribution of this file, with or without modification,
- are permitted in any medium without royalty provided the copyright
- notice and this notice are preserved.
- @end example
- @node Texinfo Mode
- @appendix Using Texinfo Mode
- @cindex Texinfo mode
- @cindex Mode, using Texinfo
- @cindex GNU Emacs
- @cindex Emacs
- You may edit a Texinfo file with any text editor you choose. A Texinfo
- file is no different from any other ASCII file. However, GNU Emacs
- comes with a special mode, called Texinfo mode, that provides Emacs
- commands and tools to help ease your work.
- @menu
- * Texinfo Mode Overview:: How Texinfo mode can help you.
- * Emacs Editing:: Texinfo mode adds to GNU Emacs' general
- purpose editing features.
- * Inserting:: How to insert frequently used @@-commands.
- * Showing the Structure:: How to show the structure of a file.
- * Updating Nodes and Menus:: How to update or create new nodes and menus.
- * Info Formatting:: How to format for Info.
- * Printing:: How to format and print part or all of a file.
- * Texinfo Mode Summary:: Summary of all the Texinfo mode commands.
- @end menu
- @node Texinfo Mode Overview
- @section Texinfo Mode Overview
- Texinfo mode provides special features for working with Texinfo files.
- You can:
- @itemize @bullet
- @item
- Insert frequently used @@-commands.
- @item
- Automatically create @code{@@node} lines.
- @item
- Show the structure of a Texinfo source file.
- @item
- Automatically create or update the `Next',
- `Previous', and `Up' pointers of a node.
- @item
- Automatically create or update menus.
- @item
- Automatically create a master menu.
- @item
- Format a part or all of a file for Info.
- @item
- Typeset and print part or all of a file.
- @end itemize
- Perhaps the two most helpful features are those for inserting frequently
- used @@-commands and for creating node pointers and menus.
- @node Emacs Editing
- @section The Usual GNU Emacs Editing Commands
- In most cases, the usual Text mode commands work the same in Texinfo
- mode as they do in Text mode. Texinfo mode adds new editing commands
- and tools to GNU Emacs' general purpose editing features. The major
- difference concerns filling. In Texinfo mode, the paragraph
- separation variable and syntax table are redefined so that Texinfo
- commands that should be on lines of their own are not inadvertently
- included in paragraphs. Thus, the @kbd{M-q} (@code{fill-paragraph})
- command will refill a paragraph but not mix an indexing command on a
- line adjacent to it into the paragraph.
- In addition, Texinfo mode sets the @code{page-delimiter} variable to
- the value of @code{texinfo-chapter-level-regexp}; by default, this is
- a regular expression matching the commands for chapters and their
- equivalents, such as appendices. With this value for the page
- delimiter, you can jump from chapter title to chapter title with the
- @kbd{C-x ]} (@code{forward-page}) and @kbd{C-x [}
- (@code{backward-page}) commands and narrow to a chapter with the
- @kbd{C-x n p} (@code{narrow-to-page}) command. (@xref{Pages, , ,emacs,
- The GNU Emacs Manual}, for details about the page commands.)
- You may name a Texinfo file however you wish, but the convention is to
- end a Texinfo file name with one of the extensions
- @file{.texinfo}, @file{.texi}, @file{.txi}, or @file{.tex}. A longer
- extension is preferred, since it is explicit, but a shorter extension
- may be necessary for operating systems that limit the length of file
- names. GNU Emacs automatically enters Texinfo mode when you visit a
- file with a @file{.texinfo}, @file{.texi} or @file{.txi}
- extension. Also, Emacs switches to Texinfo mode
- when you visit a
- file that has @samp{-*-texinfo-*-} in its first line. If ever you are
- in another mode and wish to switch to Texinfo mode, type @code{M-x
- texinfo-mode}.
- Like all other Emacs features, you can customize or enhance Texinfo
- mode as you wish. In particular, the keybindings are very easy to
- change. The keybindings described here are the default or standard
- ones.
- @node Inserting
- @section Inserting Frequently Used Commands
- @cindex Inserting frequently used commands
- @cindex Frequently used commands, inserting
- @cindex Commands, inserting them
- Texinfo mode provides commands to insert various frequently used
- @@-commands into the buffer. You can use these commands to save
- keystrokes.
- The insert commands are invoked by typing @kbd{C-c} twice and then the
- first letter of the @@-command:
- @table @kbd
- @item C-c C-c c
- @itemx M-x texinfo-insert-@@code
- @findex texinfo-insert-@@code
- Insert @code{@@code@{@}} and put the
- cursor between the braces.
- @item C-c C-c d
- @itemx M-x texinfo-insert-@@dfn
- @findex texinfo-insert-@@dfn
- Insert @code{@@dfn@{@}} and put the
- cursor between the braces.
- @item C-c C-c e
- @itemx M-x texinfo-insert-@@end
- @findex texinfo-insert-@@end
- Insert @code{@@end} and attempt to insert the correct following word,
- such as @samp{example} or @samp{table}. (This command does not handle
- nested lists correctly, but inserts the word appropriate to the
- immediately preceding list.)
- @item C-c C-c i
- @itemx M-x texinfo-insert-@@item
- @findex texinfo-insert-@@item
- Insert @code{@@item} and put the
- cursor at the beginning of the next line.
- @item C-c C-c k
- @itemx M-x texinfo-insert-@@kbd
- @findex texinfo-insert-@@kbd
- Insert @code{@@kbd@{@}} and put the
- cursor between the braces.
- @item C-c C-c n
- @itemx M-x texinfo-insert-@@node
- @findex texinfo-insert-@@node
- Insert @code{@@node} and a comment line
- listing the sequence for the `Next',
- `Previous', and `Up' nodes.
- Leave point after the @code{@@node}.
- @item C-c C-c o
- @itemx M-x texinfo-insert-@@noindent
- @findex texinfo-insert-@@noindent
- Insert @code{@@noindent} and put the
- cursor at the beginning of the next line.
- @item C-c C-c s
- @itemx M-x texinfo-insert-@@samp
- @findex texinfo-insert-@@samp
- Insert @code{@@samp@{@}} and put the
- cursor between the braces.
- @item C-c C-c t
- @itemx M-x texinfo-insert-@@table
- @findex texinfo-insert-@@table
- Insert @code{@@table} followed by a @key{SPC}
- and leave the cursor after the @key{SPC}.
- @item C-c C-c v
- @itemx M-x texinfo-insert-@@var
- @findex texinfo-insert-@@var
- Insert @code{@@var@{@}} and put the
- cursor between the braces.
- @item C-c C-c x
- @itemx M-x texinfo-insert-@@example
- @findex texinfo-insert-@@example
- Insert @code{@@example} and put the
- cursor at the beginning of the next line.
- @c M-@{ was the binding for texinfo-insert-braces;
- @c in Emacs 19, backward-paragraph will take this binding.
- @item C-c C-c @{
- @itemx M-x texinfo-insert-braces
- @findex texinfo-insert-braces
- Insert @code{@{@}} and put the cursor between the braces.
- @item C-c @}
- @itemx C-c ]
- @itemx M-x up-list
- @findex up-list
- Move from between a pair of braces forward past the closing brace.
- Typing @kbd{C-c ]} is easier than typing @kbd{C-c @}}, which
- is, however, more mnemonic; hence the two keybindings. (Also, you can
- move out from between braces by typing @kbd{C-f}.)
- @end table
- To put a command such as @w{@code{@@code@{@dots{}@}}} around an
- @emph{existing} word, position the cursor in front of the word and type
- @kbd{C-u 1 C-c C-c c}. This makes it easy to edit existing plain text.
- The value of the prefix argument tells Emacs how many words following
- point to include between braces---@samp{1} for one word, @samp{2} for
- two words, and so on. Use a negative argument to enclose the previous
- word or words. If you do not specify a prefix argument, Emacs inserts
- the @@-command string and positions the cursor between the braces. This
- feature works only for those @@-commands that operate on a word or words
- within one line, such as @code{@@kbd} and @code{@@var}.
- This set of insert commands was created after analyzing the frequency
- with which different @@-commands are used in the @cite{GNU Emacs
- Manual} and the @cite{GDB Manual}. If you wish to add your own insert
- commands, you can bind a keyboard macro to a key, use abbreviations,
- or extend the code in @file{texinfo.el}.
- @findex texinfo-start-menu-description
- @cindex Menu description, start
- @cindex Description for menu, start
- @kbd{C-c C-c C-d} (@code{texinfo-start-menu-description}) is an insert
- command that works differently from the other insert commands. It
- inserts a node's section or chapter title in the space for the
- description in a menu entry line. (A menu entry has three parts, the
- entry name, the node name, and the description. Only the node name is
- required, but a description helps explain what the node is about.
- @xref{Menu Parts, , The Parts of a Menu}.)
- To use @code{texinfo-start-menu-description}, position point in a menu
- entry line and type @kbd{C-c C-c C-d}. The command looks for and copies
- the title that goes with the node name, and inserts the title as a
- description; it positions point at beginning of the inserted text so you
- can edit it. The function does not insert the title if the menu entry
- line already contains a description.
- This command is only an aid to writing descriptions; it does not do the
- whole job. You must edit the inserted text since a title tends to use
- the same words as a node name but a useful description uses different
- words.
- @node Showing the Structure
- @section Showing the Sectioning Structure of a File
- @cindex Showing the sectioning structure of a file
- @cindex Sectioning structure of a file, showing
- @cindex Structure of a file, showing
- @cindex Outline of file structure, showing
- @cindex Contents-like outline of file structure
- @cindex File sectioning structure, showing
- @cindex Texinfo file sectioning structure, showing
- You can show the sectioning structure of a Texinfo file by using the
- @kbd{C-c C-s} command (@code{texinfo-show-structure}). This command
- lists the lines that begin with the @@-commands for @code{@@chapter},
- @code{@@section}, and the like. It constructs what amounts to a table
- of contents. These lines are displayed in another buffer called the
- @samp{*Occur*} buffer. In that buffer, you can position the cursor
- over one of the lines and use the @kbd{C-c C-c} command
- (@code{occur-mode-goto-occurrence}), to jump to the corresponding spot
- in the Texinfo file.
- @table @kbd
- @item C-c C-s
- @itemx M-x texinfo-show-structure
- @findex texinfo-show-structure
- Show the @code{@@chapter}, @code{@@section}, and such lines of a
- Texinfo file.
- @item C-c C-c
- @itemx M-x occur-mode-goto-occurrence
- @findex occur-mode-goto-occurrence
- Go to the line in the Texinfo file corresponding to the line under the
- cursor in the @file{*Occur*} buffer.
- @end table
- If you call @code{texinfo-show-structure} with a prefix argument by
- typing @w{@kbd{C-u C-c C-s}}, it will list not only those lines with the
- @@-commands for @code{@@chapter}, @code{@@section}, and the like, but
- also the @code{@@node} lines. You can use @code{texinfo-show-structure}
- with a prefix argument to check whether the `Next', `Previous', and `Up'
- pointers of an @code{@@node} line are correct.
- Often, when you are working on a manual, you will be interested only
- in the structure of the current chapter. In this case, you can mark
- off the region of the buffer that you are interested in by using the
- @kbd{C-x n n} (@code{narrow-to-region}) command and
- @code{texinfo-show-structure} will work on only that region. To see
- the whole buffer again, use @w{@kbd{C-x n w}} (@code{widen}).
- (@xref{Narrowing, , , emacs, The GNU Emacs Manual}, for more
- information about the narrowing commands.)
- @vindex page-delimiter
- @cindex Page delimiter in Texinfo mode
- In addition to providing the @code{texinfo-show-structure} command,
- Texinfo mode sets the value of the page delimiter variable to match
- the chapter-level @@-commands. This enables you to use the @kbd{C-x
- ]} (@code{forward-page}) and @kbd{C-x [} (@code{backward-page})
- commands to move forward and backward by chapter, and to use the
- @kbd{C-x n p} (@code{narrow-to-page}) command to narrow to a chapter.
- @xref{Pages, , , emacs, The GNU Emacs Manual}, for more information
- about the page commands.
- @node Updating Nodes and Menus
- @section Updating Nodes and Menus
- @cindex Updating nodes and menus
- @cindex Create nodes, menus automatically
- @cindex Insert nodes, menus automatically
- @cindex Automatically insert nodes, menus
- Texinfo mode provides commands for automatically creating or updating
- menus and node pointers. The commands are called ``update'' commands
- because their most frequent use is for updating a Texinfo file after you
- have worked on it; but you can use them to insert the `Next',
- `Previous', and `Up' pointers into an @code{@@node} line that has none
- and to create menus in a file that has none.
- If you do not use any updating commands, you need to write menus by
- hand, which is a tedious task.
- @menu
- * Updating Commands:: Five major updating commands.
- * Updating Requirements:: How to structure a Texinfo file for
- using the updating command.
- * Other Updating Commands:: How to indent descriptions, insert
- missing nodes lines, and update
- nodes in sequence.
- @end menu
- @node Updating Commands
- @subsection The Updating Commands
- You can use the updating commands to:
- @itemize @bullet
- @item
- insert or update the `Next', `Previous', and `Up' pointers of a node,
- @item
- insert or update the menu for a section, and
- @item
- create a master menu for a Texinfo source file.
- @end itemize
- You can also use the commands to update all the nodes and menus in a
- region or in a whole Texinfo file.
- The updating commands work only with conventional Texinfo files, which
- are structured hierarchically like books. In such files, a structuring
- command line must follow closely after each @code{@@node} line, except
- for the `Top' @code{@@node} line. (A @dfn{structuring command line} is
- a line beginning with @code{@@chapter}, @code{@@section}, or other
- similar command.)
- You can write the structuring command line on the line that follows
- immediately after an @code{@@node} line or else on the line that
- follows after a single @code{@@comment} line or a single
- @code{@@ifinfo} line. You cannot interpose more than one line between
- the @code{@@node} line and the structuring command line; and you may
- interpose only a @code{@@comment} line or an @code{@@ifinfo} line.
- Commands which work on a whole buffer require that the `Top' node be
- followed by a node with a @code{@@chapter} or equivalent-level command.
- The menu updating commands will not create a main or master menu for a
- Texinfo file that has only @code{@@chapter}-level nodes! The menu
- updating commands only create menus @emph{within} nodes for lower level
- nodes. To create a menu of chapters, you must provide a `Top'
- node.
- The menu updating commands remove menu entries that refer to other Info
- files since they do not refer to nodes within the current buffer. This
- is a deficiency. Rather than use menu entries, you can use cross
- references to refer to other Info files. None of the updating commands
- affect cross-references.
- Texinfo mode has five updating commands that are used most often: two
- are for updating the node pointers or menu of a single node (or a
- region); two are for updating every node pointer and menu in a file;
- and one, the @code{texinfo-master-menu} command, is for creating a
- master menu for a complete file, and optionally, for updating every
- node and menu in the whole Texinfo file.
- The @code{texinfo-master-menu} command is the primary command:
- @table @kbd
- @item C-c C-u m
- @itemx M-x texinfo-master-menu
- @findex texinfo-master-menu
- Create or update a master menu that includes all the other menus
- (incorporating the descriptions from pre-existing menus, if
- any).
- With an argument (prefix argument, @kbd{C-u,} if interactive), first create or
- update all the nodes and all the regular menus in the buffer before
- constructing the master menu. (@xref{The Top Node, , The Top Node and
- Master Menu}, for more about a master menu.)
- For @code{texinfo-master-menu} to work, the Texinfo file must have a
- `Top' node and at least one subsequent node.
- After extensively editing a Texinfo file, you can type the following:
- @example
- C-u M-x texinfo-master-menu
- @exdent or
- C-u C-c C-u m
- @end example
- @noindent
- This updates all the nodes and menus completely and all at once.
- @end table
- The other major updating commands do smaller jobs and are designed for
- the person who updates nodes and menus as he or she writes a Texinfo
- file.
- @need 1000
- The commands are:
- @table @kbd
- @item C-c C-u C-n
- @itemx M-x texinfo-update-node
- @findex texinfo-update-node
- Insert the `Next', `Previous', and `Up' pointers for the node that point is
- within (i.e., for the @code{@@node} line preceding point). If the
- @code{@@node} line has pre-existing `Next', `Previous', or `Up'
- pointers in it, the old pointers are removed and new ones inserted.
- With an argument (prefix argument, @kbd{C-u}, if interactive), this command
- updates all @code{@@node} lines in the region (which is the text
- between point and mark).
- @item C-c C-u C-m
- @itemx M-x texinfo-make-menu
- @findex texinfo-make-menu
- Create or update the menu in the node that point is within.
- With an argument (@kbd{C-u} as prefix argument, if
- interactive), the command makes or updates menus for the
- nodes which are either within or a part of the
- region.
- Whenever @code{texinfo-make-menu} updates an existing menu, the
- descriptions from that menu are incorporated into the new menu. This
- is done by copying descriptions from the existing menu to the entries
- in the new menu that have the same node names. If the node names are
- different, the descriptions are not copied to the new menu.
- @item C-c C-u C-e
- @itemx M-x texinfo-every-node-update
- @findex texinfo-every-node-update
- Insert or update the `Next', `Previous', and `Up' pointers for every
- node in the buffer.
- @item C-c C-u C-a
- @itemx M-x texinfo-all-menus-update
- @findex texinfo-all-menus-update
- Create or update all the menus in the buffer. With an argument
- (@kbd{C-u} as prefix argument, if interactive), first insert
- or update all the node
- pointers before working on the menus.
- If a master menu exists, the @code{texinfo-all-menus-update} command
- updates it; but the command does not create a new master menu if none
- already exists. (Use the @code{texinfo-master-menu} command for
- that.)
- When working on a document that does not merit a master menu, you can
- type the following:
- @example
- C-u C-c C-u C-a
- @exdent or
- C-u M-x texinfo-all-menus-update
- @end example
- @noindent
- This updates all the nodes and menus.
- @end table
- The @code{texinfo-column-for-description} variable specifies the
- column to which menu descriptions are indented. By default, the value
- is 32 although it can be useful to reduce it to as low as 24. You
- can set the variable via customization (@pxref{Customization,,,
- emacs, The GNU Emacs Manual}) or with the @kbd{M-x set-variable}
- command (@pxref{Examining, , Examining and Setting Variables, emacs,
- The GNU Emacs Manual}).
- Also, the @code{texinfo-indent-menu-description} command may be used to
- indent existing menu descriptions to a specified column. Finally, if
- you wish, you can use the @code{texinfo-insert-node-lines} command to
- insert missing @code{@@node} lines into a file. (@xref{Other Updating
- Commands}, for more information.)
- @node Updating Requirements
- @subsection Updating Requirements
- @cindex Updating requirements
- @cindex Requirements for updating commands
- To use the updating commands, you must organize the Texinfo file
- hierarchically with chapters, sections, subsections, and the like.
- When you construct the hierarchy of the manual, do not `jump down'
- more than one level at a time: you can follow the `Top' node with a
- chapter, but not with a section; you can follow a chapter with a
- section, but not with a subsection. However, you may `jump up' any
- number of levels at one time---for example, from a subsection to a
- chapter.
- Each @code{@@node} line, with the exception of the line for the `Top'
- node, must be followed by a line with a structuring command such as
- @code{@@chapter}, @code{@@section}, or
- @code{@@unnumberedsubsec}.
- Each @code{@@node} line/structuring-command line combination
- must look either like this:
- @example
- @group
- @@node Comments, Minimum, Conventions, Overview
- @@comment node-name, next, previous, up
- @@section Comments
- @end group
- @end example
- or like this (without the @code{@@comment} line):
- @example
- @group
- @@node Comments, Minimum, Conventions, Overview
- @@section Comments
- @end group
- @end example
- or like this (without the explicit node pointers):
- @example
- @group
- @@node Comments
- @@section Comments
- @end group
- @end example
- @noindent
- In this example, `Comments' is the name of both the node and the
- section. The next node is called `Minimum' and the previous node is
- called `Conventions'. The `Comments' section is within the `Overview'
- node, which is specified by the `Up' pointer. (Instead of an
- @code{@@comment} line, you may also write an @code{@@ifinfo} line.)
- If a file has a `Top' node, it must be called @samp{top} or @samp{Top}
- and be the first node in the file.
- The menu updating commands create a menu of sections within a chapter,
- a menu of subsections within a section, and so on. This means that
- you must have a `Top' node if you want a menu of chapters.
- Incidentally, the @code{makeinfo} command will create an Info file for a
- hierarchically organized Texinfo file that lacks `Next', `Previous' and
- `Up' pointers. Thus, if you can be sure that your Texinfo file will be
- formatted with @code{makeinfo}, you have no need for the update node
- commands. (@xref{Creating an Info File}, for more information about
- @code{makeinfo}.)
- @node Other Updating Commands
- @subsection Other Updating Commands
- In addition to the five major updating commands, Texinfo mode
- possesses several less frequently used updating commands:
- @table @kbd
- @item M-x texinfo-insert-node-lines
- @findex texinfo-insert-node-lines
- Insert @code{@@node} lines before the @code{@@chapter},
- @code{@@section}, and other sectioning commands wherever they are
- missing throughout a region in a Texinfo file.
- With an argument (@kbd{C-u} as prefix argument, if interactive), the
- command @code{texinfo-insert-node-lines} not only inserts
- @code{@@node} lines but also inserts the chapter or section titles as
- the names of the corresponding nodes. In addition, it inserts the
- titles as node names in pre-existing @code{@@node} lines that lack
- names. Since node names should be more concise than section or
- chapter titles, you must manually edit node names so inserted.
- For example, the following marks a whole buffer as a region and inserts
- @code{@@node} lines and titles throughout:
- @example
- C-x h C-u M-x texinfo-insert-node-lines
- @end example
- This command inserts titles as node names in @code{@@node} lines; the
- @code{texinfo-start-menu-description} command (@pxref{Inserting,
- Inserting Frequently Used Commands}) inserts titles as descriptions in
- menu entries, a different action. However, in both cases, you need to
- edit the inserted text.
- @item M-x texinfo-multiple-files-update
- @findex texinfo-multiple-files-update @r{(in brief)}
- Update nodes and menus in a document built from several separate files.
- With @kbd{C-u} as a prefix argument, create and insert a master menu in
- the outer file. With a numeric prefix argument, such as @kbd{C-u 2}, first
- update all the menus and all the `Next', `Previous', and `Up' pointers
- of all the included files before creating and inserting a master menu in
- the outer file. The @code{texinfo-multiple-files-update} command is
- described in the appendix on @code{@@include} files.
- @xref{@code{texinfo-multiple-files-update}}.
- @item M-x texinfo-indent-menu-description
- @findex texinfo-indent-menu-description
- Indent every description in the menu following point to the specified
- column. You can use this command to give yourself more space for
- descriptions. With an argument (@kbd{C-u} as prefix argument, if
- interactive), the @code{texinfo-indent-menu-description} command indents
- every description in every menu in the region. However, this command
- does not indent the second and subsequent lines of a multi-line
- description.
- @item M-x texinfo-sequential-node-update
- @findex texinfo-sequential-node-update
- Insert the names of the nodes immediately following and preceding the
- current node as the `Next' or `Previous' pointers regardless of those
- nodes' hierarchical level. This means that the `Next' node of a
- subsection may well be the next chapter. Sequentially ordered nodes are
- useful for novels and other documents that you read through
- sequentially. (However, in Info, the @kbd{g *} command lets
- you look through the file sequentially, so sequentially ordered nodes
- are not strictly necessary.) With an argument (prefix argument, if
- interactive), the @code{texinfo-sequential-node-update} command
- sequentially updates all the nodes in the region.
- @end table
- @node Info Formatting
- @section Formatting for Info
- @cindex Formatting for Info
- @cindex Running an Info formatter
- @cindex Info formatting
- Texinfo mode provides several commands for formatting part or all of a
- Texinfo file for Info. Often, when you are writing a document, you
- want to format only part of a file---that is, a region.
- You can use either the @code{texinfo-format-region} or the
- @code{makeinfo-region} command to format a region:
- @table @kbd
- @findex texinfo-format-region
- @item C-c C-e C-r
- @itemx M-x texinfo-format-region
- @itemx C-c C-m C-r
- @itemx M-x makeinfo-region
- Format the current region for Info.
- @end table
- You can use either the @code{texinfo-format-buffer} or the
- @code{makeinfo-buffer} command to format a whole buffer:
- @table @kbd
- @findex texinfo-format-buffer
- @item C-c C-e C-b
- @itemx M-x texinfo-format-buffer
- @itemx C-c C-m C-b
- @itemx M-x makeinfo-buffer
- Format the current buffer for Info.
- @end table
- @need 1000
- For example, after writing a Texinfo file, you can type the following:
- @example
- C-u C-c C-u m
- @exdent or
- C-u M-x texinfo-master-menu
- @end example
- @noindent
- This updates all the nodes and menus. Then type the following to create
- an Info file:
- @example
- C-c C-m C-b
- @exdent or
- M-x makeinfo-buffer
- @end example
- @xref{Creating an Info File} for details about Info formatting.
- @node Printing
- @comment node-name, next, previous, up
- @section Printing
- @cindex Formatting for printing
- @cindex Printing a region or buffer
- @cindex Region formatting and printing
- @cindex Buffer formatting and printing
- @cindex Part of file formatting and printing
- Typesetting and printing a Texinfo file is a multi-step process in
- which you first create a file for printing (called a DVI file), and
- then print the file. Optionally, you may also create indices. To do
- this, you must run the @code{texindex} command after first running the
- @code{tex} typesetting command; and then you must run the @code{tex}
- command again. Or else run the @code{texi2dvi} command which
- automatically creates indices as needed (@pxref{Format with
- @command{texi2dvi}}).
- Often, when you are writing a document, you want to typeset and print
- only part of a file to see what it will look like. You can use the
- @code{texinfo-tex-region} and related commands for this purpose. Use
- the @code{texinfo-tex-buffer} command to format all of a
- buffer.
- @table @kbd
- @item C-c C-t C-b
- @itemx M-x texinfo-tex-buffer
- @findex texinfo-tex-buffer
- Run @code{texi2dvi} on the buffer. In addition to running @TeX{} on the
- buffer, this command automatically creates or updates indices as
- needed.
- @item C-c C-t C-r
- @itemx M-x texinfo-tex-region
- @findex texinfo-tex-region
- Run @TeX{} on the region.
- @item C-c C-t C-i
- @itemx M-x texinfo-texindex
- Run @code{texindex} to sort the indices of a Texinfo file formatted with
- @code{texinfo-tex-region}. The @code{texinfo-tex-region} command does
- not run @code{texindex} automatically; it only runs the @code{tex}
- typesetting command. You must run the @code{texinfo-tex-region} command
- a second time after sorting the raw index files with the @code{texindex}
- command. (Usually, you do not format an index when you format a region,
- only when you format a buffer. Now that the @code{texi2dvi} command
- exists, there is little or no need for this command.)
- @item C-c C-t C-p
- @itemx M-x texinfo-tex-print
- @findex texinfo-tex-print
- Print the file (or the part of the file) previously formatted with
- @code{texinfo-tex-buffer} or @code{texinfo-tex-region}.
- @end table
- For @code{texinfo-tex-region} or @code{texinfo-tex-buffer} to work, the
- file @emph{must} start with a @samp{\input texinfo} line and must
- include a @code{@@settitle} line. The file must end with @code{@@bye}
- on a line by itself. (When you use @code{texinfo-tex-region}, you must
- surround the @code{@@settitle} line with start-of-header and
- end-of-header lines.)
- @xref{Hardcopy}, for a description of the other @TeX{} related
- commands, such as @code{tex-show-print-queue}.
- @node Texinfo Mode Summary
- @section Texinfo Mode Summary
- In Texinfo mode, each set of commands has default keybindings that
- begin with the same keys. All the commands that are custom-created
- for Texinfo mode begin with @kbd{C-c}. The keys are somewhat
- mnemonic.
- @subheading Insert Commands
- The insert commands are invoked by typing @kbd{C-c} twice and then the
- first letter of the @@-command to be inserted. (It might make more
- sense mnemonically to use @kbd{C-c C-i}, for `custom insert', but
- @kbd{C-c C-c} is quick to type.)
- @example
- C-c C-c c @r{Insert} @samp{@@code}.
- C-c C-c d @r{Insert} @samp{@@dfn}.
- C-c C-c e @r{Insert} @samp{@@end}.
- C-c C-c i @r{Insert} @samp{@@item}.
- C-c C-c n @r{Insert} @samp{@@node}.
- C-c C-c s @r{Insert} @samp{@@samp}.
- C-c C-c v @r{Insert} @samp{@@var}.
- C-c @{ @r{Insert braces.}
- C-c ]
- C-c @} @r{Move out of enclosing braces.}
- @group
- C-c C-c C-d @r{Insert a node's section title}
- @r{in the space for the description}
- @r{in a menu entry line.}
- @end group
- @end example
- @subheading Show Structure
- The @code{texinfo-show-structure} command is often used within a
- narrowed region.
- @example
- C-c C-s @r{List all the headings.}
- @end example
- @subheading The Master Update Command
- The @code{texinfo-master-menu} command creates a master menu; and can
- be used to update every node and menu in a file as well.
- @c Probably should use @tables in this section.
- @example
- @group
- C-c C-u m
- M-x texinfo-master-menu
- @r{Create or update a master menu.}
- @end group
- @group
- C-u C-c C-u m @r{With @kbd{C-u} as a prefix argument, first}
- @r{create or update all nodes and regular}
- @r{menus, and then create a master menu.}
- @end group
- @end example
- @subheading Update Pointers
- The update pointer commands are invoked by typing @kbd{C-c C-u} and
- then either @kbd{C-n} for @code{texinfo-update-node} or @kbd{C-e} for
- @code{texinfo-every-node-update}.
- @example
- C-c C-u C-n @r{Update a node.}
- C-c C-u C-e @r{Update every node in the buffer.}
- @end example
- @subheading Update Menus
- Invoke the update menu commands by typing @kbd{C-c C-u}
- and then either @kbd{C-m} for @code{texinfo-make-menu} or
- @kbd{C-a} for @code{texinfo-all-menus-update}. To update
- both nodes and menus at the same time, precede @kbd{C-c C-u
- C-a} with @kbd{C-u}.
- @example
- C-c C-u C-m @r{Make or update a menu.}
- @group
- C-c C-u C-a @r{Make or update all}
- @r{menus in a buffer.}
- @end group
- @group
- C-u C-c C-u C-a @r{With @kbd{C-u} as a prefix argument,}
- @r{first create or update all nodes and}
- @r{then create or update all menus.}
- @end group
- @end example
- @subheading Format for Info
- The Info formatting commands that are written in Emacs Lisp are
- invoked by typing @kbd{C-c C-e} and then either @kbd{C-r} for a region
- or @kbd{C-b} for the whole buffer.
- The Info formatting commands that are written in C and based on the
- @code{makeinfo} program are invoked by typing @kbd{C-c C-m} and then
- either @kbd{C-r} for a region or @kbd{C-b} for the whole buffer.
- @need 800
- @noindent
- Use the @code{texinfo-format@dots{}} commands:
- @example
- @group
- C-c C-e C-r @r{Format the region.}
- C-c C-e C-b @r{Format the buffer.}
- @end group
- @end example
- @need 750
- @noindent
- Use @code{makeinfo}:
- @example
- C-c C-m C-r @r{Format the region.}
- C-c C-m C-b @r{Format the buffer.}
- C-c C-m C-l @r{Recenter the @code{makeinfo} output buffer.}
- C-c C-m C-k @r{Kill the @code{makeinfo} formatting job.}
- @end example
- @subheading Typeset and Print
- The @TeX{} typesetting and printing commands are invoked by typing
- @kbd{C-c C-t} and then another control command: @kbd{C-r} for
- @code{texinfo-tex-region}, @kbd{C-b} for @code{texinfo-tex-buffer},
- and so on.
- @example
- C-c C-t C-r @r{Run @TeX{} on the region.}
- C-c C-t C-b @r{Run} @code{texi2dvi} @r{on the buffer.}
- C-c C-t C-i @r{Run} @code{texindex}.
- C-c C-t C-p @r{Print the DVI file.}
- C-c C-t C-q @r{Show the print queue.}
- C-c C-t C-d @r{Delete a job from the print queue.}
- C-c C-t C-k @r{Kill the current @TeX{} formatting job.}
- C-c C-t C-x @r{Quit a currently stopped @TeX{} formatting job.}
- C-c C-t C-l @r{Recenter the output buffer.}
- @end example
- @subheading Other Updating Commands
- The remaining updating commands do not have standard keybindings because
- they are rarely used.
- @example
- @group
- M-x texinfo-insert-node-lines
- @r{Insert missing @code{@@node} lines in region.}
- @r{With @kbd{C-u} as a prefix argument,}
- @r{use section titles as node names.}
- @end group
- @group
- M-x texinfo-multiple-files-update
- @r{Update a multi-file document.}
- @r{With @kbd{C-u 2} as a prefix argument,}
- @r{create or update all nodes and menus}
- @r{in all included files first.}
- @end group
- @group
- M-x texinfo-indent-menu-description
- @r{Indent descriptions.}
- @end group
- @group
- M-x texinfo-sequential-node-update
- @r{Insert node pointers in strict sequence.}
- @end group
- @end example
- @node Headings
- @appendix Page Headings
- @cindex Headings
- @cindex Footings
- @cindex Page numbering
- @cindex Page headings
- @cindex Formatting headings and footings
- Most printed manuals contain headings along the top of every page
- except the title and copyright pages. Some manuals also contain
- footings. @c HTML output also supports something like these, but in a
- @c completely different way: @pxref{Customizing HTML Page Layout}.
- Headings and footings have no meaning in Info or the other output
- formats.
- @menu
- * Headings Introduced:: Conventions for using page headings.
- * Heading Format:: Standard page heading formats.
- * Heading Choice:: How to specify the type of page heading.
- * Custom Headings:: How to create your own headings and footings.
- @end menu
- @node Headings Introduced
- @section Headings Introduced
- Texinfo provides standard page heading formats for manuals that are
- printed on one side of each sheet of paper and for manuals that are
- printed on both sides of the paper. Typically, you will use these
- formats, but you can specify your own format if you wish.
- In addition, you can specify whether chapters should begin on a new
- page, or merely continue the same page as the previous chapter; and if
- chapters begin on new pages, you can specify whether they must be
- odd-numbered pages.
- By convention, a book is printed on both sides of each sheet of paper.
- When you open a book, the right-hand page is odd-numbered, and
- chapters begin on right-hand pages---a preceding left-hand page is
- left blank if necessary. Reports, however, are often printed on just
- one side of paper, and chapters begin on a fresh page immediately
- following the end of the preceding chapter. In short or informal
- reports, chapters often do not begin on a new page at all, but are
- separated from the preceding text by a small amount of whitespace.
- The @code{@@setchapternewpage} command controls whether chapters begin
- on new pages, and whether one of the standard heading formats is used.
- In addition, Texinfo has several heading and footing commands that you
- can use to generate your own heading and footing formats.
- In Texinfo, headings and footings are single lines at the tops and
- bottoms of pages; you cannot create multiline headings or footings.
- Each header or footer line is divided into three parts: a left part, a
- middle part, and a right part. Any part, or a whole line, may be left
- blank. Text for the left part of a header or footer line is set
- flushleft; text for the middle part is centered; and, text for the
- right part is set flushright.
- @node Heading Format
- @section Standard Heading Formats
- Texinfo provides two standard heading formats, one for manuals printed
- on one side of each sheet of paper, and the other for manuals printed
- on both sides of the paper.
- By default, nothing is specified for the footing of a Texinfo file,
- so the footing remains blank.
- The standard format for single-sided printing consists of a header
- line in which the left-hand part contains the name of the chapter, the
- central part is blank, and the right-hand part contains the page
- number.
- @need 950
- A single-sided page looks like this:
- @example
- @group
- _______________________
- | |
- | chapter page number |
- | |
- | Start of text ... |
- | ... |
- | |
- @end group
- @end example
- The standard format for two-sided printing depends on whether the page
- number is even or odd. By convention, even-numbered pages are on the
- left- and odd-numbered pages are on the right. (@TeX{} will adjust the
- widths of the left- and right-hand margins. Usually, widths are
- correct, but during double-sided printing, it is wise to check that
- pages will bind properly---sometimes a printer will produce output in
- which the even-numbered pages have a larger right-hand margin than the
- odd-numbered pages.)
- In the standard double-sided format, the left part of the left-hand
- (even-numbered) page contains the page number, the central part is
- blank, and the right part contains the title (specified by the
- @code{@@settitle} command). The left part of the right-hand
- (odd-numbered) page contains the name of the chapter, the central part
- is blank, and the right part contains the page number.
- @need 750
- Two pages, side by side as in an open book, look like this:
- @example
- @group
- _______________________ _______________________
- | | | |
- | page number title | | chapter page number |
- | | | |
- | Start of text ... | | More text ... |
- | ... | | ... |
- | | | |
- @end group
- @end example
- @noindent
- The chapter name is preceded by the word ``Chapter'', the chapter number
- and a colon. This makes it easier to keep track of where you are in the
- manual.
- @node Heading Choice
- @section Specifying the Type of Heading
- @TeX{} does not begin to generate page headings for a standard Texinfo
- file until it reaches the @code{@@end titlepage} command. Thus, the
- title and copyright pages are not numbered. The @code{@@end
- titlepage} command causes @TeX{} to begin to generate page headings
- according to a standard format specified by the
- @code{@@setchapternewpage} command that precedes the
- @code{@@titlepage} section.
- @need 1000
- There are four possibilities:
- @table @asis
- @item No @code{@@setchapternewpage} command
- Cause @TeX{} to specify the single-sided heading format, with chapters
- on new pages. This is the same as @code{@@setchapternewpage on}.
- @item @code{@@setchapternewpage on}
- Specify the single-sided heading format, with chapters on new pages.
- @item @code{@@setchapternewpage off}
- Cause @TeX{} to start a new chapter on the same page as the last page
- of the preceding chapter, after skipping some vertical whitespace.
- Also cause @TeX{} to typeset for single-sided printing. (You can
- override the headers format with the @code{@@headings double} command;
- @pxref{@code{@@headings}}.)
- @item @code{@@setchapternewpage odd}
- Specify the double-sided heading format, with chapters on new pages.
- @end table
- @noindent
- Texinfo lacks a @code{@@setchapternewpage even} command.
- @node Custom Headings
- @section How to Make Your Own Headings
- You can use the standard headings provided with Texinfo or specify
- your own. By default, Texinfo has no footers, so if you specify them,
- the available page size for the main text will be slightly reduced.
- Texinfo provides six commands for specifying headings and
- footings:
- @itemize @bullet
- @item
- @code{@@everyheading} and @code{@@everyfooting} generate page headers and
- footers that are the same for both even- and odd-numbered pages.
- @item
- @code{@@evenheading} and @code{@@evenfooting} command generate headers
- and footers for even-numbered (left-hand) pages.
- @item
- @code{@@oddheading} and @code{@@oddfooting} generate headers and footers
- for odd-numbered (right-hand) pages.
- @end itemize
- Write custom heading specifications in the Texinfo file immediately
- after the @code{@@end titlepage} command. You must cancel the
- predefined heading commands with the @code{@@headings off} command
- before defining your own specifications.
- @need 1000
- Here is how to tell @TeX{} to place the chapter name at the left, the
- page number in the center, and the date at the right of every header
- for both even- and odd-numbered pages:
- @example
- @group
- @@headings off
- @@everyheading @@thischapter @@| @@thispage @@| @@today@{@}
- @end group
- @end example
- @noindent
- You need to divide the left part from the central part and the central
- part from the right part by inserting @samp{@@|} between parts.
- Otherwise, the specification command will not be able to tell where
- the text for one part ends and the next part begins.
- Each part can contain text or @@-commands. The text is printed as if
- the part were within an ordinary paragraph in the body of the page.
- The @@-commands replace themselves with the page number, date, chapter
- name, or whatever.
- @need 950
- Here are the six heading and footing commands:
- @table @code
- @item @@everyheading @var{left} @@| @var{center} @@| @var{right}
- @itemx @@everyfooting @var{left} @@| @var{center} @@| @var{right}
- @findex everyheading
- @findex everyfooting
- The `every' commands specify the format for both even- and odd-numbered
- pages. These commands are for documents that are printed on one side
- of each sheet of paper, or for documents in which you want symmetrical
- headers or footers.
- @item @@evenheading @var{left} @@| @var{center} @@| @var{right}
- @itemx @@oddheading @var{left} @@| @var{center} @@| @var{right}
- @itemx @@evenfooting @var{left} @@| @var{center} @@| @var{right}
- @itemx @@oddfooting @var{left} @@| @var{center} @@| @var{right}
- @findex evenheading
- @findex evenfooting
- @findex oddheading
- @findex oddfooting
- The `even' and `odd' commands specify the format for even-numbered
- pages and odd-numbered pages. These commands are for books and
- manuals that are printed on both sides of each sheet of paper.
- @end table
- Use the @samp{@@this@dots{}} series of @@-commands to
- provide the names of chapters
- and sections and the page number. You can use the
- @samp{@@this@dots{}} commands in the left, center, or right portions
- of headers and footers, or anywhere else in a Texinfo file so long as
- they are between @code{@@iftex} and @code{@@end iftex} commands.
- @need 1000
- Here are the @samp{@@this@dots{}} commands:
- @table @code
- @item @@thispage
- @findex thispage
- Expands to the current page number.
- @item @@thissectionname
- @findex thissectionname
- Expands to the name of the current section.
- @item @@thissectionnum
- @findex thissectionnum
- Expands to the number of the current section.
- @item @@thissection
- @findex thissection
- Expands to the number and name of the current section, in the format
- `Section 1: Title'.
- @item @@thischaptername
- @findex thischaptername
- Expands to the name of the current chapter.
- @item @@thischapternum
- @findex thischapternum
- Expands to the number of the current chapter, or letter of the current
- appendix.
- @item @@thischapter
- @findex thischapter
- Expands to the number and name of the current
- chapter, in the format `Chapter 1: Title'.
- @item @@thistitle
- @findex thistitle
- Expands to the name of the document, as specified by the
- @code{@@settitle} command.
- @item @@thisfile
- @findex thisfile
- For @code{@@include} files only: expands to the name of the current
- @code{@@include} file. If the current Texinfo source file is not an
- @code{@@include} file, this command has no effect. This command does
- @emph{not} provide the name of the current Texinfo source file unless
- it is an @code{@@include} file. (@xref{Include Files}, for more
- information about @code{@@include} files.)
- @end table
- @noindent
- You can also use the @code{@@today@{@}} command, which expands to the
- current date, in `1 Jan 1900' format.
- @findex today
- Other @@-commands and text are printed in a header or footer just as
- if they were in the body of a page. It is useful to incorporate text,
- particularly when you are writing drafts:
- @example
- @group
- @@headings off
- @@everyheading @@emph@{Draft!@} @@| @@thispage @@| @@thischapter
- @@everyfooting @@| @@| Version: 0.27: @@today@{@}
- @end group
- @end example
- Beware of overlong titles: they may overlap another part of the
- header or footer and blot it out.
- If you have very short chapters and/or sections, several of them can
- appear on a single page. You can specify which chapters and sections
- you want @code{@@thischapter}, @code{@@thissection} and other such
- macros to refer to on such pages as follows:
- @table @code
- @item @@everyheadingmarks @var{ref}
- @itemx @@everyfootingmarks @var{ref}
- @findex everyheadingmarks
- @findex everyfootingmarks
- The @var{ref} argument can be either @code{top} (the @code{@@this...}
- commands will refer to the chapter/section at the top of a page) or
- @code{bottom} (the commands will reflect the situation at the bottom
- of a page). These @samp{@@every...} commands specify what to do on
- both even- and odd-numbered pages.
- @item @@evenheadingmarks @var{ref}
- @itemx @@oddheadingmarks @var{ref}
- @itemx @@evenfootingmarks @var{ref}
- @itemx @@oddfootingmarks @var{ref}
- @findex evenheadingmarks
- @findex oddheadingmarks
- @findex evenfootingmarks
- @findex oddfootingmarks
- These @samp{@@even...} and @samp{@@odd...} commands specify what to do
- on only even- or odd-numbered pages, respectively. The @var{ref}
- argument is the same as with the @samp{@@every...} commands.
- @end table
- Write these commands immediately after the @code{@@...contents}
- commands, or after the @code{@@end titlepage} command if you don't
- have a table of contents or if it is printed at the end of your
- manual.
- By default the @code{@@this...} commands reflect the situation at the
- bottom of a page both in headings and in footings.
- @node Catching Mistakes
- @appendix Catching Mistakes
- @cindex Structure, catching mistakes in
- @cindex Nodes, catching mistakes
- @cindex Catching mistakes
- @cindex Correcting mistakes
- @cindex Mistakes, catching
- @cindex Problems, catching
- @cindex Debugging the Texinfo structure
- Besides mistakes in the content of your documentation, there are two
- kinds of mistake you can make with Texinfo: you can make mistakes with
- @@-commands, and you can make mistakes with the structure of the nodes
- and chapters.
- Emacs has two tools for catching the @@-command mistakes and two for
- catching structuring mistakes.
- For finding problems with @@-commands, you can run @TeX{} or a region
- formatting command on the region that has a problem; indeed, you can
- run these commands on each region as you write it.
- For finding problems with the structure of nodes and chapters, you can use
- @kbd{C-c C-s} (@code{texinfo-show-structure}) and the related @code{occur}
- command and you can use the @kbd{M-x Info-validate} command.
- @menu
- * @command{makeinfo} Preferred:: @code{makeinfo} finds errors.
- * Debugging with Info:: How to catch errors with Info formatting.
- * Debugging with @TeX{}:: How to catch errors with @TeX{} formatting.
- * Using @code{texinfo-show-structure}:: How to use @code{texinfo-show-structure}.
- * Using @code{occur}:: How to list all lines containing a pattern.
- * Running @code{Info-validate}:: How to find badly referenced nodes.
- @end menu
- @node @command{makeinfo} Preferred
- @section @command{makeinfo} Preferred
- @c anchor{makeinfo Preferred}@c prev name
- The @code{makeinfo} program does an excellent job of catching errors
- and reporting them---far better than @code{texinfo-format-region} or
- @code{texinfo-format-buffer}. In addition, the various functions for
- automatically creating and updating node pointers and menus remove
- many opportunities for human error.
- If you can, use the updating commands to create and insert pointers
- and menus. These prevent many errors. Then use @code{makeinfo} (or
- its Texinfo mode manifestations, @code{makeinfo-region} and
- @code{makeinfo-buffer}) to format your file and check for other
- errors. This is the best way to work with Texinfo. But if you
- cannot use @code{makeinfo}, or your problem is very puzzling, then you
- may want to use the tools described in this appendix.
- @node Debugging with Info
- @section Catching Errors with Info Formatting
- @cindex Catching errors with Info formatting
- @cindex Debugging with Info formatting
- After you have written part of a Texinfo file, you can use the
- @code{texinfo-format-region} or the @code{makeinfo-region} command to
- see whether the region formats properly.
- Most likely, however, you are reading this section because for some
- reason you cannot use the @code{makeinfo-region} command; therefore, the
- rest of this section presumes that you are using
- @code{texinfo-format-region}.
- If you have made a mistake with an @@-command,
- @code{texinfo-format-region} will stop processing at or after the
- error and display an error message. To see where in the buffer the
- error occurred, switch to the @samp{*Info Region*} buffer; the cursor
- will be in a position that is after the location of the error. Also,
- the text will not be formatted after the place where the error
- occurred (or more precisely, where it was detected).
- For example, if you accidentally end a menu with the command @code{@@end
- menus} with an `s' on the end, instead of with @code{@@end menu}, you
- will see an error message that says:
- @example
- @@end menus is not handled by texinfo
- @end example
- @noindent
- The cursor will stop at the point in the buffer where the error
- occurs, or not long after it. The buffer will look like this:
- @example
- @group
- ---------- Buffer: *Info Region* ----------
- * Menu:
- * Using texinfo-show-structure:: How to use
- `texinfo-show-structure'
- to catch mistakes.
- * Running Info-validate:: How to check for
- unreferenced nodes.
- @@end menus
- @point{}
- ---------- Buffer: *Info Region* ----------
- @end group
- @end example
- The @code{texinfo-format-region} command sometimes provides slightly
- odd error messages. For example, the following cross-reference fails
- to format:
- @example
- (@@xref@{Catching Mistakes, for more info.)
- @end example
- @noindent
- In this case, @code{texinfo-format-region} detects the missing closing
- brace but displays a message that says @samp{Unbalanced parentheses}
- rather than @samp{Unbalanced braces}. This is because the formatting
- command looks for mismatches between braces as if they were
- parentheses.
- Sometimes @code{texinfo-format-region} fails to detect mistakes. For
- example, in the following, the closing brace is swapped with the
- closing parenthesis:
- @example
- (@@xref@{Catching Mistakes), for more info.@}
- @end example
- @noindent
- Formatting produces:
- @example
- (*Note for more info.: Catching Mistakes)
- @end example
- The only way for you to detect this error is to realize that the
- reference should have looked like this:
- @example
- (*Note Catching Mistakes::, for more info.)
- @end example
- Incidentally, if you are reading this node in Info and type @kbd{f
- @key{RET}} (@code{Info-follow-reference}), you will generate an error
- message that says:
- @example
- No such node: "Catching Mistakes) The only way @dots{}
- @end example
- @noindent
- This is because Info perceives the example of the error as the first
- cross-reference in this node and if you type a @key{RET} immediately
- after typing the Info @kbd{f} command, Info will attempt to go to the
- referenced node. If you type @kbd{f catch @key{TAB} @key{RET}}, Info
- will complete the node name of the correctly written example and take
- you to the `Catching Mistakes' node. (If you try this, you can return
- from the `Catching Mistakes' node by typing @kbd{l}
- (@code{Info-last}).)
- @node Debugging with @TeX{}
- @section Debugging with @TeX{}
- @cindex Catching errors with @TeX{} formatting
- @cindex Debugging with @TeX{} formatting
- You can also catch mistakes when you format a file with @TeX{}.
- Usually, you will want to do this after you have run
- @code{texinfo-format-buffer} (or, better, @code{makeinfo-buffer}) on
- the same file, because @code{texinfo-format-buffer} sometimes displays
- error messages that make more sense than @TeX{}. (@xref{Debugging
- with Info}, for more information.)
- For example, @TeX{} was run on a Texinfo file, part of which is shown
- here:
- @example
- ---------- Buffer: texinfo.texi ----------
- name of the Texinfo file as an extension. The
- @@samp@{??@} are `wildcards' that cause the shell to
- substitute all the raw index files. (@@xref@{sorting
- indices, for more information about sorting
- indices.)@@refill
- ---------- Buffer: texinfo.texi ----------
- @end example
- @noindent
- (The cross-reference lacks a closing brace.)
- @TeX{} produced the following output, after which it stopped:
- @example
- ---------- Buffer: *tex-shell* ----------
- Runaway argument?
- @{sorting indices, for more information about sorting
- indices.) @@refill @@ETC.
- ! Paragraph ended before @@xref was complete.
- <to be read again>
- @@par
- l.27
- ?
- ---------- Buffer: *tex-shell* ----------
- @end example
- In this case, @TeX{} produced an accurate and
- understandable error message:
- @example
- Paragraph ended before @@xref was complete.
- @end example
- @noindent
- @samp{@@par} is an internal @TeX{} command of no relevance to Texinfo.
- @samp{l.27} means that @TeX{} detected the problem on line 27 of the
- Texinfo file. The @samp{?} is the prompt @TeX{} uses in this
- circumstance.
- Unfortunately, @TeX{} is not always so helpful, and sometimes you must
- truly be a Sherlock Holmes to discover what went wrong.
- In any case, if you run into a problem like this, you can do one of three
- things.
- @enumerate
- @item
- You can tell @TeX{} to continue running and ignore just this error by
- typing @key{RET} at the @samp{?} prompt.
- @item
- You can tell @TeX{} to continue running and to ignore all errors as best
- it can by typing @kbd{r @key{RET}} at the @samp{?} prompt.
- This is often the best thing to do. However, beware: the one error
- may produce a cascade of additional error messages as its consequences
- are felt through the rest of the file. To stop @TeX{} when it is
- producing such an avalanche of error messages, type @kbd{C-c} (or
- @kbd{C-c C-c}, if you are running a shell inside Emacs).
- @item
- You can tell @TeX{} to stop this run by typing @kbd{x @key{RET}}
- at the @samp{?} prompt.
- @end enumerate
- If you are running @TeX{} inside Emacs, you need to switch to the shell
- buffer and line at which @TeX{} offers the @samp{?} prompt.
- Sometimes @TeX{} will format a file without producing error messages even
- though there is a problem. This usually occurs if a command is not ended
- but @TeX{} is able to continue processing anyhow. For example, if you fail
- to end an itemized list with the @code{@@end itemize} command, @TeX{} will
- write a DVI file that you can print out. The only error message that
- @TeX{} will give you is the somewhat mysterious comment:
- @example
- (@@end occurred inside a group at level 1)
- @end example
- @noindent
- However, if you print the DVI file, you will find that the text
- of the file that follows the itemized list is entirely indented as if
- it were part of the last item in the itemized list. The error message
- is the way @TeX{} says that it expected to find an @code{@@end}
- command somewhere in the file; but that it could not determine where
- it was needed.
- Another source of notoriously hard-to-find errors is a missing
- @code{@@end group} command. If you ever are stumped by
- incomprehensible errors, look for a missing @code{@@end group} command
- first.
- If the Texinfo file lacks header lines,
- @TeX{} may stop in the
- beginning of its run and display output that looks like the following.
- The @samp{*} indicates that @TeX{} is waiting for input.
- @example
- This is TeX, Version 3.14159 (Web2c 7.0)
- (test.texinfo [1])
- *
- @end example
- @noindent
- In this case, simply type @kbd{\end @key{RET}} after the asterisk. Then
- write the header lines in the Texinfo file and run the @TeX{} command
- again. (Note the use of the backslash, @samp{\}. @TeX{} uses @samp{\}
- instead of @samp{@@}; and in this circumstance, you are working
- directly with @TeX{}, not with Texinfo.)
- @node Using @code{texinfo-show-structure}
- @section Using @code{texinfo-show-structure}
- @cindex Showing the structure of a file
- @findex texinfo-show-structure
- It is not always easy to keep track of the nodes, chapters, sections, and
- subsections of a Texinfo file. This is especially true if you are revising
- or adding to a Texinfo file that someone else has written.
- In GNU Emacs, in Texinfo mode, the @code{texinfo-show-structure}
- command lists all the lines that begin with the @@-commands that
- specify the structure: @code{@@chapter}, @code{@@section},
- @code{@@appendix}, and so on. With an argument (@w{@kbd{C-u}}
- as prefix argument, if interactive),
- the command also shows the @code{@@node} lines. The
- @code{texinfo-show-structure} command is bound to @kbd{C-c C-s} in
- Texinfo mode, by default.
- The lines are displayed in a buffer called the @samp{*Occur*} buffer,
- indented by hierarchical level. For example, here is a part of what was
- produced by running @code{texinfo-show-structure} on this manual:
- @example
- @group
- Lines matching "^@@\\(chapter \\|sect\\|subs\\|subh\\|
- unnum\\|major\\|chapheading \\|heading \\|appendix\\)"
- in buffer texinfo.texi.
- @dots{}
- 4177:@@chapter Nodes
- 4198: @@heading Two Paths
- 4231: @@section Node and Menu Illustration
- 4337: @@section The @@code@{@@@@node@} Command
- 4393: @@subheading Choosing Node and Pointer Names
- 4417: @@subsection How to Write a @@code@{@@@@node@} Line
- 4469: @@subsection @@code@{@@@@node@} Line Tips
- @dots{}
- @end group
- @end example
- This says that lines 4337, 4393, and 4417 of @file{texinfo.texi} begin
- with the @code{@@section}, @code{@@subheading}, and @code{@@subsection}
- commands respectively. If you move your cursor into the @samp{*Occur*}
- window, you can position the cursor over one of the lines and use the
- @kbd{C-c C-c} command (@code{occur-mode-goto-occurrence}), to jump to
- the corresponding spot in the Texinfo file. @xref{Other Repeating
- Search, , Using Occur, emacs, The GNU Emacs Manual}, for more
- information about @code{occur-mode-goto-occurrence}.
- The first line in the @samp{*Occur*} window describes the @dfn{regular
- expression} specified by @var{texinfo-heading-pattern}. This regular
- expression is the pattern that @code{texinfo-show-structure} looks for.
- @xref{Regexps, , Using Regular Expressions, emacs, The GNU Emacs Manual},
- for more information.
- When you invoke the @code{texinfo-show-structure} command, Emacs will
- display the structure of the whole buffer. If you want to see the
- structure of just a part of the buffer, of one chapter, for example,
- use the @kbd{C-x n n} (@code{narrow-to-region}) command to mark the
- region. (@xref{Narrowing, , , emacs, The GNU Emacs Manual}.) This is
- how the example used above was generated. (To see the whole buffer
- again, use @kbd{C-x n w} (@code{widen}).)
- If you call @code{texinfo-show-structure} with a prefix argument by
- typing @w{@kbd{C-u C-c C-s}}, it will list lines beginning with
- @code{@@node} as well as the lines beginning with the @@-sign commands
- for @code{@@chapter}, @code{@@section}, and the like.
- You can remind yourself of the structure of a Texinfo file by looking at
- the list in the @samp{*Occur*} window; and if you have mis-named a node
- or left out a section, you can correct the mistake.
- @node Using @code{occur}
- @section Using @code{occur}
- @cindex Occurrences, listing with @code{@@occur}
- @findex occur
- Sometimes the @code{texinfo-show-structure} command produces too much
- information. Perhaps you want to remind yourself of the overall structure
- of a Texinfo file, and are overwhelmed by the detailed list produced by
- @code{texinfo-show-structure}. In this case, you can use the @code{occur}
- command directly. To do this, type:
- @example
- @kbd{M-x occur}
- @end example
- @noindent
- and then, when prompted, type a @dfn{regexp}, a regular expression for
- the pattern you want to match. (@xref{Regexps, , Regular Expressions,
- emacs, The GNU Emacs Manual}.) The @code{occur} command works from
- the current location of the cursor in the buffer to the end of the
- buffer. If you want to run @code{occur} on the whole buffer, place
- the cursor at the beginning of the buffer.
- For example, to see all the lines that contain the word
- @samp{@@chapter} in them, just type @samp{@@chapter}. This will
- produce a list of the chapters. It will also list all the sentences
- with @samp{@@chapter} in the middle of the line.
- If you want to see only those lines that start with the word
- @samp{@@chapter}, type @samp{^@@chapter} when prompted by
- @code{occur}. If you want to see all the lines that end with a word
- or phrase, end the last word with a @samp{$}; for example,
- @samp{catching mistakes$}. This can be helpful when you want to see
- all the nodes that are part of the same chapter or section and
- therefore have the same `Up' pointer.
- @xref{Other Repeating Search, , Using Occur, emacs , The GNU Emacs Manual},
- for more information.
- @node Running @code{Info-validate}
- @section Finding Badly Referenced Nodes
- @anchor{Running Info-Validate}@c old name
- @findex Info-validate
- @cindex Nodes, checking for badly referenced
- @cindex Checking for badly referenced nodes
- @cindex Looking for badly referenced nodes
- @cindex Finding badly referenced nodes
- @cindex Badly referenced nodes
- You can use the @code{Info-validate} command to check whether any of
- the `Next', `Previous', `Up' or other node pointers fail to point to a
- node. This command checks that every node pointer points to an
- existing node. The @code{Info-validate} command works only on Info
- files, not on Texinfo files.
- The @code{makeinfo} program validates pointers automatically, so you
- do not need to use the @code{Info-validate} command if you are using
- @code{makeinfo}. You only may need to use @code{Info-validate} if you
- are unable to run @code{makeinfo} and instead must create an Info file
- using @code{texinfo-format-region} or @code{texinfo-format-buffer}, or
- if you write an Info file from scratch.
- @menu
- * Using @code{Info-validate}:: How to run @code{Info-validate}.
- * Unsplit:: How to create an unsplit file.
- * Tagifying:: How to tagify a file.
- * Splitting:: How to split a file manually.
- @end menu
- @node Using @code{Info-validate}
- @subsection Using @code{Info-validate}
- @cindex Using @code{Info-validate}
- @cindex Info validating a large file
- @cindex Validating a large file
- To use @code{Info-validate}, visit the Info file you wish to check and
- type:
- @example
- M-x Info-validate
- @end example
- @noindent
- Note that the @code{Info-validate} command requires an uppercase
- `I'@. You may also need to create a tag table before running
- @code{Info-validate}. @xref{Tagifying}.
- If your file is valid, you will receive a message that says ``File appears
- valid''. However, if you have a pointer that does not point to a node,
- error messages will be displayed in a buffer called @samp{*problems in
- info file*}.
- For example, @code{Info-validate} was run on a test file that contained
- only the first node of this manual. One of the messages said:
- @example
- In node "Overview", invalid Next: Texinfo Mode
- @end example
- @noindent
- This meant that the node called @samp{Overview} had a `Next' pointer that
- did not point to anything (which was true in this case, since the test file
- had only one node in it).
- Now suppose we add a node named @samp{Texinfo Mode} to our test case
- but we do not specify a `Previous' for this node. Then we will get
- the following error message:
- @example
- In node "Texinfo Mode", should have Previous: Overview
- @end example
- @noindent
- This is because every `Next' pointer should be matched by a
- `Previous' (in the node where the `Next' points) which points back.
- @code{Info-validate} also checks that all menu entries and cross-references
- point to actual nodes.
- @code{Info-validate} requires a tag table and does not work with files
- that have been split. (The @code{texinfo-format-buffer} command
- automatically splits large files.) In order to use @code{Info-validate}
- on a large file, you must run @code{texinfo-format-buffer} with an
- argument so that it does not split the Info file; and you must create a
- tag table for the unsplit file.
- @node Unsplit
- @subsection Creating an Unsplit File
- @cindex Creating an unsplit file
- @cindex Unsplit file creation
- You can run @code{Info-validate} only on a single Info file that has a
- tag table. The command will not work on the indirect subfiles that
- are generated when a master file is split. If you have a large file
- (longer than 300,000 bytes or so), you need to run the
- @code{texinfo-format-buffer} or @code{makeinfo-buffer} command in such
- a way that it does not create indirect subfiles. You will also need
- to create a tag table for the Info file. After you have done this,
- you can run @code{Info-validate} and look for badly referenced
- nodes.
- The first step is to create an unsplit Info file. To prevent
- @code{texinfo-format-buffer} from splitting a Texinfo file into
- smaller Info files, give a prefix to the @kbd{M-x
- texinfo-format-buffer} command:
- @example
- C-u M-x texinfo-format-buffer
- @end example
- @noindent
- or else
- @example
- C-u C-c C-e C-b
- @end example
- @noindent
- When you do this, Texinfo will not split the file and will not create
- a tag table for it.
- @cindex Making a tag table manually
- @cindex Tag table, making manually
- @node Tagifying
- @subsection Tagifying a File
- After creating an unsplit Info file, you must create a tag table for
- it. Visit the Info file you wish to tagify and type:
- @example
- M-x Info-tagify
- @end example
- @noindent
- (Note the uppercase @samp{I} in @code{Info-tagify}.) This creates an
- Info file with a tag table that you can validate.
- The third step is to validate the Info file:
- @example
- M-x Info-validate
- @end example
- @noindent
- (Note the uppercase @samp{I} in @code{Info-validate}.)
- In brief, the steps are:
- @example
- @group
- C-u M-x texinfo-format-buffer
- M-x Info-tagify
- M-x Info-validate
- @end group
- @end example
- After you have validated the node structure, you can rerun
- @code{texinfo-format-buffer} in the normal way so it will construct a
- tag table and split the file automatically, or you can make the tag
- table and split the file manually.
- @node Splitting
- @subsection Splitting a File Manually
- @cindex Splitting an Info file manually
- @cindex Info file, splitting manually
- You should split a large file or else let the
- @code{texinfo-format-buffer} or @code{makeinfo-buffer} command do it
- for you automatically. (Generally you will let one of the formatting
- commands do this job for you. @xref{Creating an Info File}.)
- The split-off files are called the indirect subfiles.
- Info files are split to save memory. With smaller files, Emacs does not
- have make such a large buffer to hold the information.
- If an Info file has more than 30 nodes, you should also make a tag
- table for it. @xref{Using @code{Info-validate}}, for information
- about creating a tag table. (Again, tag tables are usually created
- automatically by the formatting command; you only need to create a tag
- table yourself if you are doing the job manually. Most likely, you
- will do this for a large, unsplit file on which you have run
- @code{Info-validate}.)
- Visit the Info file you wish to tagify and split and type the two
- commands:
- @example
- M-x Info-tagify
- M-x Info-split
- @end example
- @noindent
- (Note that the @samp{I} in @samp{Info} is uppercase.)
- When you use the @code{Info-split} command, the buffer is modified into a
- (small) Info file which lists the indirect subfiles. This file should be
- saved in place of the original visited file. The indirect subfiles are
- written in the same directory the original file is in, with names generated
- by appending @samp{-} and a number to the original file name.
- The primary file still functions as an Info file, but it contains just
- the tag table and a directory of subfiles.
- @node Info Format Specification
- @appendix Info Format Specification
- @cindex Info format specification
- @cindex Specification of Info format
- @cindex Definition of Info format
- Here we describe the technical details of the Info format.
- In this formal description, the characters @code{<>*()|=#} are used
- for the language of the description itself. Other characters are
- literal. The formal constructs used are typical: @code{<...>}
- indicates a metavariable name, @samp{=} means definition, @samp{*}
- repetition, @samp{?} optional, @samp{()} grouping, @samp{|}
- alternation, @samp{#} comment. Exception: @samp{*} at the beginning
- of a line is literal.
- In general, programs that read Info files should try to be
- case-insensitive to keywords that occur in the file (for example,
- @samp{Tag Table} and @samp{Tag table} should be equivalent) in order to
- support Info-generating programs that use different capitalization.
- The sections in an Info file (such as nodes or tag tables) are separated
- with a sequence:
- @example
- (^L)?^_(^L)?^J
- @end example
- @noindent
- That is, a @samp{CTRL-_} character followed by a newline, with optional
- formfeed characters. We refer to such sequences as @t{<separator>}.
- We specify literal parentheses (those that are part of the Info
- format) with @t{<lparen>} and @t{<rparen>}, meaning the single
- characters @samp{(} and @samp{)} respectively. We specify the
- @samp{CTRL-?} character (character number 127) @t{<del>}. Finally,
- the two-character sequence @samp{^@var{x}} means the single
- character @samp{CTRL-@var{x}}, for any @var{x}.
- This format definition was written some 25 years after the Info format
- was first devised. So in the event of conflicts between this
- definition and actual practice, practice wins. It also assumes some
- general knowledge of Texinfo; it is meant to be a guide for
- implementors rather than a rigid technical standard. We often refer
- back to other parts of this manual for examples and definitions,
- rather than redundantly spelling out every detail.
- @menu
- * General: Info Format General Layout.
- * Text: Info Format Text Constructs.
- @end menu
- @node Info Format General Layout
- @section Info Format General Layout
- This section describes the overall layout of Info manuals.
- @menu
- * Whole: Info Format Whole Manual. Split vs.@: nonsplit manuals.
- * Preamble: Info Format Preamble.
- * Indirect: Info Format Indirect Table.
- * Tag table: Info Format Tag Table.
- * Local variables: Info Format Local Variables.
- * Regular nodes: Info Format Regular Nodes.
- @end menu
- @node Info Format Whole Manual
- @subheading Info Format: A Whole Manual
- @cindex Nonsplit manuals, Info format of
- @cindex Split manuals, Info format of
- @cindex Whole manual, in Info format
- To begin, an Info manual is either @dfn{nonsplit} (contained wholly
- within a single file) or @dfn{split} (across several files).
- The syntax for a nonsplit manual is:
- @example
- <nonsplit info file> =
- <preamble>
- <node>*
- <tag table>?
- <local variables>?
- @end example
- When split, there is a @dfn{main file}, which contains only pointers
- to the nodes given in other @dfn{subfiles}. The main file looks
- like this:
- @example
- <split info main file> =
- <preamble>
- <indirect table>
- <tag table>
- <local variables>?
- @end example
- The subfiles in a split manual have the following syntax:
- @example
- <split info subfile> =
- <preamble>
- <node>*
- @end example
- Note that the tag table is not optional for split files, as it is used
- with the indirect table to deduce which subfile a particular node is in.
- @node Info Format Preamble
- @subheading Info Format: Preamble
- @cindex Preamble, in Info format
- The @t{<preamble>} is text at the beginning of all output files.
- It is not intended to be visible by default in an Info viewer, but
- may be displayed upon user request.
- @example
- <preamble> =
- <identification> # "This is FILENAME, produced by ..."
- <copying text> # Expansion of @@copying text.
- <dir entries> # Derived from @@dircategory and @@direntry.
- @end example
- @noindent
- These pieces are:
- @table @t
- @item <identification line>
- An arbitrary string beginning the output file, followed by a blank
- line.
- @item <copying text>
- The expansion of a @code{@@copying} environment, if the manual has
- one (@pxref{@code{@@copying}}).
- @item <dir entries>
- The result of any @code{@@dircategory} and @code{@@direntry}
- commands present in the manual (@pxref{Installing Dir Entries}).
- @end table
- @node Info Format Indirect Table
- @subheading Info Format: Indirect Table
- @cindex Indirect table, in Info format
- @example
- <indirect table> =
- <separator>
- Indirect:
- (<filename>: <bytepos>)*
- @end example
- The indirect table is written to the main file in the case of split
- output only. It specifies, as a decimal integer, the starting byte
- position (zero-based) that the first node of each subfile would have if
- the subfiles were concatenated together in order, not including the
- top-level file. The first node of actual content is pointed to by the
- first entry.
- As an example, suppose split output is generated for the GDB manual.
- The top-level file @file{gdb.info} will contain something like this:
- @example
- <separator>
- Indirect:
- gdb.info-1: 1878
- gdb.info-2: 295733
- ...
- @end example
- This tells Info viewers that the first node of the manual occurs at
- byte 1878 of the file @file{gdb.info-1} (which would be after that file's
- preamble.) The first node in the @file{gdb.info-2} subfile would start at
- byte 295733 if @file{gdb.info-2} were appended to @file{gdb.info-1},
- including any preamble sections in both files.
- Unfortunately, Info-creating programs such as @code{makeinfo} have not
- always implemented these rules perfectly, due to various bugs and
- oversights. Therefore, robust Info viewers should fall back to
- searching ``nearby'' the given position for a node, instead of
- giving up immediately if the position is not exactly at a node beginning.
- @node Info Format Tag Table
- @subheading Info Format: Tag Table
- @cindex Tag table, in Info format
- @example
- <tag table> =
- <separator>
- Tag Table:
- (<lparen>Indirect<rparen>)?
- (Node|Ref): <nodeid>^?<bytepos>
- <separator>
- End Tag Table
- @end example
- The @samp{(Indirect)} line appears in the case of split output only.
- The tag table specifies the starting byte position of each node and anchor
- in the file. In the case of split output, it is only written in the main
- output file.
- Each line defines an identifier as either an anchor or a node, as
- specified. For example, @samp{Node: Top^?1647} says that the node named
- @samp{Top} starts at byte 1647 while @samp{Ref: Overview-Footnote-1^?30045}
- says that the anchor named @samp{Overview-Footnote-1} starts at byte 30045.
- It is an error to define the same identifier both ways.
- In the case of nonsplit output, the byte positions simply refer to the
- location in the output file. In the case of split output, the byte
- positions refer to an imaginary file created by concatenating all the
- split files (but not the top-level file). See the previous section.
- Here is an example:
- @example
- ^_
- Tag Table:
- Node: Top^?89
- Node: Ch1^?292
- ^_
- End Tag Table
- @end example
- @noindent
- This specifies a manual with two nodes, `Top' and `Ch1', at byte
- positions 89 and 292 respectively. Because the @samp{(Indirect)} line
- is not present, the manual is not split.
- Preamble sections or other non-node sections of files do not have a tag
- table entry.
- @node Info Format Local Variables
- @subheading Info Format: Local Variables
- @cindex Local variable section, in Info format
- The local variables section is optional and is currently used to give the
- encoding information. It may be augmented in the future.
- @example
- <local variables> =
- <separator>
- Local Variables:
- coding: <encoding>
- End:
- @end example
- @xref{@code{@@documentencoding}}.
- @node Info Format Regular Nodes
- @subheading Info Format: Regular Nodes
- @cindex Info nodes, in Info format
- Regular nodes look like this:
- @example
- <node> =
- <separator>
- File: <fn>, Node: <id1>, (Next: <id2>, )? (Prev: <id3>, )? Up: <id4>
- <general text, until the next ^_ or end-of-file>
- @end example
- @noindent
- At least one space or tab must be present after each colon and comma,
- but any number of spaces are ignored. The @t{<id>} node identifiers have
- following format:
- @example
- <id> = (<lparen><infofile><rparen>)?(<del>?<nodename><del>?)?
- | <id> = (<lparen><infofile><rparen>)?(<nodename>)?
- @end example
- This @t{<node>} defines @t{<id1>} in file @t{<fn>}, which is typically
- either @samp{manualname} or @samp{manualname.info}. No parenthesized
- @t{<infofile>} component may appear within @t{<id1>}.
- Each of the identifiers after @code{Next}, @code{Prev} and @code{Up}
- refer to nodes or anchors within a file. These pointers normally
- refer within the same file, but @samp{(dir)} is often used to point to
- the top-level dir file. If an @t{<infofile>} component is used then
- the node name may be omitted, in which case the node identifier refers
- to the @samp{Top} node within the referenced file.
- The @code{Next} and @code{Prev} pointers are optional. The @code{Up}
- pointer is technically also optional, although most likely this
- indicates a mistake in the node structuring. Conventionally, the
- nodes are arranged to form a tree, but this is not a requirement of
- the format.
- Node names containing periods, commas, colons or parentheses
- (including @@-commands which produce any of these) can confuse
- Info readers.
- If it is necessary to refer to a node whose name contains any of
- these, the @t{<nodename>} should be surrounded by a pair of @t{<del>}
- characters. There is support in @command{makeinfo} for adding these
- characters (@pxref{INFO_SPECIAL_CHARS_QUOTE}); however, we don't
- recommend you make use of this support until such time as Info-reading
- programs that recognize this syntax are common. @xref{Node Line
- Requirements}.
- The use of non-ASCII characters in the names of nodes is permitted,
- but can cause problems in cross-references between nodes in Info files
- with different character encodings, and also when node names from many
- different files are listed (for example, with the @option{--apropos}
- option to the standalone Info browser), so we recommend avoiding them
- whenever feasible. For example, prefer the use of the ASCII
- apostrophe character (@t{'}) to Unicode directional quotes.
- The @t{<general text>} of the node can include the special constructs
- described next.
- @node Info Format Text Constructs
- @section Info Format Text Constructs
- @cindex Info format text constructs
- @cindex text constructs, Info format
- These special Info constructs can appear within the text of a node.
- @node Info Format Menu
- @subsection Info Format: Menu
- @cindex Menus, in Info format
- Conventionally menus appear at the end of nodes, but the Info format
- places no restrictions on their location.
- @example
- <menu> =
- * Menu:
- (<menu entry> | <menu comment>)*
- @end example
- The parts of a @t{<menu entry>} are also described in @ref{Menu
- Parts}. They have the same syntax as cross-references (@pxref{Info
- Format Cross Reference}). Indices extend the menu format to specify the
- destination line; @pxref{Info Format Printindex}.
- A @t{<menu comment>} is any line not beginning with @samp{*} that
- appears either at the beginning of the menu or is separated from a
- menu entry by one or more blank lines. These comments are intended to
- be displayed as part of the menu, as-is (@pxref{Writing a Menu}).
- @node Info Format Image
- @subsection Info Format: Image
- @cindex Images, in Info format
- The @code{@@image} command results in the following special directive
- within the Info file (@pxref{Images}):
- @example
- <image> =
- ^@@^H[image src="<image file>"
- (text="<txt file contents>")?
- (alt="<alt text>")?
- ^@@^H]
- @end example
- The line breaks and indentation in this description are editorial; the
- whitespace between the different parts of the directive in Info files
- is arbitrary.
- In the strings @t{<image file>}, @t{<txt file contents>} and @t{<alt
- text>}, @samp{"} is quoted as @samp{\"} and @samp{\} is quoted as
- @samp{\\}. The txt and alt specifications are optional.
- The @t{alt} value serves the same purpose as in HTML: A prose
- description of the image. In text-only displays or speech systems,
- for example, the @t{alt} value may be used instead of displaying the
- (typically graphical) @t{<image file>}.
- The @t{<txt file contents>}, if present, should be taken as an ASCII
- representation of the image, for possible use on a text-only display.
- The format does not prescribe the choice between displaying the
- @t{<image file>}, the @t{<alt text>} or the @t{<txt file contents>}.
- @node Info Format Printindex
- @subsection Info Format: Printindex
- @cindex Indices, in Info format
- Indices in Info format are generally written as a menu
- (@pxref{Indices}), but with an additional directive at the beginning
- marking this as an index node:
- @example
- <printindex> =
- ^@@^H[index^@@^H]
- * Menu:
- <index entry>*
- @end example
- The @t{<index entry>} items are similar to normal menu entries, but
- the free-format description is replaced by the line number of where
- the entries occurs in the text:
- @example
- <index entry> =
- * <entry text>: <entry node>. <lparen>line <lineno><rparen>
- @end example
- @noindent
- The @t{<entry text>} is the index term. The @t{<lineno>} is an
- unsigned integer, given relative to the start of the @t{<entry node>}.
- There may be arbitrary whitespace after the colon and period, as usual
- in menus, and may be broken across lines. Here is an example:
- @example
- ^@@^H[index^@@^H]
- * Menu:
- * thunder: Weather Phenomena. (line 5)
- @end example
- This means that an index entry for `thunder' appears at line 5 of the
- node `Weather Phenomena'.
- @node Info Format Cross Reference
- @subsection Info Format: Cross-reference
- @cindex Cross-references, in Info format
- A general cross-reference in Info format has one of the following two forms:
- @example
- <cross-reference> =
- * (N|n)ote <id>::
- @c| * (N|n)ote <label>:<id>(.|,)?
- | * (N|n)ote <label>:<id>(.|,)
- <id> = (<lparen><infofile><rparen>)?(<del>?<nodename><del>?)?
- | <id> = (<lparen><infofile><rparen>)?(<nodename>)?
- <label> = <del>?<label text><del>?
- @end example
- No space should occur between the @samp{*} character and the following
- @samp{N} or @samp{n}. @samp{*Note} should be used at the start of a
- sentence, otherwise @samp{*note} should be used. (Some Info readers,
- such as the one in Emacs, can display @samp{*Note} and @samp{*note} as
- @samp{See} and @samp{see} respectively.) In both cases, @t{<label
- text>} is descriptive text.
- In both forms the @t{<id>} refers to a node or anchor, in the same way
- as a reference in the node information line does (@pxref{Info Format
- Regular Nodes}). The optional parenthesized @samp{<infofile>} is the
- filename of the manual being referenced, and the @t{<nodename>} is the
- node or anchor within that manual,
- The second form has a descriptive label. A cross-reference in this form
- should usually be terminated with a comma or period, to make it
- feasible to find the end of the @t{<id>}.
- If @t{<label>} contains a colon character (@t{:}), it should be
- surrounded with a pair of @t{<del>} characters. Likewise, if
- @t{<nodename>} contains problematic characters (such as commas or
- periods), it should be surrounded by a pair of @t{<del>} characters;
- then a terminating comma or period is not needed.
- As with node names, this quoting mechanism has as of the time of
- writing limited support in Info-reading programs; hence we do not
- recommend using it until this changes.
- The format does not prescribe how to find other manuals to resolve
- such references.
- Here are some examples:
- @example
- *note GNU Free Documentation License::
- *note Tag table: Info Format Tag Table, for details.
- *Note Overview: (make)Top.
- *Note ^?:^?: (bash)Bourne Shell Builtins.
- *Note alloca.h: (gnulib)^?alloca.h^?.
- @end example
- The first shows a reference to a node in the current manual using the
- short form.
- The second also refers to a node in the current manual, namely `Info
- Format Tag Table'; the `Tag table' before the @samp{:} is only a label
- on this particular reference, and the @samp{for details.} is text
- belonging to the sentence, not part of the reference.
- The third example refers to the node `Top' in another manual, namely
- @samp{make}, with `Overview' being the label for this cross-reference.
- The fourth example shows a colon character being quoted in a label,
- and the fifth example shows a period being quoted in a node name.
- @xref{Cross References}.
- @node GNU Free Documentation License
- @appendix GNU Free Documentation License
- @include fdl.texi
- @node Command and Variable Index
- @unnumbered Command and Variable Index
- This is an alphabetical list of all the @@-commands, assorted Emacs Lisp
- functions, and several variables. To make the list easier to use, the
- commands are listed without their preceding @samp{@@}.
- @printindex fn
- @node General Index
- @unnumbered General Index
- @printindex cp
- @bye
|