[Question annulé] Macros à paramètres indéfini

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.

[Question annulé] Macros à paramètres indéfini

Messagepar SimonPaulL » Vendredi 13 Janvier 2017, 20:35

Bonjour/bonsoir !
Suite à ce topic, j'ai décidé d'utiliser l'environnement Tasks pour disposer correctement mes équations.
Merci d'ailleurs à balf pour la suggestion :wink:.

Mon problème c'est que je voudrais utiliser une macros pour des raisons de lisibilité de facilité d'édition.
Seulement, le nombre de paramètre n'est pas connu à l'avance.

Exemple d'utilisation de Tasks:
Code: Tout sélectionner
\begin{tasks}[counter-format=\relax,item-indent=\parindent](2)
      \task
      $ \begin{aligned}[t]
     Z&=(x+3)^2-(2x+4)^2\\
        &=\Bigl[\sqrt{(x+3)^2}+\sqrt{(2x+4)^2}\Bigr]\\
        &\quad\times\Bigl[\sqrt{(x+3)^2}-\sqrt{(2x+4)^2}\Bigr]\\
        &=(x+3+2x+4)(x+3-2x-4)\\
        &=(3x+7)(-x-1)
      \end{aligned}$
     
      \task $ \begin{aligned}[t]
      Z&=(x+3)^2-(2x+4)^2\\
        &=\Bigl[\sqrt{(x+3)^2}+\sqrt{(2x+4)^2}\Bigr]\\
        &\quad\times\Bigl[\sqrt{(x+3)^2}-\sqrt{(2x+4)^2}\Bigr]\\
        &=(x+3+2x+4)(x+3-2x-4)\\
        &=(3x+7)(-x-1)
      \end{aligned} $

J'ai donc commencé la macros ainsi...
Code: Tout sélectionner
\newcommand\TasksEnv[x]{
    \begin{tasks}[counter-format=\relax,item-indent=\parindent](2)
        \task $ \begin{aligned}[t]
        #x
        \end{aligned}$
    \end{tasks}
}

NB : j'ai mit #x en attendant de trouvé la vrai commande.

...pour avoir une utilisation de ce type :
Code: Tout sélectionner
\TasksEnv{
    équation 1
}{
    équation 2
}

Comment faire une macros à paramètre indéfini et comment choisir le nombre de colonne directement dans la macros ?

Cordialement,
Simon

PS : Quelle est la différence entre \newcommand et \newcommand*
Dernière édition par SimonPaulL le Samedi 14 Janvier 2017, 01:40, édité 1 fois.
SimonPaulL
Déca-utilisateur
 
Messages: 15
Inscription: Vendredi 06 Janvier 2017, 19:09
Statut actuel: Lycée | 2nde

Publicité

Re: Macros à paramètres indéfini

Messagepar un bon petit » Vendredi 13 Janvier 2017, 21:09

SimonPaulL a écrit:Mon problème c'est que je voudrais utiliser une macros pour des raisons de lisibilité de facilité d'édition.
Seulement, le nombre de paramètre n'est pas connu à l'avance.

Le choix d'une macro n'est donc pas judicieux ; il me semble qu'un un environnement serait plus adapté ici, mais bon.
Voici donc un code avec une macro \foo où chaque argument à prendre en compte est enveloppé dans un argument unique :

