Tiskanje

Pri tiskanju lahko naletimo na vse mogoče:

Zadnja možnost ni predmet obravnave tega spisa.

Tiskalniki, ki podpirajo ISO Latin 2

Nekaj novejših tiskalnikov že neposredno podpira kodno razporeditev ISO Latin 2. Med njimi so

Nič drugega vam ni treba, kakor izbrati pravilno kodno stran v tiskalniku. Ubežne sekvenca za tiskalnike Hewlett-Packard (PCL) in Epson (ESC/P2) so naslednje

Oznaka \033 je osmiška koda znaka Escape.

Eden od načinov, kako z /etc/printcap prilagodimo okolje za tiskanje s takim tiskalnikom, je podrobneje opisan v razdelku Tiskalniki, ki podpirajo kak drug nabor z našimi znaki.

Tiskalniki, ki podpirajo kak drug nabor z našimi znaki

Če tiskalnik podpira kak drug nabor z našimi znaki (ne dolgo nazaj je bila ustaljena praksa, da je bil ROM v tiskalnikih nadomeščen z EPROM, v njem pa švedski znaki zamenjani z znaki po JUS I.B1.002), lahko s primerno nastavitvijo v /etc/printcap še vedno tiskamo spise, kodirane po ISO Latin 2.

Primerno moramo dopolniti datoteko /etc/printcap. Za zgled si oglejmo tiskalnik Epson, ki ima znake po JUS I.B1.002 na mestu švedskega nabora.

lp|ascii|epson|Epson LQ-850:\  (1)
        :lp=/dev/lp1:\
        :sd=/usr/spool/lpd/epson:\
        :lf=/usr/spool/lpd/ERRORLOG:\
        :mx#0:\
        :sh:
jus|Epson LQ-850 z znaki JUS I.B1.002:\  (2)
        :lp=/dev/null:\
        :sd=/usr/spool/lpd/jus:\
        :if=/usr/spool/lpd/jus_filter:\
        :lf=/usr/spool/lpd/ERRORLOG:\
        :mx#0:\
        :sh:
latin2|text|Epson LQ-850 z znaki ISO Latin 2:\  (3)
        :lp=/dev/null:\
        :sd=/usr/spool/lpd/latin2:\
        :if=/usr/spool/lpd/latin2_filter:\
        :lf=/usr/spool/lpd/ERRORLOG:\
        :mx#0:\
        :sh:

Zgled ima tri tiskalniške vrste.

(1)
Prva vrsta je dejanski tiskalnik z ameriškim (ASCII) naborom znakov.
(2)
Tiskanje prek filtra /usr/spool/lpd/jus_filter:
#!/bin/sh
/usr/spool/lpd/jus_epson | lpr -Pascii

Datoteko torej precedimo skozi filter /usr/spool/lpd/jus_epson in jo postavimo v prvo tiskalniško vrsto. Filter jus_epson ne napravi drugega, kakor da na začetku doda kodo za preklop na švedski nabor, prepiše datoteko z vhoda na izhod in na koncu doda kodo za preklop nazaj na ameriški nabor. To je tudi edini del programja, ki je odvisen od vrste tiskalnika:

#!/bin/sh
# Tiskanje besedil, kodiranih po JUS I.B1.002, s tiskalnikom Epson LQ
#
# Izberemo slovenski (švedski) nabor
/bin/echo -ne "\033R\005\c"
# Izpišemo dokument
cat
# Izberemo ameriški nabor
/bin/echo -ne "\033R\000\c"
(3)
Tretja vrsta uporablja podoben filter kakor druga, le da ta najprej pretvori besedilo iz Latin 2 v JUS, zatem uporabi že opisani filter za to, da doda na začetku in na koncu potrebno kodo za tiskalnik, in končno táko datoteko postavi v prvo vrsto.
#!/bin/sh
/usr/local/bin/recode --force latin2:yu | \
    /usr/spool/lpd/jus_epson | lpr -Pascii
         

Zgled predpostavlja, da je pot do programa recode /usr/local/bin/recode. Izbiro --force moramo uporabiti, ker je preslikava neobrnljiva - v Latin 2 imamo tako šumnike kakor zavite oklepaje, v JUS pa samo še prve.

