Slovenian HOWTO | ||
---|---|---|
<<< Previous | Next >>> |
Pri tiskanju lahko naletimo na vse mogoče:
Tiskalnik neposredno podpira ISO Latin 2
Tiskalnik podpira enega od preostalih osembitnih naborov z našimi znaki (npr. kodno stran 852) ali pa sedembitni nabor JUS I.B1.002
Tiskalnik razume postscript
Tiskalnik ne podpira ničesar drugega razen ASCII
Zadnja možnost ni predmet obravnave tega spisa.
Nekaj novejših tiskalnikov že neposredno podpira kodno razporeditev ISO Latin 2. Med njimi so
Hewlett-Packard LaserJet 4 Plus in 4M Plus
Hewlett-Packard LaserJet 5L
Epson FX-2170 (NLSP)
Epson LQ-870 (NLSP)
Epson LQ-2070 (NLSP)
Epson LQ-2170 (NLSP)
Epson DLQ-3000 (NLSP; letnik 1996 in novejši)
Fujitsu DL700
Fujitsu DL1150/1250
Fujitsu DL3700/3800
Fujitsu DL6400/6600
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
V PCL menda deluje:
\033(2N\033(s0p12h0s0b4099T |
V ESC/P2 z ukazom ESC ( t prepišemo kodno tabelo ISO 8859-2 v drugo tabelo tiskalnika; zatem z ukazom ESC t izberemo drugo tabelo tiskalnika (strani C-73 in C-77 v ,Epson ESC/P Reference Manual`, december 1997):
\033(t\003\000\002\177\002\033t\002 |
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.
Č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.
#!/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" |
#!/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:
Brez eksplicitne izbire vrste ali pa z izbiro -Pepson ali -Pascii se datoteka odtisne kot ASCII:
lpr datoteka
Z izbiro -Pjus se datoteka odtisne kot besedilo, kodirano po JUS I.B1.002:
lpr -Pjus datoteka
Z izbiro -Platin2 ali -Ptext se datoteka odtisne kot besedilo, kodirano po ISO Latin 2:
lpr -Platin2 datoteka
Matjaž Terpin <matjaz.terpin@comcom.si> 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.
,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 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
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:
lahko je poljubno, nanj se bomo pozneje sklicevali s parametrom -l
enaka imena kot pri iconv
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).
Č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
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 ... |
[1] | Matjaž Terpin <matjaz.terpin@comcom.si>, Message-id: <Pine.LNX.3.96.980709095750.24607B-400000@guru.comcom.si> |
[2] | Prispeval Jernej Kovačič, <jkovacic@email.si> |
<<< Previous | Home | Next >>> |
Poslovenjenje različnih programov | Linux v Sloveniji |