Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 2

09 Mar '23, 19:21

Mathieu2L's gravatar image

Mathieu2L
356518

TikZ (avec listings et tikzmark) : shift vertical

Je cherche, à coté d'un code mis en forme avec le package `listing`, à ajouter du texte à droite de certaines lignes, via le package `tikzmark` : l'idée est de partir de la marque automatiquement placée à la fin d'une ligne par `tikzmark` pour tracer une flèche et mettre le texte à l'extrémité de cette flèche. (L'intérêt étant de commenter quelques lignes du code.) Mon objectif est que chacun de ces textes soient alignés horizontalement sans que j'ai à définir par essai-erreur la longueur de chaque flèche. D'un point de vue TikZ, le problème se résume donc à : je dispose d'une abscisse x et d'un point A ; A est défini par le système de coordonnées (pic cs:). Je souhaite définir le point de même ordonnée que A et d'abscisse égale à x. Problème : je n'arrive pas à le faire simplement (car je suis clairement noyé dans les différentes possibilités de TikZ...). Voici un code permettant de bien voir ce que je souhaite et résumant mes tentatives. \documentclass[french]{article} \usepackage{listings} \usepackage{tikz} \usetikzlibrary{tikzmark} \usetikzmarklibrary{listings} \usepackage{babel} \begin{document} \begin{lstlisting}[name=codetest,numbers=left] boucle: ab cd efghijkl mn opqr stuvw xyz \end{lstlisting} \begin{tikzpicture}[remember picture] \draw[<-,overlay] (pic cs:line-codetest-1-end) -- (7,0 |- {pic cs:line-codetest-1-end}) node[right]{problème}; \draw[<-,overlay] ([shift={(0,0.1)}]pic cs:line-codetest-3-end) -- (7,0 |- {pic cs:line-codetest-3-end}) node[right]{échec 2a}; \draw[<-,overlay] (pic cs:line-codetest-4-end)++(0,0.1) -- (7,0 |- {pic cs:line-codetest-4-end}) node[right]{échec 2b}; \draw[<-,overlay,yshift=0.1] (pic cs:line-codetest-5-end) -- (7,0 |- {pic cs:line-codetest-5-end}) node[right]{échec 3}; \path[overlay] (pic cs:line-codetest-6-end)++(0,0.1) node (ligne6){}; \draw[<-, overlay] (ligne6) -- (7,0 |- ligne6) node[right]{réussite 1}; \path[overlay] ([yshift=0.5ex]pic cs:line-codetest-7-end) node (ligne7){}; \draw[<-, overlay] (ligne7) -- (7,0 |- ligne7) node[right]{réussite 2}; \end{tikzpicture} problème: le point de départ est defini par tikzmark comme en bas de la ligne: j'aimerais qu'il soit au milieu échecs 2a et 2b: j'arrive à shifter le point de départ mais pas le point d'arrivée. Je n'arrive à pas décaler le point défini grâce à (7,0 |- {pic cs:line-codetest-4-end}) (que ce soit par shift ou par coordonnées relatives ++) échec 3: j'essaye de shifter d'un coup le tracé mais ça ne fonctionne pas. réussites 1 et 2: résultat satisfaisant mais j'ai dû passer par la (re)définition du point de départ. \end{document} Questions (qui sont liées) : 1. Pourquoi les Y a-t-il un changement simple à apporter aux lignes échecs 2a, échecs 2b et échecs 3 échouent pour qu'elles fassent ce que j'attends ? 2. Est-il possible d'obtenir le résultat des lignes réussite 1 et réussite 2 sans avoir à définir les points `ligne6` et `ligne7` ?
cliquez ici pour masquer/afficher la révision 1

09 Mar '23, 19:19

Mathieu2L's gravatar image

Mathieu2L
356518

TikZ (avec listings et tikzmark) : shift vertical

Je cherche, à coté d'un code mis en forme avec le package `listing`, à ajouter du texte à droite de certaines lignes, via le package `tikzmark` : l'idée est de partir de la marque automatiquement placée à la fin d'une ligne par `tikzmark` pour tracer une flèche et mettre le texte à l'extrémité de cette flèche. (L'intérêt étant de commenter quelques lignes du code.) Mon objectif est que chacun de ces textes soient alignés horizontalement sans que j'ai à définir par essai-erreur la longueur de chaque flèche. D'un point de vue TikZ, le problème se résume donc à : je dispose d'une abscisse x et d'un point A ; A est défini par le système de coordonnées (pic cs:). Je souhaite définir le point de même ordonnée que A et d'abscisse égale à x. Problème : je n'arrive pas à le faire simplement (car je suis clairement noyé dans les différentes possibilités de TikZ...). Voici un code permettant de bien voir ce que je souhaite et résumant mes tentatives. \documentclass[french]{article} \usepackage{listings} \usepackage{tikz} \usetikzlibrary{tikzmark} \usetikzmarklibrary{listings} \usepackage{babel} \begin{document} \begin{lstlisting}[name=codetest,numbers=left] boucle: ab cd efghijkl mn opqr stuvw xyz \end{lstlisting} \begin{tikzpicture}[remember picture] \draw[<-,overlay] (pic cs:line-codetest-1-end) -- (7,0 |- {pic cs:line-codetest-1-end}) node[right]{problème}; \draw[<-,overlay] ([shift={(0,0.1)}]pic cs:line-codetest-3-end) -- (7,0 |- {pic cs:line-codetest-3-end}) node[right]{échec 2a}; \draw[<-,overlay] (pic cs:line-codetest-4-end)++(0,0.1) -- (7,0 |- {pic cs:line-codetest-4-end}) node[right]{échec 2b}; \draw[<-,overlay,yshift=0.1] (pic cs:line-codetest-5-end) -- (7,0 |- {pic cs:line-codetest-5-end}) node[right]{échec 3}; \path[overlay] (pic cs:line-codetest-6-end)++(0,0.1) node (ligne6){}; \draw[<-, overlay] (ligne6) -- (7,0 |- ligne6) node[right]{réussite 1}; \path[overlay] ([yshift=0.5ex]pic cs:line-codetest-7-end) node (ligne7){}; \draw[<-, overlay] (ligne7) -- (7,0 |- ligne7) node[right]{réussite 2}; \end{tikzpicture} problème: le point de départ est defini par tikzmark comme en bas de la ligne: j'aimerais qu'il soit au milieu échecs 2a et 2b: j'arrive à shifter le point de départ mais pas le point d'arrivée. Je n'arrive à pas décaler le point défini grâce à (7,0 |- {pic cs:line-codetest-4-end}) (que ce soit par shift ou par coordonnées relatives ++) échec 3: j'essaye de shifter d'un coup le tracé mais ça ne fonctionne pas. réussites 1 et 2: résultat satisfaisant mais j'ai dû passer par la (re)définition du point de départ. \end{document} Questions (qui sont liées) : 1. Pourquoi les lignes échecs 2a, échecs 2b et échecs 3 échouent ? 2. Est-il possible d'obtenir le résultat des lignes réussite 1 et réussite 2 sans avoir à définir les points `ligne6` et `ligne7` ?

C'est votre première visite ici ? Consultez la FAQ !

×