Za ta zgled smo morali v imeniku /usr/spool/lpd ustvariti tri podimenike: /usr/spool/lpd/epson, /usr/spool/lpd/jus in /usr/spool/lpd/latin2.

Tiskanje gre zdaj tako:

  1. Brez eksplicitne izbire vrste ali pa z izbiro -Pepson ali -Pascii se datoteka odtisne kot ASCII:

    lpr datoteka

  2. Z izbiro -Pjus se datoteka odtisne kot besedilo, kodirano po JUS I.B1.002:

    lpr -Pjus datoteka

  3. Z izbiro -Platin2 ali -Ptext se datoteka odtisne kot besedilo, kodirano po ISO Latin 2:

    lpr -Platin2 datoteka

Tiskalniki, ki podpirajo kak drug nabor z našimi znaki II[1]

Matjaž Terpin je predlagal imenitno izboljšavo pravkar opisanega postopka, pri katerem lahko tiskamo naše znake in oglate in zavite oklepaje. Srž njegovega predloga je filter, ki pred vsakim našim znakom preklopi na švedski nabor, takoj zatem pa spet nazaj na ASCII.

Datoteka /etc/printcap je v tem primeru taka:

# /etc/printcap
lp|raw|yu:\
       :lp=/dev/lp1:\
       :sd=/var/spool/lpd/lp:\
       :lf=/var/spool/lpd/ERRORLOG:\
       :mx#0:\
       :sh:
lat2:\
       :lp=/dev/null:\
       :if=/etc/lp/lat2.filter:\
       :sd=/var/spool/lpd/lat2:\
       :lf=/var/spool/lpd/ERRORLOG:\
       :mx#0:\
       :sh:

Filter /etc/lp/lat2.filter precedi besedilo skozi naslednje sito, /etc/lp/lat2.switch, in ga postavi v vrsto lp:

#!/bin/sh
# /etc/lp/lat2.filter

/etc/lp/lat2.switch | lpr -Plp

,Meso` postopka je v datoteki /etc/lp/lat2.switch:

#!/bin/sh
#/etc/lp/lat2.switch

echo -ne "\033R0"

sed -e "s/č/`echo -ne "\033R5\~\033R0"`/g" \
 -e "s/Č/`echo -ne "\033R5\^\033R0"`/g" \
 -e "s/š/`echo -ne "\033R5\{\033R0"`/g" \
 -e "s/Š/`echo -ne "\033R5\[\033R0"`/g" \
 -e "s/ž/`echo -ne "\033R5\140\033R0"`/g" \
 -e "s/Ž/`echo -ne "\033R5\@\033R0"`/g" \
 -e "s/ć/`echo -ne "\033R5\}\033R0"`/g" \
 -e "s/Ć/`echo -ne "\033R5\]\033R0"`/g" \
 -e "s/đ/`echo -ne "\033R5\|\033R0"`/g" \
 -e "s/Đ/`echo -ne "\033R5\\\\033R0"`/g" 

echo -ne "\033R5"

Matjaž pravi še: sed slabo prebavi ,echo -ne "\000"`, zato uporabljam kar znak 0 (ničlo), saj je tiskalnik (NEC pinwriter P7) zadovoljen tudi s tem.

Postscriptni tiskalniki

