[cstex] Spojování TeXových zdrojových textů

Jaroslav Hajtmar hajtmar at gyza.cz
Sun Feb 25 12:40:04 CET 2018


Dobrý den pane Olšáku.

Díky mnohokrát za zaslané řešení - opět jste nezklamal __. Vyzkoušel jsem Vaše řešení ihned naostro při spojení zdrojových ConTeXtových textů a zdá se, že vše opravdu funguje jak má! Jednalo se zpracování dokumentu, který má po kompilaci cca 400 stránek PDF textu, čili si dovedete představit, že množství zdrojového textu je poměrně velké.
Předesílám, že dokument, který potřebuji zpracovat pomocí Vašeho řešení, vznikal před několika lety docela nestandardním způsobem, což mj. trochu souvisí s mým dotazem, takže se to pokusím popsat, aby bylo zřejmé, oč jde a proč řeším věci, které bych řešit za normálních okolností nemusel. Navíc je text OFF TOPIC pro většinu čtenářů, nicméně připouštím, že může být níže popsaný příběh docela zajímavý z hlediska přístupu TeXové komunity k Wordu a jeho používání pro rozsáhlé projekty, i když dnes by asi v cloudu dokument vznikal hodně odlišně. Na druhé straně možná ani ne, protože technologie se vyvíjejí mnohem rychleji než schopnosti lidí je používat, takže je možné, že bych i po deseti letech řešil celou věc nakonec obdobně.

\BeginOFFTopic % ========================================================================================

