[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