piątek, 19 czerwca 2009

prelim2e

Przydatny pakiet do wstawianie identyfikatora wersji dokumentu. Do tej pory stosowałem do tego makra `generyczne', ewidentnie wymyślone w okolicach f-my BOP sc.:


\newdimen\hs\hs 210mm
\newdimen\vs\vs 297mm
\def\shipmarg{\kern15mm}
\newbox\shipbox

\let\oriship\shipout

\def\DOSHIP{%
\hoffset-1in \voffset-1in
\oriship\vbox to\vs{
\shipmarg\nointerlineskip
\nointerlineskip\vss
\hbox to\hs{\hss\box\shipbox\hss}%
\nointerlineskip\vss
\hbox to\hs{\shipmarg \DOCNOTE \hss}
\shipmarg
}}
\def\doship{\aftergroup\DOSHIP}
\def\shipout{\afterassignment\doship\setbox\shipbox}

(Zaznaczone przerażające polecenia \aftergroup/\afterassignment, których w życiu nie używałem i przyznam nawet, że nie znam ich znaczenia.) Po czymś takim, umieszczonym najlepiej w osobnym pliku, należy zdefiniować tekst umieszczany na każdej stronie:


\def\DOCNOTE{ .... }

Patent ten w zmodyfikowanej wersji był wykorzystywany m.in. w klasie wzmgr. Był ale ponieważ przestał działać wymieniłem go na pakiet prelim2e. Sądząc z zawartości google -- mniej znany. Używa się go zaś bardzo prosto:


\usepackage{prelim2e}
\renewcommand{\PrelimWords}{...} %% <-- opcjonalnie, jeżeli domyślny tekst się nie podoba

Pakiet draftcopy nie działa z pdftexem więc od razu został zdyskwalifikowany. (Poza tym nie podoba mi się zwyczaj wstawiania bombastycznego napisu w tle tekstu kolumny.)

Dodanie prelim2e do wzmgr zrobiłem warunkowo. Jak ktoś doda do dokumentu opcję brudnopis, to zamieni się to na poniższe:


\DeclareOption{brudnopis}{\AtEndOfClass{\input{prelim2e.sty}%
\renewcommand{\PrelimWords}{\ThisDocVersionId}\linespread{1.0}}}
\def\ThisDocVersionId{....} %% <-- trzeba zdefiniować --

Bez umieszczenia \input wewnątrz \AtEndOfClass, LaTeX zgłaszał błąd powtórnej definicji \PrelimWords. Mam nadzieję, że powyższe jest OK, ale tradycyjnie pewności nie ma:-)

czwartek, 4 czerwca 2009

LaTeX, tabele i \tabularnewline

Prosta tabela składająca się z dwóch kolumn, ale zawierająca wielowierszowe rubryki. Rubryki mają być składane ,,w chorągiewkę''. Zatem dodaję pakiet array i definiuję za pomocą \newcolumntype:


\usepackage{array}
\newcolumntype{L}{>{\raggedright\hspace{0pt}}p{.48\textwidth}}
\begin{document}

\begin{tabular*}{\textwidth}{@{\extracolsep{\stretch{1}}}LL}\hline
coś tam coś tam coś & coś tam coś tam coś \\
\end{tabular*}

Nie działa a przyczyna jest subtelna. Otóż \raggedright m.in. definiuje polecenie \\, które kończy wiersz. Wewnątrz tabular też jest zdefiniowane \\, które kończy wiersz tyle, że tabeli -- a to co innego. Na okoliczność tego konfliktu wymyślono polecenie \tabularnewline. Należy zamiast \\ na końcu wiersza tabeli wstawiać \tabularnewline i będzie git! Do dziś nie potrzebowałem \tabularnewline więc nawet nie wiedziałem, ze takie coś istnieje. Zamiast \tabularnewline można -- dołączając pakiet ragged2e -- wstawić ,,bezpieczną wersję'' \raggedright, czyli \RaggedRight.