<Poprzedni | Spis treści | Następne>
groff
groff to pakiet programów zawierających implementację troffa w wersji GNU. Zawiera także skrypt używany do emulacji Nroffa i reszty rodziny roffów.
Kompletujemy wszystkie dokumenty (wymagana jest kopia paszportu i XNUMX zdjęcia) potrzebne do roff i jego potomkowie służą do tworzenia sformatowanych dokumentów, robią to w sposób raczej obcy współczesnym użytkownikom. Większość współczesnych dokumentów jest tworzona przy użyciu edytorów tekstu, które są w stanie w jednym kroku wykonać zarówno kompozycję, jak i układ dokumentu. Przed pojawieniem się graficznych edytorów tekstu dokumenty były często tworzone w dwuetapowym procesie obejmującym użycie edytora tekstu do tworzenia składu oraz procesora, takiego jak troff, aby zastosować formatowanie. Instrukcje programu formatującego zostały osadzone w komponowanym tekście za pomocą języka znaczników. Współczesnym odpowiednikiem takiego procesu jest strona internetowa, która jest tworzona przy użyciu pewnego rodzaju edytora tekstu, a następnie renderowana przez przeglądarkę internetową przy użyciu HTML jako języka znaczników w celu opisania ostatecznego układu strony.
Nie będziemy zakrywać groff w całości, ponieważ wiele elementów jego języka znaczników dotyczy raczej tajemniczych szczegółów typografii. Zamiast tego skoncentrujemy się na jednym z nich pakiety makr który pozostaje w powszechnym użyciu. Te pakiety makr skupiają wiele poleceń niskiego poziomu w mniejszym zestawie poleceń wysokiego poziomu, które ułatwiają korzystanie groff dużo łatwiej.
Przyjrzyjmy się na chwilę skromnej stronie podręcznika. Mieszka w / usr / share / man katalog jako gzip skompresowany plik tekstowy. Gdybyśmy sprawdzili jego nieskompresowaną zawartość, zobaczylibyśmy następujące informacje (strona podręcznika dla ls w sekcji 1 pokazano):
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | głowa
.\" NIE MODYFIKUJ TEGO PLIKU! Został wygenerowany przez help2man 1.35.
.TH LS „1” „Kwiecień 2008” „GNU coreutils 6.10” „Polecenia użytkownika”
NAZWA .SH
ls \- wyświetla zawartość katalogu
.SH STRESZCZENIE
.B ls
[\fOPCJA\fR]... [\fPLIK\fR]...
.SH OPIS
.\" Dodaj tutaj dodatkowy opis
.PP
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | głowa
.\" NIE MODYFIKUJ TEGO PLIKU! Został wygenerowany przez help2man 1.35.
.TH LS „1” „Kwiecień 2008” „GNU coreutils 6.10” „Polecenia użytkownika”
NAZWA .SH
ls \- wyświetla zawartość katalogu
.SH STRESZCZENIE
.B ls
[\fOPCJA\fR]... [\fPLIK\fR]...
.SH OPIS
.\" Dodaj tutaj dodatkowy opis
.PP
W porównaniu ze stroną podręcznika w jej normalnej prezentacji możemy zacząć dostrzegać korelację między językiem znaczników a jego wynikami:
[ja@linuxbox ~]$ człowiek jest | głowa
Polecenia użytkownika LS(1).
LS(1)
[ja@linuxbox ~]$ człowiek jest | głowa
Polecenia użytkownika LS(1).
IMIĘ
IMIĘ
ls - lista zawartości katalogu
ls - lista zawartości katalogu
STRESZCZENIE
ls [OPCJA]... [PLIK]...
STRESZCZENIE
ls [OPCJA]... [PLIK]...
Jest to interesujące dlatego, że strony podręcznika są renderowane przez groffStosując człowiek-doktor pakiet makro. W rzeczywistości możemy symulować mężczyzna polecenie z następującym potokiem:
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc -T ascii | głowa
LS(1) Polecenia użytkownika LS(1)
IMIĘ
ls - lista zawartości katalogu
STRESZCZENIE
ls [OPCJA]... [PLIK]...
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc -T ascii | głowa
LS(1) Polecenia użytkownika LS(1)
IMIĘ
ls - lista zawartości katalogu
STRESZCZENIE
ls [OPCJA]... [PLIK]...
Tutaj używamy groff program z opcjami ustawionymi w celu określenia mandocja pakiet makr i sterownik wyjściowy dla ASCII. groff może generować dane wyjściowe w kilku formatach. Jeśli nie określono żadnego formatu, domyślnie wyświetlany jest język PostScript:
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff-mandoc | głowa
%!PS-Adobe-3.0
%%Twórca: wersja groffa 1.18.1
%%Data utworzenia: czw. 5 lutego 13:44:37 2009
%%DocumentNeededResources: czcionka Times-Roman
%%+ czcionka Times-Bold
%%+ czcionka Times-Italic
%%DocumentSuppliedResources: grupy procset 1.18 1
%%Strony: 4
%%PageOrder: Wznieś się
%%Orientacja: pionowa
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff-mandoc | głowa
%!PS-Adobe-3.0
%%Twórca: wersja groffa 1.18.1
%%Data utworzenia: czw. 5 lutego 13:44:37 2009
%%DocumentNeededResources: czcionka Times-Roman
%%+ czcionka Times-Bold
%%+ czcionka Times-Italic
%%DocumentSuppliedResources: grupy procset 1.18 1
%%Strony: 4
%%PageOrder: Wznieś się
%%Orientacja: pionowa
Krótko wspomnieliśmy o PostScript w poprzednim rozdziale i powtórzymy to w następnym. PostScript to język opisu strony używany do opisywania zawartości drukowanej strony na urządzeniu przypominającym zecer. Jeśli weźmiemy wynik naszego polecenia i zapiszemy go w pliku (zakładając, że używamy pulpitu graficznego z Stacjonarny informator):
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc >
~/Desktop/foo.ps
[ja@linuxbox ~]$ zcat /usr/share/man/man1/ls.1.gz | groff -mandoc >
~/Desktop/foo.ps
Na pulpicie powinna pojawić się ikona pliku wyjściowego. Po dwukrotnym kliknięciu ikony przeglądarka stron powinna uruchomić się i wyświetlić plik w jego wyrenderowanej formie:
Rysunek 4: Przeglądanie wyjścia PostScript za pomocą przeglądarki stron w środowisku GNOME
To, co widzimy, to ładnie napisana strona podręcznika ls! W rzeczywistości możliwa jest konwersja pliku PostScript na plik PDF (Portable Document Format) plik za pomocą tego polecenia:
[ja@linuxbox ~]$ ps2pdf ~/Desktop/foo.ps ~/Desktop/ls.pdf
[ja@linuxbox ~]$ ps2pdf ~/Desktop/foo.ps ~/Desktop/ls.pdf
Kurs ps2pdf program jest częścią Ghostscript pakiet instalowany w większości systemów Linux obsługujących drukowanie.
Wskazówka: systemy Linux często zawierają wiele programów wiersza poleceń obsługujących format pliku
konwersja. Często nazywa się je w konwencji format2format. Spróbuj użyć polecenia ls /usr/bin/*[[:alfa:]]2[[:alfa:]]* aby je zidentyfikować. Spróbuj także wyszukać programy o nazwie formatdoformat.
Do naszego ostatniego ćwiczenia z groff, ponownie odwiedzimy naszego starego przyjaciela dystrybucja.txt jeszcze raz. Tym razem skorzystamy z tabl program używany do formatowania tabel w celu złożenia naszej listy dystrybucji Linuksa. Aby to zrobić, użyjemy naszego wcześniejszego sed skrypt dodający znaczniki do strumienia tekstowego, do którego będziemy przesyłać dane groff.
Najpierw musimy zmodyfikować nasz sed skrypt dodający niezbędne elementy znaczników (tzw prośby in groff) to tabl wymaga. Używając edytora tekstu, zmienimy distros.sed do następujących:
# skrypt sed generujący raport o dystrybucjach Linuksa
1 ja\
.TS\
pole środkowe;\ cb ss\
cb cb cb\ ln c.\
Raport dotyczący dystrybucji Linuksa\
=\
# skrypt sed generujący raport o dystrybucjach Linuksa
1 ja\
.TS\
pole środkowe;\ cb ss\
cb cb cb\ ln c.\
Raport dotyczący dystrybucji Linuksa\
=\
Imię
_
Wersja
Wydany\
Imię
_
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$a\
TE
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$a\
TE
Należy pamiętać, że aby skrypt działał poprawnie, należy zwrócić uwagę, aby słowa „Nazwa wersji wydanej” były oddzielone tabulatorami, a nie spacjami. Wynikowy plik zapiszemy jako distros-tbl.sed. tabl używa .TS i TE żądania rozpoczęcia i zakończenia tabeli. Wiersze następujące po .TS request definiuje globalne właściwości tabeli, które w naszym przykładzie są wyśrodkowane poziomo na stronie i otoczone ramką. Pozostałe wiersze definicji opisują układ każdego wiersza tabeli. Teraz, jeśli ponownie uruchomimy nasz potok generowania raportów z nowym sed skrypt, otrzymamy następujące informacje:
[ja@linuxbox ~]$ sort -k 1,1 -k 2n dystrybucje.txt | sed -f dystrybucje-tbl
.sed | groff -t -T ascii 2>/dev/null
+-----------------------------+
| Raport dotyczący dystrybucji Linuksa |
+-----------------------------+
[ja@linuxbox ~]$ sort -k 1,1 -k 2n dystrybucje.txt | sed -f dystrybucje-tbl
.sed | groff -t -T ascii 2>/dev/null
+-----------------------------+
| Raport dotyczący dystrybucji Linuksa |
+-----------------------------+
| Nazwa Wersja Wydana |
+-----------------------------+
|Fedora | 5 | 2006-03-20 | | |
|Fedora | 6 | 2006-10-24 | | |
|Fedora | 7 | 2007-05-31 | | |
|Fedora | 8 | 2007-11-08 | | |
|Fedora | 9 | 2008-05-13 | | |
|Fedora | 10 | 2008-11-25 | | |
|SUSE | 10.1 | 2006-05-11 | | |
|SUSE | 10.2 | 2006-12-07 | | |
|SUSE | 10.3 | 2007-10-04 | | |
|SUSE | 11.0 | 2008-06-19 | | |
|Ubuntu | 6.06 | 2006-06-01 | | |
|Ubuntu | 6.10 | 2006-10-26 | | |
|Ubuntu | 7.04 | 2007-04-19 | | |
|Ubuntu | 7.10 | 2007-10-18 | | |
|Ubuntu | 8.04 | 2008-04-24 | | |
|Ubuntu | 8.10 | 2008-10-30 | | |
+-----------------------------+
Dodawanie -t opcja do groff instruuje go, aby wstępnie przetworzył strumień tekstowy tabl. Podobnie, -T opcja służy do wyprowadzania danych w formacie ASCII, a nie w domyślnym nośniku wyjściowym, PostScript.
Format wydruku jest najlepszy, jakiego możemy się spodziewać, jeśli ograniczamy się do możliwości ekranu terminala lub drukarki przypominającej maszynę do pisania. Jeśli określimy wyjście PostScript i graficznie obejrzymy wynik, otrzymamy znacznie bardziej satysfakcjonujący wynik:
[ja@linuxbox ~]$ sort -k 1,1 -k 2n dystrybucje.txt | sed -f dystrybucje-tbl
.sed | groff -t > ~/Desktop/foo.ps
[ja@linuxbox ~]$ sort -k 1,1 -k 2n dystrybucje.txt | sed -f dystrybucje-tbl
.sed | groff -t > ~/Desktop/foo.ps
Rysunek 5: Oglądanie gotowego stołu