Fil des billets

Exemples complets de thèses LaTex avec bibliographie et table des matières par chapitre

L’objectif de cet article est de donner un exemple complet de structures de fichiers LaTeX pour la rédaction de thèses. Voici le cadre général :

  • Un document maître dans lequel sont inclus des fichiers contenant chacun un chapitre
  • Une table des matières générale
  • Une table des matières par chapitre
  • Une bibliographie numérotée automatiquement et ordonnée dans l’ordre d’apparition des références dans le texte.
  • La bibliographie sera par chapitre ou non suivant le choix

Noms des différents fichiers :

  • these.tex : le document maître
  • intro.tex : fichier contenant l’introduction
  • chap1.tex : fichier contenant le chapitre 1
  • chap2.tex : fichier contenant le chapitre 2
  • conclu.tex : fichier contenant la conclusion
  • annexe.tex : fichier contenant une annexe

Un des points crucial est de bien s’organiser. Une organisation possible est d’avoir dans un dossier l’ensemble des fichiers latex qui seront inclus dans le document maître ainsi qu’un dossier contenant l’ensemble des figures incluses dans la thèse.

Bibliographie en fin de manuscrit

On commence par le document maître : these.tex. Le document ci-dessous répond aux contraintes évoquées plus haut avec une unique bibliographie en fin de thèse.

\documentclass{book}
 
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{lipsum}
 
% permet de faire une table des matieres par chapitre
\usepackage[french]{minitoc}
 
% ajoute (entre autre) la bibliographie dans la table des matieres 
\usepackage[nottoc]{tocbibind}
 
% biblio ordonnee classique
\bibliographystyle{unsrt}
 
\title{Exemple de thèse \LaTeX{} qui se veut minimal}
\author{G. Vallverdu}
\date{\today}
 
\begin{document}
 
% le titre
\maketitle
 
% preparation des minitocs
\dominitoc
 
% table des matieres generale
\tableofcontents
 
% inclusion des chapitres
\include{intro}
 
\include{chap1}
 
\include{chap2}
 
\include{conclu}
 
\appendix
 
\include{annexe}
 
% bibliographie
\bibliography{allbiblio}
 
\end{document}

Voici les autres fichiers :

 
%
% contenu du fichier : intro.tex
%
\chapter*{Introduction}
% pour faire apparaitre l'introduction dans le sommaire et que les minitocs soient au bon
% endroit
\addstarredchapter{Introduction générale} 
 
% Pour que l'entete soit correcte car chapter* ne redefinit pas l'entete.
\markboth{INTRODUCTION}{}
 
\lipsum[22-26]
 
% 
% contenu du fichier : chap1.tex
%
\chapter{Premier chapitre}
 
\minitoc
 
\section{Citations}
 
Ici on cite un article de Dudarev\cite{Dudarev1998}, puis un sur 
Bader\cite{Henkelman2006} et un petit dernier\cite{Blochl1994}. 
Le tout pour tester la bibliographie.
 
\lipsum[6-8]
 
\section{Paragraphe}
 
\lipsum[9-12]
 
%
% contenu du fichier : chap2.tex
%
\chapter{Second chapitre}
 
\minitoc
 
\section{Citations}
 
On remet une petite couche de biblio\cite{Kresse1993}. Toujours pour voir si la
bibliographie est bonne\cite{Kresse1996}.
 
\lipsum[13-16]
 
\section{Texte}
 
\lipsum[17-21]
 
%
% contenu du fichier : conclu.tex
%
\chapter*{Conclusion}
% pour faire apparaitre l'introduction dans le sommaire
\addcontentsline{toc}{chapter}{Conclusion}
 
% Pour que l'entete soit correcte car chapter* ne redefinit pas l'entete.
\markboth{CONCLUSION}{}
 
\lipsum[22-25]
 
%
% contenu du fichier : annexe.tex
%
\chapter{Une annexe}
 
\lipsum[26-27]