Škola kdysi měla vypracovat ŠVP - školní vzdělávací program. Texty připravovalo asi 20 lidí, všichni to psali ve Wordu. Když se za jednotlivé předměty atd. sešly nakonec všechny wordové dokumenty, tak se zjistilo, že není úplně reálné ze všech dokumentů (přestože existovala předlohová wordová šablona) dát dohromady jeden wordovský dokument, který by nějak rozumně esteticky vypadal a přitom byl tak rozsáhlý, aby to Word nějak bezproblémově dával (nevím jak dnes, ale před několika lety jsem, asi díky mé neschopnosti, nebyl schopen dát pomocí Wordu dohromady několikasetstránkový dokument (moje pomoc s diplomkami atd). Důvodem bylo mj. i to, že ne všichni uměli ve Wordu pořádně psát, nepoužívali styly, používali mezery pro odsazování, sem tam někdo i barvičky, tučnou podtrženou kurzívu, každý si v šabloně navržené tabulky předělal podle svého atd. Výsledný dokument se nedal tím pádem automaticky hromadně ostylovat tak, aby to nakonec vypadalo tak aby se za to škola nemusela stydět. Editor by musel vše kompletně ručně ostylovat atd. což byla v té době pro mne nepředstavitelná práce.

Vzhledem k bezradnosti lidí (včetně mojí), kteří to dávali dohromady, jsem nakonec navrhl, že to udělám sám v TeXu s tím, že k tomu použiju již zpracované samostatné wordové dokumenty mých kolegů. Udělal jsem to tak, že jsem wordové DOC soubory převedl do HTML a Perlovským skriptem jsem z HTML kódu udělal základní zdrojové TeXové soubory za jednotlivé předměty. A ty jsem nakonec naincludoval do výsledného dokumentu. Asi si dovedete představit, co to obnášelo, největším problémem bylo velké množství různých tabulek. Možná kdybych to ručně přestylovával, tak by to bylo rychlejší, ale takhle to pro mne byla dost výzva, se kterou jsem se nakonec úspěšně popral a ukázal řadě kolegů, že Word není úplně ideální nástroj na tak rozsáhlé dokumenty.

\EndOFFTopic % ========================================================================================


Nyní k věci: 
Krátkost kódu Vašeho řešení mne nadchla. Myslím, že by se to asi nedalo v Perlu či Pythonu či jiném jazyku napsat efektivněji, což mne ale asi ani moc nepřekvapuje (! Chci říci, že výsledek je po nějakých ručních úpravách docela dobře použitelný, nicméně pár postřehů a poznámek z ostrého provozu, které (pokud by se podařily vyřešit) by mi ještě ušetřily hóóóódně ruční práce. 

1. Po překladu pdfcsplainem vznikne jeden sloučený TeXový dokument, v něm je však (díky použitému wordovskému textu) spousta růžného smetí. Pdfcsplain si evidentně nedovede poradit s některýmu UTF8 znaky jako je nezlomitelná mezera, spojovník a asi i další viz texty:

Originální texty v includovaných souborech např.:
Pro výuku jsou k~dispozici učebny vybavené didaktickou technikou – přehrávač CD, video, zadní projektor, v~jedné učebně interaktivní tabule.
Gymnázium Zábřeh sídlí v~pěkné historické budově z roku 1896 na náměstí Osvobození 20. Hlavním problémem budovy je kapacita tělocvičny, která plně nedostačuje k zabezpečení výuky tělesné výchovy ve vlastních prostorách.

Jsou při překladu převedeny do těchto textů:
Pro výuku jsou k dispo- zici učebny vybavené didaktickou technikou ^^e2^^80^^93 přehrávač CD, video, zadní projektor, v jedné učebně interaktivní tabule.
Gymnázium Zábřeh sídlí v~pěkné historické budově z^^c2^^a0roku 1896 na náměstí Osvobození 20. Hlavním problémem budovy je kapacita tělocvičny, která plně nedostačuje k^^c2^^a0zabezpečení výuky tělesné výchovy ve vlastních prostorách.

Z textů je patrné, že vznikaly částečně ručně použitím TeXových postupů (viz ~, --, --- ) a částečně převzetím wordové předlohy, se kterou si ovšem ConTeXt dovedl poradit.

První otázka tedy zní: Lze nějakou direktivou sdělit pdfcsplainu, co má s těmi UTF8 wordovskými znaky udělat, aby je přeložil správně? Ptám se na to proto, že výskytů těchto znaků je tolik rozsáhlá, že by vyžadovalo opravdu hodně FIND&REPLACE práce v inkludovaných předlohách, aby se nahradily problematické znaky jejich TeXovými náhradami.


2. Šlo by modifikovat a zobecnit Váše řešení (pro mne programátorsky nepříliš čitelné (, abych v něm prováděl potřebné zásahy) tak, aby bylo možné využít i nějakého obecnějšího makra pro inkludování souboru?

Jde mi o to, že při inkludování nepoužívám makra 

% použil jsem pro zjednodušení popisu problému:
\include sourcecode.tex 

ale makra:

% toto dvouparametrické makro slouží k podmíněnému (ne)překladu některých částí kódu v závislosti na nastavení módů ConTeXtu.
% první parametr je název fyzického inkludovaného souboru (s příponou .tex). Druhý parametr je z pohledu mého požadavku nepodstatný.
\komponent{osnovy_vg_bi}{} 


Pokoušel jsem se o modifikaci Vašeho kódu tak, aby akceptoval moje načítací makro, ale nepodařilo se mi toho docílit.

Budu vděčný, pokud se budete mojí žádostí zabývat.

Ještě jednou díky a jsem se srdečným pozdravem celé konferenci.

Jarda Hajtmar






Dne 23.02.18 15:44, csTeX za uživatele Petr Olsak <cstex-bounces at cs.felk.cvut.cz za uživatele petr at olsak.net> napsal(a):

    
    Dobrý den,
    
    dá se experimentovat i na úrovni maker TeXu. Předpokládejme, že máte 
    soubory:
    
    ---------- a.tex s obsahem:
    
    AAA: aha
    
    umm
    
    end: AAA
    
    ---------- b.tex s obsahem:
    
    BBB
    
    \include c.tex
    \include d.tex
    
    BBBend
    
    ---------- c.tex s obsahem:
    
    CCC
    
    ---------- d.tex s obsahem:
    
    DDD
    
    ---------- main.tex s obsahem
    
    \newwrite\outfile
    \immediate\openout\outfile=allfiles.tex
    
    \let\ea=\expandafter
    \everyeof={\eof}
    \let\endfile=\end
    \def\tmp#1{}\edef\\{\ea\tmp\string\\}  \edef\%{\ea\tmp\string\%}
    \def\printout{\immediate\write\outfile}
    \long\edef\catfilesA#1\eof{\noexpand\splitparts#1\\include.\relax}
    \ea\def\ea\splitparts\ea#\ea1\\include#2{%
        \printout{#1}%
        \ifx.#2\ea\endfile \else \ea\catfilesB \fi
    }
    \def\catfilesB #1.tex#2{%
        \bgroup
           \printout{\% --- included file #1.tex}
           \let\endfile=\relax \ea\catfilesA\input #1.tex
           \printout{\% --- end of file #1.tex}
        \egroup
        \splitparts
    }
    \def\catfiles{\endlinechar=`\^^J \newlinechar=\endlinechar
        \def\do##1{\catcode`##1=12}\dospecials
    %   \tracingall
        \catfilesA
    }
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \catfiles
    
    aha \uff(a$#$
    
    \include a.tex
    \include b.tex
    
        uffEND
    
    \konecdokumentu
    
    ---------------------------------
    
    pak po zpracování příkazem pdfcsplain main.tex získáte
    
    ------------ allfiles.tex s obsahem:
    
    
    aha \uff(a$#$
    
    
    % --- included file a.tex
    
    AAA: aha
    
    umm
    
    end: AAA
    
    
    % --- end of file a.tex
    
    % --- included file b.tex
    BBB
    
    
    % --- included file c.tex
    CCC
    
    % --- end of file c.tex
    
    % --- included file d.tex
    DDD
    
    % --- end of file d.tex
    
    BBBend
    
    % --- end of file b.tex
    
        uffEND
    
    \konecdokumentu
    
    -------------------------
    
    Přeji příjemné experimentování.
    
    Zdravím
    
    Petr Olšák
    
    
    
    On Thu, 22 Feb 2018, Jaroslav Hajtmar wrote:
    
    > 
    > Dobrý den.
    > 
    > Díky za výborný tip. Je to sice pro LaTeX, ale je tam PERL skript, který by měl jít
    > modifikovat, aby mi to fungovalo v ConTeXtu.
    > 
    > Jarda Hajtmar
    > 
    >  
    > 
    >  
    > 
    > Od: csTeX <cstex-bounces at cs.felk.cvut.cz> za uživatele Miroslav Fikar
    > <miroslav.fikar at stuba.sk>
    > Příjemce odpovědi: Czech and Slovak list <cstex at cs.felk.cvut.cz>
    > Datum: čtvrtek 22. února 2018 8:07
    > Komu: Czech and Slovak list <cstex at cs.felk.cvut.cz>
    > Předmět: Re: [cstex] Spojování TeXových zdrojových textů
    > 
    >  
    > 
    > https://www.ctan.org/pkg/latexpand
    > 
    > by mal robit nieco podobne v latexu, neviem, ci aj pre context.
    > 
    > mf
    > 
    >  
    > 
    > 2018-02-21 15:10 GMT+01:00 Jaroslav Hajtmar <hajtmar at gyza.cz>:
    >
    >       Dobrý den.
    >
    >       Nenapadá někoho, jakým automatizovaným způsobem by se dalo spojit velké
    >       množství zdrojových textů, načítaných do hlavního zdrojového textu pomocí
    >       makra \include, do jediného jednosouborového  zdrojáku, který by šel
    >       následně zkompilovat např. pomocí nějakého online nástroje ala TeXonWeb?
    >
    >       Mám velké množství souborů a nechci všechnu práci dělat ručně.
    >
    >        
    >
    >       Mám na mysli např. nějakou direktivu, která při TeXové překladu vygeneruje
    >       spojený text nebo nějaký skript v Pythonu, Perlu atd..
    >
    >        
    >
    >       Díky a jsem s pozdravem.
    >
    >       Jarda Hajtmar
    >
    >        
    >
    >        
    > 
    > 
    > _______________________________________________
    > csTeX mailing list
    > csTeX at cs.felk.cvut.cz
    > https://lists.felk.cvut.cz/mailman/listinfo/cstex
    > 
    >  
    > 
    > 
    >




More information about the csTeX mailing list