summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex')
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex239
1 files changed, 227 insertions, 12 deletions
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
index 99d8414cd0..14a4ada92d 100644
--- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
@@ -7,6 +7,7 @@
\usepackage[utf8]{inputenc}
\usepackage{tkz-grapheur}
\usepackage{amsmath}
+\usepackage{enumitem}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\usepackage{hyperref}
@@ -29,8 +30,8 @@
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=2cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.6}
-\def\TPdate{13/07/2024}
+\def\TPversion{0.1.8}
+\def\TPdate{08/09/2024}
\usepackage{soul}
\usepackage{codehigh}
\usepackage{tabularray}
@@ -332,17 +333,24 @@ Concernant les styles des \textit{objets}, ils sont donnés ci-dessous.
\tikzset{pflgrillep/.style={thin,lightgray}}
\tikzset{pflgrilles/.style={very thin,lightgray}}
\tikzset{pflaxes/.style={line width=0.8pt,->,>=latex}}
+\end{tcblisting}
-%style des points (courbe / nuage /labels /montecarlo)
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%style des points (courbe / nuage /labels / montecarlo)
\tikzset{pflpoint/.style={line width=0.95pt}}
\tikzset{pflpointc/.style={radius=1.75pt}}
\tikzset{pflpointnuage/.style={radius=1.75pt}}
\tikzset{pflpointmc/.style={radius=0.875pt}}
\tikzset{pflnoeud/.style={}} %pour les inner sep par exemple :-)
+\tikzset{pflcourbediscont/.style={line width=1.1pt}}
+\end{tcblisting}
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%style des courbes
\tikzset{pflcourbe/.style={line width=1.05pt}}
+\end{tcblisting}
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%style des traits (normaux, antécédents, images)
\tikzset{pfltrait/.style={line width=0.8pt}}
\tikzset{pfltraitantec/.style={line width=0.95pt,densely dashed}}
@@ -354,6 +362,18 @@ Concernant les styles des \textit{objets}, ils sont donnés ci-dessous.
\tikzset{pflflechegd/.style={<->,>=latex}}
\end{tcblisting}
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%style des constructions ECC (courbe / paramètres)
+\tikzset{pfltraitsparamecc/.style={line width=0.9pt,densely dashed}}
+\tikzset{pflcourbeecc/.style={line width=1.05pt}}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%style des constructions récurrence
+\tikzset{pfltraitrec/.style={line width=0.8pt}}
+\tikzset{pfltraitrecpointill/.style={pfltraitrec,densely dashed}}
+\end{tcblisting}
+
L'idée est donc de pouvoir redéfinir globalement ou localement les styles, et éventuellement de rajouter des éléments, en utilisant \mintinline{latex}|monstyle/.append style={...}|.
\subsection{Création de l'environnement}\label{creaenvt}
@@ -829,6 +849,38 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont :
\end{GraphiqueTikz}
\end{tcblisting}
+\subsection{Marquer des points de discontinuité}\label{ptsdiscont}
+
+Il est possible de marquer des points de discontinuité, mais c'est commande est \textit{déconnectée} des commandes de tracé de courbes/splines.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\AfficherPtsDiscont[clés]{liste}
+\end{tcblisting}
+
+Le premier argument, \textit{optionnel} et entre \MontreCode{[...]}, contient les \MontreCode{Clés} suivantes :
+
+\begin{itemize}
+ \item \MontreCode{Couleur=...} (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Pos=...} (\MontreCode{D} par défaut) pour choisir la position de la discontinuité (parmi \MontreCode{G/D}) ;
+ \item \MontreCode{Echelle=...} (\MontreCode{1} par défaut) pour modifier l'échelle du symbole ;
+ \item \MontreCode{Type=...} (\MontreCode{par} par défaut) pour choisir le type de symbole, parmi \MontreCode{par/cro/rond/demirond}.
+\end{itemize}
+
+Le second argument, obligatoire et entre \MontreCode{\{...\}} permet de préciser la liste des points en lesquels le symbole de discontinuité sera positionné, sous la forme \MontreCode{x1/y1/d1 § x2/y2/d2 § ...} avec les points \MontreCode{(xi;yi)} et \MontreCode{f'(xi)=di}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=0,Xmax=10,Ymin=0,Ymax=5]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirCourbeSpline[Trace,Couleur=red]{0/1/-1 § 4/4/0}
+ \AfficherPtsDiscont{4/4/0}
+ \AfficherPtsDiscont[Pos=G,Type=cro]{0/1/-1}
+ \DefinirCourbeSpline[Trace,Couleur=blue]{5/1/1.5 § 8/4/0.5}
+ \AfficherPtsDiscont[Couleur=blue,Type=rond]{8/4/0.5}
+ \AfficherPtsDiscont[Couleur=blue,Pos=G,Type=demirond,Echelle=2]{5/1/1.5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
\subsection{Récupérer les coordonnées de nœuds}\label{recupcoordo}
Il est également possible, dans l'optique d'une réutilisation de coordonnées, de récupérer les coordonnées d'un nœud (défini ou déterminé).
@@ -1336,6 +1388,60 @@ Le dernier argument obligatoire est le point de travail (version abscisse ou nœ
\pagebreak
+\subsection{Suites récurrentes et toiles}\label{toilerecurr}
+
+L'idée est d'obtenir une commande pour tracer la \og toile \fg{} permettant d'obtenir -- graphiquement -- les termes d'une suite récurrente définie par une relation $u_{n+1}=f(u_n)$.
+
+La commande est compatible avec une fonction précédemment définie, mais également avec une courbe type \textit{spline} précédemment définie.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\TracerToileRecurrence[clés]{fct ou courbe}
+\end{tcblisting}
+
+Le premier argument, \textit{optionnel} et entre \MontreCode{[...]}, contient les \MontreCode{Clés} suivantes :
+
+\begin{itemize}
+ \item \MontreCode{Couleur=...} (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Spline=...} (\MontreCode{false} par défaut) pour spécifier qu'une courbe \textit{spline} est utilisée ;
+ \item \MontreCode{No=...} (\MontreCode{0} par défaut) est l'indice initial ;
+ \item \MontreCode{Uno=...} est qui est la valeur du terme initial (à donner obligatoirement !) ;
+ \item \MontreCode{Nom=...} (\MontreCode{u} par défaut) est le nom de la suite ;
+ \item \MontreCode{Nb=...} (\MontreCode{5} par défaut) ;
+ \item \MontreCode{AffTermes=...} (\MontreCode{false} par défaut) qui est un booléen pour afficher les termes ;
+ \item \MontreCode{AffPointilles=...} (\MontreCode{true} par défaut) pour afficher les pointillés ;
+ \item \MontreCode{TailleLabel=...} (\MontreCode{\textbackslash small} par défaut) ;
+ \item \MontreCode{PosLabel=...} (\MontreCode{below} par défaut).
+\end{itemize}
+
+Le second argument, obligatoire et entre \MontreCode{\{...\}} permet de préciser l'objet avec lequel il faut effectuer les tracés (fonction ou nom\_courbe).
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.75cm,y=0.75cm,Xmin=0,Xmax=10,Xgrille=1,Xgrilles=0.5,
+ Ymin=0,Ymax=8,Ygrille=1,Ygrilles=0.5]
+ \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{auto}{auto}
+ \DefinirCourbe[Couleur=red,Nom=cf,Debut=0,Fin=10,Trace]<f>{sqrt(5*x)+1}
+ \TracerCourbe[Couleur=blue]{x}
+ \TracerToileRecurrence[Couleur=orange,No=1,Uno=1]{f}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[x=4cm,y=3cm,Xmin=0,Xmax=2.5,Xgrille=1,Xgrilles=0.25,
+ Ymin=0,Ymax=1.25,Ygrille=0.5,Ygrilles=0.25]
+ \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{auto}{auto}
+ \DefinirCourbeInterpo[Nom=interpotest,Couleur=blue,Trace]%
+ {(0,0)(0.5,0.75)(1,0.25)(2,1)(2.5,0.25)}
+ \TracerCourbe[Couleur=olive]{x}
+ \TracerToileRecurrence%
+ [AffTermes,Couleur=purple,Spline,No=0,Uno=2,PosLabel=above left]%
+ {interpotest}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\pagebreak
+
\section{Commandes spécifiques des fonctions de densité}
\subsection{Loi normale}\label{loinormale}
@@ -1419,6 +1525,52 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont :
\end{GraphiqueTikz}
\end{tcblisting}
+\subsection{Histogramme pour une loi binomiale}\label{histobinom}
+
+Il est également possible (d'une manière moins explicite que dans \MontreCode{ProfLycee}) de représenter l'histogramme d'une loi binomiale (\MontreCode{ProfLycee} permet de déterminer les unités automatiquement, ici elles doivent être précisées et connues).
+
+Il est également possible de rajouter la loi normale \og associée \fg.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\TracerHistoBinomiale[clés]<nom fct normale>{n}{p}
+\end{tcblisting}
+
+Le premier argument, optionnel et entre \MontreCode{[...]} propose les clés suivantes :
+
+\begin{itemize}
+
+ \item \MontreCode{Plage} : plage, sous la forme \MontreCode{a-b} du coloriage éventuel ;
+ \item \MontreCode{CouleurPlage} : couleur de la plage éventuelle ;
+ \item \MontreCode{ClipX} : restriction de l'axe Ox, sous la forme \MontreCode{a-b} ;
+ \item \MontreCode{AffNormale} : booléen (\MontreCode{true} par défaut) pour rajouter la loi normale ;
+ \item \MontreCode{CouleurNormale} : couleur pour la loi normale.
+\end{itemize}
+
+Les arguments obligatoires et entre \MontreCode{\{...\}} permettent de spécifier les paramètres de la loi binomiale.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%les unités ont été déterminées au préalable...
+\begin{GraphiqueTikz}[x=0.2cm,y=50cm,Origx=-0.5,Xmin=-0.5,Xmax=50.5,
+ Xgrille=5,Xgrilles=1,Ymin=0,Ymax=0.12,Ygrille=0.01,Ygrilles=0.001]
+ \TracerAxesGrilles[Elargir=2.5mm,Police=\small,Grille=false]%
+ {0,5,...,50}{auto}
+ \TracerHistoBinomiale{50}{0.4}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%les unités ont été déterminées au préalable...
+\begin{GraphiqueTikz}[x=0.5cm,y=100cm,Origx=14.5,Xmin=14.5,Xmax=35.5,
+ Xgrille=5,Xgrilles=1,Ymin=0,Ymax=0.09,Ygrille=0.01,Ygrilles=0.001]
+ \TracerAxesGrilles[Elargir=2.5mm,Police=\small,Grille=false]%
+ {15,20,...,35}{auto}
+ \TracerHistoBinomiale%
+ [ClipX=15-35,Plage=18-25,CouleurPlage=teal,AffNormale,CouleurNormale=red]%
+ {1000}{0.02}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
\pagebreak
\section{Commandes spécifiques des méthodes intégrales}
@@ -1440,6 +1592,7 @@ L'idée est de proposer plusieurs méthodes graphiques pour illustrer graphiquem
Les \MontreCode{Clés} disponibles sont :
\begin{itemize}
+ \item \MontreCode{Spline} : booléen pour préciser qu'un spline est utilisé, \MontreCode{false} par défaut ;
\item \MontreCode{Couleur} : couleur des tracés, \MontreCode{red} par défaut ;
\item \MontreCode{NbSubDiv} : nombre de subdivisions, \MontreCode{10} par défaut ;
\item \MontreCode{Methode} : méthode géométrique utilisée, parmi parmi \MontreCode{RectanglesGauche / RectanglesDroite / RectanglesMilieu / Trapezes} pour spécifier la méthode utilisée, \MontreCode{RectanglesGauche} par défaut ;
@@ -1450,7 +1603,7 @@ Les \MontreCode{Clés} disponibles sont :
\smallskip
-Le deuxième argument, optionnel et entre \MontreCode{<...>}, correspond à la fonction \textbf{précédemment définie} !
+Le deuxième argument, optionnel et entre \MontreCode{<...>}, correspond à la fonction ou le spline \textbf{précédemment définie} !
\smallskip
@@ -1499,6 +1652,17 @@ Les deux derniers arguments, obligatoires, correspondent aux bornes de l'intégr
\end{GraphiqueTikz}
\end{tcblisting}
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=0,Ymax=5]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirListeSpline{-6.5/0/2.5§-2/4/0§3.75/0/-1}[\lstsplineB]
+ \DefinirCourbeSpline[Nom=splinered]{\lstsplineB}
+ \TracerCourbeSpline[Couleur=red]{\lstsplineB}
+ \RepresenterMethodeIntegrale[Methode=RectanglesMilieu,Spline,Couleur=teal]<splinered>{-5}{1.25}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
\subsection{Méthode de Monte-Carlo}\label{montecarlo}
L'idée est de proposer une commande pour simuler un calcul intégral via la méthode de Monte-Carlo.
@@ -1547,9 +1711,54 @@ et $\frac{\pi}{4} \approx \ArrondirNum[4]{pi/4}$.
\pagebreak
-\section{Commandes spécifiques des statistiques à deux variables}
+\section{Commandes spécifiques des statistiques}
+
+\subsection{Courbe des ECC/FCC (1 variable)}\label{cbeECC}
+
+Il est possible de travailler sur une représentation de la courbe des ECC/FCC.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\TracerCourbeECC[clés]{liste valeurs}{liste effectifs}
+\end{tcblisting}
+
+Le code se charge de déterminer une valeur des paramètres, pour utilisation ultérieure (avec arrondis éventuels car ils sont obtenus par \textit{conversions}) :
+
+\begin{itemize}
+ \item le premier quartile, $Q_1$, est stocké dans la macro \MontreCode{\textbackslash ValPremQuartile} ;
+ \item la médiane, méd, est stocké dans la macro \MontreCode{\textbackslash ValMed} ;
+ \item le troisième quartile, $Q_3$, est stocké dans la macro \MontreCode{\textbackslash ValTroisQuartile}.
+\end{itemize}
+
+Les \MontreCode{Clés} disponibles sont :
+
+\begin{itemize}
+ \item \MontreCode{Couleur=...} : couleur du tracé, \MontreCode{black} par défaut ;
+ \item \MontreCode{AffParams} : booléen, \MontreCode{true} par défaut, pour afficher les paramètres ;
+ \item \MontreCode{CouleursParams=...} : couleur des paramètres, \MontreCode{black} par défaut ;
+ \item \MontreCode{TraitsComplets} : booléen, \MontreCode{true} par défaut, pour afficher les pointillés en entier
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[x=0.15cm,y=0.03cm,Xmin=0,Xmax=75,Xgrille=10,Xgrilles=5,
+ Ymin=0,Ymax=200,Ygrille=20,Ygrilles=10]
+ \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{auto}{auto}
+ \TracerCourbeECC%
+ [Couleur=blue,CouleursParams={lime!75!black/pink!75!black},
+ TraitsComplets=false]%
+ {0,15,25,35,40,45,55,65,75}%
+ {15,20,50,30,35,25,15,10}
+ %ajouts 'manuels'
+ \PlacerTexte[Couleur=lime!75!black,Police=\small,Position=below]%
+ {(\ValPremQuartile,0)}{\ArrondirNum[0]{\ValPremQuartile}}
+ \PlacerTexte[Couleur=lime!75!black,Police=\small,Position=below]%
+ {(\ValTroisQuartile,0)}{\ArrondirNum[0]{\ValTroisQuartile}}
+ \PlacerTexte[Couleur=pink!75!black,Police=\small,Position=below]%
+ {(\ValMed,0)}{\ArrondirNum[0]{\ValMed}}
+\end{GraphiqueTikz}
+
+\end{tcblisting}
-\subsection{Le nuage de points}\label{nuage}
+\subsection{Le nuage de points (2 variables)}\label{nuage}
En marge des commandes liées aux fonctions, il est également possible de représenter des séries statistiques doubles.
@@ -1592,7 +1801,7 @@ Les arguments, obligatoires, permettent de spécifier :
\end{GraphiqueTikz}
\end{tcblisting}
-\subsection{La droite de régression}\label{reglin}
+\subsection{La droite de régression (2 variables)}\label{reglin}
La droite de régression linéaire (obtenue par la méthode des moindres carrés) peut facilement être rajoutée, en utilisant la clé \MontreCode{TracerDroite}.
@@ -1626,7 +1835,7 @@ Dans ce cas, de nouvelles clés sont disponibles :
\end{GraphiqueTikz}
\end{tcblisting}
-\subsection{Autres régressions}\label{regressions}
+\subsection{Autres régressions (2 variables)}\label{regressions}
En partenariat avec le package \MontreCode{xint-regression}, chargé par le package (mais \textit{désactivable} via l'option \MontreCode{[nonxintreg]}), il est possible de travailler sur d'autres types de régression :
@@ -1884,10 +2093,10 @@ $\begin{cases}
Les commandes disponibles sont :
\NewDocumentCommand\lstcmd{ m m m }{%
- \item[\texttt{#1}] : \mintinline{latex}|#2|\hfill{}page \pageref{#3}
+ \item[\footnotesize\texttt{#1}]{\footnotesize : \mintinline{latex}|#2|\hfill{}page \pageref{#3}}
}
-\begin{description}
+\begin{description}[noitemsep]
\lstcmd{environnement~~}{\begin{GraphiqueTikz}...\end{GraphiqueTikz}}{creaenvt}
\lstcmd{axes et grilles}{\TracerAxesGrille}{creaaxesgr}
\lstcmd{aj val axes X~~}{\RajouterValeursAxeX}{ajoutvals}
@@ -1904,6 +2113,7 @@ Les commandes disponibles sont :
\lstcmd{def image~~~~~~}{\DefinirImage}{defpts}
\lstcmd{marq pts~~~~~~~}{\MarquerPts}{markpts}
\lstcmd{placer txt~~~~~}{\PlacerTexte}{placetxt}
+ \lstcmd{pts discont~~~~}{\AfficherPtsDiscont}{ptsdiscont}
\lstcmd{récup absc~~~~~}{\RecupererAbscisse}{recupcoordo}
\lstcmd{récup ordo~~~~~}{\RecupererOrdonnee}{recupcoordo}
\lstcmd{récup coordos~~}{\RecupererCoordonnees}{recupcoordo}
@@ -1917,10 +2127,13 @@ Les commandes disponibles sont :
\lstcmd{méthodes int~~~}{\RepresenterMethodeIntegrale}{methodesintergrales}
\lstcmd{Monte-Carlo~~~~}{\SimulerMonteCarlo}{montecarlo}
\lstcmd{tangente~~~~~~~}{\TracerTangente}{tgte}
+ \lstcmd{toile récurr~~~}{\TracerToileRecurrence}{toilerecurr}
\lstcmd{loi normale~~~~}{\DefinirLoiNormale}{loinormale}
\lstcmd{loi normale~~~~}{\TracerLoiNormale}{loinormale}
\lstcmd{loi khideux~~~~}{\DefinirLoiKhiDeux}{loikhideux}
\lstcmd{loi khideux~~~~}{\TracerLoiKhiDeux}{loikhideux}
+ \lstcmd{loi binom~~~~~~}{\TracerHistoBinomiale}{histobinom}
+ \lstcmd{courbe ECC~~~~~}{\TracerCourbeECC}{cbeECC}
\lstcmd{stats 2 var~~~~}{\TracerNuage}{nuage}
\lstcmd{regressions~~~~}{\TracerAjustement}{regressions}
\lstcmd{arrondi~~~~~~~~}{\ArrondirNum}{numarrond}
@@ -1931,8 +2144,10 @@ Les commandes disponibles sont :
\section{Historique}
-\begin{quote}
+{\footnotesize \begin{quote}
\begin{verbatim}
+0.1.8 : Courbes ECC/FCC + Toile récurrence + Points discontinuité + HistoBinom
+0.1.7 : Méthodes intégrales avec des splines
0.1.6 : Asymptote verticale + Méthodes intégrales (géom + Monte Carlo)
0.1.5 : Correction d'un bug sur les rajouts de valeurs + Nœud pour une image + [en] version !
0.1.4 : Placement de texte
@@ -1941,6 +2156,6 @@ Les commandes disponibles sont :
0.1.1 : Densité loi normale et khi deux + Marquage points + Améliorations
0.1.0 : Version initiale
\end{verbatim}
-\end{quote}
+\end{quote}}
\end{document} \ No newline at end of file