Weblog Tomasza Przechlewskiego [Zdjęcie T. Przechlewskiego]


scrum
random image [Photo gallery]
Zestawienie tagów
1-wire | 18b20 | 1wire | 2140 | 3rz | adamowicz | afera | alsamixer | amazon | amber | amman | anniversary | antypis | apache | api | applebaum | arm | armenia | astronomy | asus | atom.xml | awk | aws | bachotek | bakłażan | balcerowicz | balta | banan | bash | batumi | berlin | białowieża | białystok | bibtex | bieszczady | birzeit | biznes | blogger | blogging | blosxom | bme280 | bono | borne-sulinowo | breugel | bt747 | budapeszt | budyniowo | budyń | bursztyn | campagnolo | canon | cedewu | chaos | chello | chiller | chillerpl | chown | christophe dominici | chujowetaśmy | ciasto | cmentarz | contour | coronavirus | covi19 | covid | covid19 | cron | css | csv | cukinia | curl | cycling | d54250wykh | darkages | dbi | debian | dejavu | dhcp | dht22 | dia | docbook | dom | dp1500 | ds18b20 | duda | dulkiewicz | dulkiewiczowa | dyndns | dynia | ebay | economy | ecowitt | ekonomia | elka | elm | emacs | emacs23 | english | ep | erasmus | erasmusplus | ess | eu | eurostat | excel | exif | exiftool | f11 | fc | fc11 | fc15 | fc29 | fc5 | fc8 | fedora | fedora21 | fenix | ffmpeg | finepix | firefox | flickr | folau | fontforge | fontspec | fonty | food | fop | forms | foto | france | francja | fripp | froggit | fuczki | fuji | fuse | gammu | garden | garmin | gas | gawk | gazwyb | gdańsk | gdynia | gender | geo | geocoding | georgia | gft | ggplot | ghost | git | github | gmail | gmaps | gnokii | gnus | google | google apps script | googlecl | googleearth | googlemaps | gotowanie | gphoto | gphoto2 | gps | gpsbabel | gpsphoto | gpx | gpx-viewer | greasemonkey | gruzja | grzyby | gus | gw1000 | haldaemon | handbrake | helsinki | hhi | historia | history | hitler | holocaust | holokaust | hp1000se | hpmini | humour | iblue747 | ical | iiyama | ikea | imagemagick | imap | inkscape | inne | internet | j10i2 | javascript | jhead | jifna | jordania | k800i | kajak | kamera | karob | kibbeh | kleinertest | kml | kmobiletools | knuth | kociewie kołem | kod | kolibki | komorowski | konwersja | krutynia | krynki | kuchnia | kurski | kłamstwo | latex | latex2rtf | latex3 | lcd | legend | lenny | lesund | lewactwo | lgbt-folly | liban | liberation | linksys | linux | lisp | lisrel | litwa | lizbona | logika | ltr | lubowla | lwp | lwów | m2wś | malta | mapquest | mapsource | maradona | marchew | marimekko | marvell | math | mathjax | mazury | mbank | mediolan | mencoder | mevo | mex | mh17 | michalak | michlmayr | microsoft | monitor | mp4box | mplayer | ms | msc | mssql | msw | mswindows | mtkbabel | museum | muzyka | mymaps | mysql | mz | nafisa | nanopi | natbib | navin | neapol | nekrolog | neo | neopi | netbook | niemcy | niemieckie zbrodnie | nikon | nmea | nowazelandia | nuc | nxml | oauth | oauth2 | obituary | ocr | odessa | okular | olympus | ooffice | ooxml | opera | osm | otf | otftotfm | other | ov5647 | overclocking | ozbekiston | padwa | palestyna | panoramio | paryż | pdf | pdfpages | pdftex | pdftk | pedophilia | perl | photo | photography | pi | picasa | picasaweb | pim | pine | pis | pit | pizero | plain | plotly | pls | plugin | po | podcast | podlasie | podróże | pogoda | politics | polityka | polsat | portugalia | postęp | powerpoint | połtawa | prelink | problem | propaganda | pseudointeligencja | pstoedit | putin | python | pywws | r | r1984 | radio | random | raspberry | raspberry pi | raspberrypi | raspbian | refugees | relaxng | ridley | router | rower | rowery | roztocze | rpi | rsync | rtf | ruby | rugby | rumunia | russia | rwc | rwc2007 | rwc2011 | rwc2019 | ryga | rzym | salerno | samba | sds011 | selenium | sem | senah | sernik | sheevaplug | sienkiewicz | signature | sikorski | sks | skype | skytraq | smoleńsk | sqlite | srtm | sshfs | ssl | staszek wawrykiewicz | statistcs | statistics | stats | statystyka | stix | stretch | supraśl | suwałki | svg | svn | swanetia | swornegacie | szwajcaria | słowacja | tallin | tbilisi | terrorism | tesseract | tex | texgyre | texlive | thunderbird | tomato | totalnaopozycja | tourism | tramp | trang | transylwania | truetype | trzaskowski | ttf | turcja | turkey | turystyka | tusk | tv | tv5monde | tweepy | twitter | tykocin | typetools | ubuntu | uchodźcy | udev | ue | ukraina | umap | unix | upc | updmap | ups | utf8 | uzbekistan | varia | video | vienna | virb edit | virbedit | vostro | wammu | wdc | wdfs | weather | weathercloud | webcam | webdav | webscrapping | weewx | wenecja | wh2080 | wiedeń | wikicommons | wilno | win10 | windows | windows8 | wine | wioślarstwo | wojna | word | wordpress | wrt54gl | ws1080 | wtyczka | wunderground | ww2 | www | wybory | wybory2015 | włochy | węgry | xemex | xetex | xft | xhtml | xine | xml | xmllint | xsd | xslt | xvidtune | youtube | yum | zaatar | zakopane | zakupy | zawodzie | zdf | zdrowie | zeropi | zgarden | zgony | zprojekt | łeba | łotwa | świdnica | żywność
Archiwum
06/2023 | 02/2023 | 01/2023 | 11/2022 | 10/2022 | 09/2022 | 07/2022 | 06/2022 | 04/2022 | 03/2022 | 02/2022 | 12/2021 | 09/2021 | 03/2021 | 01/2021 | 12/2020 | 11/2020 | 10/2020 | 09/2020 | 08/2020 | 07/2020 | 04/2020 | 03/2020 | 02/2020 | 01/2020 | 12/2019 | 11/2019 | 10/2019 | 09/2019 | 08/2019 | 07/2019 | 06/2019 | 04/2019 | 02/2019 | 01/2019 | 12/2018 | 11/2018 | 10/2018 | 09/2018 | 08/2018 | 07/2018 | 05/2018 | 04/2018 | 03/2018 | 02/2018 | 01/2018 | 11/2017 | 10/2017 | 09/2017 | 08/2017 | 07/2017 | 06/2017 | 05/2017 | 04/2017 | 03/2017 | 02/2017 | 01/2017 | 12/2016 | 11/2016 | 10/2016 | 09/2016 | 08/2016 | 06/2016 | 05/2016 | 04/2016 | 02/2016 | 12/2015 | 11/2015 | 09/2015 | 07/2015 | 06/2015 | 05/2015 | 02/2015 | 01/2015 | 12/2014 | 09/2014 | 07/2014 | 06/2014 | 04/2014 | 02/2014 | 01/2014 | 12/2013 | 11/2013 | 10/2013 | 09/2013 | 08/2013 | 07/2013 | 05/2013 | 04/2013 | 03/2013 | 02/2013 | 01/2013 | 12/2012 | 11/2012 | 10/2012 | 09/2012 | 08/2012 | 07/2012 | 05/2012 | 03/2012 | 02/2012 | 01/2012 | 12/2011 | 11/2011 | 10/2011 | 09/2011 | 08/2011 | 07/2011 | 06/2011 | 05/2011 | 04/2011 | 03/2011 | 02/2011 | 01/2011 | 12/2010 | 11/2010 | 10/2010 | 09/2010 | 08/2010 | 07/2010 | 06/2010 | 05/2010 | 04/2010 | 03/2010 | 02/2010 | 01/2010 | 12/2009 | 11/2009 | 10/2009 | 09/2009 | 08/2009 | 07/2009 | 06/2009 | 05/2009 | 04/2009 | 03/2009 | 02/2009 | 01/2009 | 12/2008 | 11/2008 | 10/2008 | 09/2008 | 08/2008 | 07/2008 | 06/2008 | 05/2008 | 04/2008 | 03/2008 | 02/2008 | 01/2008 | 12/2007 | 11/2007 | 10/2007 | 09/2007 | 08/2007 | 07/2007 |
O stronie
wykorzystywany jest blosxom plus następujące wtyczki: tagging, flatarchives, rss10, lastbuilddatexhtmlmime. Niektóre musiałem dopasować nieco do swoich potrzeb. Więcej o blosxom jest tutaj
Subskrypcja
RSS 1.0
Simple application of fontspec package

