[pdftex] cweb and pdflaTeX

Benedikt Spranger Benedikt.Spranger at ptb.de
Tue Mar 11 16:03:32 CET 2003


Hi,
I use cweb for program documentation. I´d like to change from the
laTeX->DVI->PDF-way to pdflaTeX. Everything works fine, exept bookmarks. The
"bookmarktree" is corrupt. The following example is in german, but I think
it dosn´t matter.
How can I generate a better "bookmarktree"?

Thank you
    Benedikt Spranger

cweb example:
--- begin ---
\documentclass[language=german, baseclass=book]{cweb}

\usepackage{german}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ae}

\usepackage{hyperref}
\hypersetup{a4paper,
pdftitle={Programm zur Demonstration eines pdflaTeX-Fehlers im
Lesezeichenfenster},
pdfauthor={Benedikt Spranger},
pdfsubject={Programmdokumentation},
pdfproducer={teTeX},
pdfview=FitV,       % FitH
pdfstartview=FitB,
linkcolor=blue,     % Für Links in der gleichen Seite
pagecolor=blue,     % Für Links auf andere Seiten
urlcolor=blue,      % Für Links auf URLs
breaklinks=true,    % Links dürfen umgebrochen werden
colorlinks=true,
citebordercolor=0 0 0,  % Farbe für \cite
filebordercolor=0 0 0,
linkbordercolor=0 0 0,
menubordercolor=0 0 0,
pagebordercolor=0 0 0,
urlbordercolor=0 0 0,
pdfhighlight=/I,
pdfborder=0 0 0,   % keine Box um die Links!
backref=false,
pagebackref=false,
bookmarks=true,
bookmarksopen=true,
bookmarksnumbered=true
}

\begin{document}
\pagenumbering{Roman}
\date {\today}
\title {Programm zur Demonstration eines pdflaTeX-Fehlers im
Lesezeichenfenster}
\author {Benedikt Spranger}
\maketitle
\newpage
\hspace{0pt}

\vfill

Copyright \copyright 4711 Blah, Blup

\newpage
\tableofcontents
\listoffigures
\listoftables

@q Kapitel 1 @>
@* Programmkenndaten.
\pagenumbering{arabic}
@*1 Programmidentifizierung.

@*2 Programmname.
Das Programm heißt myhello.

@*2 Systemzuordnung.
Das Programm besteht nur aus sich selbst.

@*2 Variantenbezeichnung.
Es gibt keine Varianten.

@*2 Aktuelle Programmversion.
Die aktuelle Programmversion ist $\alpha^{3}$

@*2 Freigabedatum des Programms.
Dieses Programm wird nicht freigegeben.

@*1 Deskriptoren.
pdflaTeX, cweb

@*1 Programmkurzbeschreibung.

@*2 Aufgabe des Programms.
Das Programm dient zur Dokumentation eines Fehlers.

@*2 Programminhalt.
Das Programm ist sinnleer.

@*2 Vorschriften.
keine

@*2 Besonderheiten.
keine

@*3 Übersicht über Abweichungen und Interpretationen.
Alles streng nach Vorschrift, hoffentlich.

@*1 Gerätebedarf.
Ein Rechner, pdflaTex, starke Nerven.

@*1 Programmgröße.
klein

@*1 Programmbedarf.

@*2 Betriebssysteme.
irgendeins

@*2 Programmiersprachen/Compiler.
c-Compiler, cweb.

@*1 Datenorganisation.
chaotisch

@*1 Dokumentationsumfang.
diese hier.

@*1 Zuständigkeiten.
noch nicht bekannt.

@q Kapitel 2 @>

@* Programmfunktion.

@*1 Aufgabenstellung.

@*2 Aufgabenbeschreibung.
Dieses Programm zeigt einen Fehler im Lesezeichenfenster.

@*2 Theoretische Grundlagen.
n/a

@*3 Begriffe.
pdflaTex, pdf, \dots

@*3 Parameter.
Ausgabedatei.

@*2 Maßeinheiten.
metrisches System.

@*2 Vorschriften.
keine.

@*1 Aufgabenlösung.

@*2 Funktionshierarchie.
keine.

@*2 Methoden/Algorithmen.
Die verwendeten Methoden und Algorithmen sind im Quelltext ausführlich
beschrieben.

@*2 Fehlerbehandlung.
keine.

@q Kapitel 3 @>
@* Programmaufbau.
@*1 Programmbausteine.
Die Beschreibung der Funktionen erfolgt im Quelltext.

@*1 Programmstruktur.
Nur main und sonst gar nix.

@*1 Der Quelltext.
Der Quelltext des Programms gliedert sich in folgende Teile:
\begin{enumerate}
  \item Header
  \item Prototypen
  \item Funktionen
\end{enumerate}

@c
@<main:Header@>@/
@<main:Prototypen@>@/
@<main:Funktionen@>

