alignement du texte dans un tableau

9 views
Skip to first unread message

François Patte

unread,
May 2, 2021, 8:36:03 AMMay 2
to
Bonjour,

J'ai quelques difficultés à obtenir ce quee je veux avec un tableau.

Soit trois colonnes. La colonne centrale comporte du texte en paragraphe
sur plusieurs lignes. La première et la troisième colonne comporte du
texte sur une seule ligne.

Je voudrais que le texte de la première colonne soit aligné avec la
première ligne de la colonne centrale et le texte de la troisième
colonne soit aligné avec la dernière ligne de la colonne centrale.

texte 1 | paragraphe
paragraphe
paragraphe | texte 3

le tableau a comme entête:

\begin{longtable}{c p{3cm} c}

Que je mette p{3cm} ou b{3cm}, c'est la colonne centrale qui "gagne":
les 2 autres colonnes sont alignées en haut ou en bas.

Si je fait:
\begin{longtable}{p{1cm} p{3cm} b{1cm}
}

ou
\begin{longtable}{p{1cm} b{3cm} b{1cm}
}

C'est tjrs la colonne centrale qui gagne...

Même chose en faisant d'autres combinaisons.

Y a-t-il une solution?

Merci.

--
François Patte
Université Paris Descartes

Ulrike Fischer

unread,
May 2, 2021, 8:46:51 AMMay 2
to
Am Sun, 2 May 2021 14:36:01 +0200 schrieb François Patte:

> Bonjour,
>
> J'ai quelques difficultés à obtenir ce quee je veux avec un tableau.
>
> Soit trois colonnes. La colonne centrale comporte du texte en paragraphe
> sur plusieurs lignes. La première et la troisième colonne comporte du
> texte sur une seule ligne.
>
> Je voudrais que le texte de la première colonne soit aligné avec la
> première ligne de la colonne centrale et le texte de la troisième
> colonne soit aligné avec la dernière ligne de la colonne centrale.

l'aligment n'est pas une relation entre les colonnes, mais une
relation d'une colonne avec la ligne de base.

https://tex.stackexchange.com/a/594620/2388

> Y a-t-il une solution?

nest des tableaus ou utilise \llap. Et considère de montrer des
examples complets. Moi au moins, je n'ai pas envie d'écrire tous le
temps le code moi-même pour tester des questions ou des solutions.

--
Ulrike Fischer
https://www.troubleshooting-tex.de/

Stéphane CARPENTIER

unread,
May 2, 2021, 9:10:06 AMMay 2
to
Le 02-05-2021, François Patte <francoi...@mi.parisdescartes.fr> a écrit :
>
> Que je mette p{3cm} ou b{3cm}, c'est la colonne centrale qui "gagne":
> les 2 autres colonnes sont alignées en haut ou en bas.
>
> Si je fait:
> \begin{longtable}{p{1cm} p{3cm} b{1cm}
> }
>
> ou
> \begin{longtable}{p{1cm} b{3cm} b{1cm}
> }
>
> C'est tjrs la colonne centrale qui gagne...
>
> Même chose en faisant d'autres combinaisons.
>
> Y a-t-il une solution?

Je ne connais pas longtable, j'ai regardé un peu la doc et je ne l'aime
pas (la doc, pas le package). J'ai l'impression qu'il n'est pas possible
d'utiliser les options t, b et c de tabular.

Si tu mets des \vfill ou \hfill bien placés, ça peut t'aider ?

--
Si vous avez du temps à perdre :
https://scarpet42.gitlab.io

François Patte

unread,
May 2, 2021, 12:20:51 PMMay 2
to
Le 02/05/2021 à 14:46, Ulrike Fischer a écrit :
> Am Sun, 2 May 2021 14:36:01 +0200 schrieb François Patte:
>
>> Bonjour,
>>
>> J'ai quelques difficultés à obtenir ce quee je veux avec un tableau.
>>
>> Soit trois colonnes. La colonne centrale comporte du texte en paragraphe
>> sur plusieurs lignes. La première et la troisième colonne comporte du
>> texte sur une seule ligne.
>>
>> Je voudrais que le texte de la première colonne soit aligné avec la
>> première ligne de la colonne centrale et le texte de la troisième
>> colonne soit aligné avec la dernière ligne de la colonne centrale.
>
> l'aligment n'est pas une relation entre les colonnes, mais une
> relation d'une colonne avec la ligne de base.
>
> https://tex.stackexchange.com/a/594620/2388