The document body font is Times New Roman-like. Sans serif font is Helvetica-like. Both regular and condensed variant of sans serif is used. With fontspec package it can be obtained with:

\RequirePackage{ifxetex} %%
\ifxetex %% xetex
\RequirePackage{fontspec}
\usepackage{polyglossia} \setdefaultlanguage{polish}
\setmainfont{TeX Gyre Termes}
\setsansfont{TeX Gyre Heros}
\defaultfontfeatures{Mapping=tex-text}
\newfontfamily\PM@SansCondensed{TeX Gyre Heros Cn} %%
\usepackage{xunicode,xltxtra}
\else %% conventional TeX
\RequirePackage{tgtermes,txfonts,qtxmath} %% txfonts
\def\PM@SansCondensed{\fontfamily{qhvc}}
\fi

With the help of \ifxetex command from ifxetex package the code above works when compiled both with xetex as well as conventional pdflatex.

The example below illustrates how \PM@SectionFont can be used to switch to condensed variant of sans serif:

\renewcommand{\section}{\@startsection{section}{1}{\z@}%
    {-3.5ex \@plus -1ex \@minus -.2ex}%
    {2.3ex \@plus.2ex}%
    {\reset@font 
    \PM@SectionFont 
    \raggedright}}

Finally, a few words how to configure system (a Linux one, BTW strictly speaking MS Windows is not a system) to work with OpenType fonts.