@*2 Header.
Für das Programm werden die Standardbibliothek, die Ein- und
Ausgabebibliothek verwendet.

@<main:Header@>=
#include <stdio.h>
#include <stdlib.h>

@*2 Prototypen.
@<main:Prototypen@>=
int main (int argc, char *argv []);

@*2 Funktionen.

@<main:Funktionen@>=
@<main:main@>

@*3 Die Funktion main.
@<main:main@>=
int main (int argc, char *argv [])
{
    @<Variablen deklarieren@>@/
    @<Kommandozeile auswerten@>@/
    @<Text ausgeben@>@/

    return EXIT_SUCCESS;
}

@*4 Variablen deklarieren.
Hier werden die Variablen vereinbart.
@<Variablen deklarieren@>=
FILE *fhan = NULL;

@*4 Kommandozeile auswerten.
Dieser Funktionsteil wertet die Kommandozeile aus.
@<Kommandozeile auswerten@>=
if (argc > 1) fhan = fopen (argv [1], "w");
else fhan = NULL;

@*4 Text ausgeben.
@<Text ausgeben@>=
if (fhan)
{
    fprintf (fhan, "Hello disk!\n");
    fclose (fhan);
}
else printf ("Hello world!\n");

@
\cwebIndexIntro{%
Es folgt nun eine Liste mit Verweisen auf einzelne Strukturen des Programms.
Die unterstrichenen Verweise sind Definitionen. Hier werden auch
Fehlermeldungen dokumentiert.}

\end{document}
\fi
\end
--- end ---
the generated TeX-file:
--- begin ---
\input cwebmac
\documentclass[language=german, baseclass=book]{cweb}

\usepackage{german}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ae}

\usepackage{hyperref}
\hypersetup{a4paper,
pdftitle={Programm zur Demonstration eines pdflaTeX-Fehlers im
Lesezeichenfenster},
pdfauthor={Benedikt Spranger},
pdfsubject={Programmdokumentation},
pdfproducer={teTeX},
pdfview=FitV,       % FitH
pdfstartview=FitB,
linkcolor=blue,     % Für Links in der gleichen Seite
pagecolor=blue,     % Für Links auf andere Seiten
urlcolor=blue,      % Für Links auf URLs
breaklinks=true,    % Links dürfen umgebrochen werden
colorlinks=true,
citebordercolor=0 0 0,  % Farbe für \cite
filebordercolor=0 0 0,
linkbordercolor=0 0 0,
menubordercolor=0 0 0,
pagebordercolor=0 0 0,
urlbordercolor=0 0 0,
pdfhighlight=/I,
pdfborder=0 0 0,   % keine Box um die Links!
backref=false,
pagebackref=false,
bookmarks=true,
bookmarksopen=true,
bookmarksnumbered=true
}

\begin{document}
\pagenumbering{Roman}
\date {\today}
\title {Programm zur Demonstration eines pdflaTeX-Fehlers im
Lesezeichenfenster}
\author {Benedikt Spranger}
\maketitle
\newpage
\hspace{0pt}

\vfill

Copyright \copyright 4711 Blah, Blup

\newpage
\tableofcontents
\listoffigures
\listoftables



\N{1}{1}Programmkenndaten.
\pagenumbering{arabic}
\fi

\N{2}{2}Programmidentifizierung.

\fi

\N{3}{3}Programmname.
Das Programm heißt myhello.

\fi

\N{3}{4}Systemzuordnung.
Das Programm besteht nur aus sich selbst.

\fi

\N{3}{5}Variantenbezeichnung.
Es gibt keine Varianten.

\fi

\N{3}{6}Aktuelle Programmversion.
Die aktuelle Programmversion ist $\alpha^{3}$

\fi

\N{3}{7}Freigabedatum des Programms.
Dieses Programm wird nicht freigegeben.

\fi

\N{2}{8}Deskriptoren.
pdflaTeX, cweb

\fi

\N{2}{9}Programmkurzbeschreibung.

\fi

\N{3}{10}Aufgabe des Programms.
Das Programm dient zur Dokumentation eines Fehlers.

\fi

\N{3}{11}Programminhalt.
Das Programm ist sinnleer.

\fi

\N{3}{12}Vorschriften.
keine

\fi

\N{3}{13}Besonderheiten.
keine

\fi

\N{4}{14}Übersicht über Abweichungen und Interpretationen.
Alles streng nach Vorschrift, hoffentlich.

\fi

\N{2}{15}Gerätebedarf.
Ein Rechner, pdflaTex, starke Nerven.

\fi

\N{2}{16}Programmgröße.
klein

\fi

\N{2}{17}Programmbedarf.

\fi

\N{3}{18}Betriebssysteme.
irgendeins

\fi

\N{3}{19}Programmiersprachen/Compiler.
c-Compiler, cweb.

