Commandes linelabel et lineref

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Commandes linelabel et lineref

Messagepar _Poiuy_ » Mardi 17 Août 2010, 15:32

bonjour,

j'essaie d'utiliser linelabel et lineref (du package lineno) mais je me heurte à un problème dû à ce que j'essaie de faire :

Le texte dont je numérote les lignes est dans un fcolorbox à l'aide d'un minipage. J'ai donc été contraint d'utiliser la commande \internallinenumbers et jusque là ça marche comme je veux. Le hic est quand j'essaie d'insérer une commande \linelabel dans le texte, j'obtiens l'erreur :

! Package lineno Error: \linelabel without \linenumbers


ce qui est finalement assez logique puisque je n'utilise pas \linenumbers mais \internallinenumbers. Je tourne en rond depuis un moment sur ce problème, pouvez vous m'aider ? (mon problème est il clair ?)

[edit] : je crois en fait que j'utilise la commande \internallinenumbers à mauvais escient, peut être le problème vient il de là
_Poiuy_
Hecto-utilisateur
 
Messages: 69
Inscription: Mercredi 07 Avril 2010, 14:02
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Commandes linelabel et lineref

Messagepar pg » Mercredi 18 Août 2010, 21:06

On ne peut pas faire référence à un numéro de ligne lorsqu'on utilise \internallinenumbers. En suivant une suggestion du fil Printing linenumber in footnote, on peut néanmoins y arriver si on utilise pdflatex :

internallineno_zref.pdf
(29.9 Kio) Téléchargé 93 fois


Code: Tout sélectionner
\documentclass{article}

\usepackage{xcolor}
\usepackage{lineno}
\usepackage[savepos]{zref}
%\usepackage{hyperref}

\makeatletter
\newcounter{internalboxnumber}
\let\oldinternallinenumbers\internallinenumbers
\renewcommand{\internallinenumbers}{%
  \setcounter{internallinenumbers}{0}%
  \refstepcounter{internalboxnumber}%
  \zsavepos{savepos.box-\number\c@internalboxnumber}%
  \oldinternallinenumbers
}
\newcommand{\internallinelabel}[1]{%
  \csname phantomsection\endcsname
  \zsavepos{savepos.#1}%
  \edef\@currentlabel{%
    \number\numexpr(\zposy{savepos.box-\number\c@internalboxnumber}-\zposy{savepos.#1})/65536%
                                 /\strip@pt\baselineskip\relax}
  \label{#1}}
\newcommand{\internallineref}[1]{\ref{#1}}
\makeatother

\begin{document}

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla.

\bigbreak

\noindent\fcolorbox{blue}{blue!5}{\begin{minipage}{\dimexpr\textwidth-2\fboxsep-2\fboxrule}
\internallinenumbers[1]
Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla \textcolor{red}{label}\internallinelabel{ligne} bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla 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{minipage}}

\bigbreak

Le mot ``label'' est \`a la ligne n\textsuperscript{o}\,\internallineref{ligne}.

\bigbreak

\noindent\fcolorbox{blue}{blue!5}{\begin{minipage}{\dimexpr\textwidth-2\fboxsep-2\fboxrule}
\internallinenumbers[1]
Bla bla bla \textcolor{red}{labelbis}\internallinelabel{lignebis} bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla 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{minipage}}

\bigbreak

Le mot ``labelbis'' est \`a la ligne n\textsuperscript{o}\,\internallineref{lignebis}.

\end{document}

Attention, ça ne fonctionnera que si toutes les lignes sont de hauteurs constantes.

Comme tu n'as pas donné le code que tu utilisais, j'ai supposé que tu voulais numéroter indépendamment chaque bloc les uns des autres et que tu n'utilisais pas \linenumbers. Au besoin, c'est adaptable.
pg
Modérateur
 
Messages: 2597
Inscription: Jeudi 14 Juin 2007, 23:31

Re: Commandes linelabel et lineref

Messagepar _Poiuy_ » Jeudi 19 Août 2010, 08:18

Super, merci pour le code, c'est exactement ce que je voulais obtenir. !

Je suis toujours impressionné par la quantité de choses qu'il est possible de faire avec $\LaTeX$ et encore plus impressionné par ceux qui les font :P

Petit détail surprenant : à la première compilation, pdfLateX me signalait des warnings de références introuvables, et produisait "le mot label est à la ligne n° ??". En compilant à nouveau c'est devenu "le mot label la ligne n° 0" et une troisième compilation finit par dire la vérité. Si je modifie le texte, il faut 2 compilations pour que les changements de n° de ligne soient pris en compte. J'imagine que c'est normal...
_Poiuy_
Hecto-utilisateur
 
Messages: 69
Inscription: Mercredi 07 Avril 2010, 14:02
Statut actuel: Actif et salarié | Enseignant

Re: Commandes linelabel et lineref

Messagepar projetmbc » Jeudi 19 Août 2010, 12:15

_Poiuy_ a écrit:J'imagine que c'est normal...

Oui. De même pour une table des matières ou un index, il y a plusieurs compilations à faire.
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Grapeshot [Crawler], MSN [Bot] et 22 invités