grog(1)
NAMN
grog – ”groff guess”; avgör vilket groff-kommando ett dokument behöver
SYNOPSIS
grog [groff-option ...] [--] [fil ...] grog -h grog --help grog -v grog --version
BESKRIVNING
grog läser sin indata och försöker avgöra vilka optioner till groff(1) som krävs för att återge dokumentet korrekt.
Om inga operander anges, eller om fil är ett ensamt bindestreck:
-läser grog från standardindata.
Det motsvarande groff-kommandot skrivs normalt till standardutdata.
OPTIONER
-h, --help
- Visa ett användningsmeddelande och avsluta.
-v, --version
- Visa versionsinformation och avsluta.
Alla andra korta optioner, alltså argument som börjar med ett bindestreck följt av en bokstav, tolkas som optioner eller optionsgrupper för groff.
De kan anges med eller utan optionsargument och inkluderas oförändrade i den skapade groff-kommandoraden.
DETALJER
grog läser varje angiven fil och söker efter teckensträngar som statistiskt sett sannolikt är typiska för roff(7)-dokument.
Programmet försöker avgöra om följande groff-optioner behövs:
Förprocessorer
- -e
- -g
- -G
- -j
- -p
- -R
- -t
Makropaket
- -man
- -mdoc
- -mdoc-old
- -me
- -mm
- -mom
- -ms
Det härledda groff-kommandot, inklusive dessa optioner och eventuella filparametrar, skrivs till standardutdata.
Godtyckliga groff-optioner kan anges på kommandoraden. De inkluderas i det härledda kommandot utan ändringar.
Exempel på sådana optioner:
-C
- Aktivera kompatibilitetsläge för AT&T troff.
-T
- Välj en annan utdataenhet än standarden.
Om indatan inte är kodad som ISO 646:1991 IRV, US-ASCII, eller ISO Latin-1, 8859-1, rekommenderas att en groff-option anges för att köra preconv(1).
Se optionerna -D, -k och -K i groff(1).
För UTF-8-indata är -k ett lämpligt val.
groff kan skriva diagnostik om en olämplig -m-option, eller flera motstridiga sådana, anges.
Därför är det bäst att inte ange några -m-optioner till grog om inte programmet misslyckas med att avgöra alla makropaket som dokumentet behöver.
Ett roff-dokument kan också vara skrivet utan något makropaket. I sådana fall skapar grog ett groff-kommando utan -m-option.
BEGRÄNSNINGAR
grog förutsätter att indatan inte ändrar escape-tecknet, kontrolltecknet eller no-break-kontrolltecknet.
Programmet tolkar inte:
- fortsättningsrader i roff-indata
- kontrollstrukturer med klammersekvenser
- anropen if, ie och el
- groff-anropet while
Följande indata döljer därför användningen av ms-makrona NH och SH för grog:
.if \ t .NH 1 .if n .SH Introduction
Sådana konstruktioner anses vara tillräckligt ovanliga för att inte orsaka många felaktiga slutsatser.
Förprocessorer kan vara ännu striktare när de känner igen makroanrop som omger de delar av en indatafil som de ersätter.
pic(1) kräver exempelvis att anropen PS, PE och PF följer direkt efter standardkontrolltecknet i början av en rad.
Identifiering av optionen -s för soelim(1) är svår.
För att säkert avgöra om -s behövs skulle grog behöva öppna alla filer som anges med anropet .so rekursivt och under samma villkor som soelim.
soelim behövs endast om inkluderade filer måste förbehandlas.
En möjlig lösning är därför att först köra indatan genom soelim, skicka resultatet till grog och jämföra utmatningen med när grog körs direkt på originalfilen.
Exempel:
printf ".TS\nl.\nI'm a table.\n.TE\n" > 3.roff printf ".so 3.roff\n" > 2.roff printf ".XP\n.so 2.roff\n" > 1.roff grog 1.roff
Utdata:
groff -ms 1.roff
Kör därefter:
soelim 1.roff | grog
Utdata:
groff -t -ms -
I detta exempel gjorde den förbehandlade indatan det möjligt för grog att upptäcka makron för tbl(1).
Då är sannolikt både -s och den upptäckta -t-optionen nödvändiga.
Ett reviderat kommando blir:
grog -st 1.roff
Utdata:
groff -st -ms 1.roff
AVSLUTNINGSSTATUS
grog avslutas med status:
0
- Normal avslutning.
1
- Indatan verkar använda ett makropaket, men grog kunde inte avgöra vilket.
2
- Ett problem uppstod vid hantering av en option eller operand.
Att inga förprocessorer eller makropaket upptäcks är inte ett fel.
Ett giltigt roff-dokument behöver inte använda något av dem. Även vanlig text är giltig indata, så länge kontroll- och escape-tecknens syntax beaktas.
EXEMPEL
Körning av:
grog /usr/local/share/doc/groff-1.24.1/meintro.me
ger:
groff -me /usr/local/share/doc/groff-1.24.1/meintro.me
Detta beror på att grog känner igen att filen använder makron från paketet me.
Körning av:
grog /usr/local/share/doc/groff-1.24.1/pic.ms
ger:
groff -e -p -t -ms /usr/local/share/doc/groff-1.24.1/pic.ms
Här upptäcker grog både makropaketet ms och behovet av:
Ett mer avancerat exempel:
grog -bc -Idoc -Tdvi doc/grnexmpl.me
kan ge:
groff -bc -Idoc -Tdvi -e -g -me doc/grnexmpl.me
Här har grog upptäckt makropaketet me samt förprocessorerna eqn(1) och grn(1).
FÖRFATTARE
grog skrevs ursprungligen i Bourne shell av James Clark.
Den nuvarande implementationen i Perl skrevs av Bernd Warken:
groff-bernd.warken-72@web.de
Den reviderades omfattande av G. Branden Robinson:
g.branden.robinson@gmail.com
SE ÄVEN
KOLOFON
Denna sida är en del av projektet groff, GNU troff.
Information om projektet finns på:
http://www.gnu.org/software/groff/
Sidan hämtades från arkivet:
groff-1.24.1.tar.gz
som hämtades från:
https://ftp.gnu.org/gnu/groff/
den 24 maj 2026.
Om du upptäcker renderingsproblem i HTML-versionen av sidan, eller anser att det finns en bättre eller mer aktuell källa, kan du skicka e-post till:
man-pages@man7.org
KORT SAMMANFATTNING
grog analyserar ett roff-dokument och skriver ut det groff-kommando som sannolikt krävs för att behandla dokumentet.
Exempel:
grog dokument.roff
Möjlig utdata:
groff -t -ms dokument.roff
För UTF-8-indata kan -k läggas till:
grog -k dokument.roff
Programmet kör normalt inte groff självt, utan skriver endast ut den föreslagna kommandoraden.