Bonsoir, J'ai créé cette image pour transcrire des problèmes sous forme de diagramme. J'utilise Metapost et LaTeX pour l'accolade. Existe-t-il, sous LaTeX, des accolades "plus englobantes", c'est-à-dire dans mon cas, des accolades dont les extrêmités remonteraient jusqu'à mi-hauteur des rectangle 2 et 3 ? Posée 10 Déc '19, 23:35 christophe-poulain Pathe ♦♦ |
Bon, j'ai suivi vos idées en recréant une accolade sous metapost :). J'ai adapté le code trouvé ici : https://tex.stackovernet.com/fr/q/67363 Voici le code : Ouvrir dans l'éditeur Overleaf
\documentclass{article} \usepackage[shellescape]{gmp} \begin{document} \begin{mpost} prologues:=2; u:=1cm; vardef braceh_label(expr s,a,b) text t_ = save m,theta; pair m; theta := angle (b-a); m := .5[a,b]+(10 up rotated theta); label.top(s,m) rotatedabout(m, theta) t_; draw (a+(1 left + 5 down)){dir (90-theta)} .. a+(2 up rotated theta) { dir (60+theta) } .. a+((6,6) rotated theta) -- m+((-6,-4) rotated theta) .. { dir (60+theta) } m { dir (theta-60) } .. m+((+6,-4) rotated theta) -- b+((-6,6) rotated theta) .. { dir (theta-60) } b+(2 up rotated theta) .. { dir (theta-90) } b+(1 right+5down) withpen pencircle scaled .4 t_; enddef; vardef braceb_label(expr s,a,b) text t_ = save m,theta; pair m; theta := angle (b-a); m := .5[a,b]+(10 down rotated -theta); label.bot(s,m) rotatedabout(m, theta) t_; draw (a+(1 left + 5 up)){dir (-90+theta)} .. a+(2 down rotated -theta) { dir (-60-theta) } .. a+((6,-6) rotated -theta) -- m+((-6,4) rotated -theta) .. { dir (-60-theta) } m { dir (-theta+60) } .. m+((+6,4) rotated -theta) -- b+((-6,-6) rotated -theta) .. { dir (-theta+60) } b+(2 down rotated -theta) .. { dir (-theta+90) } b+(1 right+5 up) withpen pencircle scaled .4 t_; enddef; vardef Bloc(expr tt)= save Bb; if numeric tt: path Bb; Bb=u*(-0.5,-0.25)--u*(0.5,-0.25)--u*(0.5,0.25)--u*(-0.5,0.25)--cycle; elseif picture tt: picture Bb; Bb=tt; fi; Bb enddef; boolean visible[]; visible1=false; visible2=false; visible3=false; vardef Groupe(expr base,aa,bb,cc,op)=%base est une paire; a,b,c les composants, op l'opération sous forme classique save $; picture $; pair Base[]; Base1=base+u*(-1.5,0.85); Base2=base+u*(0,0.85); Base3=2[Base1,Base2]; $=image( draw Bloc(aa) shifted Base1; draw Bloc(bb) shifted Base3; draw Bloc(cc) shifted base; if op="m": label(btex $\times$ etex,Base2); fi; if op="a": label(btex $+$ etex,Base2); fi; if op="s": label(btex $-$ etex,Base2); fi; if op="d": label(btex $\div$ etex,Base2); fi; if visible1: if numeric aa: label(""&decimal(aa)&"",Base1); fi; fi; if visible2: if numeric bb: label(""&decimal(bb)&"",Base3); fi; fi; if visible3: if numeric cc: label(""&decimal(cc)&"",base); fi; fi; braceb_label("",Base1+u*(-0.6,-0.15),Base3+u*(0.6,-0.15)); ); $ enddef; beginfig(1); picture BB[]; visible1:=true; visible2:=true; BB1=Groupe(u*(0,0),2,3,6,"m"); visible1:=false; BB2=Groupe(u*(0,0),BB1,5,3,"a"); BB3=Groupe(u*(0,0),20,BB2,3,"s"); draw BB3; endfig; end \end{mpost} \end{document} Publiée 11 Déc '19, 22:14 christophe-poulain |
Et pour finir, la solution avec Ouvrir dans l'éditeur Overleaf
\documentclass[svgnames]{article}% \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{fourier, erewhon} \usepackage{pstricks-add} \usepackage{auto-pst-pdf} \begin{document} \[ \pnode[-1em, 1.2ex]{A}\framebox[2em]{2}\hspace{5em}\times \hspace{5em}\framebox[2em]{3} \pnode[1em,1.2ex]{B} \psset{linejoin=1, braceWidth=1.2pt, braceWidthInner=16pt, braceWidthOuter=6pt, linecolor=RoyalBlue} \psbrace*[ref=tC, nodesepB=0.2ex](A)(B){\framebox[2em]{\phantom{2}}} \] \end{document} Publiée 11 Déc '19, 02:04 Bernard merci, je vais voir si c'est compatible avec mon usage de metapost.
(11 Déc '19, 18:23)
christophe-poulain
|
Avec TikZ : on peut reprendre le code qui crée les accolades ( Ouvrir dans l'éditeur Overleaf
\documentclass{article} \usepackage{tikz} \usetikzlibrary{decorations.pathreplacing,calligraphy,calc} \makeatletter %% cf. tikzlibrarycalligraphy.code.tex \pgfdeclaredecoration{my calligraphic brace}{brace} { \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final] { \pgfsyssoftpath@setcurrentpath{\pgfutil@empty} \pgfpathmoveto{\pgfpointorigin} \pgfpathmoveto{\pgfqpoint{1mm}{-2mm}} %% cette ligne modifie le point de départ \pgfpathcurveto {\pgfqpoint{.15\pgfdecorationsegmentamplitude}{.3\pgfdecorationsegmentamplitude}} {\pgfqpoint{.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} {\pgfqpoint{\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} { \pgftransformxshift{+\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance} \pgfpathlineto{\pgfqpoint{-\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} \pgfpathcurveto {\pgfqpoint{-.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} {\pgfqpoint{-.15\pgfdecorationsegmentamplitude}{.7\pgfdecorationsegmentamplitude}} {\pgfqpoint{0\pgfdecorationsegmentamplitude}{1\pgfdecorationsegmentamplitude}} \pgfpathmoveto{\pgfqpoint{0\pgfdecorationsegmentamplitude}{1\pgfdecorationsegmentamplitude}} \pgfpathcurveto {\pgfqpoint{.15\pgfdecorationsegmentamplitude}{.7\pgfdecorationsegmentamplitude}} {\pgfqpoint{.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} {\pgfqpoint{\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} } { \pgftransformxshift{+\pgfdecoratedremainingdistance} \pgfpathlineto{\pgfqpoint{-\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} \pgfpathcurveto {\pgfqpoint{-.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}} {\pgfqpoint{-.15\pgfdecorationsegmentamplitude}{.3\pgfdecorationsegmentamplitude}} {\pgfqpoint{-1mm}{-2mm}} %% cette ligne modifie le point d'arrivée } \tikzset{ taper width=.5\pgflinewidth, taper }% \pgfsyssoftpath@getcurrentpath\cal@tmp@path \MakeSPathList{calligraphy path}{\cal@tmp@path}% \SPathListPrepare{calligraphy path}% \CalligraphyPathCreate{calligraphy path}{copperplate}% } \state{final}{} } \makeatother \begin{document} \begin{tikzpicture} \draw (0,1) node[draw] (2) {2}; \draw (3,1) node[draw] (3) {3}; \draw[decoration={my calligraphic brace,amplitude=4mm,mirror,raise=-1mm},decorate,line width=1.3pt] ($(2.south west)+(-2mm,0)$) -- ($(3.south east)+(2mm,0)$); \end{tikzpicture} \end{document} Merci. JE vais voir si c'est compatible avec mon usage de metapost.
(11 Déc '19, 18:23)
christophe-poulain
La dernière extension de Metapost devrait aussi permettre de le faire, car elle introduit la notion de nodes.
(16 Déc '19, 16:25)
sztruks
|