On Thu, 19 Apr 2001 [EMAIL PROTECTED] wrote:
> Dziekuje wszystkim za zainteresowanie sie moim problemem,
> od razu przyznaje, ze z TeX'a jestem jeszcze cieniutki :)
>
> Poniewaz pytaliscie, wiec powiem do czego mi to porzebne,
>
> otoz chce stworzyc cos w rodzaju ksiazki telefonicznej
> tzn, z bazy danych pociagne rekordy z imieniem, nazwiskiem, adresem
> numerem telefonu itp itd.. poczym te dane chce przetworzyc w C++
> tak, zeby w wyniku stworzyc plik TeX'a, w TeXu zas makra co zlamia tekst tak
>jak trzeba.
> Wszystko powinno odbywac sie automatycznie, tak, zeby niepotrzeba bylo
> robic recznych poprawek. Wbrew pozorom niejest to proste, czasem dane
> sa dlozsze nisz szpalta i trzeba je inteligentnie zlamac,
> ponadto kazde pole typu imie i nazwisko musi byc pisane innym stylem.
>
> do tej pory robilem to w rtf'ie, ale to jest format... (mysle, ze nie musze konczyc)
> W RTF'ie mozna formatowac rekordy tylko za pomoca tabulatorow, marginesow i justowan
> dla odpowiednich stylow - niestety bledy sa liczne i pelna automatyzacja jest
> niemozliwa - ponadto w Wordzie i PageMakerze ten sam plik wyglada zupelnie inaczej -
>krew mnie juz zalala.
>
No skoro tak to dam jakiś konkret (nie daj sobie wmówić, ze jest to
trudne, TeX jest do tego idealny). To że każde pole ma być pisane
innym stylem jest chyba oczywiste do zrobienia zresztą nie o to się
pytasz. Główny problem to owo ,,inteligentne łamanie''. Podaję poniżej
makro (prościutkie, co mogą stwierdzić ci którzy uważają że napisanie
tego to za dużo wysiłku) które zadaną linijkę (pierwszy parametr)
napisze albo w jednej linii --- gdy jest krótsza niż wielkość podana
jako drugi parametr, lub też w dwu liniach --- gdy jest dłuższa niż
wielkość podana jako drugi parametr. Punkt złamania musi być
oczywiście zadany ręcznie --- bo chciałeś ,,inteligentnego łamania''
--- poprzez znacznik \Z
Ale decyzja czy łamać czy nie podejmowana jest przez TeXa. Oczywiście
prościej byłoby zrzucić na niego wybranie punktu łamania, ale ty
zulusie nie chcesz późniejszych interwencji. Więc tylko znaczniki \Z
wpisywane w trakcie wprowadzania danych, jeśli mamy podejrzenia, ze
szpalta będzie za wąska. Jest to niby LaTeX ale zastępując \newcommand
w odpowiedni sposób przez \def będzie takze pracować w plainie. UWAGA:
sprawienie, żeby w sprytny sposób łamał na więcej niż dwie linie
wymaga dalszej pracy. Ale przecież chodzi o wędkę a nie o rybę.
Oto plik do TeXowania i analizowania
PW
P.S. ZJZD=Złam Jeśli Za Długie
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{article}
\newbox\PWbox
\newcommand{\zlamanie}{\\}
\newcommand{\niezlamanie}{ }
\newcommand{\ZJZD}[2]{\let\Z=\niezlamanie
\setbox\PWbox\hbox{#1}%
\ifdim\wd\PWbox>#2
\let\Z\zlamanie
\fi
#1}
\begin{document}
\ZJZD{veeeeeeery\Z long}{1cm}
%%%%%%% to pewnie zostanie podzielone na dwie linie po słowie
%%%%%%% veeeeeeeeery
\bigskip
\ZJZD{veeeeeeery\Z long}{10cm}
%%%%%%% to raczej w jednej
\end{document}