Je cherche à créer un environnement qui permet d'afficher le code d'une figure metapost ainsi que la figure elle-même dans un document compilé avec lualatex et luamplib. J'ai essayé les packages showexpl et tcolorbox et je me heurte au même problème. Dans l'ECM ci-dessous, je souhaiterais que ne soient pas affichées dans le listing les lignes \documentclass{article} \usepackage{fontspec} \usepackage{luamplib} \usepackage{tcolorbox} \tcbuselibrary{listings} \DeclareTCBListing[auto counter]{codemp}{ !O{} } {title=Code \thetcbcounter, #1} \begin{document} \begin{codemp} \begin{mplibcode} beginfig(1); draw fullcircle scaled 3cm; endfig; \end{mplibcode} \end{codemp} \end{document} J'ai cherché dans deux directions :
Code qui ne fonctionne pas : \documentclass{article} \usepackage{fontspec} \usepackage{luamplib} \usepackage{tcolorbox} \tcbuselibrary{listings} \DeclareTCBListing[auto counter]{codemp}{ !O{} } {title=Code \thetcbcounter, before lower = \begin{mplibcode}, after lower = \end{mplibcode}, #1} \begin{document} \begin{codemp} beginfig(1); draw fullcircle scaled 3cm; endfig; \end{codemp} \end{document} Une piste ? Posée 11 Jul '22, 16:24 logamath |
Il suffit de modifier la définition de \def\tcbuselistingtext@input{\input{\kvtcb@listingfile}} en : \def\tcbuselistingtext@input{\begin{mplibcode} input \jobname.listing; \end{mplibcode}} En fait Afin de ne pas perturber d'autres environnements « tcblistings » on peut faire : \documentclass{article} \usepackage{fontspec} \usepackage{luamplib} \usepackage{tcolorbox} \tcbuselibrary{listings} \makeatletter \tcbset{% listing metapost/.code={% \def\tcbuselistingtext@input{\begin{mplibcode} input \jobname.listing; \end{mplibcode}}% } } \makeatother \DeclareTCBListing[auto counter]{codemp}{ !O{} }{ title=Code \thetcbcounter, listing metapost, #1} \begin{document} \begin{codemp} beginfig(1); draw fullcircle scaled 3cm; endfig; \end{codemp} \end{document} Publiée 12 Jul '22, 16:49 YannD |
Voici deux solutions en un fichier. Bien entendu, on peut encore améliorer la situation en créant une commande (ou en environnement) pour factoriser tout ça. J'utilise une fois \documentclass{article} \usepackage{fontspec} \usepackage{luamplib} \usepackage{fancyvrb} \usepackage{tcolorbox} \tcbuselibrary{listings} \tcbset{listing file=toto.mp} \begin{document} \begin{VerbatimOut}[gobble=0]{tata.mp} beginfig(1); draw fullcircle scaled 3cm; endfig; \end{VerbatimOut} \begin{mplibcode} input tata; \end{mplibcode} \VerbatimInput{tata.mp} \bigskip{} \begin{tcboutputlisting} beginfig(1); numeric u; u = 3cm; z0 = (0, 0); z1 = (u, 0); z2=(u, u); z3=(0, u); draw for k=0 upto 3: z[k]-- endfor cycle; endfig; \end{tcboutputlisting} \begin{mplibcode} input toto; \end{mplibcode} \tcbinputlisting{colback=green!5,colframe=green!75!black,listing only} \end{document} Publiée 12 Jul '22, 15:35 Le TeXnicien de surface Pathe ♦♦ regarder -> regardé :(
(12 Jul '22, 15:35)
Le TeXnicien de surface
@Le TeXnicien de surface : modification effectuée. Ce commentaire et le vôtre s'autodétruiront dans 24 heures.
(12 Jul '22, 18:08)
Pathe ♦♦
|
Essayer avec VerbatimOutput (package fancyvrb) pour exporter juste le code metapost puis récupérer le fichier avec VerbatimInput dans l'environnement codemp puis (ou avant) dans un environnement de style listing.
Pourquoi ne pas écrire deux environnements ?
C'est pour une formation metapost ? Cela m'intéresse :)
@Le Texnicien de surface En essayant fancyvrb, je me retrouve face au même problème : les lignes begin{mplibcode} et end{mplibcode} que j'aimerais supprimer du listing. J'ai trouvé dans la doc FancyVerbStartString et FancyVerbStopString qui pourraient m'aider mais ne semblent pas fonctionner avec begin{mplibcode} et end{mplibcode}. Je suppose que je devrais regarder du côté de l'environnement Example de fancyvrb-ex et le mofifier mais je ne suis pas sûr d'en être capable...
@christophe-poulain Non, ce n'est pas pour une formation :). C'était juste pour avoir quelques exemples mais une question en amène une autre et du coup, ça m'intéressait de savoir faire ça... À propos du code, je ne sais pas très bien comment l'utiliser. Ça oblige à taper deux fois le code metapost ? En tout cas, ça me permet de découvrir usrguide3.pdf et en particulier le +b de NewDocumentEnvironment qui est intéressant.