,Naravni` kodni nabor v postscriptu je Adobe Standard Encoding. Naših črk ne pozna. Pa ne le naših, tudi mnogih drugih črk ne pozna in pravzaprav sploh nima takih ambicij. Namesto tega je ASCII razširjen z gradniki sestavljenih znakov: strešica, ostrivec, diereza, sedij itd. -- vsi so tam. Jezik postscript pa omogoča definiranje sestavljenih znakov. Vse skupaj je čakalo samo še nekoga, ki bo definiral sestavljene znake za kodni nabor ISO Latin 2. Ta nekdo je bil Juliusz Chroboczek, ki je napisal paket ogonkify.

Filtra a2ps in GNU enscript sta bila napisana z namenom, da rešita za naše kraje nenavadno zagato: kako odtisniti čisto navadno besedilo na tiskalnik, ki razume edino postscript. Eden in drugi postavita stran v postscriptu z danim besedilom in jo pošljeta tiskalniku. Prilagodljivost postscripta omogoča tudi transformacije (npr. pomanjšave) ali poudarjanje sintakse pri tiskanju programskih izpisov. Oba podpirata nabor ISO Latin 2.

Ogonkify

Ogonkify je filter za izpise v postscriptu in omogoča pravilen odtis črk tudi v jezikih, ki ne uporabljajo nabora ISO Latin 1. Ker je filter, je ravno za korak prepozen, da bi to počel elegantno, zato mora prežvečiti vsako grdobijo, ki jo program izpljune korak pred njim, in iz dobljenega izdelati lep odtis. Programi pa izdelujejo postscriptne datoteke vsak malo drugače, kar filtru ,ogonkify` oteži delo. Zaenkrat podprti formati izpisa PostScript so: NCSA Mosaic, Netscape Navigator, StarOffice, Applixware in XFig.

Ogonkify za delovanje potrebuje perl. Ko je nameščen, ogonkify uporabimo takole za odtis spletnega sestavka, shranjenega iz Navigatorja:

ogonkify -AT -N netscape.ps | lpr

Wprint 2.02[2]

Spletni brskalniki, kot so Netscape, Mozilla, Galeon ali HtmlDoc, tiskajo prek pretvorbe v zapis postscript. Žal pa pri pripravi zapisa v postscriptu vselej predpostavi kodno razporeditev ISO8859-1. To pomeni, da boste pri tiskanju slovenskega dokumenta ne glede na uporabljeno kodno razporeditev namesto šumnikov dobili nekaj drugega. Zato morate pred tiskanjem omenjeni zapis v postscriptu predelati ob pomoči enega izmed tiskalniških filtrov, kot je npr. Wprint.

Najprej boste potrebovali pisavo TrueType s podporo Unicodu. Podrobnosti o tem, kje jo dobiti, si oglejte v razdelku o urejevalniku Yudit. V nadaljnjem besedilu bomo predpostavili, da uporabljate pisavo cyberbit.ttf in da ste jo namestili v imenik /usr/share/fonts.

Ena izmed okornejših možnosti je, da v svojem brskalniku najprej izvedete tiskanje v datoteko (v Netscapu File->Print izbiro File in ime datoteke, npr. dat1.ps). Nato izvedete pretvorbo tako nastale datoteke v zapisu postscript:

wprint -i ISO_8859-2 -p dat1.ps -f /usr/share/fonts/cyberbit.ttf >dat2.ps

Predpostavili smo, da je bil spletni dokument kodiran v razporeditvi ISO8859-2. Pri slovenskih besedilih sta mogoči tudi kodni razporeditvi Windows-1250 (v tem primeru za -i vpišite CP1250) ali UTF-8. Kodno razporeditev spletnega dokumenta morate v vsakem primeru ugotoviti sami. Najprej poskusite to ugotoviti iz izvirnika v jeziku HTML (v Netscapu ga dobite z View->Page Source). Če je dokument napisan pravilno, bi nekje v zaglavju (med oznakama <HEAD> in </HEAD>) morali najti tudi ta podatek. V nasprotnem primeru vam ne preostane drugega, kakor da v brskalniku ročno določate kodno razporeditev (v Netscapu View->Character Set->...), dokler na zaslonu ne vidite pravilno izpisanih znakov. Nato si lahko z enim izmed programov za ogled postscripta ogledate nastalo datoteko dat2.ps in jo po potrebi natisnete. Čeprav je ta pot okorna, vam priporočamo, da na začetku tako preizkusite posamezne parametre.

Delo z Wprintom si lahko nekoliko poenostavimo, če tri najpogostejša kodiranja slovenskih besedil na naslednji način predstavimo v datoteki /etc/wprint.conf:

#Imenik s pisavami TrueType
fontpath:/usr/share/fonts/

# Za kodiranje po ISO8859-2
iso2:ISO_8859-2:cyberbit.ttf:|lpr

#Za kodiranje po Windows-1250
win1250:CP1250:cyberbit.ttf:|lpr