Code: Tout sélectionner
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[margin=2cm]{geometry}
\usepackage{amsmath,tasks}
\newcommand*\fooquark{\fooquark}
\newcommand*\foo[1]{\toks0{\begin{tasks}[counter-format=\relax,item-indent=\parindent](2)}\fooi#1\fooquark}
\newcommand*\fooi[1]{%
   \ifx\fooquark#1\the\toks0 \end{tasks}%
   \else\toks0\expandafter{\the\toks0 \task $\begin{aligned}[t]#1\end{aligned}$}\expandafter\fooi
   \fi
}
\begin{document}
\foo{
   {M &= (23x+1) (-17x+1) + (23x+1)^2\\
      &= (23x+1) \left[(-17x+1) + (23x+1)\right]\\
      &= (23x+1) (6x+2)}
   {E &= (6x+23)(6x-5)-(19x-6)(5-6x)\\
      &=(6x+23)(6x-5)+(6x-5)(19x-6)\\
      &=(6x-5)(6x+23+19x-6)\\
      &= (6x-5)(25x+17)}
   {E &= (6x+23)(6x-5)-(19x-6)(5-6x)\\
      &=(6x+23)(6x-5)+(6x-5)(19x-6)\\
      &=(6x-5)(6x+23+19x-6)\\
      &= (6x-5)(25x+17)}
   {M &= (23x+1) (-17x+1) + (23x+1)^2\\
      &= (23x+1) \left[(-17x+1) + (23x+1)\right]\\
      &= (23x+1) (6x+2)}
}
\end{document}


SimonPaulL a écrit:Comment faire une macros à paramètre indéfini et comment choisir le nombre de colonne directement dans la macros ?

Je n'ai rien compris à la question.

SimonPaulL a écrit:Quelle est la différence entre \newcommand et \newcommand*

Une petite recherche sur internet ne fait pas de mal avant de poser la question, c'est trouvable partout puisque c'est la base !
La version étoilée définit une macro "courte" et la version non étoilée définit une macro "longue" (le sens que revêtent ces mots en TeX est à chercher sur internet !).
un bon petit
Giga-utilisateur
 
Messages: 634
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Macros à paramètres indéfini

Messagepar SimonPaulL » Samedi 14 Janvier 2017, 00:27

un bon petit a écrit:Le choix d'une macro n'est donc pas judicieux ; il me semble qu'un un environnement serait plus adapté ici

Je n'ai rien a contre un environnement du moment que je peux éditer facilement son code et que c'est plus lisible.
Si vous trouez que c'est mieux, je redéfini ma question :
Comment créer un environnement utilisant Tasks et aligned ?

un bon petit a écrit:Je n'ai rien compris à la question.

C'est ma faute, je l'ai mal posé
Code: Tout sélectionner
\begin{tasks}[counter-format=\relax,item-indent=\parindent](2)

je voudrais pouvoir changer le 2 en 3 si jamais je veux 3 colonnes.

EDIT : après avoir feuilleté la documentation de Tasks, il semblerait que le réduire à un environnement simple gâcherait tout son potentiel. J'abandonne donc mon idée de macros.
SimonPaulL
Déca-utilisateur
 
Messages: 15
Inscription: Vendredi 06 Janvier 2017, 19:09
Statut actuel: Lycée | 2nde

Re: Macros à paramètres indéfini

Messagepar un bon petit » Samedi 14 Janvier 2017, 10:59

SimonPaulL a écrit:[b]après avoir feuilleté la documentation de Tasks, il semblerait que le réduire à un environnement simple gâcherait tout son potentiel. J'abandonne donc mon idée de macros.

Le potentiel de l'environnement tasks se trouve surtout dans la souplesse offerte pour la numérotation. D'ailleurs, c'est ce que dit le manuel, ce package est surtout utile pour numéroter des questions en lignes.

Ceci dit, j'ai lu le code du package et ce qu'il est fait est extrêmement proche de l'approche par minipage : il découpe le tout en équations ( ce qui se trouve entre chaque mot "\task"), met une équation dans une boite de largeur appropriée, mets les boites côte à côte jusqu'à en voir le nombre demandé puis passe à la ligne suivante et recommence (voir macro \__tasks_task, ligne 156 et suivantes).

Voici une approche similaire, qui est bien plus simple puisqu'elle ne 'occupe pas de numérotation des items :

Code: Tout sélectionner
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[margin=2cm]{geometry}
\usepackage{amsmath}
\def\colsepdim{3em}
\newcount\colcnt
\newcommand*\neweq[1][1]{% #1=arg optionnel : nombre de multicolonnes
   \closebox
   \advance\colcnt\multicolnum\relax
   \ifnum\colcnt>1
      \ifnum\colcnt=\numexpr\colnum+1\relax
         \unskip\bigbreak\leavevmode\colcnt=1
      \else
         \hskip\colsepdim\relax
      \fi
   \fi
   \ifnum\numexpr(#1)\if\relax\detokenize{#1}\relax*0\fi\relax>0
      \edef\multicolnum{\ifnum#1>\colnum\space\colnum\else#1\fi}%
      \ifnum\numexpr\colcnt+#1-1\relax>\colnum\relax
         \unskip\bigbreak\leavevmode\colcnt=1
      \fi
   \else
      \def\multicolnum{1}%
   \fi
   \vtop\bgroup\hsize=\dimexpr\colwidth*\multicolnum+\colsepdim*(\multicolnum-1)\relax
      \linewidth=\hsize% au cas où...
      \catcode`\==13 \begingroup\lccode`\~`\=\lowercase{\endgroup\edef~}{&\string=}%
      $\begin{aligned}[t]\ignorespaces
}
\newenvironment{eqcol}[1][2]{%
   \def\multicolnum{1}\def\colnum{#1}\let\>\neweq \parindent0pt \colcnt0 \medbreak
   \def\closebox{\def\closebox{\end{aligned}$\egroup}}%
   \edef\colwidth{\the\dimexpr(\linewidth-\colsepdim*(#1-1))/(#1)}%
   \leavevmode\>%
}{\closebox\medbreak\ignorespaces}
\begin{document}
Début
\begin{eqcol}[4]
   A=1+1+2+3\\
   =2+2+3\\
   =4+3\\
   =7
\>[2]% 2 colonnes pour l'équation suivante
   B=(x-2)(x+1)-(x-3)(x+2)\\
   =x^2+x-2x-2-(x^2+2x-3x-6)\\
   =x^2+x-2x-2-x^2-2x+3x+6\\
   =4
\>
   C=2+3+4\\
   =5+4\\
   =9
\>
   D=x+2x+3x\\
   =3x+3x\\
   =6x
\>
   E=(x+1)(x-1)\\
   =x^2+x-x+1\\
   =x^2-1
\>
   F=(1-2x)(1+x)\\
   =1+x-2x-2x^2\\
   =1-x-2x^2
\>[2]
   G= (6x+23)(6x-5)-(19x-6)(5-6x)\\
   =(6x+23)(6x-5)+(6x-5)(19x-6)\\
   =(6x-5)(6x+23+19x-6)\\
   = (6x-5)(25x+17)
\>
   H=1+2+3+4+5\\
   =2+3+4+5\\
   =5+4+5\\
   =9+5\\
   =14
\>
   I=1+x-(1-x)\\
   =1+x-1+x\\
   =2x
\end{eqcol}
Suite
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 634
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: [Question annulé] Macros à paramètres indéfini

Messagepar SimonPaulL » Dimanche 15 Janvier 2017, 00:08

Merci de m'avoir répondu.
Cordialement,
Simon
SimonPaulL
Déca-utilisateur
 
Messages: 15
Inscription: Vendredi 06 Janvier 2017, 19:09
Statut actuel: Lycée | 2nde


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Alexa [Bot], Bing [Bot], DotBot [Crawler], Grapeshot [Crawler], Proximic [Spider] et 18 invités