\fi

\N{2}{20}Datenorganisation.
chaotisch

\fi

\N{2}{21}Dokumentationsumfang.
diese hier.

\fi

\N{2}{22}Zuständigkeiten.
noch nicht bekannt.


\fi

\N{1}{23}Programmfunktion.

\fi

\N{2}{24}Aufgabenstellung.

\fi

\N{3}{25}Aufgabenbeschreibung.
Dieses Programm zeigt einen Fehler im Lesezeichenfenster.

\fi

\N{3}{26}Theoretische Grundlagen.
n/a

\fi

\N{4}{27}Begriffe.
pdflaTex, pdf, \dots

\fi

\N{4}{28}Parameter.
Ausgabedatei.

\fi

\N{3}{29}Maßeinheiten.
metrisches System.

\fi

\N{3}{30}Vorschriften.
keine.

\fi

\N{2}{31}Aufgabenlösung.

\fi

\N{3}{32}Funktionshierarchie.
keine.

\fi

\N{3}{33}Methoden/Algorithmen.
Die verwendeten Methoden und Algorithmen sind im Quelltext ausführlich
beschrieben.

\fi

\N{3}{34}Fehlerbehandlung.
keine.

\fi

\N{1}{35}Programmaufbau.
\fi

\N{2}{36}Programmbausteine.
Die Beschreibung der Funktionen erfolgt im Quelltext.

\fi

\N{2}{37}Programmstruktur.
Nur main und sonst gar nix.

\fi

\N{2}{38}Der Quelltext.
Der Quelltext des Programms gliedert sich in folgende Teile:
\begin{enumerate}
\item Header
\item Prototypen
\item Funktionen
\end{enumerate}

\Y\B\X39:main:Header\X\6
\X40:main:Prototypen\X\6
\X41:main:Funktionen\X\par
\fi

\N{3}{39}Header.
Für das Programm werden die Standardbibliothek, die Ein- und
Ausgabebibliothek verwendet.

\Y\B\4\X39:main:Header\X${}\E{}$\6
\8\#\&{include} \.{<stdio.h>}\6
\8\#\&{include} \.{<stdlib.h>}\par
\U38.\fi

\N{3}{40}Prototypen.
\Y\B\4\X40:main:Prototypen\X${}\E{}$\6
\&{int} \\{main}(\&{int} \\{argc}${},\39{}$\&{char}
${}{*}\\{argv}[\,]){}$;\par
\U38.\fi

\N{3}{41}Funktionen.

\Y\B\4\X41:main:Funktionen\X${}\E{}$\6
\X42:main:main\X\par
\U38.\fi

\N{4}{42}Die Funktion main.
\Y\B\4\X42:main:main\X${}\E{}$\6
\&{int} \\{main}(\&{int} \\{argc}${},\39{}$\&{char}
${}{*}\\{argv}[\,]){}$\1\1%
\2\2\6
${}\{{}$\1\6
\X43:Variablen deklarieren\X\6
\X44:Kommandozeile auswerten\X\6
\X45:Text ausgeben\X\6
\&{return} \.{EXIT\_SUCCESS};\6
\4${}\}{}$\2\par
\U41.\fi

\N{5}{43}Variablen deklarieren.
Hier werden die Variablen vereinbart.
\Y\B\4\X43:Variablen deklarieren\X${}\E{}$\6
\&{FILE} ${}{*}\\{fhan}\K\NULL{}$;\par
\U42.\fi

\N{5}{44}Kommandozeile auswerten.
Dieser Funktionsteil wertet die Kommandozeile aus.
\Y\B\4\X44:Kommandozeile auswerten\X${}\E{}$\6
\&{if} ${}(\\{argc}>\T{1}){}$\1\5
${}\\{fhan}\K\\{fopen}(\\{argv}[\T{1}],\39\.{"w"});{}$\2\6
\&{else}\1\5
${}\\{fhan}\K\NULL{}$;\2\par
\U42.\fi

\N{5}{45}Text ausgeben.
\Y\B\4\X45:Text ausgeben\X${}\E{}$\6
\&{if} (\\{fhan})\5
${}\{{}$\1\6
${}\\{fprintf}(\\{fhan},\39\.{"Hello\ disk!\\n"});{}$\6
\\{fclose}(\\{fhan});\6
\4${}\}{}$\2\6
\&{else}\1\5
\\{printf}(\.{"Hello\ world!\\n"});\2\par
\U42.\fi

\M{46}
\cwebIndexIntro{%
Es folgt nun eine Liste mit Verweisen auf einzelne Strukturen des Programms.
Die unterstrichenen Verweise sind Definitionen. Hier werden auch
Fehlermeldungen dokumentiert.}

\end{document}
\fi
\end
\fi

\inx
\fin
\con
--- end ---



More information about the pdftex mailing list