J'ai cru comprendre au travers de la définition de la commande La commande Mais justement, si l'on souhaite utiliser la boîte Ouvrir dans l'éditeur
\newbox\@@labels \def\sv@labels{\setbox\@@labels\box\@labels} \def\r@labels{\setbox\@labels\box\@@labels} \output\expandafter{\expandafter\sv@labels\the\output\r@labels}
Affichage de 5 parmi 21
Afficher 16 commentaire(s) en plus
|
Merci pour votre réponse. Je viens de rentrer, je vais regarder plus attentivement mais d'emblée plusieurs choses me dérangent :
La placer dans la boîte À noter que l'on peut contourner le problème par diverses méthodes « simples ». Je me permets de mentionner le lien suivant : http://tex.stackexchange.com/questions/14000/enumerate-after-label Utiliser le package
(23 Déc '15, 23:33)
bcfp
Comme je le disais plus tôt, je pense avoir une solution autour des seules commandes Merci pour votre aide.
(23 Déc '15, 23:36)
bcfp
Comme vous avez déjà déclaré redéfinir
(24 Déc '15, 09:45)
touhami
De H. O. ? Pourriez-vous être plus clair ?
(24 Déc '15, 11:26)
Pathe ♦♦
|
Tel quel, votre code n'est pas vraiment compréhensible... Sinon, quel est l'objectif réel derrière tout ça ?
Pardon mais les contre-obliques ne sont pas sorties...
L'objectif réel est de bricoler un peu le package hyperref pour les environnements de théorèmes. Je me disais que peut-être les ancres pourraient être placées à l'intérieur de la boîte @labels...
@bcfp Attention ! Les contre-obliques (
\
) saisies telles quelles dans les contributions ne sont pas visibles.Pour insérer du
⟨code⟩
, notamment des commandes LaTeX, le mieux est de recourir au raccourci Ctrl+k (dans les questions et réponses) et à`⟨code⟩`
(dans les commentaires).Cf., au sein de la FAQ, le paragraphe « Comment mettre en forme ma contribution ? »
@bcfp Pourquoi ne pas exposer plus clairement votre besoin réel, plutôt que de poser une question sur ce que vous croyez être la solution ? À mon avis, l'ajout d'ancres hyperref dans l'environnement
theorem
(ou autres) ne passe absolument pas par une modification de la routine de sortie...@Pathe Merci, je n'avais pas vu le paragraphe sur le code, je vais essayer de m'améliorer !
@PaulGaborit Je ne comprends pas, je me demandais juste si cette méthode utilisée notamment pour l'option
excludeor
du packageeveryhook
était valable (l'auteur de ce package parle d'option plutôt expérimentale) et si elle pouvait être utilisée autour de la boîte\@labels
.Dans l'affirmative, les ancres des théorèmes et
item
dehyperref
pourraient y être placées, juste une idée. En particulier, unamsthm
qui démarre par une liste ne serait plus un problème. Mais si la boîte\@labels
contient une ancre alors que TeX appelle la routine de sortie...\@labels
(box
) est utilisé par\item
pour stocker l'étiquette (label
) et ceci juste pour un petit moment (avant que latex commence la composition de paragraphe), donc si vous voulez sauvegarder son contenue la bonne place est lors ou juste après\item
sinon il sera trop tard.@touhami Je crois que la commande
\@item
est construite de sorte que\@labels
est vide lorsque TeX appelle la routine de sortie. La commande\item
peut donc, sans problème, être appelée pour un pied pied de page.Mais supposons que l'on demande à la commande
\refstepcounter
qui intervient dans le texte de remplacement de\@thm
(ltthm.dtx
) de placer une ancre dans\@labels
; comme\refstepcounter
intervient avant\item[...]
lors d'un\begin{thm}
, il est possible que TeX appelle la routine au niveau du\addpenalty\@beginparpenalty
alors que\@labels
n'est pas vide !D'ailleurs, il me semble qu'à cette heure la situation suivante peut se produire :
\begin{thm}
entraîne via\refstepcounter
le dépôt d'une ancre dans la liste verticale, avant\item[...]
; donc si TeX coupe au niveau du\@beginparpenalty
, le théorème se trouve sur une page et le lien renvoie à la page précédente.Sauf si l'on utilise
amsthm
; en effet,hyperref
place alors l'ancre viaeverypar
juste avant\unhbox\@labels
. Mais c'est alors problématique si l'on souhaite commencer un théorème par une liste (car le\item
de la liste redéfinieverypar
et adieu l'ancre...).c'est plus clair maintenant.
J'ai relu hier soir la documentation du package
everyhook
et l'auteur précise (je n'avais pas vu) que son optionexcludeor
basée sur la méthode\output\expandafter{\expandafter\save\expandafter\the\output\restore}
peut aider à éviter les catastrophes mais peut poser problème avec d'autres packages qui modifient également la routine.Donc à éviter autant que possible, je ne sais pas...
Je pensais à une autre façon en ajoutant un interrupteur dans
\@thm
et en revoyant les définitions de\item
,\refstepcounter
et\hyper@refstepcounter
données parhyperref
, mais c'est lourd.Voulez-vous utiliser
amsthm
ou non? Dans les deux cas pas besoin de modifier\output
.@bcfp Encore une fois, votre question n'est pas claire car vous n'expliquez toujours pas à quoi tout cela doit servir au final !
@bcfp Je souscris aux remarques de @Paul Gaborit : la demande est obscure et j'ai l'impression que tu cherches midi à 14 heures !
Je cherche une méthode pour pallier le défaut mentionné entre autres sur le site
tex.stackexchange
(lien après la réponse de touhami).Des intervenants proposent diverses méthodes de contournements : utiliser
ntheorem
plutôt queamsthm
ou encore utiliser la commande\phantomsection
.Puis l'auteur du package
hyperref
revient sur l'utilisation de\phantomsection
en invoquant la commande\autoref
et propose une solution locale.En plus de ce problème lié à l'utilisation de
amsthm
(un problème d'ailleurs mentionné dans la notice de ce package), si l'on utilise le packagentheorem
, je crois qu'il est possible que TeX appelle la routine de sortie entre le moment oùhyperref
dépose l'ancre et le moment où la boîte\@labels
contenant l'étiquette est posée (au niveau du\addpenalty\@beginparpenalty
qui apparaît dans le texte de remplacement de\@item
), donc éventuellement de se retrouver avec un théorème écrit sur une page et un lien qui renvoie à la page précédente. Non ?Je me disais alors que peut-être
hyperref
pourrait déposer les ancres desitem
et théorèmes à l'intérieur de la boîte\@labels
, ce qui réglerait peut-être tous ces soucis...Mais, en revenant sur l'utilisation du package
ntheorem
, si l'on dépose l'ancre du théorème dans la boîte\@labels
au niveau du\refstepcounter
, rebelote, TeX peut appeler la routine de sortie au niveau du\addpenalty\@beginparpenalty
de la commande\@item
alors que la boîte\@labels
n'est pas vide, ce qui est gênant car unitem
en pied de page par exemple va dire (via\@item
) :\global\setbox\@labels\hbox{**\unhbox\@labels**...}
!D'où ma question initiale : la méthode autour de
\output
que j'ai mentionnée au tout début, une méthode que je tire du packageeveryhook
, vous semble-t-elle acceptable ?Mais finalement je crois que l'on peut faire autrement, s'arranger pour mettre l'ancre dans la boîte
\@labels
après le\addpenalty\@beginparpenalty
et éviter un recours à cette manipulation.C'est peut-être chercher midi à 14h effectivement, je ne sais pas...
En tout cas merci pour vos réponses et commentaires.
@bcfp Je vous suggère d'intégrer dans votre question tous les éléments d'information dispersés dans vos commentaires afin que la question soir claire et complète (le contexte, l'objectif, les solutions envisagées, etc.). Ensuite, nous pourrons supprimer tous les commentaires et tenter de répondre...