Alignement vertical dans multicol avec item

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
pianiste06
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 161
Inscription : mardi 05 mai 2020, 08:29

Alignement vertical dans multicol avec item

Message non lu par pianiste06 »

Bonjour,

J'ai utilisé le package multicol et je souhaite faire des item avec des équations.
Mais les items ne s'alignent pas verticalement.

Voici le code simplifié :

Code : Tout sélectionner

\documentclass {article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{enumitem}
\begin{document}

\begin{multicols}{2}
\begin{enumerate}[font=\bfseries ,label=\alph*), leftmargin=*, noitemsep]
\item $\lim\limits_{x \rightarrow a}\dfrac{f(x}{g(x)}=0^+$

\item $\lim\limits_{x \rightarrow a}\dfrac{f(x}{g(x)}=+\infty$

\columnbreak

\item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=0^+$

\item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=+\infty$


\end{enumerate}
\end{multicols}


\end{document}
Quelqu'un aurait-il une idée pour qu'il y ait un alignement vertical des item ?

Voici en pièce jointe le pdf pour le visuel.

D'avance merci.


Franck
Pièces jointes
Testalign.pdf
(53.15 Kio) Téléchargé 40 fois
balf
Modérateur spécialisé
Modérateur spécialisé
Messages : 4065
Inscription : mercredi 02 janvier 2008, 23:18

Re: Alignement vertical dans multicol avec item

Message non lu par balf »

Bonjour,
Vous voulez sans doute parler de l'alignement horizontal ?
pianiste06
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 161
Inscription : mardi 05 mai 2020, 08:29

Re: Alignement vertical dans multicol avec item

Message non lu par pianiste06 »

Bonjour,

Oui, désolé, je parlais de l'alignement horizontal. C'est à dire que l'item b) soit au même niveau que l'item d)

Avez vous une idée ?
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Alignement vertical dans multicol avec item

Message non lu par un bon petit »

C'est le \splittopskip qui a une valeur trop faible à cause de la grande hauteur de la première ligne.
Comme le package multicol rend \splittopskip égal à \topskip, il faut donc augmenter le \topskip (localement, évidemment) !
Juste au début de l'environnement multicol, essayer différentes valeurs de \topskip, par exemple \topskip=20pt
balf
Modérateur spécialisé
Modérateur spécialisé
Messages : 4065
Inscription : mercredi 02 janvier 2008, 23:18

Re: Alignement vertical dans multicol avec item

Message non lu par balf »

En utilisant l'environnement minipage et non multicol, on peut obtenir un alignement correct (pour autant que j'aie bien compris le problème), avec ce code :

Code : Tout sélectionner

\documentclass {article}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{enumitem}

\begin{document}

