pic(1)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Version från den 14 juli 2026 kl. 04.47 av Admin (diskussion | bidrag) (Skapade sidan med '{{DISPLAYTITLE:pic(1)}} == NAMN == '''pic''' – kompilera bilder för '''troff''' eller TeX == SYNOPSIS == <pre> pic [-CnSU] [fil ...] pic -t [-cCSUz] [fil ...] pic --help pic -v pic --version </pre> == BESKRIVNING == GNU-implementationen av '''pic''' är en del av dokumentformateringssystemet groff(1). '''pic''' är en förprocessor för troff(1). Den översätter beskrivningar av diagramliknande bilder, inbäddade i roff(7)- eller TeX-indata, ti...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök


NAMN

pic – kompilera bilder för troff eller TeX

SYNOPSIS

pic [-CnSU] [fil ...]

pic -t [-cCSUz] [fil ...]

pic --help

pic -v

pic --version

BESKRIVNING

GNU-implementationen av pic är en del av dokumentformateringssystemet groff(1).

pic är en förprocessor för troff(1). Den översätter beskrivningar av diagramliknande bilder, inbäddade i roff(7)- eller TeX-indata, till ett språk som förstås av TeX eller troff.

Programmet kopierar innehållet i varje fil till standardutdata och översätter varje pic-bild mellan rader som börjar med:

.PS

och någon av:

.PE
.PF
.PY

Avsluta en pic-bild med .PE för att lämna ritpositionen vid bildens nederkant.

Avsluta med .PF eller .PY för att lämna ritpositionen vid bildens överkant.

Normalt körs pic inte direkt av användaren. I stället anropas den via groff(1) med optionen:

-p

Om inga filoperander anges, eller om fil är:

-

läser pic från standardindata.

Användaren ansvarar för att definiera lämpliga makron:

PS
PE
PF
PY

När ett makropaket inte tillhandahåller dessa kan enkla definitioner hämtas med groff-optionen:

-mpic

Dessa centrerar varje bild horisontellt.

GNU pic stöder PY som synonym till PF för att undvika en namnkonflikt med makropaketet groff_mm(7), där PF används som ett makro för sidfotshantering.

Använd helst PF om inte dokumentet har en liknande namnkonflikt.

OPTIONER

--help

Visa ett användningsmeddelande och avsluta.

-v

Visa versionsinformation och avsluta.

--version

Visa versionsinformation och avsluta.

-c

Var mer kompatibel med tpic(1).
Optionen innebär -t.
Rader som börjar med omvänt snedstreck skickas inte igenom transparent.
Rader som börjar med punkt skickas igenom med den inledande punkten ändrad till omvänt snedstreck.

GNU pic behandlar rader som börjar med:

.ps

särskilt. De kan ta ett valfritt heltalsargument som anger linjetjocklek, pennstorlek, i millitum.

Om argument saknas återställs tidigare linjetjocklek.

Standardtjocklek är 8 millitum.

Den angivna linjetjockleken används bara när en icke-negativ linjetjocklek inte redan har angivits med attributet thickness eller variabeln linethick.

-C

Känn igen .PS, .PE, .PF och .PY även när de följs av ett annat tecken än mellanslag eller radslut.

-n

Använd inte groff-utökningar till troffs ritkommandon.
Ange denna option om den postprocessor du använder inte stöder utökningarna som beskrivs i groff_out(5).
Optionen gör också att pic inte använder linjer med längd noll för att rita punkter i troff-läge.

-S

Aktivera säkrare läge och ignorera efterföljande -U-optioner.
I säkrare läge ignorerar pic kommandot sh.
Detta är användbart vid behandling av opålitlig indata.
pic kör i säkrare läge som standard.

-t

Skapa TeX-utdata.

-U

Kör i osäkert läge.
Då tolkas sh-kommandon.

-z

I TeX-läge, rita punkter med linjer med längd noll.

Följande optioner stöds av andra versioner av pic men ignoreras av GNU pic.

-D

Rita alla linjer med escape-sekvensen \D.
GNU pic gör alltid detta.

-T enhet

Skapa utdata för troff-enheten enhet.
Denna option behövs inte i GNU pic, eftersom troff-utdata som skapas är enhetsoberoende.

ANVÄNDNING

Detta avsnitt beskriver främst skillnader mellan GNU pic och AT&T:s pic från Eighth Edition Unix, 1985.

Många skillnader gäller även senare versioner av AT&T pic.

TeX-läge

TeX-kompatibel utdata skapas när optionen -t anges.

Du måste använda en TeX-drivrutin som stöder tpic version 2-specialkommandon.

tpic var en avgrening av AT&T pic av Tim Morgan vid University of California at Irvine, och skildes från källan omkring 1984.

Programmet är i dag mest känt för att ha gett namn åt en grupp \special-kommandon som det skapade för TeX.

Rader som börjar med omvänt snedstreck skickas igenom oförändrade, förutom att ett procenttecken läggs till som suffix för att undvika oönskade mellanslag.

Detta kan användas för att ändra typsnitt eller värdet på:

\baselineskip

Andra användningar kan ge oönskade resultat och sker på egen risk.

Som standard behandlas rader som börjar med punkt inte särskilt, men se optionen -c.

I TeX-läge definierar pic en vbox med namnet:

\graph

för varje bild.

Använd GNU pic-kommandot figname för att ändra vboxens namn.

Du måste själv skriva ut denna vbox, exempelvis med:

\centerline{\box\graph}

Eftersom vboxen har höjd noll, definierad med \vtop, skapas något mer vertikalt utrymme ovanför bilden än under den.

Detta kan undvikas med:

\centerline{\raise 1em\box\graph}

För att ge vboxen positiv höjd och djup noll, som exempelvis används av LaTeX-filen graphics.sty, kan följande makro definieras i dokumentet:

\def\gpicbox#1{%
  \vbox{\unvbox\csname #1\endcsname\kern 0pt}}

Därefter kan du skriva:

\gpicbox{graph}

i stället för:

\box\graph

Kommandon

Flera kommandon som är nya i GNU pic accepterar avgränsare. I synopser visas dessa som klamrar:

{ }

Klamrar kan nästlas.

Andra tecken, utom mellanslag, tabb och radslut, kan användas som alternativa avgränsare. I så fall måste båda tecken i paret vara identiska.

GNU pic känner igen dubbelt citerade strängar inom avgränsare. Sådana strängar kan innehålla avgränsartecknet eller obalanserade klamrar.

for

for variabel = uttryck1 to uttryck2 [by [*]uttryck3] do X kropp X

Sätt variabel till uttryck1.

Så länge värdet är mindre än eller lika med uttryck2 utförs kropp, och variabeln ökas med uttryck3.

Om by saknas ökas variabeln med 1.

uttryck3 kan vara negativt. Då testas i stället om variabeln är större än eller lika med uttryck2.

Om en asterisk används multipliceras variabeln med uttryck3 vid varje iteration i stället för att ökas.

I detta fall måste uttryck3 vara större än noll.

X kan vara valfritt tecken som inte finns i kroppen.

if

if uttryck then X om-sant X [else Y om-falskt Y]

Beräkna uttryck.

Om uttrycket är skilt från noll körs om-sant, annars om-falskt.

X respektive Y kan vara valfria tecken som inte finns i respektive block.

print

print argument ...

Sammanfoga argument och skriv dem till standardfel, följt av radslut.

Varje argument måste vara ett uttryck, en position eller text.

Detta är användbart vid felsökning.

command

command argument ...

Sammanfoga argument och skicka dem som en rad till troff eller TeX.

Varje argument måste vara ett uttryck, en position eller text.

command gör det möjligt att skicka värden från pic-variabler till formateraren.

Exempel:

.PS
x = 14
command ".ds string x is " x "."
.PE
\*[string]

ger vid formatering med troff:

x is 14.

sh

sh X kommando X

Skicka kommando till ett skal via system(3).

Kommandot ignoreras om optionen -U inte har angetts.

copy

copy "filnamn"

Inkludera filnamn vid aktuell plats i filen.

copy thru

copy ["filnamn"] thru X kropp X [until "ord"]
copy ["filnamn"] thru makro [until "ord"]

Denna konstruktion kör kropp en gång för varje rad i filnamn.

Raden delas upp i blankstegsavgränsade ord.

Förekomster av $i i kroppen, där i är 1 till 9, ersätts med radens i:te ord.

Om filnamn saknas läses rader från aktuell indata fram till .PE.

Med until läses rader tills en rad som börjar med ord hittas. Den raden kastas.

Exempel:

.PS
copy thru % circle at ($1,$2) % until "END"
1 2
3 4
5 6
END
box
.PE

är likvärdigt med:

.PS
circle at (1,2)
circle at (3,4)
circle at (5,6)
box
.PE

Kommandona för varje rad kan också tas från ett tidigare definierat makro.

Argumentet efter thru slås först upp som makronamn. Om det inte är definierat tolkas första tecknet som avgränsare.

reset

reset
reset pvar1[,] pvar2 ...

Återställ fördefinierade variabler till standardvärden.

Om inga argument anges återställs alla fördefinierade variabler.

Variabelnamn kan separeras med kommatecken, mellanslag eller båda.

Om scale tilldelas ett värde återställs även alla fördefinierade dimensionsvariabler till sina standardvärden multiplicerade med det nya scale-värdet.

plot

plot uttryck ["text"]

Skapa ett textobjekt genom att använda text som formatsträng för sprintf(3) med uttryck som argument.

Om text saknas används:

"%g"

Attribut kan anges på samma sätt som för vanliga textobjekt.

Var försiktig med formatsträngen. pic validerar den bara begränsat.

plot är föråldrat till förmån för sprintf.

Uppdatera befintlig variabel

variabel := uttryck

Uppdatera en redan existerande variabel.

Variabeln måste redan vara definierad.

Tilldelningen skapar inte en lokal variabel i aktuellt block.

Detta skiljer sig från =, som definierar variabeln i aktuellt block om den inte redan finns där.

Exempel:

.PS
x = 3
y = 3
[
x := 5
y = 5
]
print x   y
.PE

skriver:

5 3

till standardfel.

Uttryck

Syntaxen för uttryck har utökats kraftigt.

Exempel på stödda uttryck och funktioner:

x ^ y
sin(x)
cos(x)
atan2(y, x)
log(x)
exp(x)
sqrt(x)
int(x)
rand()
rand(x)
srand(x)
max(e1, e2)
min(e1, e2)
!e
e1 && e2
e1 || e2
e1 == e2
e1 != e2
e1 >= e2
e1 > e2
e1 <= e2
e1 < e2
"str1" == "str2"
"str1" != "str2"

Betydelser:

x ^ y

Exponentiering.

log(x)

Logaritm med bas 10.

exp(x)

10 upphöjt till x.

rand()

Slumptal mellan 0 och 1.

rand(x)

Slumptal mellan 1 och x. Detta är föråldrat.

srand(x)

Sätt frö för slumptalsgeneratorn.

Strängjämförelser måste ibland omges av parenteser för att undvika tvetydighet.

Andra ändringar och GNU-utökningar

Ett ensamt uttryck kan användas som attribut. Det är likvärdigt med:

riktning uttryck

där riktning är aktuell riktning.

Exempel:

line 2i

ritar en linje som är 2 tum lång i aktuell riktning.

Tecknet i eller I ignoreras. För andra måttenheter sätts variabeln scale.

Maximal bredd och höjd för bilden tas från variablerna:

maxpswid
maxpsht

De har initialt värdena 8.5 och 11.

Vetenskaplig notation stöds, exempelvis:

x = 5e-2

Textattribut kan kombineras:

"foo" above ljust

Block kan nästlas utan begränsning.

Exempel:

[A: [B: [C: box ]]] with .A.B.C.sw at 1,2
circle at last [].A.B.C

Arcs har kompasspunkter som bestäms av den cirkel som bågen är del av.

Cirklar, ellipser och bågar kan vara prickade eller streckade.

I TeX-läge kan även splines vara prickade eller streckade.

Boxar kan ha rundade hörn.

Attributet rad anger radien för kvartscirklarna i hörnen.

Om varken rad eller diam anges används boxrad.

Initialt är boxrad 0.

En box med rundade hörn kan vara prickad eller streckad.

Boxar kan också ha sneda sidor, vilket generaliserar dem från rektanglar till parallellogram.

Attributen:

xslanted
yslanted

anger x- och y-förskjutning för boxens övre högra hörn från dess standardposition.

Raden .PS accepterar ett andra argument som anger maximal höjd för bilden.

Om bredden anges som noll ignoreras den vid beräkning av skalningsfaktorn.

GNU pic skalar alltid bilden lika mycket vertikalt och horisontellt. Detta skiljer sig från DWB 2.0 pic, som kan ändra bildens proportioner om höjd anges.

Varje textobjekt har en osynlig box som bestämmer dess kompasspunkter och implicita rörelse.

Boxens dimensioner tas från dess bredd- och höjdattribut.

Om bredd saknas används textwid.

Om höjd saknas används antal textsträngar multiplicerat med textht.

Initialt är både textwid och textht 0.

På nästan alla platser där en citerad textsträng kan användas kan ett uttryck av formen:

sprintf("format", argument, ...)

användas i stället.

Formatet är en sträng enligt printf(3), anpassad till antalet argument.

GNU pic stöder konverteringsspecifikationerna:

e E f g G %

samt modifierarna:

# - + mellanslag

minsta fältbredd och valfri precision.

Linjetjocklek styrs av variabeln linethick och mäts i punkter.

Ett negativt värde betyder standardtjocklek.

I TeX-läge utan -c betyder detta 8 millitum.

I troff- och TeX--c-läge motsvarar standardtjockleken textstorleken.

Ett värde på 0 ritar den tunnaste linje som stöds av utdataenheten.

Initialt är linethick -1.

Attributet thickness eller thick kan också användas.

Exempel:

circle thickness 1.5

Linjetjocklek påverkas inte av scale eller av bredd/höjd i .PS-raden.

Boxar, även rundade eller snedställda, cirklar och ellipser kan fyllas med attributet:

fill
filled

Attributet kan ta ett valfritt uttryck mellan 0 och 1.

  • 0 betyder vit
  • 1 betyder svart
  • värden däremellan ger gråskala

Värden över 1 tolkas som den gråton som används för text och linjer.

Utan argument används variabeln fillval, som initialt är 0.5.

Attributet invisible påverkar inte fyllning.

Text som hör till ett fyllt objekt läggs till efter fyllningen så att texten inte täcks.

Färgmodifierare:

outlined

Sätter konturfärg.

shaded

Sätter fyllnadsfärg.

colored eller coloured

Sätter både kontur- och fyllnadsfärg.

Alla förväntar sig en efterföljande sträng med färgnamn.

Exempel:

circle shaded "green" outline "black"

Färg stöds ännu inte i TeX-läge.

Enhetsmakrofiler som ps.tmac deklarerar färgnamn.

Ytterligare färger kan definieras med roff-begäran defcolor. Se groff(7).

I början av varje bild antar pic att linje- och fyllnadsfärger är satta till enhetens standardvärden.

För att ändra namnet på vboxen i TeX-läge sätts pseudovariabeln figname i bilden.

Exempel:

.PS
figname = foobar;
circle "dig here";
.PE

gör bilden tillgänglig i boxen:

\foobar

Pilhudar ritas som fyllda trianglar om variabeln arrowhead är skild från noll och antingen TeX-läge är aktivt eller optionen -n inte används.

Initialt är arrowhead 1.

Fyllda pilhuvuden fylls alltid med aktuell konturfärg.

Troff-utdata från pic är enhetsoberoende. Option -T är därför överflödig.

Om inget annat anges använder alla mått tum implicit. De tolkas aldrig som troff-grundenheter.

Objekt kan ha attributet aligned, men detta stöds bara av utdata-drivrutinerna grops(1) och gropdf(1).

Text kopplad till ett aligned-objekt roteras runt objektets centrum så att den orienteras längs linjen mellan objektets start- och slutpunkt.

aligned har ingen effekt på objekt vars start- och slutpunkter sammanfaller.

Där nth är tillåtet är även följande form tillåten:

`uttryck'th

th är en del av samma token. Det får inte finnas något mellanslag mellan apostrofen och th.

Exempel:

for i = 1 to 4 do {
   box
   move right 0.5
}
for i = 1 to 3 do {
   arrow from `i'th box.ne to `i+1'th box.sw
}

Godtyckliga polygoner kan ritas med nyckelordet polygon följt av en serie linjesegment.

Om polygonen har n kanter anges n-1 linjesegment.

Detta låter GNU troff tolka segmenten som ett sammanhängande objekt, så att attributen filled och shaded kan användas.

Exempel:

polygon up 1 then right 1 down 0.5 fill 0.5

Två referenspunktssuffix gör det möjligt att placera element relativt polygoner:

.vertex uttryck

Placerar vid en vertex.

.midpoint uttryck

Placerar vid en kantmittpunkt.

GNU pic numrerar vertexer och mittpunkter i ritordning med början på 1.

Förkortningar:

  • .vertex kan förkortas .v eller .ver
  • .midpoint kan förkortas .mid

Exempel:

arrow down
polygon up 0.5 right 1 \
then down 0.5 right 1 \
then down 0.5 left 1 \
with .v2 at last line.end
arrow down from last polygon.v4

Detta skapar och placerar en flödesschemaromb korrekt.

.center eller .c finns också, men kompasspunkter fungerar inte som väntat och bör inte användas med polygoner.

Konvertera pic till andra bildformat

För att skapa en fristående grafikfil från en pic-fil ska bilden först sättas samman.

Omgärda pic-koden med:

.PS
.PE

Groff-begäranden som inte skapar formaterad utdata kan föregå .PS.

Formatera dock ingen text, inte ens sådan som injiceras av ett makropaket. Vissa makropaket, som mm, kan lägga till ett sidnummer redan på första sidan.

Överväg därför att skriva ett rått roff-dokument utan makropaket.

Konvertera därefter roff/pic-indatan till önskat format.

Groff distribuerar verktyget pic2graph(1) för detta ändamål.

Andra metoder finns, särskilt om bilden först omvandlas till PostScript:

groff -T ps

En sådan PostScript-fil saknar dock bounding box-information, eftersom roff-formaterare skapar sidstor utdata.

Flera verktyg vars namn börjar med psto eller ps2 kan härleda bounding box och konvertera formatet.

Ett sådant verktyg är PostScript-tolken Ghostscript, gs(1), som erbjuder formatkonvertering via optionen:

-sDEVICE=

Visa tillgängliga enheter med:

gs --help

Alternativt kan PDF skapas med:

groff -T pdf

gropdf(1)-optionen -p sätter filens MediaBox.

EPS-formatet, Encapsulated PostScript File, förekommer fortfarande.

Ghostscript erbjuder ps2epsi(1), och det finns också ett fristående paket/kommando ps2eps(1).

För rasterbildformat kan pstopnm(1) användas. Den resulterande pnm(5)-filen kan sedan konverteras till nästan vilket bildformat som helst med Netpbm-verktygen.

GNU plotutils erbjuder pic2plot(1) för att konvertera pic-indata till många andra bildformat, inklusive SVG.

AVSLUTNINGSSTATUS

pic avslutas med status:

0

Körningen lyckades.

2

Programmet kunde inte tolka kommandoradsargumenten.

1

Ett fel uppstod under körningen.

FILER

/usr/local/share/groff/1.24.1/tmac/pic.tmac

Tillhandahåller enkla definitioner av makrona:
PS
PE
PF
PY
Läs in filen med roff-begäran mso när inget fullständigt makropaket används, eller när makropaketet inte själv definierar dessa makron.

VARNINGAR OCH BEGRÄNSNINGAR

Avståndet mellan punkter och streck i brutna linjer skalas tillsammans med övrig grafik och kan konfigureras.

Exempel:

line from 0,0 to 100,0 dotted 5

sätter avståndet mellan punkterna i en prickad linje till 5 enheter.

Avståndet mellan streck kan sättas på samma sätt.

Variabeln dashwid anger strecklängden.

FEL

Tecken som är ogiltiga som indata till GNU troff(1) avvisas även i TeX-läge.

Se Groffs Texinfo-manual eller groff_char(7) för en lista.

Research Tenth Edition Unix pic tolkar fillval så att 0 betyder svart och 1 betyder vitt, vilket är inkompatibelt med GNU pic.

SE ÄVEN

Dokumentation i groff-distributionen:

/usr/local/share/doc/groff-1.24.1/pic.ps

Detta är dokumentet:

Making Pictures with GNU pic

av Eric S. Raymond.

Klassisk referens:

PIC—A Graphics Language for Typesetting: User Manual
Brian W. Kernighan, 1984, reviderad 1991
AT&T Bell Laboratories Computing Science Technical Report No. 116

ps2eps finns från CTAN-speglar, exempelvis:

ftp://ftp.dante.de/tex-archive/support/ps2eps/

W. Richard Stevens, Turning PIC into HTML:

http://www.kohala.com/start/troff/pic2html.html

W. Richard Stevens, Examples of pic Macros:

http://www.kohala.com/start/troff/pic.examples.ps

KOLOFON

Denna sida är en del av projektet groff, GNU troff.

Information om projektet finns på:

http://www.gnu.org/software/groff/

Felrapporter för manualsidan hänvisas till:

http://www.gnu.org/software/groff/

Sidan hämtades från arkivet:

groff-1.24.1.tar.gz

Arkivet 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

pic är en groff-förprocessor som översätter diagram skrivna mellan:

.PS
.PE

till ritkommandon för troff eller TeX.

Vanlig användning via groff:

groff -p -Tpdf dokument.roff > dokument.pdf

Kör pic direkt:

pic fil.roff > fil.picout

Skapa TeX-utdata:

pic -t fil.pic > fil.tex

Läs från standardindata:

pic < fil.roff > utdata.roff

Använd säkrare läge, standard:

pic -S fil.roff

Tillåt sh-kommandon endast med betrodd indata:

pic -U fil.roff