3
1

Je compose un texte avec divers labels. À chaque label, un appel de note discret, représenté par une feuille aldine placée dans la marge, renvoie aux notes situées à part, plus loin dans le document.

Il arrive que deux labels soient suffisamment proches pour se trouver potentiellement imprimés sur la même page. Il est néanmoins possible qu'après compilation ils se trouvent sur deux pages différentes.

Serait-il possible de rédiger une expression conditionnelle modifiant la formulation du deuxième appel de note selon qu'il se trouve ou non sur la même page que le premier ?

Voici un ECM :

Ouvrir dans l'éditeur
\documentclass[12pt, twoside, twocolumn, a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[light, largesmallcaps, oldstyle]{kpfonts}
\usepackage{adforn}
\usepackage{lipsum}
\usepackage{calc}
\begingroup
\fontfamily{OrnementsADF}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont
\xdef\foo{\the\fontdimen6\font}\xdef\bar{\the\dimexpr1em\relax}%
\endgroup
\normalfont
\xdef\Foo{\the\fontdimen6\font}\xdef\Bar{\the\dimexpr1em\relax}%
\usepackage{microtype}
\usepackage[twoside
            ,a4paper
        ,includeheadfoot
            ,layoutsize={190mm,220mm}
            ,layoutoffset={10mm,10mm}
        ,hdivide={15mm,15cm, }
        ,vdivide={18mm,19cm, }
        ,footskip={1cm}
            ,marginparwidth=\foo
            ,marginparsep=0.2\dimexpr\bar\relax
            ,bindingoffset=1cm
            ,nohead
            ,includeall
            ,showcrop
            ]{geometry}
\usepackage[french]{babel}
\begin{document}
\lipsum[1]
\label{label1}\marginpar{\adforn{60}} cela me semble significatif de\dots~
\lipsum[2]
%\newpage % Ceci pour forcer les deux appels de note à se trouver sur deux pages différentes
%\lipsum[3]
\label{label2} \marginpar{\adforn{39}} il semble qu'en occident\dots~
\lipsum[4]
\newpage
\adforn{60} En page \pageref{label1}, il est indiqué que\dots\\

%\adforn{39} En page \pageref{label2}, la mention\dots % Formulation utilisée au cas où les deux appels de note sont sur des pages différentes\\

\adforn{39} Toujours en page \pageref{label2}, la mention\dots % Formulation utilisée au cas où les deux appels de note sont situés sur la même page
\end{document}

Posée 15 Avr '16, 16:33

Pathe's gravatar image

Pathe ♦♦
7.4k28196245
Taux d'acceptation : 55%

Modifiée 15 Avr '16, 16:36

1

Utilisez l'extension varioref qui s'occupe de ce genre de choses.

(15 Avr '16, 18:52) unbonpetit ♦♦ unbonpetit's gravatar image

Voici deux solutions.

Une nouvelle commande \mtref est définie. Elle possède deux arguments : un symbole et un label.

Solution 1 : utilisant l'extension refcount.

L'extension définit la commande \setcounterpageref{counter}{label} qui permet d'extraire le nombre de page auquel renvoie l'étiquette « label » et rend la valeur de compteur (counter) égale à ce nombre. Il y a aussi une commande analogue \setcounterref qui extrait le numéro de la référence (section, équation, tableau...).

L'extension définit aussi les commandes \getrefnumber{label}, \getpagerefnumber{label} qui extraient le numéro de référence ou de la page de référence et les utilisent directement dans les calculs, donc sans être sauvegardés.

Ouvrir dans l'éditeur
\documentclass{article}
\usepackage{lipsum}

\usepackage{refcount}

\newcounter{mtpage}
\newcommand*\mtref[2]{%
#1
\ifnum\value{mtpage}=\getpagerefnumber{#2}
Toujours en \else En \fi page \pageref{#2}%
\setcounterpageref{mtpage}{#2}}

\begin{document}
\lipsum[1]
\label{label1}\marginpar{$\clubsuit$} cela me semble significatif de\dots~
\lipsum[2]

%\newpage
\label{label2} \marginpar{$\spadesuit$} il semble qu'en occident\dots~
\lipsum[4]
\newpage
\mtref{$\clubsuit$}{label1}, il est indiqué que\dots\\

\mtref{$\spadesuit$}{label2}, la mention\dots
\end{document}

Solution 2 : utilisant l'extension varioref.

L'extension définit la commande \vrefpagenum{commande}{label}. D'après la documentation :


"This macro is provided to allow the user to write their own small commands which implement functions similar to those provided by the two previous commands. It takes two arguments: the second is a label (i.e., as used in \label or \ref) and the first is an arbitrary command name (make sure you use our own) that receives the page number related to this label."

Une traduction

Cette macro est fournie pour permettre à l'utilisateur d'écrire ses propres petites commandes qui mettent en œuvre des fonctions similaires à celles fournies par les deux commandes précédentes. Elle prend deux arguments : le premier est un nom de commande arbitraire (assurez-vous d'utiliser un nom propre) qui reçoit le numéro de page en rapport avec le second, qui est une étiquette (par exemple telle qu'il y en a dans \label ou \ref).

Ouvrir dans l'éditeur
\documentclass{article}
\usepackage{lipsum}

\usepackage{varioref}
\newcommand*\firstnum{0}
\newcommand*\mtref[2]{%
#1
\vrefpagenum\secondnum{#2}%
\ifnum\firstnum=\secondnum
Toujours en \else En \fi page \pageref{#2}%
\vrefpagenum\firstnum{#2}%
}

\begin{document}
\lipsum[1]
\label{label1}\marginpar{$\clubsuit$} cela me semble significatif de\dots~
\lipsum[2]

%\newpage
\label{label2} \marginpar{$\spadesuit$} il semble qu'en occident\dots~
\lipsum[4]
\newpage
\mtref{$\clubsuit$}{label1}, il est indiqué que\dots\\

\mtref{$\spadesuit$}{label2}, la mention\dots
\end{document}
Lien permanent

Publiée 15 Avr '16, 20:45

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 19 Avr '16, 00:10

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.