Dit is de opdracht texexpand die kan worden uitgevoerd in de gratis hostingprovider OnWorks met behulp van een van onze verschillende gratis online werkstations, zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
texexpand - breid \input en \include statements uit in een TeX-bestand
PRODUCTBESCHRIJVING
Algemeen vertaalmechanisme:
Het hoofdprogramma latex2html roept texexpand aan met de documentnaam om een deel van het document uit te breiden.
van zijn \input- en \include-statements, hier ook wel 'merging' genoemd, en om een lijst te schrijven van
gesensibiliseerde stijl, klasse, invoer of include-bestandsnamen. Wanneer texexpand klaar is, worden alle
is opgenomen in één bestand, TMP_foo. (aangenomen dat foo.tex de naam is van het document dat moet worden
vertalen).
In deze versie zorgt texexpand voor de volgende omgevingen die onder meer bestanden kunnen omvatten /
sectiegrenzen: a) \begin{comment} b) %begin{comment} c) \begin{any} geïntroduceerd met
\excludecomment d) %begin{any} e) \begin{verbatim} f) \begin{latexonly} g)
%begin{latexononly}
e) - g) voorkomen dat texexpand invoerbestanden uitbreidt, maar de omgevingsinhoud gaat
volledig in het uitvoerbestand.
Bij elke samenvoeging van \input etc. zijn er zogenaamde %%%texexpand markers
die de grens vergezellen.
Wanneer latex2html het uitvoerbestand inleest, gebruikt het deze markeringen om elk onderdeel naar een
apart bestand en verwerk ze verder.
Gedetailleerd technisch opmerkingen:
1. %begin{latexonly} en %end{latexonly} moeten op een aparte regel staan. Alles tussen
Deze tags (inclusief de tags) worden verwijderd.
2. \begin{latexonly} en \end{latexonly} moeten op een aparte regel staan. Alles tussen
Deze tags (inclusief de tags) worden niet uitgevouwen.
3. [%\]begin{"to exclude"} en [%\]end{"to exclude"} moeten op een aparte regel staan.
Alles tussen deze tags (inclusief de tags) wordt verwijderd.
4. \begin{verbatim/verbatim*} en \end{verbatim/verbatim*} moeten op een aparte regel staan.
Alles tussen deze tags (inclusief de tags) wordt niet uitgevouwen.
5. De reikwijdte van dergelijke tags kan zich uitstrekken over meerdere bestanden. De openingstag voor
Latexonly kan voorkomen op een ander include-niveau dan de afsluitende tag. De openingstag
want verbatim/"uitsluiten" moet in hetzelfde bestand voorkomen als de afsluitende tag.
6. Waarschuwingen worden afgedrukt wanneer het document is geparseerd en er nog openstaande tags over zijn.
7. In een "uitsluiten"/verbatim-omgeving herkent texexpand GEEN ENKELE opdracht
Behalve de bijbehorende afsluitende tag. Er mogen geen geneste constructies zijn. Dit
Het gedrag is identiek aan dat van LaTeX.
8. \begin{latexonly},\end{latexonly} kan genest worden, terwijl
%begin{latexonly},%end{latexonly} mag niet worden genest.
9. Een "%"-tag kan geen "\"-tag sluiten en omgekeerd.
10. Elke \document(klasse|stijl), \usepackage, \input en \include commando moeten op een
aparte lijn.
11. Alles achter een `%' dat niet voorafgegaan wordt door een `\' wordt beschouwd als een commentaar, d.w.z. het
wordt afgedrukt maar niet geïnterpreteerd.
12. Als een van de opdrachten in punt 10. voorafgegaan wordt door het voorkomen van `\verb' of `\latex', dan
Het wordt NIET geïnterpreteerd. Dit crasht bij regels als deze: blah blah \verb+foo foo+
\input{bar} % bar wordt niet geladen!
13. Pakketten die via \usepackage worden aangeboden, worden op dezelfde manier behandeld als `opties' in
\document(klasse|stijl), dwz ze worden opgenomen als -auto_exclude uit staat, het pakket
staat niet in @dont_include *OF* het pakket staat in @do_include (nieuw). Ze worden toegevoegd aan de
stijlbestand samen met hun opties als het bestand zelf niet is samengevoegd.
\documentclass[options]{class} zoekt naar elke option.clo,
\documentstyle[options]{style} zoekt naar elke option.sty.
\usepackage[options]{packages} zoekt naar elk package.sty.
14. Elke texinputs-map wordt doorzocht op invoerbestanden/stijlen. Als deze eindigt op `//',
De hele subdirectory wordt doorzocht.
15. \input / \include voeg het gegeven bestand samen (indien gevonden onder de gegeven naam of met .tex
extensie) als de basisnaam in @do_include staat of als deze niet in @dont_include staat of als de
De opgegeven bestandsnaam eindigt niet op .sty/.clo/.cls wanneer -auto_exclude is ingesteld.
Notes
Herkent \documentclass, \documentstyle, \usepackage, \RequirePackage,
\begin{woordelijk}...\end{woordelijk}, %begin{latexonly}...%end{latexonly},
\begin{latexononly}...\end{latexononly}, \input, \include, \verb, \latex \endinput,
\end{document} \includecomment, \excludecomment \begin{"uitsluiten"}, \end{"uitsluiten"}
%begin{"uitsluiten"}, %end{"uitsluiten"}
De bloederig Details
Een bestand opnemen en parseren. Deze routine is recursief, zie ook
&process_input_include_file, &process_document_header en &process_package_cmd.
Twee wereldvlaggen controleren de staten van texexpand.
o $active is waar als we de regels moeten interpreteren om bestanden uit te breiden, te controleren op pakketten,
enz.
o $mute is true als we moeten voorkomen dat de regels in het uitvoerbestand terechtkomen.
Er zijn drie algemene toestanden van texexpand:
1) Interpreteer de regels en geef ze door aan het uitvoerbestand. Dit is het normale geval.
Overeenkomstig: $active true, $mute false
2) Minimale interpretaties en onderdrukkingen
Dit is het geval bij het parsen binnen een commentaaromgeving, die
zou ook zijn lichaam uit LaTeX behouden. => $active false, $mute true
3) Minimale interpretatie en de regels doorgeven aan het uitvoerbestand
Dit gebeurt in een verbatim- of latex-only-omgeving.
De regel 'course' moet in ieder geval geïnterpreteerd worden om de afsluitende tag te bepalen.
=> $actief onwaar, $gedempt onwaar
Elke omgeving kan meerdere include-bestanden omvatten. Elke omgeving, behalve verbatim
en latexonly kan zijn openings- of sluitingstag op verschillende invoerniveaus hebben. De opmerking
en verbatim-omgevingen kunnen niet worden genest, zoals bij LaTeX. We moeten op zijn minst parsen
Verbatim-/commentaaromgevingen in latexonly-omgevingen, om valse latexonly-tags te detecteren.
Het werkschema: Vijf functies beïnvloeden het gedrag van texexpand. o &process_file opent de
gegeven bestand en parseert het niet-opmerkingdeel om $active en $mute in te stellen (zie hierboven).
Het roept &interprete aan om de niet-commentaarinhoud te interpreteren en gaat verder met de
volgende regel van zijn bestand of wordt beëindigd als &interprete de \end{document} of een
\endinput.
o &interprete verwerkt enkele LaTeX-tags met betrekking tot de drie toestanden die worden beheerd door
$active en $mute. Wat betreft \input|include, \document(klasse|stijl), en
\(use|Require)pakket de functies &process_input_include_file, &process_document_header,
en &process_package_cmd worden respectievelijk aangeroepen.
o Deze drie functies controleren of de bestandsnaam of optiebestanden zijn ingeschakeld of uitgeschakeld voor
samenvoegen (via TEXE_DO_INCLUDE of TEXE_DONT_INCLUDE). Elk bestand dat moet worden opgenomen, wordt
'samengevoegd' in het huidige bestand, d.w.z. dat de functie &process_file op deze plaats wordt aangeroepen
in de tijd (recursief). Dit stopt de interpretatie op de huidige regel in het bestand en start
met het nieuwe bestand om te verwerken en gaat door met de volgende regel zodra het nieuwe bestand is
tot het einde toe geïnterpreteerd.
De aanroepboom (noweb+xy.sty zou hier handig zijn):
hoofd-
|
v
+->proces_bestand
| |
| v
|interpreteren (met betrekking tot de huidige regel, een van de drie)
| | | |
| vvv
|proces_input_include_bestand proces_document_header proces_pakket_cmd
| | | |
| vvv
+----+---------------------------+------------------------+
Bugs: o Omdat de latexonly-omgeving niet wordt geparseerd, kan de inhoud ervan
omgevingen die niet herkend worden.
o De afsluitende tag voor latexonly wordt niet gevonden als deze verborgen is in een invoerbestand.
o Eén omgevingslabel per regel, toch!
Als ik testcases voor dit beest zou moeten ontwerpen, zou ik onmiddellijk uit elkaar vallen
in een logische wolk.
Opmerkingen:
Oké, ik heb er testcases voor ontworpen. Zie test 'uitbreiden' van de regressietest.
suite in de ontwikkelaarsmodule van de l2h-repository.
o-unsegment-functie: in dit (zeldzame) geval wil de gebruiker een gesegmenteerde tekst vertalen
document niet in segmenten, maar als geheel (bijvoorbeeld om te testen). We maken dit mogelijk door te herkennen
de \segment-opdracht in &interprete, waardoor het segmentbestand wordt behandeld als \input
maar het verliezen van de eerste regels vóór \startdocument (incl.), zoals beheerd via
$segmentfile. Hoe u een document kunt segmenteren, wordt u het beste uitgelegd in de sectie 'Document'.
''Segmentatie'' van de LaTeX2HTML-handleiding.
WAARSCHUWINGEN
Dit hulpprogramma is automatisch geconfigureerd en gebouwd om te werken op de lokale installatie. Als dit
instellingswijzigingen (bijvoorbeeld het verplaatsen van enkele externe opdrachten), het script moet worden
opnieuw geconfigureerd.
auteurs
Gebaseerd op texexpand van Robert Thau, MIT AI lab, inclusief aanpassingen door
Franz Vojik[e-mail beveiligd]>
Nikos Drakos[e-mail beveiligd]>
Sebastian Rahtz[e-mail beveiligd]>
Maximiliaan Ott[e-mail beveiligd]>
Martin Boyer
Herbert Swan
Jens Lippmann
Gebruik texexpand online met behulp van onworks.net-services