Merci! Je comprends mieux le comportement.

>
>> Y a-t-il une solution?
>
> nest des tableaus ou utilise \llap.

Avec \llap ou \rlap, je vais avoir des problèmes avec les alignements
horizontaux d'une ligne à l'autre...

> Et considère de montrer des
> examples complets. Moi au moins, je n'ai pas envie d'écrire tous le
> temps le code moi-même pour tester des questions ou des solutions.

Il ne m'est pas possible de montrer un exemple de code de ce que je
voudrais faire puisque, justement, je n'y arrive pas. Et je ne cherche
pas à ce que quelqu'un écrive du code à ma place, mais s'il y a une voie
à suivre pour y arriver.
Par exemple, y aurait-il un package qui permettrait d'avoir la hauteur
des cellules d'une ligne d'un tableau alignée sur la plus "haute"
cellule (celle qui comporte le plus de lignes).

Jean-Côme Charpentier

unread,
May 2, 2021, 5:41:24 PMMay 2
to
Le 02/05/2021 à 15:10, Stéphane CARPENTIER a écrit :
> Le 02-05-2021, François Patte <francoi...@mi.parisdescartes.fr> a écrit :

Salut tout le monde,

>> Que je mette p{3cm} ou b{3cm}, c'est la colonne centrale qui "gagne":
>> les 2 autres colonnes sont alignées en haut ou en bas.
>> [...]
>>
>> Y a-t-il une solution?

TeX est turing-complet :-)

> Je ne connais pas longtable, j'ai regardé un peu la doc et je ne l'aime
> pas (la doc, pas le package). J'ai l'impression qu'il n'est pas possible
> d'utiliser les options t, b et c de tabular.

longtable n'est pour rien dans l'histoire. C'est vrai que la doc de
longtable n'est pas tip top :-) Les options d'un tabular c'est pour
placer le tableau entier, pas des bouts de l'intérieur du tableau. Je ne
sais pas ce que tu veux faire avec les option t, b et c mais c'est sûr
que sur un longtable, cela n'a pas de sens puisque la structure est
destinée à être répartie sur plusieurs pages.

Fondamentalement, c'est ce qu'à dit Ulrike : ces options (celles des
colonnes) s'appliquent à la cellule elle-même, pas au tableau : elle
fait que le bloc paragraphe sera aligné sur la ligne de base au niveau
de sa première ligne, de sa dernière ligne ou au centre (selon l'option
choisie). Les colonnes de type c, r ou l ne sont pas du type paragraphe
donc seront systématiquement alignées au niveau de leur ligne de base.
En particulier deux cellules de type c, r ou l seront forcément alignées
verticalement.

> Si tu mets des \vfill ou \hfill bien placés, ça peut t'aider ?

Je ne pense pas que ce soit une voie possible mais les possibilités
de coder sont tellement importante :-)

Le problème, c'est qu'on veut courir après deux lièvres en même temps
: garder la propriété de la colonne c (ou r ou l) qui est de s'adapter
à la largeur de son contenu et pouvoir positionner la chose comme s'il
s'agissait d'un paragraphe. Fondamentalement, ce n'est pas possible donc
il va falloir tricher un peu.

L'idée est de créer une boîte ayant une hauteur bien plus grande que
son contenu et de pousser ledit contenu avec un cht'it coup de \vss. Il
faut prendre quelques précautions car à l'intérieur d'un tableau, les
hauteurs « normales » de lignes peuvent être un peu modifiées. Voici un
premier essai assez TeXiens.

-----%<----------%<----------%<----------%<----------%<----------%<-----
\documentclass[12pt]{article}