Providing the TeX Gyre fonts package is installed (with tlmgr in case of TeXLive for example) all .otf files are located in ~/2011/texmf-dist/fonts/opentype/public/tex-gyre (where ~ denotes the root of TeXlive distribution).

To add all TeX Gyre fonts to system resources it suffice to create /etc/fonts/local.conf with the following content:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<!-- /etc/fonts/local.conf file for local customizations -->
<fontconfig>
<!-- Font directory list -->

        <dir>/usr/local/texlive/2011/texmf-dist/fonts/opentype/public/tex-gyre</dir>

</fontconfig>

Or similar, if root of TeXlive distribution is not /usr/local/.

Now run as root

fc-cache

Check if everything is OK:

fc-list | grep -i Heros

Information on TeX Gyre Heros should be displayed on screen:

TeX Gyre Heros Cn:style=Bold
TeX Gyre Heros Cn:style=Bold Italic
TeX Gyre Heros:style=Regular
TeX Gyre Heros Cn:style=Regular
TeX Gyre Heros:style=Bold Italic
TeX Gyre Heros:style=Italic
TeX Gyre Heros Cn:style=Italic
TeX Gyre Heros:style=Bold

url | Tue, 06/03/2012 09:11 | tagi: , , ,
Xetex i PDF: kilka problemów

Dawno temu zrobiłem systemik formatujący pewien plik XML do postaci pliku PDF. Ten cel jest realizowany na dwa pas. Najpierw skrypt Perla zamienia XML na plik TeXa, który to plik jest zamieniany pdfTeXem na dokument PDF. 10 lat działało i nagle ktoś dostrzegł, że zakładki (bookmarks) są nie po polsku. No nie są, bo kiedyś było to trudne do wykonania... A teraz faktycznie nie jest trudne -- wystarczy zamienić kodowanie z jednobajtowego na UTF-8.