#Za kodiranje po UTF-8
utf8:UTF-8:cyberbit.ttf:|lpr

#Obvezen mora biti tudi vnos default, ki ne izvede nobenega filtriranja
#in je privzet, če ni naveden noben drug vnos
default:NONE:NONE:|lpr

Struktura datoteke /etc/wprint.conf je preprosta. Najprej si prihranimo nekaj tipkanja s tem, da določimo imenik s pisavo TrueType. Sledi serija z dvopičji ločenih zaporedij, pri kateri posamezni elementi pomenijo:

ime vnosa

lahko je poljubno, nanj se bomo pozneje sklicevali s parametrom -l

kodna razporeditev

enaka imena kot pri iconv

ime pisave TrueType

cilj filtriranja

Zadnji element (cilj filtriranja) je ponavadi datoteka, v našem primeru pa smo ga prek cevi preusmerili k ukazu lpr, ki bo izvedel tiskanje ,popravljenega` dokumenta. Seveda lahko za zadnjim dvopičjem pustimo tudi prazen prostor, kar pomeni, da bomo sami naknadno določali cilj z ,operatorjema` > ali |.

Zdaj lahko prej dobljeno datoteko dat1.ps neposredno natisnemo nekoliko enostavneje z ukazom wprint -l iso2 dat1.ps Tudi tokrat je treba pred tem ugotoviti dejansko kodiranje dokumenta in po potrebi namesto iso2 vtipkati win1250 ali utf8. Lahko pa si delo še nekoliko poenostavimo in v spletni brskalnik kot ukaz za tiskanje (v Netscapu File->Print->Print Command) vnesemo wprint -l iso2 (oz. windows1250 ali utf8).

GNU enscript

Če GNU enscript še ni nameščen, ga namestimo po navodilih, ki so priložena programu. Poleg njega potrebujemo še vsaj eno pisavo z vsemi našimi znaki, zapisano v obliki Type 1. Primerna je npr. IBM Courier, ki je prosto dostopna in se distribuira z X Window System, programom ghostscript ipd. Če nismo prepričani, ali ga imamo že nameščenega, poženemo:

find / -name cour.pf[ab]

V osebno (~/.enscriptrc) ali skupno nastavitveno datoteko (navadno /usr/local/etc/enscript.cfg ali /usr/local/etc/enscriptsite.cfg) dodamo pravilno pot do datotek s pisavami. Poleg tega potrebuje GNU enscript v vsakem imeniku s pisavami še datoteko z imenom font.map, v kateri je preslikava med imeni pisav in datotekami, v katerih so shranjene. Ustvarimo jo z ukazom mkafmmap.

Zgled nastavitvene datoteke:

...
#  Kje shranjujemo postscriptne pisave?
AFMPath: /usr/lib/X11/fonts/Type1:/usr/local/lib/ghostscript/fonts
...
#  Privzeti način kodiranja:
DefaultEncoding: latin2
...
#  Privzeti format papirja:
DefaultMedia: A4
...
#  lpd izbira tiskalniške vrste z -P...
QueueParam: -P
...
#  Za tiskanje uporabljamo ukaz lpr, ne lp
Spooler: lpr

Ko je vse potrebno nastavljeno, odtisnemo besedilo enostavno z ukazom

enscript datoteka

a2ps

Z izdajo 4.7.21 je Akim Demaille v a2ps vgradil mehanizem za sestavljene znake, ki ga je Juliusz Chroboczek uporabil v filtru Ogonkify.

Našim krajem prilagodimo a2ps z majčkeno spremembo nastavitvene datoteke. Sistemsko nastavitveno datoteko najdemo navadno kot /usr/etc/a2ps.cfg, /usr/local/etc/a2ps.cfg ali kaj podobnega; osebna se imenuje ~/.a2psrc.

...
# Default encoding
Options: --encoding=latin2

# Default media
Options: --media=A4
...
	

Notes

[1]

Matjaž Terpin , Message-id: <Pine.LNX.3.96.980709095750.24607B-400000@guru.comcom.si>

[2]

Prispeval Jernej Kovačič,