Interdire un saut de page

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

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.
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Interdire un saut de page

Message par BenLar »

Bonjour,

Dans mon préambule, je créé la commande

Code : Tout sélectionner

\newcommand{\Divers}[2]{\textbf{#1}#2}
Le problème que je rencontre est que parfois un saut de page s'insère entre le contenu de #1 et de #2.
Par exemple, je peux rencontrer un résultat de \Divers{Remarque}{bla bla} avec Remarque sur une page et bla bla sur la suivante.
J'ai essayé d'insérer un \nopagebreakentre {#1} et #2 mais c'est sans effet et je ne trouve pas de solution qui fonctionne en cherchant à droite et à gauche.

Pourriez-vous m'aider ? Merci.
Ben

gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2563
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Interdire un saut de page

Message par gigiair »

Il suffit d'insérer le contenu de la macro dans une minipage. Voir la documentation.

Exemple minimal

Code : Tout sélectionner

\documentclass[latin]{article}
\usepackage{lipsum}
\usepackage{babel}

\begin{document}

\lipsum[1-4]


\noindent
\begin{minipage}[t]{1.0\linewidth}
  \setlength{\parindent}{1pc}
  \begin{center}
    Bloc insécable :
  \end{center}

  \lipsum[1]
\end{minipage}

\begin{center}
  Fin Minipage
\end{center}

\lipsum[2]

\end{document}

% Local Variables:
% TeX-PDF-mode: t
% TeX-PDF-from-DVI: nil
% End:
JJR.
LaTeXien migrateur.

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

Re: Interdire un saut de page

Message par un bon petit »

BenLar a écrit :J'ai essayé d'insérer un \nopagebreakentre {#1} et #2
Ce n'est pas \nopaghebreak qu'il faut ici, mais plutôt \nobreak car on est en mode horizontal entre #1 et #2.
gigiair a écrit :Il suffit d'insérer le contenu de la macro dans une minipage. Voir la documentation.
Dans une minipage ??? Donc une boite verticale ? :boxed:
C'est clairement une mauvaise idée : quelle valeur comptez-vous assigner à la largeur de cette boite verticale ? Même dans une \hbox, cela me semblerait problématique car si #2 est assez long, on est assuré de débordements dans la marge puisqu'une \hbox est insécable.

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

J'ai essayé ça

Code : Tout sélectionner

\newcommand{\Démonstration}[1]{
\textbf{Démonstration}\\
\nobreak
\begin{leftbar}
	#1
\end{leftbar}
}

\newcommand{\Divers}[2]{
\textbf{#1}\\
\nobreak
#2
\bigbreak
}
mais dans un cas comme dans l'autre, j'ai des cas avec Démonstration ou Remarque ou... sur une autre page.

balf
Utilisateur chevronné
Utilisateur chevronné
Messages : 3925
Inscription : mercredi 02 janvier 2008, 23:18

Re: Interdire un saut de page

Message par balf »

Et en essayant (dans le préambule) \clubpenalty=10000 pour interdire les orphelines ?

B. A.

marco56
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 864
Inscription : jeudi 25 novembre 2010, 22:10

Re: Interdire un saut de page

Message par marco56 »

Un ECM, peut-être ?

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

Bonjour,

Voilà mon préambule

Code : Tout sélectionner

\usepackage{subfiles}
\usepackage[french]{babel}
\usepackage{amsfonts,amsmath,amssymb,mathrsfs}
\usepackage[T1]{fontenc}
%\usepackage[utf8]{inputenc}
\usepackage{color,colortbl}
\usepackage[table]{xcolor}
\usepackage{tikz} %pour construire des cadres et des figures
\usetikzlibrary{shapes,arrows}
%\usepackage{pstricks}
%\usepackage{pstricks-add}
\usepackage{sectsty} %pour modifier les titres de section
\usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm]{geometry} %réglage des marges
\usepackage{fancyhdr} %pour les pieds de page
\usepackage{lastpage} %pour l'affichage du nombre de pages
\usepackage{framed} % barre sur les côtés de démonstration & insertion de code
\usepackage{setspace}
\usepackage{eqnarray} %pour aligner les symbole = quand des équations se supperposent
\usepackage{tabularx}
\usepackage{tkz-tab} %Pour faire des tableaux de variation
\usepackage{graphicx} %Pour insérer des images
\usepackage{multicol} % pour avoir plusieurs colonnes localement
\usepackage{minted} % insertion de code python (ajouter l'option -shell-escape au compilateur et installer Pygments sous python)
\usepackage[linesnumbered, french, boxed]{algorithm2e} %pour insérer des algorithmes
\usepackage{enumitem} %pour personnaliser les listes


\setlength{\columnseprule}{0.25pt}
\setlength{\parskip}{2ex plus 1ex minus 1ex} %définit l'espace entre paragraphe valant 2 ex et y ajouter au maximum de 1 ex ou la diminuer au maximum de 1 ex.
\setlength{\parindent}{0pt} % suppression de l'indentation des paragraphe

%augmente l'interligne
\renewcommand{\baselinestretch}{1.2}

% haut et bas de page
\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{\leftmark}
\fancyfoot[C]{\thepage / \pageref{LastPage}}
\renewcommand{\footrulewidth}{0.4pt} % ligne de séparation des hauts et pieds de pages

\frenchbsetup{StandardItemLabels} % pour conserver les puces lors des énumérations

% Changement de la couleur des titres de section
\sectionfont{\color{red}{}}
\subsectionfont{\color{blue}{}}
\subsubsectionfont{\color{orange}{}}


% définition des symboles ensemblistes mathématiques ou autres
\newcommand{\R}{\ensuremath{\mathbb{R}}}
\newcommand{\N}{\ensuremath{\mathbb{N}}}
\newcommand{\D}{\ensuremath{\mathbb{D}}}
\newcommand{\Def}[1]{\ensuremath{\mathcal{D}}_{#1}}
\newcommand{\Cb}[1]{\ensuremath{\mathcal{C}}_{#1}}
\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
\newcommand{\Q}{\ensuremath{\mathbb{Q}}}
\newcommand{\C}{\ensuremath{\mathbb{C}}}
\newcommand{\Aire}{\ensuremath{\mathcal{A}}}
\newcommand{\Vol}{\ensuremath{\mathcal{V}}}
\newcommand{\fn}[5]{
	\begin{center}	
		$\begin{array}{ccccc}
			#1 & : & #2 & \to & #3 \\
			 & & #4 & \mapsto & #5 \\
		\end{array}$
	\end{center}
}

% mise en forme 
\newcommand{\Cadre}[3]{
	\tikzstyle{mybox}=[draw=#2, fill=#2!5, very thick, rectangle, rounded corners, inner sep=10pt, inner ysep=15pt]
	\tikzstyle{fancytitle} =[draw=#2, fill=#2!20, very thick, rounded corners, text=black]
	\begin{tikzpicture}
		\node[mybox](box){
		    \begin{minipage}{0.95\linewidth}
		        #3
		    \end{minipage}
		};
		\node[fancytitle, right=10pt] at (box.north west) {\textbf{#1}};
	\end{tikzpicture}
}

\newcommand{\Définition}[2]{\Cadre{#1}{orange}{#2}}

\newcommand{\Proposition}[2]{\Cadre{#1}{green}{#2}}

\newcommand{\Démonstration}[1]{
\textbf{Démonstration}
\begin{leftbar}
	#1
\end{leftbar}
}

\newcommand{\Divers}[2]{
\textbf{#1}
#2
}

%commande pour faciliter la saisie
\newcommand{\F}[2]{\dfrac{#1}{#2}} %pour les fraction
\newcommand{\RC}[1]{\sqrt{#1}} %pour les racines carrés
\newcommand{\V}[1]{\overrightarrow{#1}} %pour les vecteurs
\newcommand*{\Vv}[2]{
    \begin{pmatrix} 
      #1\\ 
      #2 
    \end{pmatrix}
}

\newcommand*{\determinant}[4]{
	\begin{tabular}{|c c|}
	#1 & #3 \\ 
	#2 & #4 \\ 
	\end{tabular} 
}

\newcommand{\Base}{$(\V{i},\V{j})$ }
\newcommand{\Repere}{$(O;\V{i},\V{j})$ }
J'aimerais éviter le saut de ligne avant les puces en faisant un appel à la commande \Divers{Notations}Blabla}
2020-04-30_16h09_46.png
J'aimerais éviter le saut de page en faisant un appel à la commande \Divers{Remarque - Interprétation géométrique}{Blabla}
2020-04-30_16h10_22.png
J'aimerais éviter le saut de page en faisant un appel à la commande \Démonstration{Blabla}
2020-04-30_16h10_09.png
Je ne sais pas comment modifier mes commandes pour éviter ce type de problèmes.

J'espère être plus clair.

Bonne journée,

Ben
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

marco56
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 864
Inscription : jeudi 25 novembre 2010, 22:10

Re: Interdire un saut de page

Message par marco56 »

Un ECM, c'est un Exemple Complet Minimal : perso, la flemme d'aller compléter tout ce qui manque pour le faire tourner.

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

Bonjour,

Ci-joint, une partie des fichiers.

Ce qui me pose problème :
- Exemple sur la p.6 et la suite sur la p.7 ; ce serait à mon sens mieux que Exemple soit sur la p.7
- Même remarque avec Démonstration à la p.10
- par contre une démonstration (ou autre) sur deux pages n'est pas gênant p.4-5

J'ai essayé avec une minipage dans la définition de \Divers ou \Démonstration mais là, c'est la cata, car cela peut générer des espaces énormes entre les titres de section/sous-section et le contenu.

Bonne journée,

Ben
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

Bonjour,

Est-ce qu'un tel ECM convient ?

Code : Tout sélectionner

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}% ou \usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage{lipsum}
\usepackage{framed}
\listfiles
%
% Ajouter ici les éventuels modules supplémentaires.
%

\newcommand{\Démonstration}[1]{\textbf{Démonstration}
\begin{leftbar}
	#1
\end{leftbar}
}

\newcommand{\Divers}[2]{\textbf{#1}

#2}

\begin{document}

\Divers{Exemple}{\lipsum[1-5]}

\Divers{Exemple}{Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla }

\Divers{Exemple}{Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}

\end{document}
Le problème provient des deux commandes \Divers et \Démonstration. Mais je n'ai pas encore assez d'expérience en latex pour savoir comment m'en sortir.

Espérant avancer...

gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2563
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Interdire un saut de page

Message par gigiair »

Une séquence de contrôle définie par \newcommand ne peut pas contenir de caractères accentués. \newcommand\Définition produira une erreur à la compilation.
JJR.
LaTeXien migrateur.

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

Re: Interdire un saut de page

Message par un bon petit »

gigiair a écrit :Une séquence de contrôle définie par \newcommand ne peut pas contenir de caractères accentués. \newcommand\Définition produira une erreur à la compilation.
Faux. Un caractère accentué peut tout à fait être dans le nom d'une macro, pour peu qu'il ait un catcode de 11.
Même si c'est possible, c'est une pratique bien évidemment fortement déconseillé.

Ce code compile parfaitement avec un moteur utf8 comme xelatex :

Code : Tout sélectionner

\documentclass{article}
\newcommand\démo{Bonjour}
\begin{document}
signification : \meaning\démo\par
exécution : \démo
\end{document}

F. Pantigny
Utilisateur débutant
Utilisateur débutant
Messages : 4
Inscription : dimanche 07 juillet 2019, 14:37

Re: Interdire un saut de page

Message par F. Pantigny »

Pour la question de départ, je suggère de rajouter \par\nobreak

Code : Tout sélectionner

\documentclass[a4paper,10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage{lipsum}
\usepackage{framed}
\listfiles
%
% Ajouter ici les éventuels modules supplémentaires.
%

\newcommand{\Demonstration}[1]{\textbf{Démonstration}
\begin{leftbar}
   #1
\end{leftbar}
}

\newcommand{\Divers}[2]{\textbf{#1}\par\nobreak
#2}

\begin{document}

\Divers{Exemple}{\lipsum[1-5]}

\Divers{Exemple}{Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla }

\Divers{Exemple}{Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}
\end{document}

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

Re: Interdire un saut de page

Message par un bon petit »

BenLar a écrit :Est-ce qu'un tel ECM convient ?
Oui, c'est bien mieux, mais il n'est pas Minimal puisque le package framed et la macro \Démonstration ne sont pas utiles.

La méthode classique est de mettre \nobreak après \par pour empêcher une coupure:

Code : Tout sélectionner

\documentclass[a4paper,french,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern,babel,lipsum}
\newcommand{\Divers}[2]{\textbf{#1}\par\nobreak#2}
\begin{document}
\Divers{Exemple}{\lipsum[1-5]}

\Divers{Exemple}{Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla }

\Divers{Exemple}{Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}
\end{document}

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

un bon petit a écrit :Oui, c'est bien mieux, mais il n'est pas Minimal puisque le package framed et la macro \Démonstration ne sont pas utiles.
Je les ai mis car j'ai le même problème avec. J'ai juste pas ajouté l'exemple.

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

F. Pantigny a écrit :Pour la question de départ, je suggère de rajouter \par\nobreak
Effectivement, sur l'ECM, ça fonctionne bien. Pas sur mon fichier. :evil:

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

gigiair a écrit :Une séquence de contrôle définie par \newcommand ne peut pas contenir de caractères accentués. \newcommand\Définition produira une erreur à la compilation.
Jusqu'ici, ça compile. Mais il est vrai que c'est risqué. Il faudra que je prenne le temps de les enlever.

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

En fait, le \par\nobreak fonctionne bien dans mon document sauf quand il est suivie d'un
- \begin{center}... \end{center}
- \begin{itemize}... \end{itemize}

Cela explique peut-être aussi pourquoi je rencontre parfois le problème avec \Démonstration qui contient un \begin{leftbar}...\end{leftbar}

De plus, comment dois-je faire pour avoir un saut de ligne après le #2 ? Un \medbreak ou \bigbreak ?

F. Pantigny
Utilisateur débutant
Utilisateur débutant
Messages : 4
Inscription : dimanche 07 juillet 2019, 14:37

Re: Interdire un saut de page

Message par F. Pantigny »

L'environnement {itemize} commence par insérer une pénalité favorisant la coupure. Or TeX peut effectuer une coupure sur une telle pénalité. On peut donc mettre avant l'environnement {itemize} n'importe quelle pénalité d'interdiction de coupure, TeX pourra toujours faire la coupure sur la pénalité insérée par {itemize}.

Il convient donc d'utiliser autre chose que {itemize} de base.
Heureusement, l'extension enumitem modifie {itemize} de base et possède un paramètre pour régler la pénalité insérée avant. Il convient de mettre [beginpenalty=10000]

Code : Tout sélectionner

\documentclass[a4paper,french,10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern,babel,lipsum}
\newcommand{\Divers}[2]{\textbf{#1}\par\nobreak#2}
\usepackage{enumitem}
\begin{document}
\Divers{Exemple}{\lipsum[1-5]}

\Divers{Exemple}{Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla }

\Divers{Exemple}{
\begin{itemize}[beginpenalty=10000]
\item un
\item deux
\item trois
\item quatre
\end{itemize}}
\end{document}

BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 16
Inscription : mercredi 29 avril 2020, 14:56

Re: Interdire un saut de page

Message par BenLar »

Effectivement, sur les environnements itemize ou j'ai le problème, ça fonctionne.