Po tej właśnie linii zaatakowałem problem, tj. 1) zmieniłem kodowanie w generowanym pliku TeXowym z ISO8859-2 na UTF-8 oraz, w związku z tym 2) zmieniłem pdfTeXa na XeTeXa. Jak zwykle nie obyło się bez problemów:

  1. Elementy nawigacyjne są definiowane inaczej w XeTeXu niż w pdfTeXu, więc za pierwszym razem bookmarki zniknęły w ogóle. Gdybym swoje makra pisał w LaTeXu problem by nie istniał, ale w plain TeXu zwykle trzeba wszystko samemu... Tym razem na szczęście z pomocą google znalazłem działające gotowe makra pn. navigator.

  2. Kolory też są inaczej definiowane. Ja to zrobiłem tak:

    \def\cmykRed{0 1 1 0}
    \def\setcolor#1{\special{color push cmyk #1}}
    \def\endcolor{\special{color pop}}
    
    \setcolor\cmykRed \bf Cośtam-coś-tam-na-czerwono \endcolor
    
  3. Miłą cechą XeTeXa jest to, że można korzystać z fontów systemowych. Wymyśliłem zatem, że dokument będzie składany fontem TeX Gyre Heros w odmianie wąskiej. Można to zadeklarować następująco:

    %% Podstawowym fontem jest TeX Gyre Heros w odmianie `Condensed'
    %% cf. http://www.gust.org.pl/projects/e-foundry/tex-gyre/heros
    \def\MainFont{TeX Gyre Heros Cn}\def\MainXFont{TeX Gyre Heros}
    \font\rm = "\MainFont:mapping=tex-text" 
    \font\bf = "\MainFont/B:mapping=tex-text"
    \font\it = "\MainFont/I:mapping=tex-text"
    %% W stopniu 8pt zamiast odmiany wąskiej używamy normalnej %%
    \font\eightrm = "\MainXFont:mapping=tex-text" at 6.25pt
    \font\eightbf = "\MainXFont/B:mapping=tex-text" at 6.25pt
    \font\eightit = "\MainXFont/I:mapping=tex-text" at 6.25pt
    

    Zapis mapping=tex-text oznacza, że font ,,reaguje'' na TeXowe ligatury, m.in -- oraz --- zamieniając je (odpowiednio) na półpauzę i pauzę. Zapis /B włącza odmianę grubą a /I kursywę...

  4. I gdy już wszystko było prawie gotowe nieopatrzenie zajrzałem do pliku .log a tam cała masa wpisów:

    Invalid UTF-8 byte or sequence at line 22 replaced by U+FFFD.
    

    Czyli Perl jednak sygnalizował coś brzydkiego wypisując:

    Wide character in print at ....
    

    Mój skrypt czyta plik XML, parsuje go z wykorzystaniem XML::Parser, który to -- jak powszechnie wiadomo -- wypluwa dokument w UTF-8. Więc czemu w efekcie dostaję błędnie kodowany plik?? Ustalenie co jest nie tak zajęło mi kilka godzin a sprawa sprowadzała się do dodania:

    open (OUT, ">:utf8", "plik-out") # zamiast open (OUT, ">plik-out")
    

    zamiast open (OUT, ">:utf8"... można wpisać:

    use open ":encoding(utf8)";
    use open IN => ":encoding(utf8)", OUT => ":utf8";
    

    Wpisanie zaś:

    use utf8 ;
    

    wskazuje tylko tyle, że skrypt Perla jest kodowany w UTF-8.

url | Mon, 18/04/2011 22:58 | tagi: , , ,
XeTeX (aktualizacja)

Uaktualniłem krótki wstęp do używania XeTeXa oraz przykłady tegoż używania.

url | Mon, 01/11/2010 18:11 | tagi: ,
XeTeX i GUST scheme w TL2010

Banalny dokument:

\documentclass[a4page]{book}
\usepackage{fontspec} %<-- włącza LM wymaga xetexa
\begin{document} 
 Hopla 
\end{document}

Przy kompilacji XeLaTeXem (fontspec nie działa ze zwykłym LaTeXem) spowodował komunikat o brakującym pakiecie expl3.sty oraz xparse.sty. [Używam TL2010 a konkretnie tzw. GUST scheme, zainstalowane poprzez WWW.]

Aby dociągnąć brakujące pakiety skorzystałem po raz pierwszy w życiu z tlmgr.

$ tlmgr search --global expl3    
tlmgr: package repository http://dante.ctan.org/tex-archive/systems/texlive/tlnet
 expl3 - Packages supporting LaTeX3 programming conventions.
 siunitx - A comprehensive (SI) units package.
 unicode-math - Unicode mathematics support for XeTeX and LuaTeX.
 xpackages - High-level LaTeX3 concepts.

$ tlmgr search --global xparse
tlmgr: package repository http://dante.ctan.org/tex-archive/systems/texlive/tlnet
 xpackages - High-level LaTeX3 concepts.

$ tlmgr install expl3

tlmgr: package repository http://dante.ctan.org/tex-archive/systems/texlive/tlnet
[1/1, ??:??/??:??] install: expl3 [2513k]
tlmgr: package log updated at /usr/local/texlive/2010/texmf-var/web2c/tlmgr.log
running mktexlsr ...
done running mktexlsr.

$ tlmgr install xpackages

tlmgr: package repository http://dante.ctan.org/tex-archive/systems/texlive/tlnet
[1/1, ??:??/??:??] install: xpackages [2401k]
tlmgr: package log updated at /usr/local/texlive/2010/texmf-var/web2c/tlmgr.log
running mktexlsr ...
done running mktexlsr.
url | Sat, 30/10/2010 08:25 | tagi: , ,
Verbatim z formatowaniem literalnych fragmentów

Do wpisywania literalnych fragmentów tekstu używam otoczenia Verbatim z pakietu fancyvrb. Otoczenie to m.in. może być wstawione do przypisu oraz jest możliwość umieszczania w tekście literalnym poleceń formatujących. To drugie przydaje się przykładowo w sytuacji gdy w opisie składni jakiegoś języka pewne fragmenty są meta, tj. nie należy przepisywać ich literalnie ale oznaczają pewne pojęcia (jak dajmy na to element replaceable wewnątrz literallayoutDocbook), przykładowo:

\begin{list}{punktor}{deklaracje} zestawienie \end{list}

Można wpisać:

\begin{Verbatim}[commandchars=@\{\}]
\begin{list}{@emph{punktor}}{@emph{deklaracje}} @emph{zestawienie} \end{list}

Jeżeli fragmenty literalne mają być mniejsze to można dopisać po przecinku fontsize=\small. Inną potencjalnie przydatną opcją jest numerowanie wierszy:

\begin{Verbatim}[commandchars=@{},fontsize=\small,numbers=left]
\begin{list}{@emph{punktor}}{@emph{deklaracje}} @emph{zestawienie} \end{list}

Numery nie muszą się zaczynać od 1. Opcja firstnumber pozwala na kontynuację. Można w szczególności wpisać firstnumber=last i numerowanie rozpocznie się od wartości o 1 większej niż ostatni wiersz w poprzednim otoczeniu Verbatim.

Można też wykorzystując polecenie \fvset zdefiniować powtarzające się opcje globalnie a nie wpisywać je za każdym razem:

\usepackage{fancyvrb}
\VerbatimFootnotes % <-- verbatim można umieszczać w przypisie
\DefineShortVerb{\"} % <-- krótka forma zapisu "foo" zamiast \verb@foo@
\fvset{commandchars=¤´˝}
\makeatactive
\newenvironment{literalexample}{\begingroup \endgraf \small \medskip \Verbatim}%
{\endVerbatim \par \medskip \endgroup  \@doendpe }
\makeatother

\begin{document}
\begin{literalexample}
\@startsection{¤emph´nazwa˝}{¤emph´poziom˝}{¤emph´wcięcie˝}{¤emph´odstęp-przed˝}{¤emph´odstęp-po˝}{¤emph´styl˝}
\end{literalexample}

W powyższym przykładzie \@doendpe powoduje, że w pierwszym akapicie po otoczeniu literalexample nie będzie wcięcia. \Verbatim\endVerbatim, to otoczenie Verbatim zapisane w postaci pary poleceń (każde otoczenie LaTeXa można zapisać jako \Otoczenie\endOtoczenie.

Ponieważ w kodzie LaTeXa praktycznie występują wszystkie znaki z klawiatury jako commandchars zastosowałem znaczki z górnej połówki ASCII: ¤ (dziesiętnie 164) ´ (180) oraz ˝ (189). Można by stosować np. ¤{}, ale wolałem nie używać {} w roli ograniczników do ¤, żeby mi się nie mieszało z nawiasami klamrowymi wstawionymi literalnie.

Teraz większy przykład, jak to działa

%& --translate-file=il2-pl
\documentclass[a4page]{book}
\usepackage{fancyvrb}
\fvset{commandchars=¤´˝}
\usepackage{polski}
\begin{document}

\begin{Verbatim}
\begin{list}{¤emph´punktor˝}{¤emph´deklaracje˝} ¤emph´zestawienie˝ \end{list}
\end{Verbatim}
\end{document}

Znaczki ¤´ oraz ˝ wstawiam w Emacsie wciskając C-c [ oraz C-c ]. W tym celu w .emacs zdefiniowałem co następuje:

(defun insert-commandchars-open ()
  "Insert sequence of characters character 164-180"
  (interactive) (insert "¤emph´") )
(defun insert-commandchars-close ()
  "Insert sequence of characters character 189"
  (interactive) (insert "˝") )
(global-set-key "\C-c\C-[" 'insert-commandchars-open)
(global-set-key "\C-c\C-]" 'insert-commandchars-close)

Teraz jeżeli byśmy na-rympał chcieli to używać z opcją utf-8 albo latin2 pakietu inputenc, to no-way:

\documentclass[a4page]{book}
\usepackage[utf8]{inputenc} \usepackage{lmodern} \usepackage[T1]{fontenc}
\usepackage{fancyvrb}
\fvset{commandchars=¤´˝}
\usepackage{polski}

\begin{document}
\begin{Verbatim}
\begin{list}{¤emph´punktor˝}{¤emph´deklaracje˝} ¤emph´zestawienie˝ \end{list}
\end{Verbatim}
\end{document}

LaTeX zgłasza błąd:

! Package inputenc Error: Keyboard character used is undefined

BTW: zapewne \fvset{commandchars=@\{\}} zadziała, ale nie chce mi się sprawdzać...

Można spróbować też XeTeXa:

\documentclass[a4page]{book}
\usepackage{fontspec} %<-- włącza LM wymaga xetexa
\usepackage{fancyvrb}
\fvset{commandchars=¤´˝}
\usepackage{polski}
\begin{document}

\begin{Verbatim}
\begin{list}{¤emph´punktor˝}{¤emph´deklaracje˝} ¤emph´zestawienie˝ \end{list}
\end{Verbatim}
\end{document}

Działa...

url | Sat, 30/10/2010 07:26 | tagi: , ,
Xetex: nowa wersja TeXa

Dopisane 1 listopada 2010: Ten wpis jest myląco-przestarzały. Aktualne informacje na temat XeTeXa są w dokumencie: Używanie XeTeXa w systemie Linux (dystrybucja TEXLive). Przykładowe pliki są natomiast tutaj.

Xetex to nowy wariant TeXa. Cytując wpis z Wikipedii, który przed chwilą sam utworzyłem:-) Umożliwia korzystanie ze standardu Unicode oraz fontów komputerowych we współczesnych formatach, takich jak OpenType oraz AAT. Twórcą XeTeXa jest Jonathan Kew. Wstępne wersje XeTeXa były dostępne tylko na platformie Mac OS X. Wersje programu na platformę Linux i Windows pojawiły się w 2006 r. Ponieważ tak było, to traktowałem XeTeXa z rezerwą--ot jakiś wariant TeXa na Maca. Wprawdzie dostępny w Linuksie, ale pewnie z wieloma ograniczeniami. Absolutnie niesłusznie. Jest to już w tej chwili program production stable, w 99% kompatybilny z klasycznym TeXem.

[Xetex+Emacs]
[Xetex+Emacs]
[Xetex + Emacs]

Dalej cytując Wikipedię: XeTeX jest dołączany do współczesnych dystrybucji TeXa, takich jak: TeXLive, MikTeX (od wersji 2.7), MacTeX. Ja mam TeXLive 2007. Potrafi wykorzystać fonty dostępne w systemie TeX oraz te dostępne w systemie. Polecenie xetex plik.tex jest równoważne uruchomieniu plain TeXa, co m.in. oznacza skład fontami CM. Czegoś takiego jak xemex zaś nie ma. Najpierw chciałem wypróbować jak działa xetex z jakimś egzotycznym fontem systemowy, np. takim jak Cyklop, dostępne w formacie OpenType. Żeby to sprawdzić musiałem najpierw doczytać jak instalować fonty w Linuksie.

Fonty są standardowo umieszczone w katalogu /usr/share/fonts. To mi nie za bardzo pasowało. Jak zmieniam system, to jest kłopot, które fonty są natywne, tj. zainstalowane z archiwów .rpm, a które nie. Wolałbym Cyklopa umieścić w /usr/local/share/fonts. Plikiem konfigurującym fonty systemowe jest /etc/fonts/fonts.conf, ale modyfikacje należy wpisywać w /etc/fonts/local.conf:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/local.conf file for local customizations -->
<fontconfig>
<!-- Font directory list -->
        <dir>/usr/local/share/fonts</dir>
</fontconfig>

Teraz zrobiłem restart a następnie (jako root):

mkdir /usr/local/share/fonts
cd  /usr/local/share/fonts 
mkfontscale && mkfontdir # na wszelki wypadek, być może niepotrzebne
fc-cache

Teraz wpisanie fc-list | grep Cyk, powoduje wypisanie na ekran:

Cyklop:style=Italic
Cyklop:style=Regular

Teraz już z górki. Zredagowałem w Emacsie następujący plik:

%% -*- coding: utf-8 -*-
\font\titrm="Cyklop" at 15pt
\font\titit="Cyklop/I" at 12pt
\font\rm="Iwona" at 12pt
\rm
\parindent0pt
\obeylines
\nopagenumbers
%% http://galaxy.uci.agh.edu.pl/~szymon/raven.shtml
\leftline{\titrm Kruk}
\leftline{\titit {(tł. Stanisław Barańczak)}}
\medskip

W głuchą północ, w snów tumanie, gdy znużyło mnie dumanie
Nad księgami zapomnianej magii, znanej w dawnych dniach,
Chyląc głowę nad foliałem, niespodzianie usłyszałem
Chrobot, jakby ktoś nieśmiałym palcem skrobał znak na drzwiach.
,,Gość'', mruknąłem, ,,tym sygnałem daje znać, że stanie w drzwiach:
Skąd ten zimny pot i strach?''

\bye

Zwracam uwagę na sposób deklarowania fontów. Cyklop to nazwa fontu a nie pliku. Xetex nie potrzebuje plików .tfm dlatego możliwa jest taka deklaracja. Do tego zapis Cyklop/I oznacza kursywę. Podobnie /B to odmiana gruba a /BI to gruba kursywa. Bardziej finezyjne odmiany (cienkie, wąskie itp...) trzeba deklarować tradycyjnie (podając nazwę pliku). Nazwa może zawierać odstępy--po to są cudzysłowy.

Kompiluję plik wydając polecenie:

xetex test-cyklop.tex

Na dysku powstaje plik PDF zwierający co trzeba. Plik źródłowy jest tutaj.

OK, teraz co dalej? W szczególności jak jest z: przenoszeniem wyrazów w języku polskim, dołączaniem rysunków, matematyką, ładnymi plikami PDF z odsyłaczami itp.? Okazuje się, że to wszystko jest wystarczy przełączyć się na LaTeXa. Oto test nr 2:

%% -*- coding: utf-8 -*-
\documentclass[a4paper]{article}
\usepackage[EU1]{fontenc} %% \usepackage[T1]{fontenc}
%\usepackage{lmodern}
% Support for Iwona, cf. http://pinkaccordions.homelinux.org/staff/tp/prog/tex/misc/
\usepackage{iwona}
\usepackage{polski} %% wzorce przenoszenia itp...
\begin{document}

\begin{flushleft}
\begin{bf}
KRUK (\emph{The Raven\/})\\
E. A. Poe
\end{bf} \end{flushleft}

\begin{verse}
Raz w północnej, głuchej dobie, gdym znużony siedział sobie\\
Nad księgami dawnej wiedzy, którą wieków pokrył kurz -- \\
%% ...itd...

Pakiet lmodern udostępnia kroje Latin Modern i wszystko działa, jak w klasycznym LaTeXu. Pakiet fontenc deklaruje nowe kodowanie EU1. Można go używać ale można też pozostać przy klasycznym T1. Kodowanie EU1 jest niezbędne do składania tesktów w każdym innym języku za wyjątkiem angielskiego (innymi słowy ASCII działa, wszystko inne, raczej nie) Powyższy przykład działa out-of-the-box w TL2007. Pliki są tutaj.

Kolejny test dotyczył cyrylicy i rysunków. Tekst rosyjski wkleiłem po prostu z google translate, więc może być lekko bez sensu:

%% -*- coding: utf-8 -*-
\documentclass[a4paper]{article}
\usepackage[xetex]{graphicx}
\usepackage[EU1]{fontenc} %% \usepackage[T1]{fontenc}
\usepackage{tgtermes} %% \usepackage{lmodern}
%\usepackage{tgheros}
%\renewcommand{\sfdefault}{qhv} %% tgheros.sty sets qhv as main body font
%\usepackage{tgcursor}% tgcursor.sty sets qcr as main body font. Why?
%\renewcommand{\ttdefault}{qcr}
%\usepackage{url,sfheaders}
%\usepackage[russian,english]{babel}
%
\bibliographystyle{plain}
\flushbottom
\raggedright
%
\title{\textsf{Examining OSS success: information technology 
  acceptance by FireFox users}}
\author{*** No author ***}
%
\begin{document}
\maketitle
\section{Introduction}

%%
Open source software (OSS) is currently one of the most debated
phenomena in both academia and the software industry....

 %% ... itd ...

No więc powyższe daje następujące wyniki: fonty LM nie zawierają cyrylicy więc układ T1+LM nie działa. Termes ma cyrylicę ale T1+Termes powoduje błąd:

Output file removed.
Output written on ff-4-isd06-test.pdf (1 page).

Faktycznie nie ma pliku ff-4-isd06-test.pdf. Poprawnie działa Termes z kodowaniem EU1. Nie ma w TL2007 odpowiednich plików dla kodowania EU1 dla fontów TeX-Gyre (podobnie nie ma dla Iwony), ale jest to dość proste do zrobienia . Wynikowy plik PDF jest tutaj. Plik źródłowy jest zaś tutaj. Kompletny przykład zawiera też rysunki. Xetex radzi sobie doskonale i obsługuje formaty: PNG/JPG + PDF, czyli z grubsza to samo co pdfTeX.

Uwaga: przykład zawiera zaprocentowane polecenia przełączające śródtytuły na sans-serif a font o stałej szerokości na Cursor (z zestawu fontów TeX-Gyre). Żeby to wszystko działało, to trzeba uaktualnić fonty TeX-Gyre ponieważ w TL2007 jest zainstalowana wstępna, niekompletna wersja. W przykładzie używa się też kodowania EU1. Pliki niezbędne do wykorzystywania tego kodowania z fontami TeX-Gyre są tutaj.

Ostatni przykład to matematyka składana krojem alternatywnym (Times, Palatino). Do tego służą pakiety txfonts/pxfonts (standardowo instalowane w nowych dystrybucjach LaTeXa):

%% -*- coding: utf-8 -*-
\documentclass[a4paper]{article}
\usepackage[xetex]{graphicx}
\usepackage{txfonts}
\usepackage[EU1]{fontenc}
\usepackage{tgtermes}
\usepackage{hyperref}
\usepackage{polski}
%
\title{*** No title given ***}
\author{*** No author given ***}
\begin{document}
\maketitle
\section{Analiza statystyczna zmiennych makroekonomicznych}
...

Ważna jest kolejność, najpierw \usepackage{txfonts}. Inaczej XeTeX podstawia inne fonty zamiast Times. Skład na pierwszy rzut oka wygląda OK. Pliki tradycyjnie są tutaj.

No i tyle o XeTeX. W jednym zdaniu: działa jak pdfTeX tyle, że z plikami w UTF8.

Aby wygodniej posługiwać się Unicode doinstalowałem do Emacsa pakiet xmlunicode Normana Walsha (należy pobrać xmlunicode.el oraz unichars.el). Instalacja polegała na skopiowaniu ww. plików do ~/.emacs-local (tam trzymam lokalne rozszerzenia i pakiety). Następnie należy określić wartość zmiennej unicode-character-list-file w pliku xmlunicode.el. Żeby było łatwiej dopisałem też w ~/.emacs:

(define-key global-map (kbd "C-c u") 'unicode-character-insert-char )
(autoload 'unicode-character-insert "xmlunicode" "Unicode support for XML" t)
(autoload 'unicode-character-insert-char "xmlunicode" "Unicode support for XML" t)
(autoload 'unicode-character-menu-insert "xmlunicode" "Unicode support for XML" t)

Teraz naciskając C-c u mogę wstawić dowolny znak Unicode z minibufora (z uzupełnianiem (completion) oczywiście). Natomiast funkcję unicode-character-menu-insert, pozwalającą na wybór znaku przez wskazanie myszą, dopisałem do menu. Funkcja unicode-character-menu-insert obsługuje rzecz jasna tylko znikomą część znaków Unicode -- te najczęściej używane. Menu zawierające wszystkie znaki raczej byłoby niewygodne w użyciu. BTW, to co wyświetlane jest w menu jest zdefiniowane w zmiennej unicode-character-menu-alist. Od razu dopisałem dwa znaki: #x201E (polski cudzysłów otwierający) i #x2026 (wielokropek).

Na koniec przydatny link do opis zestawu znaków Unicode.

Dopisane 9 marca 2008: Zamiast fontenc można korzystać z pakietu fontspec (jest zainstalowany w TL2007). Pakiet ten jest alternatywą dla klasycznego mechanizmu wyboru fontów w LaTeXu znanego jako NFSS. Wadą NFSS było to, że wymagał kłopotliwych dla tzw. przeciętnego użytkownika zabiegów na etapie instalowania fontu. Jeżeli zamiast fontenc używamy fonspec, to wtedy preambuła dokumentu wygląda następująco:

%% -*- coding: utf-8 -*-
\documentclass[a4paper]{article}
\usepackage{fontspec}
\setmainfont{Iwona}
%\setsansfont{TeX Gyre Heros} % odmiana bezszerfowa
%\setmonofont{TeX Gyre Cursor} % odmiana `monospace'
\usepackage{polski} %% wzorce przenoszenia itp...
  %%%  ... itd ...
