Afficher (franchement) des zones de saisie de texte

Pour construire un document aux allures de formulaire sous LaTeX, il est de bon goût d’utiliser l’environnement form, comme je l’expliquais ici, permettant ainsi de pouvoir remplir ledit formulaire depuis le lecteur PDF.

Toutefois, un de mes lecteurs m’a demandé comment réaliser un formulaire ayant des champs très « marqués », comme illustré ci-après :

ExempleForm

Après réflexion, il m’est apparu que cette réalisation n’allait pas être aisée en passant par l’environnement form, à moins d’être vraiment à l’aise avec le CSS/JavaScript.

Solution proposée

Le plus simple est donc d’utiliser intelligemment des environnements tabular :

\usepackage{array}
 
\newcommand{\cForm}[1]{
	\renewcommand{\arraystretch}{0.5}	% hauteur des séparateurs extérieurs
	\begin{tabular}{@{}|c@{}|}
		\hspace*{#1ex}\\
	  	\hline
	\end{tabular}
}
 
\newcolumntype{h}{@{}|>{\hspace*{1ex}}c}	
\newcommand{\sForm}{
	\renewcommand{\arraystretch}{0.5}
	\begin{tabular}{hhhhhhhhhh@{}|}
		&&&&&\\	% Il faut n-1 spérateurs '&' pour afficher n champs
		\hline
	\end{tabular}
} 
\begin{document}
	Je soussigné M.~\cForm{10} accuse réception du courrier daté du \sForm et envoyé par M.~\cForm{10}.
\end{document}

Utilisation

La commande \cForm prend en argument la largeur des champs (en hauteur d’x, ce qui permet de s’adapter à la taille de la police).

Quant à la commande \sForm, elle ne prend pas d’argument, car une automatisation de la largeur serait plus complexe (on pourrait par exemple utiliser le package forloop pour générer autant de boucles que de cases dans le champ). Le nombre de cases affichées est alors défini par le nombre de séparateurs dans le tableau de la macro (« & »).

Remarques

\renewcommand{\arraystretch}{0.5}

Cette commande permet de redéfinir la hauteur par défaut des colonnes. Sans celle-ci, les bordures latérales seraient trop hautes et notre formulaire serait très moche.

La commande @{} supprime l’espacement entre les colonnes.

\newcolumntype{h}{@{}|>{\hspace*{1ex}}c}

On définit ici un nouveau type de colonne (noté « h », en complément des habituels l, c et r. Cette commande requiert le package array). On impose ici, comme on vient de le voir, un espacement nul avant le séparateur. La commande >{\commande} juste après ce dernier indique quelle sera la commande à exécuter sur toute la colonne. Bon, dans le cas présent, on a qu’une seule ligne, donc l’intérêt est assez limité, mais j’ai profité du fait qu’on définissait un nouveau type de colonne pour condenser un peu mon code.

 
Bien entendu, ce n’est qu’une solution parmi tant d’autres, libre à vous de réfléchir à d’autres méthodes plus ou moins élégantes, plus ou moins efficaces !