Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Comportement étrange de multido avec \paragraph

30 views
Skip to first unread message

Denis Bitouzé

unread,
Aug 27, 2013, 10:53:05 AM8/27/13
to
Bonjour,

la compilation de l'ECM suivant donne :
1. le résultat escompté ;
2. un résultat pour le moins surprenant si est décommentée la ligne :
% \paragraph{...}
car la variable \i est prématurément incrémentée de 1 et la dernière
occurrence correspondante n'apparaît pas. Si la ligne :
% \subparagraph{...}
est en outre décommentée, l'anomalie se reporte sur elle, celle des
« \paragraph » se comportant alors normalement.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{report}
\usepackage{fixltx2e}
\usepackage{multido}
\begin{document}
\multido{\i=1+1}{4}{%
\chapter{Je suis le chapitre \i}
\section{Je suis une section du chapitre \i}
\subsection{Je suis une sous-section du chapitre \i}
\subsubsection{Je suis une sous-sous-section du chapitre \i}
% \paragraph{Je suis un paragraphe du chapitre \i}
% \subparagraph{Je suis un sous-paragraphe du chapitre \i}
}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Nan mais je vous le demande un peu : à qui peut-on désormais se fier ?
--
Denis

Vincent Belaďche

unread,
Aug 27, 2013, 4:08:46 PM8/27/13
to Vincent Belaďche
Et en plus --- quand on décommente --- dans le chapitre 4, c'est à dire
la dernière itéation, il n'y a pas de sous paragraphe.

M'enfin bref, c'est comme si la dernière macro était développée à l'itération
suivante.

Si on fait ça:
%----------------------------------------------------------------------
\documentclass{report}
\usepackage{fixltx2e}
\usepackage{multido}
\newcommand*\coco{}
\begin{document}
\multido{\ixx=1+1}{4}{%
\chapter{Je suis le chapitre \ixx}
\section{Je suis une section du chapitre \ixx}
\subsection{Je suis une sous-section du chapitre \ixx}
\subsubsection{Je suis une sous-sous-section du chapitre \ixx}
\paragraph{Je suis un paragraphe du chapitre \ixx}
\edef\coco{\ixx}
\subparagraph{Je suis un sous-paragraphe du chapitre \coco}%
}
\end{document}
%----------------------------------------------------------------------

Alors le problème de décalage disparaît, mais pas la suppression du sous
paragraphe dans la dernière itération

Si on fait ça:
%----------------------------------------------------------------------
\documentclass{report}
\usepackage{fixltx2e}
\usepackage{multido}
\newcommand*\coco{}
\begin{document}
\multido{\ixx=1+1}{4}{%
\chapter{Je suis le chapitre \ixx}
\section{Je suis une section du chapitre \ixx}
\subsection{Je suis une sous-section du chapitre \ixx}
\subsubsection{Je suis une sous-sous-section du chapitre \ixx}
\paragraph{Je suis un paragraphe du chapitre \ixx}
\edef\coco{\ixx}
\subparagraph{Je suis un sous-paragraphe du chapitre \coco}%
xxxx
}
\end{document}
%----------------------------------------------------------------------

Il y a le sous paragraphe dans la dernière itération --- aparemment
\subparagraph à besoin d'être suivi de qqchose pour générer du texte.

Vincent

Denis Bitouzé

unread,
Aug 29, 2013, 1:42:00 AM8/29/13
to
Le mardi 27/08/13 à 22h08,
vincent....@gmail.com (Vincent Belaïche) a écrit :

> Et en plus --- quand on décommente --- dans le chapitre 4, c'est à
> dire la dernière itéation, il n'y a pas de sous paragraphe.

Toutafé.

> M'enfin bref, c'est comme si la dernière macro était développée à
> l'itération suivante.

Yep.

> Si on fait ça:
> %----------------------------------------------------------------------
> \documentclass{report}
> \usepackage{fixltx2e}
> \usepackage{multido}
> \newcommand*\coco{}
> \begin{document}
> \multido{\ixx=1+1}{4}{%
> \chapter{Je suis le chapitre \ixx}
> \section{Je suis une section du chapitre \ixx}
> \subsection{Je suis une sous-section du chapitre \ixx}
> \subsubsection{Je suis une sous-sous-section du chapitre \ixx}
> \paragraph{Je suis un paragraphe du chapitre \ixx}
> \edef\coco{\ixx}
> \subparagraph{Je suis un sous-paragraphe du chapitre \coco}%
> }
> \end{document}
> %----------------------------------------------------------------------
>
> Alors le problème de décalage disparaît, mais pas la suppression du
> sous paragraphe dans la dernière itération

Oui.