\newlength{\hauteur}
\newcommand\abaisse[2]{%
\setlength{\hauteur}{%
\dimexpr \arraystretch\ht\strutbox+\arraystretch\dp\strutbox
}%
\setbox2=\hbox{#1}%
\setbox0=\hbox to\wd2{%
\hsize=\wd2
\vtop to \dimexpr \hauteur*#2{%
\vss
\hbox{#1}%
}%
}%
\box0
}

\begin{document}
\begin{tabular}{|c|p{3cm}|c|}
\hline
texte & encore & un peu long pour le centrage \\\hline
en haut
&
paragraphe
paragraphe
paragraphe
&
\abaisse{en bas}{2}
\\\hline
\end{tabular}
\end{document}
-----%<----------%<----------%<----------%<----------%<----------%<-----

Dans ce code, comme la cellule centrale fait trois lignes de hauteur, il
faut abaisser celle de droite de 2 lignes pour la faire arriver en bas.
Je ne sais pas si je suis bien clair ?
Le code est loin d'avoir été testé intensément : je ne garantis pas
l'absence de bug !

Jean-Côme Charpentier

--
C'est bien d'être un peu farfelu pour pondre du code !
-+- Jean-Côme in fr.comp.text.tex -+-

Vincent Belaïche

unread,
May 3, 2021, 4:11:33 AMMay 3
to
François Patte <francoi...@mi.parisdescartes.fr> writes:

> Bonjour,

[...]

>
> texte 1 | paragraphe
> paragraphe
> paragraphe | texte 3
>
> le tableau a comme entête:
>
> \begin{longtable}{c p{3cm} c}
>
> Que je mette p{3cm} ou b{3cm}, c'est la colonne centrale qui "gagne":
> les 2 autres colonnes sont alignées en haut ou en bas.
>
> Si je fait:
> \begin{longtable}{p{1cm} p{3cm} b{1cm}
> }
>
> ou
> \begin{longtable}{p{1cm} b{3cm} b{1cm}
> }
>
> C'est tjrs la colonne centrale qui gagne...
>
> Même chose en faisant d'autres combinaisons.
>
> Y a-t-il une solution?
>
> Merci.

As-tu essayé avec cals ? En commençant le contenu d'une cellule par
\vfill on le centre verticalement.

V.

Ulrike Fischer

unread,
May 3, 2021, 5:20:57 AMMay 3
to
Am Sun, 2 May 2021 18:20:49 +0200 schrieb François Patte:

>> Et considère de montrer des
>> examples complets. Moi au moins, je n'ai pas envie d'écrire tous le
>> temps le code moi-même pour tester des questions ou des solutions.
>
> Il ne m'est pas possible de montrer un exemple de code de ce que je
> voudrais faire puisque, justement, je n'y arrive pas.

Le fait que tu ne connais pas la solution complète ne veux pas dire
que tu ne peux pas fournir quelque chose d'utile.

Rien ne t'empeches de montrer un example complet qui ne marche pas
ou seulement en part et normalement c'est plus facile de corriger et
de extendre du code que de l'écrire à partir de zéro.

--
Ulrike Fischer
http://www.troubleshooting-tex.de/

Jean-Côme Charpentier

unread,
May 3, 2021, 1:52:16 PMMay 3
to
Le 03/05/2021 à 10:11, Vincent Belaïche a écrit :
> François Patte <francoi...@mi.parisdescartes.fr> writes:
>
>> Merci.
>
> As-tu essayé avec cals ? En commençant le contenu d'une cellule par
> \vfill on le centre verticalement.

Je ne connaissais pas mais avec cals, je doute fortement qu'on puisse
intégrer ça à un longtable (ou alors en mettant un coltabs dans un
longtable) et, surtout, tous les exemples demandent de spécifier les
largeurs des colonnes ce qui me semblait justement devoir être évité. Il
faudrait que François fasse signe pour dire ce qu'il est prêt à
sacrifier et ce qui est incontournable.

Jean-Côme Charpentier

--
Ah, j'te jure : au moins, sur word, on se casse pas la tête puisque
c'est nul de toute façon.
-+- Téhessin in fr.comp.text.tex -+-

François Patte

unread,
May 4, 2021, 3:30:08 AMMay 4
to
Tout à fait clair! Et efficace, c'est ce que je cherchais et, autant que
j'ai pu tester ce code pour mes besoins actuels, je n'ai pas (encore)
rencontré de bugs.

Je n'ai, pour l'instant, testé qu'avec une seule colonne de type
"paragraphe", mais avec plusieurs colonnes de style "normal" et cela
fonctionne aussi.

Je vais sans doute avoir besoin de déclarer des "newcolumntype", je
rendrai compte du résultat à ce moment.

Ce pourrait être intéressant de rendre ce code accessible dans les
environnements de type "tabular" car il me semble avoir rencontré des
questions analogues à la mienne sur internet sans, toutefois, avoir
trouvé de solution.

Merci!

Vincent Belaïche

unread,
May 12, 2021, 1:35:06 PMMay 12
to
Ach so, n'y a pas déjà un paquet vcell (comme faire la vaisselle) qui fait
ça, mais avec une astuce de remettre dans une ligne suivante le contenu
de la ligne précédente bien alignée verticalement comme tu veux …

V.
--
Reply all
Reply to author
Forward
0 new messages