\noindent
\begin{minipage}[t]{0.48\textwidth}
\begin{enumerate}[font=\bfseries ,label=\alph*), leftmargin=*, noitemsep, series=TC]
\item $\lim\limits_{x \rightarrow a}\dfrac{f(x}{g(x)}=0^+$

\item $\lim\limits_{x \rightarrow a}\dfrac{f(x}{g(x)}=+\infty$
\end{enumerate}
\end{minipage}
\hfill
\begin{minipage}[t]{0.48\textwidth}
\begin{enumerate}[resume*=TC]
\item $\vphantom{\dfrac{f(x}{g(x)}}\lim\limits_{x \rightarrow a}f(x)\times g(x)=0^+$

\item $\vphantom{\dfrac{f(x}{g(x)}}\lim\limits_{x \rightarrow a}f(x)\times g(x)=+\infty$
\end{enumerate}
\end{minipage}

\end{document} 
Le résultat en pièce jointe.

Sans rapport avec le problème : j'ai supprimé le chargement d'inputenc qui est inutile puisque cela fait déjà quelques que LaTeX attend par défaut l'encodage utf8.

Autre problème : J'ai inséré dans le second environnement de liste un \vphantom{\dfrac{f(x)}{g(x)} pour chacun des items, qui disparaît de l'affichage pour une raison que l'ignore.
Pièces jointes
alignement_dans_multicol.pdf
(68.96 Kio) Téléchargé 33 fois
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Alignement vertical dans multicol avec item

Message non lu par un bon petit »

balf a écrit : mercredi 11 mai 2022, 16:50 En utilisant l'environnement minipage et non multicol, on peut obtenir un alignement correct (pour autant que j'aie bien compris le problème), avec ce code :
Mouais. Sauf que multicol fonctionne de la façon suivante : on met le tout dans une \vbox. On la coupe en plusieurs \vbox que l'on met côte à côte. C'est ultra-schématique, mais c'est ça.

Et une minipage n'est rien d'autre qu'une \vbox. Donc, les mêmes problèmes vont apparaitre puisque c'est la même chose, mais fait à la main.

Ce que j'en dis est que se servir d'un environnement multicol pour écrire des questions sur plusieurs colonnes est utiliser le mauvais outil.
Pour ce genre de choses, sans vouloir faire de pub, il y a le package hlist pour TeX (et en cherchant, il y a d'autres packages qui font des trucs équivalents).
pianiste06
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 161
Inscription : mardi 05 mai 2020, 08:29

Re: Alignement vertical dans multicol avec item

Message non lu par pianiste06 »

Merci pour votre aide à tous, je vais faire des essais pour voir ce qui marche le mieux.

Je ne connaissais pas le package hlist. Il est simple d'utilisation ?
A tout hasard, auriez vous un exemple où vous l'utilisez avec des item ?

Bonne journée à vous,

Franck
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Alignement vertical dans multicol avec item

Message non lu par un bon petit »

pianiste06 a écrit : mercredi 11 mai 2022, 17:40 A tout hasard, auriez vous un exemple où vous l'utilisez avec des item ?
Il y a un manuel avec des exemples. Comme dans toutes les documentations. Il vous faudra le lire.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2703
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Alignement vertical dans multicol avec item

Message non lu par gigiair »

Une solution un (peu bourrine) consiste à ajouter dans chaque ligne de la colonne de droite un étai qui a la même hauteur et la même profondeur que celle de droite. Ça tombe bien que les deux lignes de gauche aient les mêmes dimensions.

Code : Tout sélectionner

\documentclass {article}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{enumitem}
\usepackage{calc}

\begin{document}
\newsavebox{\masb}
\savebox{\masb}{$\lim\limits_{x \rightarrow a}\dfrac{f(x}{g(x)}=0^+$}
\newlength{\mahh}
\newlength{\madd}
\settoheight{\mahh}{\usebox{\masb}}
\settodepth{\madd}{\usebox{\masb}}

\newcommand*{\etai}{\rule[-\madd]{0pt}{\mahh+\madd}}

\begin{multicols}{2} 
  \begin{enumerate}[font=\bfseries ,label=\alph*), leftmargin=*,
    noitemsep]
  \item $\lim\limits_{x \rightarrow a}\dfrac{f(x}{g(x)}=0^+$
  \item $\lim\limits_{x \rightarrow a}\dfrac{f(x}{g(x)}=+\infty$


  \item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=0^+$\etai{}
  \item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=+\infty$ \etai{}
  \end{enumerate}
\end{multicols}

\end{document} 
Dans l'image ci-dessous, j'ai laissé l'étai à 1pt de large, mais dans le code ci-dessus, il est à zéro.
colonnes-etayees.png
colonnes-etayees.png (6.57 Kio) Consulté 251 fois
JJR.
LaTeXien migrateur.
pianiste06
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 161
Inscription : mardi 05 mai 2020, 08:29

Re: Alignement vertical dans multicol avec item

Message non lu par pianiste06 »

Ca marche !!!
C'est exactement ce que je voulais obtenir.
Merci beaucoup !
pianiste06
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 161
Inscription : mardi 05 mai 2020, 08:29

Re: Alignement vertical dans multicol avec item

Message non lu par pianiste06 »

Juste une question...

Pourquoi n'avez vous pas utilisé \columnbreak entre les 2 premiers item et les deux suivants ?
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2703
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Alignement vertical dans multicol avec item

Message non lu par gigiair »

On peut l'ajouter, mais ça ne change rien. multiccol se débrouille très bien tout seul. Je ne connais pas trop bien la documentation de multicol . Comme j'ai fait pas mal de tests avant de trouver cette solution, c'est arrivé tout seul dans l'un des tests. La technique de l'étai est très pratique pour résoudre certains problèmes de mise en page et forcer les dimensions d'une boîte. Elle n'est pas très compliquée à mettre en place et je pense sans risques si l'on est raisonnable avec les dimensions que l'on impose.
JJR.
LaTeXien migrateur.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2703
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Alignement vertical dans multicol avec item

Message non lu par gigiair »

@pianiste06: Ne serait-il pas judicieux de modifier le titre du fil qui n'est vraiment pas adapté au sujet ?

J'ai regardé le code des deux autres intervenants. Le code de Un bon petit marche moyennement. \topskip=20pt au début de l'environnement multicol corrige l'alignement de l'item c), mais décale fortement le d). En ajoutant \vspace{9pt} à la fin de l'item c), le résutat devient acceptable, mais tout peut être remis en cause si l'on modifie le texte des items.
Le code de Balf fonctionne bien. Il utilise le même principe que moi. Il obtient un étai de manière plus directe en utilisant la macro \vphantom. Par contre l'utilisation des minipage complique inutilement le code. J'ignorais, ou j'avais oublié la macro \vphantom. qui épargne des calculs fastidieux.
Je propose donc une nouvelle version qui utilise cette macro en remerciant Balf de m'avoir appris l'existence de \vphantom .

Code : Tout sélectionner

\documentclass {article}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{enumitem}

\begin{document}
\newcommand*{\etai}{\vphantom{$\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=0^+$}}
\begin{multicols}{2} 
  \begin{enumerate}[font=\bfseries ,label=\alph*), leftmargin=*, noitemsep]
  \item $\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=0^+$
  \item $\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=+\infty$ 
  \item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=0^+$\etai{}
  \item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=+\infty$ \etai{}
  \end{enumerate}
\end{multicols}

\end{document} 
Sur la capture d'écran ci-dessous, j'ai rajouté une réglure pour démontrer le parfait alignement des \item
align-enum-cols.png
JJR.
LaTeXien migrateur.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2035
Inscription : samedi 29 décembre 2007, 00:58

Re: Alignement vertical dans multicol avec item

Message non lu par projetmbc »

Bonjour.

On peut simplifier la proposition précédente. Sinon il existe le package tasks avec une mise en forme différente, mais à l'usage, c'est très pratique.

Code : Tout sélectionner

\documentclass {article}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{tasks}
\usepackage{enumitem}

\begin{document}
\newcommand*{\etai}{\vphantom{$\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=0^+$}}
\begin{multicols}{2} 
  \begin{enumerate}[font=\bfseries ,label=\etai{}\alph*), leftmargin=*, noitemsep] % <-- Voir ici.
  \item $\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=0^+$
  \item $\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=+\infty$ 
  \item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=0^+$
  \item $\lim\limits_{x \rightarrow a}f(x)\times g(x)=+\infty$ 
  \end{enumerate}
\end{multicols}

\begin{tasks}(2)
  \task $\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=0^+$
  \task $\lim\limits_{x \rightarrow a}f(x)\times g(x)=0^+$
  \task $\lim\limits_{x \rightarrow a}\dfrac{f(x)}{g(x)}=+\infty$ 
  \task $\lim\limits_{x \rightarrow a}f(x)\times g(x)=+\infty$ 
\end{tasks}

\end{document}
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2703
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Alignement vertical dans multicol avec item

Message non lu par gigiair »

C'est une belle astuce d'incorporer l'étai dans le label. Ça marche bien ici car les termes de la colonne de gauche sont exactement de même hauteur.
Si ce n'était pas le cas, le résultat ne serait pas très satisfaisant esthétiquement. Il faudrait alors adopter une stratégie comme celle de Balf : un \vphantom par ligne.
JJR.
LaTeXien migrateur.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2035
Inscription : samedi 29 décembre 2007, 00:58

Re: Alignement vertical dans multicol avec item

Message non lu par projetmbc »

Effectivement.

Le mieux est d'utiliser tasks.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Alignement vertical dans multicol avec item

Message non lu par un bon petit »

gigiair a écrit : jeudi 12 mai 2022, 08:49 Le code de Un bon petit marche moyennement. \topskip=20pt au début de l'environnement multicol corrige l'alignement de l'item c), mais décale fortement le d).
Mon code fonctionne pour aligner sur une même horizontale le début de chaque boite verticale. Et encore, il faut tâtonner, on ne peut pas faire autrement.
Pour le reste, c'est tout simplement pas possible, sauf à déployer des bricolages qui ne fonctionnent que dans des cas particuliers et qui laissent des espaces énormes entre items qui ont des dimensions verticales normales. Je suis très étonné que des solutions aussi bancales et particulières soient recommandées ici.

De toutes façons, TeX n'est pas équipé pour composer, d'une page à l'autre (ou d'une boite verticale à l'autre, ce qui quasiment la même chose) des lignes situées à des distances régulières et identiques par rapport au haut de la page. C'est désolant mais c'est comma ça. Il y a un package (dont je ne me rappelle plus le nom) qui essaie de forcer TeX à le faire, mais c'est imparfait et difficile à tenir tant le nombre de cas particulier est important (math, math hors ligne, liste énumérées, tableaux, flottants, etc).
projetmbc a écrit : jeudi 12 mai 2022, 11:58 Le mieux est d'utiliser tasks.
Au risque de me répéter, pour ce genre de chose, l'environnement multicol n'est pas adapté. Il y a hlist pour ça. Et pour ceux de mes détracteurs qui ne souhaitent pas utiliser mes packages, il y a effectivement tasks qui fait quasiment la même chose. Avec pour ces 2 packages l'avantage que les items se suivent dans le sens de lecture (gauche à droite puis lignes au dessous) et non pas de haut vers le bas dans une colonne pour se poursuivre dans la colonne suivante.