Il manque le fichier allbiblio.bib qui contient les références :

%
% contenu du fichier : allbiblio.bib
%
@ARTICLE{Kresse1993,
  author = {Kresse, G. and Hafner, J.},
  title = {\textit{Ab initio} molecular dynamics for liquid metals},
  journal = {Phys. Rev. B},
  year = {1993},
  volume = {47},
  pages = {558--561},
  month = {Jan},
  issue = {1},
  publisher = {American Physical Society},
}
 
@ARTICLE{Blochl1994,
  author = {Bl\"ochl, P. E.},
  title = {Projector augmented-wave method},
  journal = {Phys. Rev. B},
  year = {1994},
  volume = {50},
  pages = {17953--17979},
  month = {Dec},
  issue = {24},
  publisher = {American Physical Society},
}
 
@ARTICLE{Dudarev1998,
  author = {Dudarev, S. L. and Botton, G. A. and Savrasov, S. Y. and Humphreys,
	C. J. and Sutton, A. P.},
  title = {Electron-energy-loss spectra and the structural stability of nickel
	oxide: An LSDA+U study},
  journal = {Phys. Rev. B},
  year = {1998},
  volume = {57},
  pages = {1505--1509},
  month = {Jan},
  issue = {3},
  publisher = {American Physical Society},
}
 
@ARTICLE{Henkelman2006,
  author = {Henkelman, G.a and Arnaldsson, A.b and Jonsson, H.b c},
  title = {A fast and robust algorithm for Bader decomposition of charge density},
  journal = {Computational Materials Science},
  year = {2006},
  volume = {36},
  pages = {354-360},
  number = {3},
  note = {cited By (since 1996) 559}
}
 
@ARTICLE{Kresse1996,
  author = {G. Kresse and J. Furthmüller},
  title = {Efficiency of ab-initio total energy calculations for metals and
	semiconductors using a plane-wave basis set},
  journal = {Computational Materials Science},
  year = {1996},
  volume = {6},
  pages = {15 - 50},
  number = {1},
}

Dernier point : la compilation. Elle peut se faire soit avec latex soit avec pdflatex en procédant de la façon suivante :

  1. (pdf)latex these.tex
  2. (pdf)latex these.tex
  3. bibtex these.aux
  4. (pdf)latex these.tex
  5. (pdf)latex these.tex

Il est nécessaire de compiler plusieurs fois le document avec latex ou pdflatex pour que la table des matières et les références soient bonnes. bibtex permet de générer la bibliographie. Le résultat :

these_simple.pdf

L’ensemble des fichiers :

these_simple.zip

Bibliographie par chapitre

Il existe plusieurs possibilités pour faire une bibliographie par chapitre. La plus simple et qui répond réellement aux attentes d’une bibliographie numérotée automatiquement dans l’ordre d’apparition des références dans le texte consiste à utiliser le paquet chapterbib. Le principe est de placer dans chaque document pour lesquels on veut une bibliographie, les commandes \bibliography et \bibliographystyle.

Le document maître est peu différent du précédent. Les commandes \bibliography et \bibliographystyle ont disparu et on ajoute \usepackage[sectionbib]{chapterbib}. L’option sectionbib permet de définir l’environnement bibliographie comme une section au lieu d’un chapitre ce qui est plus cohérent avec la classe book :

\documentclass{book}
 
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{lipsum}
 
% permet de faire une table des matieres par chapitre
\usepackage[french]{minitoc}
 
% bibliographie par chapitre :
%     * mettre \bibliography et \bibliographystyle dans chaque fichier inclu
\usepackage[sectionbib]{chapterbib}
 
\title{Exemple de thèse \LaTeX{} avec la bibliographie par chapitre qui se veut minimal}
\author{G. Vallverdu}
\date{\today}
 
\begin{document}
 
% le titre
\maketitle
 
% preparation des minitocs
\dominitoc
 
% table des matieres generale
\tableofcontents
 
% inclusion des chapitres
\include{intro}
 
\include{chap1}
 
\include{chap2}
 
\include{conclu}
 
\appendix
 
\include{annexe}
 
\end{document}

Voici les nouveaux fichiers chap1.tex et chap2.tex, les autres n’ont pas changé :

%
% contenu du fichier chap1.tex
%
\chapter{Premier chapitre}
 
\minitoc
 
\section{Citations}
 
Ici on cite un article de Dudarev\cite{Dudarev1998}, puis un sur 
Bader\cite{Henkelman2006} et un petit dernier\cite{Blochl1994}. 
Le tout pour tester la bibliographie par chapitre.
 
\lipsum[6-8]
 
\section{Paragraphe}
 
\lipsum[9-12]
 
% bibliographie pour chapterbib uniquement
\bibliographystyle{unsrt}
\bibliography{allbiblio}
 
%
% contenu du fichier chap2.tex
%
\chapter{Second chapitre}
 
\minitoc
 
\section{Citations}
 
On remet une petite couche de biblio\cite{Kresse1993}. Toujours pour voir si la
bibliographie est bien par chapitre\cite{Kresse1996}.
 
\lipsum[13-16]
 
\section{Texte}
 
\lipsum[17-21]
 
% bibliographie pour chapterbib uniquement
\bibliographystyle{unsrt}
\bibliography{allbiblio}

Le fichier allbiblio.bib est le même pour les deux chapitres et est identique à celui donné plus haut. Enfin la compilation. Comme précédemment il est possible de compiler avec latex ou pdflatex et il faut compiler plusieurs fois pour que les citations et les références soient bonnes. De plus, comme on a cette fois une bibliographie par chapitre, il faut exécuter bibtex pour chaque chapitre contenant une bibliographie :

  1. (pdf)latex these.tex
  2. (pdf)latex these.tex
  3. bibtex chap1.aux
  4. bibtex chap2.aux
  5. (pdf)latex these.tex
  6. (pdf)latex these.tex

Le résultat est le suivant :

these_chapterbib.pdf

L’ensemble des fichiers :

these_chapterbib.zip

Bonne rédaction !

Bibliographie par section

Suite aux commentaires, voici une bibliographie par section. Dans ce cas j’ai utilisé la classe article au lieu de book. Il ne faut pas oublier le principe de base de chapterbib qui est de créer une bibliographie chaque fois qu’un fichier tex est inclus via la commande include.

L’ensemble des fichiers :

chapterbib_section.zip

vasptools : a package for vasp post treatments

Since may 2014, I did not continue the development of vasptools. I strongly recommend you tu use pymatgen instead.

vasptools is a package wrote in python in order to do pre or post treatments of a VASP calculations. This package contains :

  • python modules : vasptools, crystal, myxml, adsorption
  • several script using vasptools module

Scripts and functions read the data into the vasprun.xml file because it contains both input parameters and the results of a calculations. The main features are :

  • extract or plot density of state
  • extract or plot bands
  • get structural data
  • control convergence
  • a tools to put a molecule at a given position on a slab
  • some simple operation on CHGCAR file (split, sum)

You can find the whole documentation here : vasptools documentation.

vasptools.tar.gz (version 58 : 20/03/2013)

If you want to contribute, please contact me.

data2file : write block data into a file with python

Description

This module provide the function d2f. The aim of d2f is to easily write block data into a
file with a given format and in one line. Maybe d2f looks like the fortran command write.

The up to date version is now on github : data2file

The main advantage of d2f is that you can give the format in a compact way and it avoids redondant
syntax. The syntax for format specification is the folowing :

 nxfmt[[;nxfmt];nxfmt]...

as an example is clearer, this syntax

 2x4d;4x10s;8x8.3f

means that you want d2f to write two integers on four columns, then four strings on ten
columns and then height floating numbers on height columns with three digit after the comma.

Syntax

 d2f(blockdata [, name[, fmt[, header[, overwrite]]]])
  • blockdata (list) : list of data, each element of the list in the first direction will be written on the same line.
  • name (string) : output file name. This could be a path
  • fmt (string) : format specification, example : ‘2x4d;4x10s;8×8.3f’
  • header (string) : will be writtend at the top of the output file
  • overwrite (bool) : if True, if the output file exists it will be overwritten

An example

Assume you have three list objects, l1, l2 and l3 and you want to print l1 on the first column, l2 on the second column and l3 on the third column of an output file called "out.dat". First you have to create a block data object. For that the easiest is to use zip(l1, l2, l3). Assume l1 is an integer, and l2 and l3 are floating numbers. You will use fmt="1x5d;2xf10.4" in order to write l1 as an integer on 5 columns and l2 and l3 as floats on 10 column with 4 digit after the comma. Thus simpliest syntax is :

>>> d2f(zip(l1, l2, l3), fmt = "1x5d;2xf10.4")

If you want to precise a file name :

>>> d2f(zip(l1, l2, l3), name = "output.dat", fmt = "1x5d;2xf10.4")

Python et (g)vim

Je donne ici une configuration et des plugins adaptés à l’écriture de code python avec vi. J’utilise la version graphique de vi : gvim. Ce que je propose ici n’est donc peut être pas commode en pratique avec la version terminal de vi.

plugins :

Voici les plugins vi que j’utilise :

  • comments.vim : permet de commenter ou décommenter une ligne ou un groupes de lignes avec les touches ctrl+C ctrl+X. Ce plugin fonctionne avec tout une liste de langage.
  • jpythonfold.vim : ajoute automatiquement des replis pour les classes / méthodes / fonctions de pythons.
  • pyflakes.vim : vérification au fil de l’eau de la syntaxe python. pyflakes agit à la manière d’un correcteur orthographique et souligne en rouge les lignes de codes incorrectes, les variables inutilisées ou non assignées …

Installation :

Dans un premier temps on installe comments.vim et jpythonfold.vim. S’ils n’existent pas créer les dossiers .vim dans votre dossier utilisateur et un sous dossier plugin

mkdir -pv $HOME/.vim/plugin

Copier simplement les fichiers comments.vim et jpythonfold.vim dans le dossier .vim/plugin.

Pour jpythonfold, il est pratique de ne l’activer que lorsque le fichier est un fichier python. Pour cela l’auteur propose de décommenter certaines lignes dans le fichier jpythonfold.vim. C’est aux alentours de la ligne 40. Chez moi ça n’a pas fonctionné. En m’inspirant de ce qui est fait dans comments.vim, je vous propose de mettre ces lignes à la suite de celles proposées en laissant celles qui étaient proposées par l’auteur commentées.

let file_name = buffer_name("%")
if file_name =~ '\.py$'
else
    finish
endif

C’est assez simple à comprendre, si le nom de votre fichier se termine par .py alors le plugin est activé.

Pour installer pyflakes, la procédure est expliquée sur la page du plugin. S’ils n’existent pas créer les dossiers ftplugin et python respectivement dans les dossiers $HOME/.vim et ftplugin :

mkdir -pv $HOME/.vim/ftplugin/python

Après avoir téléchargé l’archive de pyflakes, extraire le contenu dans $HOME/.vim/ftplugin/python. Il faut ensuite activer les ftplugin (pour File Type Plugin) qui assure le chargement du plugins en fonction du fichier considéré. S’il n’existe pas, créer le fichier .vimrc dans votre dossier utilisateur et ajouter la ligne suivante à l’intérieur :

filetype plugin indent on

Configuration supplémentaires de vi

Le fichier .vimrc permet de configurer (g)vim à votre gout. Voici quelques options spécifiques à la programmation qui peuvent être intéressantes :

syntax on               " coloration syntaxique
set showmatch        " affiche les paires de parenthese
 
" pour l'indentation
set autoindent		" copy indent from the current line to the new line
set smartindent		" automatically indent a line depending on previous line
set expandtab           " remplace les tab par des espaces
set shiftwidth=4        " indentation = 4 espaces
 
" encodage
set encoding=utf-8
 
" une abreviation
ab pcom # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Pour plus d’options de configurations de (g)vim, vous pouvez voir cet article.

Bonne programmation !

Configuration de vim

Voici le contenu de mon fichier .vimrc. Cette configuration n’est pas la meilleure puisqu’elle est adaptée à ma façon de faire mais vous trouverez peut être des exemples pour construire votre propre configuration.

La fin du fichier concerne l’utilisation de vim-latex. Il s’agit d’un plugin pour vi ajoutant des fonctionnalités intéressantes pour l’écriture de fichiers latex avec vi. Ce plugin est disponible dans les dépôts ubuntu officiels ou directement sur le site du plugin.

" --------------------------------------------------------------------
"  abandonne les regles de vim anciennes versions
" --------------------------------------------------------------------
set nocompatible
set backspace=2	" pour un fonctionnement correct du backspace
 
" --------------------------------------------------------------------
"  COULEURS:
" --------------------------------------------------------------------
colorscheme default
highlight IncSearch term=underline ctermbg=LightGreen ctermfg=NONE guibg=LightGreen guifg=NONE
highlight Search term=underline ctermbg=LightGreen ctermfg=NONE guibg=LightGreen guifg=NONE
highlight Cursor guifg=white guibg=grey30 
highlight CursorLine term=underline cterm=underline guibg=#F4F4F4
highlight CursorColumn term=NONE ctermbg=grey guibg=#F4F4F4
highlight StatusLine term=reverse,bold cterm=reverse,bold gui=italic guibg=SteelBlue guifg=white
highlight StatusLineNC term=reverse cterm=reverse gui=italic guibg=grey75 guifg=SteelBlue
highlight Error gui=bold guifg=red guibg=yellow
 
" --------------------------------------------------------------------
"  RECHERCHE:
" --------------------------------------------------------------------
set hlsearch	" active surbrillance
set incsearch	" se deplace pendant la frappe
set ignorecase	" ignore la casse
 
" --------------------------------------------------------------------
"  STATUS LINE:
" --------------------------------------------------------------------
set ruler          " Affiche le numero de la ligne/colonne
set showmode       " Affiche le mode courant
set showcmd        " Affiche des commandes
set laststatus=2   " affiche la status line
set statusline=fichier:\ %m\%F\ %y\ %=\ ligne\ %l\ colonne\ %c\ --\%P\--
 
" --------------------------------------------------------------------
"  APPARENCE:
" --------------------------------------------------------------------
syntax on                    " coloration syntaxique
let fortran_free_source=1    " fortran syntax is free format (f90)
 
set visualbell t_vb=	" pas de message sonore ni visuel
			" When the GUI starts, 't_vb' is reset to its default value.
			" You have to set it again in your gvimrc
set nowrap		" pas de retour à la ligne
set textwidth=90	" coupe la ligne si elle depasse 90 caractères
set showmatch		" affiche les paires de parenthese
set cursorline		" highlight current line
set autoindent		" copy indent from the current line to the new line
set smartindent		" automatically indent a line depending on previous line
set expandtab           " remplace les tab par des espaces
set shiftwidth=4        " indentation = 4 espaces
set encoding=utf-8
" set guifont=Mono\ 9
 
" --------------------------------------------------------------------
"  SOURIS:
" --------------------------------------------------------------------
set mouse=a             " active le deplacement a la souris
 
" --------------------------------------------------------------------
"  ABBREVIATIONS ET RACCOURCIS CLAVIER:
" --------------------------------------------------------------------
ab ccom /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
ab fcom ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ab lcom % * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ab pcom # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
" mise a zero du champ de recherche avec F2 : supprime la surbriallance apres la recherche
nnoremap <silent> <F2> :silent noh<cr>
 
" nouvel onglet
map <C-n> <Esc>:tabnew<cr>
" navigateur de fichier
map <C-e> <Esc>:Exp<cr>
" sauvegarde
map <C-s> <Esc>:w<cr>
" tout selectionner
map <c-a> ggVG
 
" --------------------------------------------------------------------
"  ORTHOGRAPHE:
" --------------------------------------------------------------------
" set spell
" set spelllang=fr
map <F3> :setlocal spell spelllang=fr<cr>
map <F4> :set nospell<cr>
 
" --------------------------------------------------------------------
"  PLUGINS:
" --------------------------------------------------------------------
" charge le bon plugin à l'ouverture du fichier
filetype on
filetype plugin on
 
" --------------------------------------------------------------------
"  VIMLATEX:
" --------------------------------------------------------------------
" PATH: ajout dans le path pour chercher vim-latex-suite
" set runtimepath+=/usr/share/vim/addons/
 
" IMPORTANT: win32 users will need to have 'shellslash' set so that latex
" can be called correctly.
" set shellslash
 
" IMPORTANT: grep will sometimes skip displaying the file name if you
" search in a singe file. This will confuse Latex-Suite. Set your grep
" program to always generate a file-name.
set grepprg=grep\ -nH\ $*
 
" OPTIONAL: This enables automatic indentation as you type.
"filetype indent on
 
" OPTIONAL: Starting with Vim 7, the filetype of empty .tex files defaults to
" 'plaintex' instead of 'tex', which results in vim-latex not being loaded.
" The following changes the default filetype back to 'tex':
let g:tex_flavor='latex'
 
" TIP: if you write your \label's as \label{fig:something}, then if you
" type in \ref{fig: and press <C-n> you will automatically cycle through
" all the figure labels. Very useful!
autocmd FileType *.tex set iskeyword+=: 
" => conflit avec else: de python
 
" REPLIS: vim-latex replis automatiquement certaines sections et environnements
" ou commandes. La liste de ce qui doit être replié est géré par les varibales
" globales suivantes. Les replis se font en partant de la fin de la liste puis
" en remontant. Les defaut sont dans folding.vim (~/.vim/ftplugin/latex-suite/)
let g:Tex_FoldedSections="part,chapter,section,%%fakesection,subsection"
let g:Tex_FoldedEnvironments="verbatim,comment,eq,align,figure,table,tabular,tikzpicture,thebibliography,abstract,frame"
let g:Tex_FoldedMisc = 'preamble,<<<'
 
" COMPILATION VISUALISATION: par defaut on compile avec pdflatex et on utilise
" pour visualiser les pdf : evince
let g:Tex_DefaultTargetFormat="pdf"
let g:Tex_ViewRule_pdf = "evince"
let g:Tex_CompileRule_pdf="pdflatex -shell-escape -interaction=nonstopmode $*"

J’utilise les plugins :

Fichier .bashrc, alias et fonctions

Voici quelques alias ou fonction que j’utilise dans le fichier .bashrc ou .profile. Dans un terminal linux, un alias est une sorte de raccourcis permettant de créer des commandes personnelles. L’intérêt d’un alias est de regrouper dans une commande simple une commande ou un ensemble de commandes plus complexes ou comportant de nombreuses options que vous utilisez fréquement. Pour aller plus loin, les fonctions bash permettent de gérer les arguments de cette commandes personnelles.

# Alias basiques
alias ll='ls -lrth'
alias la="ls -a"
alias cp="cp -ip"
alias mv="mv -i"
alias clr="clear; pwd; ls -lrth"
alias le="less"
 
# une fonction pour faire un cd suivi d'un ls
function cl { 
    cd $* && ls 
}
 
alias vi="gvim -geometry 120x50"
alias orthographe="aspell -t check --lang=fr"
 
# fonction pour suivre une commande
function suivre { 
    gnome-terminal -e "watch -n1 $*" 
}
 
# cleantex, fonction pour nettoyer les fichiers output de latex
function cleantex {
    rm -vf $1.aux $1.log $1.out $1.bbl $1.toc $1.lof $1.lot $1.snm $1.nav $1.vrb $1.blg
}
 
# quelque options de compilation
alias gfcomp="gfortran -o exe -g -fbounds-check -fbacktrace -Wall"
alias ifcomp="ifort -o exe -g -traceback -check bounds -check uninit -warn unused"
alias compc="gcc -o exe -O1 -lm -W -Wall -Wuninitialized -fbounds-check "

Il est souvant pratique de faire des alias pour se connecter à diverses machines avec ssh. Une autre possibilité est l’utilisation de sshfs. Cette commande permet de monter un dossier d’une autre machine. Le montage est possible si la machine est accessible par ssh, il est donc inutile de faire un montage réseau. Vos fichiers de la machine distante sont alors accessible depuis votre machine locale comme s’il s’agissait d’une clef usb ou d’un dossier quelconque. Attention, je pense qu’il est quand même préférable que l’id utilisateur soit le même sur la machine distante et la machine locale si vous voulez écrire dans les fichiers de la machine distante.

# connexions ssh
alias machine="ssh -Y user@machine"
 
# montage ssh d'un dossier avec sshfs. Cette commande montera votre dossier 
# utilisateur de la machine distante sur le dossier machine de votre ordinateur
# local.
alias mntmachine="sshfs user@machine:/home/user/ /home/user/machine/"

La variable PATH contient la liste des dossiers dans lesquels se trouvent les exécutables. Si vous voulez installer des programmes ou scripts personnels, mettez les dans un dossier et ajoutez ce dossier à PATH.

# rajout d'un dossier dans le PATH.
export PATH=/home/user/bin/:$PATH

Pour pouvoir utiliser mes modules python n’importe où, je les ai tous mis dans un même dossier et les lignes suivantes ajoutent ces dossiers à la variable PYTHONPATH. Lors de l’importation d’un module, python cherche parmi les dossiers contenu dans PYTHONPATH s’ils contiennent ce module.

# python : recuperation des dossiers contenant les classes python
classDir="/home/user/Python/classes/"
liste=`ls $classDir`
monpath="$classDir:"
for dossier in $liste
do
	monpath="$classDir$dossier:$monpath"
done
export PYTHONPATH=$PYTHONPATH:$monpath

Pour la personnalisation du prompt

  • \e ou \033 sequence d’echappement pour les couleurs
  • \[ \] début et fin de texte non imprimable
  • format : [ format texte ; couleur1; couleur2 m

J’avais utlisé ce lien pour écrire les lignes ci-dessous : Mettez de la couleur dans votre prompt.

# prompt
PS1="\[\e[0;32m\]\n# \u@\h \[\e[1;33m\] \w\[\e[0m\]\n> "
 
# autre variante :
PS1="\[\e[0;34m\]\n# \u@\h \[\e[1;33m\] \w\[\e[0m\]\n> "
 
# sans couleur :
#PS1="[\u@\h \W]> "

Mesoscopic simulations of shock-to-detonation transition in reactive liquid high explosive

Abstract :

An extension of the model described in a previous work (see Maillet J. B. et al., EPL, 78 (2007) 68001) based on Dissipative Particle Dynamics is presented and applied to a liquid high explosive (HE), with thermodynamic properties mimicking those of liquid nitromethane. Large scale nonequilibrium simulations of reacting liquid HE with model kinetic under sustained shock conditions allow a better understanding of the shock-to-detonation transition in homogeneous explosives. Moreover, the propagation of the reactive wave appears discontinuous since ignition points in the shocked material can be activated by the compressive waves emitted from the onset of chemical reactions.

Maillet, J.; Bourasseau, E.; Desbiens, N.; Vallverdu, G. & Stoltz, G. Mesoscopic simulations of shock-to-detonation transition in reactive liquid high explosive EPL, 2011, 96, 68007

Guide pour tracer des graphiques en coordonnées polaires ou sphériques

Pour tracer un graphique en utilisant les coordonnées polaires le quadrillage habituel (feuille à carreaux, papier millimétré …) n’est pas adapté car il est fait pour des coordonnées cartésiennes. Les codes des figures que je donne ici permettent de tracer des guides qui facilitent le tracé de courbes en coordonnées polaire.

Guide pour tracer des courbes en coordonnées polaires

Lorsqu’on utilise les coordonnées sphériques, on peut choisir de tracer la fonction dans un plan de l’espace, par exemple le plan (xOz). En coordonnées sphériques, l’angle \theta n’est pas défini de la même manière qu’en coordonnées polaires. Il faut donc faire quelques modifications. Voici ci-dessous un exemple de tracé de la partie angulaire de l’orbitale atomique d_{z^2} dans le plan (xOz) en coordonnées sphériques.

orbitale atomique dz2 tracée avec tikz

Le fichier polar_graph.tex ci-dessous contient :

  • Le guide pour tracer des courbes en coordonnées polaires
  • Le guide pour tracer des courbes en coordonnées sphériques dans le plan (xOz)
  • L’exemple de dessin de la partie angulaire de l’orbitale atomique d_{z^2}

Fichier source : polar_graph.tex

Fichier pdf : polar_graph.pdf

Ci-dessous un script en python qui permet de faire un graphique en coordonnées polaires en utilisant la librairies matplotlib. Le défaut est que c’est un graphique en coordonnées polaires, donc du fait de la définition de l’angle \theta, l’axe z est horizontal.

orbitale atomique dz2 tracée avec python

script : dz2.py

Classification périodique des éléments

Sur le site texample.net, Ivan Griffin a proposé un code tikz pour une très jolie classification périodiques des éléments.

Classification périodique des éléments

J’ai repris ce code et j’ai fait quelques petites modifications :

  • Traduction en français de la légende.
  • Des tableaux simplifiés en noir et blanc avec le nom des principales familles d’éléments chimiques.
  • Dessin de la séparation entre les métaux et non métaux suivant la règle de Sanderson.

Le fichier source et le fichier pdf ci-dessous contiennent les tableaux périodiques.

Fichier source : classification.tex

Fichier pdf : classification.pdf

Orbites de l’atome de Bohr

Niels Bohr (1885 – 1962) était un physicien danois. Il est l’un des premiers à avoir introduit la notion de quantification de l’énergie à l’échelle microscopique. Ces travaux furent un point de départ pour le développement de la mécanique quantique.

Modèle de Bohr de l'atome d'hydrogène

Le modèle de Bohr est un modèle planétaire de l’atome tel que celui de Rutherford. Bohr ajouta cependant plusieurs hypothèses :

  • L’électron ne peut se trouver que sur des orbites stables où il ne rayonne aucune énergie.
  • Ces orbites stables sont telles que m_e v R = n \hbar , où R est le rayon de l’orbite, v la vitesse de l’électron et n un nombre entier strictement positif. \hbar = h/2\pi, avec h la constante de Planck.
  • L’électron n’absorbe ni ne rayonne d’énergie que lors d’un changement d’orbite.

En introduisant ces hypothèses dans les équations du mouvement classiques de l’électron autour d’un proton, on obtient que le rayon des orbites de Bohr est donné par n^2 a_o, où a_o est appelé rayon de Bohr et vaut 0.529 \AA soit 0.529e-10 m.

Fichier source : atome_bohr.tex

Fichier pdf : atome_bohr.pdf

Le script ci-dessous, écrit en python, utilise la bibliothèque mathplotlib pour tracer les n premières orbites de Bohr et suivre l’évolution du rapport et de la différence entre deux rayons de Bohr consécutifs.

script : r.py