> Si on fait ça:
> %----------------------------------------------------------------------
> \documentclass{report}
> \usepackage{fixltx2e}
> \usepackage{multido}
> \newcommand*\coco{}
> \begin{document}
> \multido{\ixx=1+1}{4}{%
> \chapter{Je suis le chapitre \ixx}
> \section{Je suis une section du chapitre \ixx}
> \subsection{Je suis une sous-section du chapitre \ixx}
> \subsubsection{Je suis une sous-sous-section du chapitre \ixx}
> \paragraph{Je suis un paragraphe du chapitre \ixx}
> \edef\coco{\ixx}
> \subparagraph{Je suis un sous-paragraphe du chapitre \coco}%
> xxxx
> }
> \end{document}
> %----------------------------------------------------------------------
>
> Il y a le sous paragraphe dans la dernière itération --- aparemment
> \subparagraph à besoin d'être suivi de qqchose pour générer du texte.

C'est aussi ce que j'avais constaté.

Ça reste néanmoins assez mystérieux...
--
Denis

as

unread,
Aug 29, 2013, 2:24:00 AM8/29/13
to
Le Tue, 27 Aug 2013 16:53:05 +0200,
Denis Bitouzé <dbito...@spam.wanadoo.fr> a écrit :

Hello,

> Nan mais je vous le demande un peu : à qui peut-on désormais se fier ?

pas à \@startsection en tout cas. Le pb semble provenir d'un espacement
nul en dernier argument

\documentclass{report}
\usepackage{fixltx2e}
\usepackage{multido,tikz}

\makeatletter
\renewcommand{\paragraph}{\@startsection
{paragraph}{3}{0em}{0mm}
{0pt} % bug
%{1pt} % no bug
{\normalfont}}
\renewcommand{\subparagraph}{\@startsection
{subparagraph}{4}{0mm}{0mm}
{0pt} % bug
%{1pt} % no bug
{\normalfont}}
\makeatother