\begin{document}
 %% ... itd ...

Jak widać do włączenia fontu używana jest jego nazwa a nie nazwa pliku z fontem. Z dokumentacji pakietu wynika, że aby powyższe zadziałało font musi być zainstalowany w systemie -- umieszczenie odpowiednich plików w systemie TeX nie wystarczy. Jest wszakże możliwość takiego skonfigurowania pakietu fontspec żeby działał z fontami zainstalowanymi w texmf. W tym celu należy dodać opcjonalny argument ExternalLocation, tj. na przykład:

\fontspec[ExternalLocation]{texgyrecursor-regular}

Pakiet fonspec czasami nie działa z pakietami fontowymi z tradycyjnego LaTeXa. W szczególności nie działał (przynajmniej u mnie) w połączeniu z fontami matematycznymi z pakietów txfonts/pxfonts.

Dopisane 19 marca 2008: Za listą GUST-l: A jak wygenerować format XeMeX? albo innymi słowy plain-format dla XeTeXa z polskimi wzorcami przenoszenia wyrazów? (to ja się zapytałem:-).

Odpowiedź jest następująca (Piotr Strzelczyk): niestety to jeszcze nie jest oczywiste. Zwłaszcza, że rozwój formatów XeTeXa poszedł zdecydowanie w stronę LaTeXa. Trzeba znaleźć wersję pliku XeTeX.ini opierającą się na eTeXu. (W archiwum na stronie twórcy, jest chyba zła wersja, za to na TeXlive jest dobra.) Ma być sygnowana:

