piątek, 15 marca 2013

LaTeX: znaki cięcia/pasery, pakiety crop i fancyhdr

Kol. WP dba żebym nie wyszedł z wprawy w temacie znajomości LaTeXa.

Jakiś czas temu zażyczył sobie znaków cięcia (zwanych także paserami). Znaki cięcia mają określać wielkość kartki papieru jako 290x205mm (prawie A4). Mają być umieszczone na stronie o nietypowych wymiarach 330x250mm.

Używając pakietu crop można powyższe zalecenie zrealizować następująco:


\documentclass{article}

%% Inne pakiety dołączyć tutaj ...

\setlength\paperheight {290mm}\setlength\paperwidth{205mm}
\usepackage[cam,center,width=250truemm,height=330truemm,pdftex]{crop}
%%
%% Kolumna ma być wyśrodkowana na kartce (zalecenie drukarni)
%% Margines wynosi ( \paperwidth -\textwidth )/2
\oddsidemargin 18.5truemm %% dla \textwidth = 168mm
\evensidemargin\oddsidemargin

\begin{document}

...

\end{document}

No i działa. Dokument jest składany XeTeXem; używa w związku z tym pakietów polyglossia, fontspec, xunicode oraz xltxtra. Powyższe pakiety korzystają z kolei ze stada pakietów z l3kernel/l3packages bundles (fragment przyszłej, ciągle tworzonej od 20 bodajże lat, trzeciej wersji LaTeXa -- LaTeX3 project).

Po jakimś czasie okazało się, że nie działa w MikTeX 2.09. Pierwsza (tytułowa) strona jest podniesiona (względem znaków cięcia) o ok 4mm w porównaniu do wszystkich następnych.

Po dłuższym badaniu stwierdzono, że winna jest dwuwierszowa pagina górna znajdująca się na stronie tytułowej. Wydawała się niegroźna i co więcej, dokument był poprawnie kompilowany, ale tylko w dystrybucji TL 2011. Coś zmieniono w zestawie pakietów l3* (których jest dużo jak wiemy) i to te pakiety odpowiadają za błąd.

Żeby obejść problem postanowiłem składać dwuwierszową paginę w pudełko pionowe (\vbox) o wysokości równej wysokości wiersza tekstu:


\setbox0\hbox{\PM@HeaderFont\strut} %%
\newdimen\PM@HeaderHt \PM@HeaderHt=\ht0
\def\PM@vboxToOneLine#1{\vbox to\PM@HeaderHt{#1\vss}}
%% ^^^^^^^ pudełko o wysokości wiersza tekstu ^^
%% %% ...
\fancypagestyle{plain}{%% zawartość paginy na stronie tytułowej:
\fancyhf{} %
%% ...
\fancyhead[L]{\leavevmode
\hbox{\PM@vboxToOneLine{\PM@HeaderFont pierwszy-wiersz ... \\
... drugi wiersz ...}}} %
\fancyhead[R]{\leavevmode
\hbox{\PM@vboxToOneLine{\PM@HeaderFont pierwszy-wiersz ... \\
... drugi wiersz ...}}}
%% ...
}

Teraz działa lepiej.

Nawiasem mówiąc dwuwierszowe paginy to kiepski pomysł. W szczególności fancyhdr wyrównuje górne wiersze pagin, co oznacza, że np. kreska pod paginą będzie nie wyrównana jeżeli (przykładowo) lewa pagina jest dwuwierszowa a prawa jednowierszowa. W omawianym przypadku nie ma kreski pod paginą, dwuwierszowa pagina jest zdefiniowana wyłącznie na stronie tytułowej (której układ jest znakomicie różny od pozostałych stron) a i tak skończyło się problemem.

Brak komentarzy:

Prześlij komentarz