Interdire un saut de page

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

Interdire un saut de page

Message non lu 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 : 2804
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Interdire un saut de page

Message non lu 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 : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: Interdire un saut de page

Message non lu 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.
Programmer en TeX, TeXpérimental
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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
Modérateur spécialisé
Modérateur spécialisé
Messages : 4065
Inscription : mercredi 02 janvier 2008, 23:18

Re: Interdire un saut de page

Message non lu par balf »

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

B. A.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1136
Inscription : jeudi 25 novembre 2010, 22:10

Re: Interdire un saut de page

Message non lu par marco56 »

Un ECM, peut-être ?
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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
2020-04-30_16h09_46.png (9.11 Kio) Consulté 2477 fois
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
2020-04-30_16h10_22.png (6.79 Kio) Consulté 2477 fois
J'aimerais éviter le saut de page en faisant un appel à la commande \Démonstration{Blabla}
2020-04-30_16h10_09.png
2020-04-30_16h10_09.png (9.41 Kio) Consulté 2477 fois
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
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1136
Inscription : jeudi 25 novembre 2010, 22:10

Re: Interdire un saut de page

Message non lu 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 : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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
Pièces jointes
main.pdf
La version "compilée" en pdf
(67.01 Kio) Téléchargé 175 fois
Ensembles_de_Nombres.tex
Le premier chapitre
(16.43 Kio) Téléchargé 167 fois
Préambule.tex
Le préambule
(3.88 Kio) Téléchargé 171 fois
main.tex
Le fichier "racine"
(366 octets) Téléchargé 173 fois
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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 : 2804
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Interdire un saut de page

Message non lu 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 : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: Interdire un saut de page

Message non lu 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}
Programmer en TeX, TeXpérimental
F. Pantigny
Utilisateur confirmé
Utilisateur confirmé
Messages : 19
Inscription : dimanche 07 juillet 2019, 14:37

Re: Interdire un saut de page

Message non lu 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 : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: Interdire un saut de page

Message non lu 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}
Programmer en TeX, TeXpérimental
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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 : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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 : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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 : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu 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 confirmé
Utilisateur confirmé
Messages : 19
Inscription : dimanche 07 juillet 2019, 14:37

Re: Interdire un saut de page

Message non lu 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 : 52
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Interdire un saut de page

Message non lu par BenLar »

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