% xetex.ini
% jonathan kew
% public domain
% updated: 15 Sept 2006

Następnie [należy] sprawdzić jakie języki są włączone w language.def (nie mylić z language.dat) i dołączyć język polski (pamiętając, że należy używać plików ,,unikodujących'' definicje przeniesień -- wraperów -- np. xu-plhyph.tex):

\addlanguage {polish}{xu-plhyph}{}{2}{2}

No i później już normalnie -- generujemy format. I możemy pisać po polsku, włączając język poleceniem \uselanguage{polish} (po szczegóły odsyłam do dokumentacji e-TeXa).

Janusz Nowacki dopisał zaś: Można też \uselanguage{polish} ustawić już w language.def i będzie to prawie XeMeX (format z domyślnym polskim dzieleniem [wyrazów]).

Dopisane 26 marca 2008: Oprócz TeXGyre można spróbować używać XeTeXa z fontami Minion/Myriad rozpowszechnianymi razem z programem AcrobatReader firmy Adobe. Są jeszcze do wypróbowania fonty Asana Math (autor: Apostolos Syropoulos). Problem z Asana Math jest wszakże taki, że autor udostępnił tylko goły font, nie bardzo wiem jak się dobrać do poszczegółnych znaków w foncie.

url | Fri, 07/03/2008 13:02 | tagi: , , , , , ,