pCloud Premium

[Résolu] Ecriture d'une commande

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.
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.

[Résolu] Ecriture d'une commande

Messagepar pzorba75 » Dimanche 05 Avril 2020, 06:11

Bonjour à tous,
je cherche comment écrire une commande Latex que j'emploierai pour définir une fonction par son nom ou l'image d'une expression par cette fonction. J'ai essayé :

Code: Tout sélectionner
\newcommand*\fm[1]{\ensuremath{f_m\left({#1}\right)}}


quand j'écris
Code: Tout sélectionner
\fm{x}\textrm{ ou }\fm{\dfrac{\pi}{m}}

j'obtiens l'écriture désirée, la taille des parenthèses s'ajustant automatiquement.
En revanche, quand j'écris :
Code: Tout sélectionner
\fm{}

j'obtiens les parenthèses, alors que je ne le désire pas.
Ma question : Comment définir un commande pour obtenir ce mécanisme, quitte à passer par une version étoilée pour ignorer les parenthèse quand le paramètre est omis?

Merci d'avance pour l'aide apportée.
Pierre

Je place un ECM :
Code: Tout sélectionner
\documentclass[a4paper,10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[french]{babel}
\DecimalMathComma
\usepackage{mathrsfs,amssymb,mathtools}
\usepackage[french]{algorithm2e}
\everymath{\displaystyle}
\newcommand*\fm[1]{\ensuremath{f_m\left({#1}\right)}}

\begin{document}

Exemples d'utilisation de la commande :

Soit $m$ un paramètre réel non nul et $f_m$ la fonction définie sur R par \linebreak$\fm{x}=\cos{\left(mx\right)}$ ou $\fm{\dfrac{\pi}{m}}=\cos{\pi}$, le résultat obtenu me semble correct.


Soit la fonction $\fm{}\colon x\mapsto\cos{\left(mx\right)}$ avec les parenthèses non désirées.

\end{document}
Dernière édition par pzorba75 le Dimanche 05 Avril 2020, 10:33, édité 1 fois.
On se lasse de tout, excepté d'apprendre.
Virgile
pzorba75
Kilo-utilisateur
 
Messages: 195
Inscription: Mardi 20 Août 2013, 03:50
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Ecriture d'une commande

Messagepar gigiair » Dimanche 05 Avril 2020, 08:15

Il suffit de tester si l'argument est vide. Le package ifmtarg est fait pour ça
Votre code modifié
Dernière édition par gigiair le Dimanche 05 Avril 2020, 08:22, édité 1 fois.
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2509
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Re: Ecriture d'une commande

Messagepar un bon petit » Dimanche 05 Avril 2020, 08:19

Pas besoin de charger un package supplémentaire pour tester si un argument est vide ou pas, cela se programme très simplement avec un simple test \ifcat de TeX :
Code: Tout sélectionner
\newcommand*\fm[1]{\ensuremath{f_m\ifcat\relax\detokenize{#1}\relax\else\left({#1}\right)\fi
un bon petit
Giga-utilisateur
 
Messages: 780
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Ecriture d'une commande

Messagepar gigiair » Dimanche 05 Avril 2020, 08:40

un bon petit a écrit:Pas besoin de charger un package supplémentaire pour tester si un argument est vide ou pas, cela se programme très simplement avec un simple test \ifcat de TeX :
Code: Tout sélectionner
\newcommand*\fm[1]{\ensuremath{f_m\ifcat\relax\detokenize{#1}\relax\else\left({#1}\right)\fi

Ça ne marche pas.
Mon ECM et une partie du log
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2509
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Re: Ecriture d'une commande

Messagepar un bon petit » Dimanche 05 Avril 2020, 08:59

Je n'ai pas été voir votre ECM ni votre log, car je ne souhaite pas aller sur un autre site pour lire du code, il n'est pas très difficile de faire le (petit) effort de poster le code ici, au moins ça a l'avantage de la pérennité.
Bref, ceci dit, j'ai oublié les accolades fermantes à la fin, mon bouton de souris n'arrête pas de dysfonctionner, c'est ultra-pénible. Un effet du confinement ? Il faudrait que je passe à l'OS emacs, pour ne plus avoir à me servir de la souris pour sélectionner du texte :mrgreen:
Code: Tout sélectionner
\documentclass{article}
\newcommand*\fm[1]{\ensuremath{f_m\ifcat\relax\detokenize{#1}\relax\else\left({#1}\right)\fi}}
\begin{document}
\fm{} et \fm{a}
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 780
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Ecriture d'une commande

Messagepar gigiair » Dimanche 05 Avril 2020, 09:30

C'est pas un site pour lire du code, c'est un pastebin. Pour moi, c'est beaucoup plus rapide à poster que de faire un copier-coller ici.
Au passage, l'extension ifmtarg c'est 9 lignes de code en tout et pour tout. Je n'ai pas remarqué de ralentissement notable à l'exécution en l'appelant.
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2509
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Re: Ecriture d'une commande

Messagepar pzorba75 » Dimanche 05 Avril 2020, 10:33

Merci pour ces deux réponses, très concises et qui vont me simplifier la saisie dans ce type d'exercices. J'édite en Résolu
Je me demande toujours s'il existe une ruse" pour éviter de saisir les {} à la fin d'une commande pour éviter qu'elle mange le caractère qui suit. J'ai essayé, sans succès, \xspace, mais je bute toujours et reste obligé de taper \fm{}. si je veux fermer la phrase avec un point.
On se lasse de tout, excepté d'apprendre.
Virgile
pzorba75
Kilo-utilisateur
 
Messages: 195
Inscription: Mardi 20 Août 2013, 03:50
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: Ecriture d'une commande

Messagepar un bon petit » Dimanche 05 Avril 2020, 20:55

gigiair a écrit:C'est pas un site pour lire du code, c'est un pastebin. Pour moi, c'est beaucoup plus rapide à poster que de faire un copier-coller ici.

Je sais, mais c'est plus long pour les utilisateurs et cela pose la question de la pérennité des codes postés. Après, vous ne faites pas 200 interventions ici par jour, donc la perte de temps est assez minime, il me semble.
Tiens, je vous pose une vraie question (pour une fois :mrgreen: ) sur emacs, ça sera sans doute la dernière, car je ne l'utilise pas et ne l'utiliserai pas, cet outil ne m'intéressant pas. Est-il possible de définir une combinaison de touches qui fait l'action suivante : copier le code sélectionné (ou tout le code si rien n'est sélectionné), en insérant au début de ce code les caractères "<crochet>code<crochet>" et à la fin "<crochet>/code<crochet>" ? Si cela est possible -- et je ne doute pas qu'une pointure comme vous n'en fasse qu'un jeu trivial --, alors c'est gagné : il vous suffit de coller ce qui copié dans les messages que vous écrivez ici et on aura tous les avantages. Vous continuerez à aller vite et les contributeurs du site verront vos codes sans aller sur un site tiers.

gigiair a écrit:Au passage, l'extension ifmtarg c'est 9 lignes de code en tout et pour tout. Je n'ai pas remarqué de ralentissement notable à l'exécution en l'appelant.

Il ne me semble pas avoir dit que cela ralentissait quoi que ce soit. il y a un détail tout de même : puisque cette extension est codée avec des macros à arguments (et que les espaces sont ignorés comme arguments des macros), alors un argument constitué d'un espace est considéré comme vide. Il suffit de le savoir...

pzorba75 a écrit:Je me demande toujours s'il existe une ruse" pour éviter de saisir les {} à la fin d'une commande pour éviter qu'elle mange le caractère qui suit. J'ai essayé, sans succès, \xspace, mais je bute toujours et reste obligé de taper \fm{}. si je veux fermer la phrase avec un point.

Pourtant, c'est bien avec l'extension xspace que l'on arrive à faire ce genre de choses.
Une proposition :
Code: Tout sélectionner
\documentclass{article}
\usepackage{xspace}
\newcommand*\fm{\futurelet\fmnxttok\fmi}
\def\fmi{\ifx\bgroup\fmnxttok\expandafter\fmii
   \else\ensuremath{f_m}\expandafter\xspace\fi}
\def\fmii#1{\ensuremath{f_m\left({#1}\right)}}
\begin{document}
\fm et \fm{\frac12}.

\fm{a} et \fm.
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 780
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Ecriture d'une commande [Résolu]

Messagepar pzorba75 » Lundi 06 Avril 2020, 08:25

Merci pour cette brillante solution que je vais conserver dans mes notes, sans vraiment comprendre son fonctionnement tant les mécanismes de Tex me sont impénétrables.
Bonne journée.
Pierre
On se lasse de tout, excepté d'apprendre.
Virgile
pzorba75
Kilo-utilisateur
 
Messages: 195
Inscription: Mardi 20 Août 2013, 03:50
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Yandex [Bot] et 3 invités

pCloud Premium