Ajouter une commande de type \linebreak à une inline list enumitem

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 utilisateurs 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.
MB
Administrateur
Administrateur
Messages : 8111
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

[Résolu] Ajouter une commande de type \linebreak à une inline list enumitem

Message non lu par MB »

Bonjour,

L'objectif serait de définir une commande \breakline de sorte que le code proposé produise le résultat suivant.
linebreak_inline_lists.png
linebreak_inline_lists.png (5.59 Kio) Consulté 14805 fois

Code : Tout sélectionner

\documentclass{article}
\usepackage[inline]{enumitem}

\begin{document}
\begin{center}
\begin{itemize*}[label=\null,afterlabel=\null,itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B
\item C \breakline
\item D
\item E
\end{itemize*}
\end{center}
\end{document}
Il faudrait donc que la commande \breakline impose un retour à la ligne et désactive le prochain itemjoin (\enit@itemjoin d'après le code source de l'extension enumitem). Si quelqu'un a une idée de solution relativement propre, je suis preneur.
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
pg
Modérateur spécialisé
Modérateur spécialisé
Messages : 2621
Inscription : vendredi 15 juin 2007, 00:31

Re: Ajouter une commande de type \linebreak à une inline list enumitem

Message non lu par pg »

On peut essayer quelque chose du genre :

Code : Tout sélectionner

\documentclass{article}
\usepackage[inline]{enumitem}

\makeatletter
\newcommand{\breakline}{%
    \let\olditem\item
    \def\item{\break\let\item\olditem}%
}
\makeatother

\begin{document}
\begin{center}
\begin{itemize*}[label=\null,afterlabel=\null,itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B
\item C\breakline
\item D
\item E
\end{itemize*}
\end{center}
\end{document}
MB
Administrateur
Administrateur
Messages : 8111
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Ajouter une commande de type \linebreak à une inline list enumitem

Message non lu par MB »

Merci, je viens de tester rapidement et il me semble que ça fonctionne bien dans le cas d'un environnement itemize*, mais que ça ne se généralise pas à un environnement enumerate* par exemple.

Code : Tout sélectionner

\documentclass{article}
\usepackage[inline]{enumitem}

\makeatletter
\newcommand{\breakline}{%
    \let\olditem\item
    \def\item{\break\let\item\olditem}%
}
\makeatother

\begin{document}
\begin{center}
\begin{enumerate*}[label=(\alph*),itemjoin=\hspace{3em}]
\item A
\item B
\item C\breakline
\item D
\item E
\end{enumerate*}
\end{center}
\end{document}
Je pense que c'est pour ça que j'avais initialement envisagé la même méthode que celle que tu proposes, mais sur la macro \enit@itemjoin plutôt que sur \item, mais le résultat n'était pas vraiment celui attendu. Il serait intéressant que la commande fonctionne quelque soit le type d'environnement inline utilisé.
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
MB
Administrateur
Administrateur
Messages : 8111
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Ajouter une commande de type \linebreak à une inline list enumitem

Message non lu par MB »

Je crois que j'avais tenté le code suivant.

Code : Tout sélectionner

\documentclass{article}
\usepackage[inline]{enumitem}

\makeatletter
\newcommand{\breakline}{%
    \break\let\old@enit@itemjoin\enit@itemjoin%
    \def\enit@itemjoin{\let\enit@itemjoin\old@enit@itemjoin}%
}
\makeatother

\begin{document}
\begin{center}
\begin{enumerate*}[label=(\alph*),itemjoin=\hspace{3em}]
\item A
\item B
\item C\breakline
\item D
\item E
\end{enumerate*}
\end{center}

\begin{center}
\begin{itemize*}[label=\null,afterlabel=\null,itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B
\item C\breakline
\item D
\item E
\end{itemize*}
\end{center}
\end{document}
Ce code semble d'ailleurs fonctionner correctement avec enumerate*, mais pas avec itemize*. Je n'ai pas vraiment eu le temps d'approfondir la question.
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
pg
Modérateur spécialisé
Modérateur spécialisé
Messages : 2621
Inscription : vendredi 15 juin 2007, 00:31

Re: Ajouter une commande de type \linebreak à une inline list enumitem

Message non lu par pg »

Essayer plutôt ainsi :

Code : Tout sélectionner

\documentclass{article}
\usepackage[inline]{enumitem}

\makeatletter
\newcommand{\breakline}{%
    \break
    \global\let\old@enit@itemjoin\enit@itemjoin
    \gdef\enit@itemjoin{\old@enit@itemjoin\gdef\enit@itemjoin{\global\let\enit@itemjoin\old@enit@itemjoin}}%
}
\makeatother

\begin{document}

\begin{center}
\begin{enumerate*}[label=(\alph*),itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B
\item C\breakline
\item D
\item E
\end{enumerate*}
\end{center}

\begin{center}
\begin{enumerate*}[label=(\alph*),itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B
\item C\breakline
\item D\breakline
\item E
\end{enumerate*}
\end{center}

\begin{center}
\begin{enumerate*}[label=(\alph*),itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B\breakline
\item C
\item D\breakline
\item E
\end{enumerate*}
\end{center}

\begin{center}
\begin{itemize*}[label=\null,afterlabel=\null,itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B
\item C\breakline
\item D
\item E
\end{itemize*}
\end{center}

\begin{center}
\begin{itemize*}[label=\null,afterlabel=\null,itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B
\item C\breakline
\item D\breakline
\item E
\end{itemize*}
\end{center}

\begin{center}
\begin{itemize*}[label=\null,afterlabel=\null,itemjoin={{\makebox[5ex][c]{;}}}]
\item A
\item B\breakline
\item C
\item D\breakline
\item E
\end{itemize*}
\end{center}

\end{document}
MB
Administrateur
Administrateur
Messages : 8111
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Ajouter une commande de type \linebreak à une inline list enumitem

Message non lu par MB »

Merci, ça me semble impeccable.
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.