\def\texte#1{%
\chapter{Je suis le #1-chapitre \i}
\section{Je suis une #1-section du chapitre \i}
\subsection{Je suis une #1-sous-section du chapitre \i}
\subsubsection{Je suis une #1-sous-sous-section du chapitre \i}
\paragraph{Je suis un #1-paragraphe du chapitre \i}
\subparagraph{Je suis un #1-sous-paragraphe du chapitre \i}
}

\begin{document}
\foreach \i in {1,2,3,4}{\texte{foreach}}
\multido{\i=1+1}{4}{\texte{multido}}
\end{document}

--
Arnaud

Pétiard François

unread,
Aug 30, 2013, 4:04:26 AM8/30/13
to
Le 27/08/2013 16:53, Denis Bitouzᅵ a ᅵcrit :
> Bonjour,
>
> la compilation de l'ECM suivant donne :
> 1. le rᅵsultat escomptᅵ ;
> 2. un rᅵsultat pour le moins surprenant si est dᅵcommentᅵe la ligne :
> % \paragraph{...}
> car la variable \i est prᅵmaturᅵment incrᅵmentᅵe de 1 et la derniᅵre
> occurrence correspondante n'apparaᅵt pas. Si la ligne :
> % \subparagraph{...}
> est en outre dᅵcommentᅵe, l'anomalie se reporte sur elle, celle des
> ᅵ \paragraph ᅵ se comportant alors normalement.
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> \documentclass{report}
> \usepackage{fixltx2e}
> \usepackage{multido}
> \begin{document}
> \multido{\i=1+1}{4}{%
> \chapter{Je suis le chapitre \i}
> \section{Je suis une section du chapitre \i}
> \subsection{Je suis une sous-section du chapitre \i}
> \subsubsection{Je suis une sous-sous-section du chapitre \i}
> % \paragraph{Je suis un paragraphe du chapitre \i}
> % \subparagraph{Je suis un sous-paragraphe du chapitre \i}
> }
> \end{document}
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> Nan mais je vous le demande un peu : ᅵ qui peut-on dᅵsormais se fier ?
>


Bonjour

Il y a un \everypar dans la dᅵfinition de \@xsect qui semble causer ce
souci.
Les redᅵfinitions de \@sect et de \@xsect ci-dessous semblent rᅵparer
ᅵa, mais causent peut-ᅵtre d'autres effets de bord non prᅵvus...

\documentclass{report}
\usepackage{fixltx2e}
\usepackage{multido,tikz}
\makeatletter

% dᅵfinition initiale %
%\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum#2>\c@secnumdepth\let\@svsec\@empty%
%\else%
%\refstepcounter{#1}\protected@edef\@svsec{\@seccntformat{#1}\relax}\fi%
%\@tempskipa#5\relax%
%\ifdim\@tempskipa>\z@\begingroup#6{\@hangfrom{\hskip#3\relax%
%\@svsec}\interlinepenalty\@M#8\@@par}\endgroup%
%\csname#1mark\endcsname{#7}%
%\addcontentsline{toc}{#1}{\ifnum#2>\c@secnumdepth\else%
%\protect\numberline{\csname the#1\endcsname}\fi%
%#7}\else\def\@svsechd{#6{\hskip#3\relax\@svsec#8}%
%\csname#1mark\endcsname{#7}%
%\addcontentsline{toc}{#1}{\ifnum#2>%
%\c@secnumdepth\else\protect\numberline{\csname the#1\endcsname}\fi%
%#7}}\fi\@xsect{#5}
%}
%%%%%%%%%%%%%%%%%%%%%%%

% nouvelle dᅵfinition %
\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum#2>\c@secnumdepth\let\@svsec\@empty%
\else%
\refstepcounter{#1}\protected@edef\@svsec{\@seccntformat{#1}\relax}\fi%
\@tempskipa#5\relax%
\ifdim\@tempskipa>\z@\begingroup#6{\@hangfrom{\hskip#3\relax%
\@svsec}\interlinepenalty\@M#8\@@par}\endgroup%
\csname#1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{\ifnum#2>\c@secnumdepth\else%
\protect\numberline{\csname the#1\endcsname}\fi%
#7}\else\def\@svsechd{#6{\hskip#3\relax\@svsec#8}%
\csname#1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{\ifnum#2>%
\c@secnumdepth\else\protect\numberline{\csname the#1\endcsname}\fi%
#7}}\fi\@xsect{#5}%
\everypar{}% <- ici on ajoute
}
%%%%%%%%%%%%%%%%%%%%%%%

% dᅵfinition initiale %
%\def\@xsect#1{\@tempskipa#1\relax\ifdim\@tempskipa>\z@\par\nobreak%
%\vskip\@tempskipa\@afterheading%
%\else\@nobreakfalse\global\@noskipsectrue%
%\everypar{\if@noskipsec\global\@noskipsecfalse%
%{\setbox\z@\lastbox}%
%\clubpenalty\@M%
%\begingroup\@svsechd\endgroup%
%\unskip\@tempskipa#1\relax%
%\hskip-\@tempskipa\else\clubpenalty\@clubpenalty\everypar{}\fi}%
%\fi\ignorespaces}
%%%%%%%%%%%%%%%%%%%%%%%

% nouvelle dᅵfinition %
\def\@xsect#1{\@tempskipa#1\relax\ifdim\@tempskipa>\z@\par\nobreak%
\vskip\@tempskipa\@afterheading%
\else\@nobreakfalse\global\@noskipsectrue%
\everypar{\if@noskipsec\global\@noskipsecfalse%
{\setbox\z@\lastbox}%
\clubpenalty\@M%
% on dᅵplace \begingroup\@svsechd\endgroup -----------------------
\unskip\@tempskipa#1\relax% |
\hskip-\@tempskipa\else\clubpenalty\@clubpenalty\everypar{}\fi}% |
\begingroup\@svsechd\endgroup% <- ici ----------------------------
\fi\ignorespaces}
%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}
\multido{\i=1+1}{4}{%
\chapter{Je suis le chapitre \i}
\section{Je suis une section du chapitre \i}
\subsection{Je suis une sous-section du chapitre \i}
\subsubsection{Je suis une sous-sous-section du chapitre \i}
\paragraph{Je suis un paragraphe du chapitre \i}
\subparagraph{Je suis un sous-paragraphe du chapitre \i}
}
\end{document}

Franᅵois

--
Si la plupart des utilisateurs s'en tirent bien en ignorant tout de la
bombe qu'ils manipulent, grand bien pour eux, jusqu'au jour oᅵ ᅵa leur
explose dans les mains.
-+- Joss in fr.comp.text.tex -+-

Denis Bitouzé

unread,
Sep 5, 2013, 12:43:51 PM9/5/13
to
Le mardi 27/08/13 à 16h53,
Denis Bitouzé <dbito...@spam.wanadoo.fr> a écrit :

> Nan mais je vous le demande un peu : à qui peut-on désormais se fier ?

Sauf erreur de ma part, vous avez trouvé une explication à l'anomalie,
mais ça n'en reste pas moins une anomalie. Je m'en vais poster la chose
sur http://tex.stackexchange.com/ pour voir s'il s'agit vraiment d'un
bug et j'y mettrai un lien vers vos posts.

En tous cas, merci à vous tous pour vos réponses.
--
Denis

0 new messages