[Résolu] Virgule automatique

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.

[Résolu] Virgule automatique

Messagepar Francky » Jeudi 08 Juillet 2010, 12:59

Avec le package icomma,
Code: Tout sélectionner
$3,2$
fournit automatiquement les bons espaces pour la virgule. Je sais.
Je ne souhaite pas forcement garder icomma, s'il y a mieux pour ma question (à suivre).

Je ne souhaite pas utiliser le package numprint. (sauf si vous êtes très convainquant)

Je souhaite utiliser le package siunitx (idem).
Avec \sisetup{decimalsymbol=comma}, je peux taper \SI{3.2}{} et obtenir 3,2 (avec espace correct) ,
Je n'ai pas de souci avec \SI{3,2}{} mais un ami oui, il obtient 3comma2.

Je compte mettre tout le code mathématique en international et que le préambule me régionalise tout.
Ainsi, je tape \SI{3.2}{\meter} et j'obtiens le bon résultat en France ou bien aux States

--------------

Ma question : Est-il possible d'avoir un préambule qui lorsqu'on entre
Code: Tout sélectionner
$3.2$
donne 3,2 avec le bon espace en France, et 3.2 aux States (par exemple).
Si ça n'existe pas, je crois qu'il faut
Code: Tout sélectionner
$\num{3.2}$
, mais c'est un peu lourd.

Pour les nombres avec beaucoup de chiffres, je l'utilise déjà. Des avis ?

Merci d'avance.
Dernière édition par Francky le Vendredi 09 Juillet 2010, 09:54, édité 1 fois.
Linux Mint | TeXLive - TexMaker - asymptote | Python3 & C - Geany - Project Euler - SPOJ
Entia non sunt multiplicanda praeter necessitatem
Francky
Giga-utilisateur
 
Messages: 683
Inscription: Dimanche 11 Avril 2010, 13:01
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: virgule automatique

Messagepar pg » Vendredi 09 Juillet 2010, 00:10

C'est possible, mais la question de savoir si c'est une bonne idée est une autre chose. Il faut rendre le caractère "." actif en mode mathématiques, ce qui est toujours potentiellement dangereux (par exemple, icomma interfère avec certains packages, certes rarement utilisés, mais ça peut arriver).

Le code suivant produit un fichier "idecimalsep.sty" lors de la première compilation (c'est l'environnement {filecontents*} qui fait cela), package qu'il faut utiliser à la place de icomma. Ensuite, il faut \choosedecimalseparator{.} ou \choosedecimalseparator{,} pour choisir le séparateur décimal, et, si je n'ai pas fait d'erreurs, "3.2" et "3,2" donneront toujours "3<séparateur décimal choisi>2" tandis que "3, 2" produira "3, 2". Noter que "3,a" produira "3, a".

Code: Tout sélectionner
\begin{filecontents*}{idecimalsep.sty}
\def\filedate{2010/07/09}
\def\fileversion{experimental version - use at your own risk}
\def\basename{idecimalsep}
\ProvidesPackage{\basename}[\filedate \space\fileversion]
\AtBeginDocument{%
  \mathchardef\mathcomma\mathcode`\,%
  \mathchardef\mathfullstop\mathcode`\.%
  \mathcode`\,="8000 %
  \mathcode`\.="8000 %
}
{\catcode`,=\active
 \catcode`.=\active
  \gdef,{\futurelet\@let@token\sm@rtcomma}
  \gdef.{\futurelet\@let@token\sm@rtfullstop}
}
\let\@zerotoken=0
\let\@onetoken=1
\let\@twotoken=2
\let\@threetoken=3
\let\@fourtoken=4
\let\@fivetoken=5
\let\@sixtoken=6
\let\@seventoken=7
\let\@eighttoken=8
\let\@ninetoken=9
\def\sm@rtcomma{%
  \ifx\@let@token\@sptoken
    \mathcomma
  \else\ifx\@let@token\space
    \mathcomma
  \else\ifx\@let@token\@zerotoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@onetoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@twotoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@threetoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@fourtoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@fivetoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@sixtoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@seventoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@eighttoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@ninetoken
    \mathord\decimalseparator
  \else
    \mathcomma
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\def\sm@rtfullstop{%
  \ifx\@let@token\@zerotoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@onetoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@twotoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@threetoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@fourtoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@fivetoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@sixtoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@seventoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@eighttoken
    \mathord\decimalseparator
  \else\ifx\@let@token\@ninetoken
    \mathord\decimalseparator
  \else
    \mathfullstop
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\newcommand{\choosedecimalseparator}[1]{
  \ifx#1,\relax
    \def\decimalseparator{\mathcomma}
  \else
    \def\decimalseparator{\mathfullstop}
  \fi
}
\endinput
\end{filecontents*}
\documentclass{article}

\usepackage{idecimalsep}

%\choosedecimalseparator{.}
\choosedecimalseparator{,}

\begin{document}
$3.2$

$3,2$

$3, 2$

$3. 2$

$3,0,1,2,3,4,5,6,7,8,9$

$3,a$

$1+\frac{x}{2}.$

$1+\frac{x}{2},$

$a.b$

$f(x_1,\dots,x_n)$ $f(1, 2, \dots, n)$

\end{document}
pg
Modérateur
 
Messages: 2592
Inscription: Jeudi 14 Juin 2007, 23:31

Re: virgule automatique

Messagepar Francky » Vendredi 09 Juillet 2010, 09:27

Ma question était un peu mal posée, mais la réponse est parfaite.

Merci, mais je n'ai pas réussi à essayer l'ECM.

À partir du code précédent j'ai créer deux fichiers
idecimalsep.sty avec la première partie du code, et test.tex avec la seconde partie,
à la compilation, j'obtiens dans le log
Code: Tout sélectionner
LaTeX Warning: File `idecimalsep.sty' already exists on the system.
Not generating it from this source.
)
! Undefined control sequence.
<recently read> \choosedecimalseparator
l.5 \choosedecimalseparator
{,}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.5 \choosedecimalseparator{,
}
You're in trouble here. Try typing <return> to proceed.
If that doesn't work, type X <return> to quit.
(./test.aux)


Est-ce du aux espaces (4) à chaque ligne que j'ai en copiant le code depuis le post précédent.

Merci pour tout.

---------

La question de savoir si c'est une bonne reste entière.

Je vais peut-être me passer d'icomma, et utiliser \siunitx seul.
Code: Tout sélectionner
$12$ %pour les petits entiers
$\num{x}$ %pour tout autre nombre décimal x
$\SI{x}{\unité}$ %pour les nombres avec unité

J'ai testé,

il me reste des soucis du côté de \SI qui se comporte différemment
sur F13-texlive2010 (un ami), et Debian-texlive2009 (chez moi) -> futur fil en prévision.
EDIT : Résolu, c'était moi qui avait pas vu la différence entre minuscule et majuscule.
donc suite :
Code: Tout sélectionner
$si{\unité}$%pour une unité seule, \SI{\unité} : pas bon !
Dernière édition par Francky le Vendredi 09 Juillet 2010, 09:37, édité 1 fois.
Linux Mint | TeXLive - TexMaker - asymptote | Python3 & C - Geany - Project Euler - SPOJ
Entia non sunt multiplicanda praeter necessitatem
Francky
Giga-utilisateur
 
Messages: 683
Inscription: Dimanche 11 Avril 2010, 13:01
Statut actuel: Actif et salarié | Enseignant

Re: virgule automatique

Messagepar pg » Vendredi 09 Juillet 2010, 09:36

Francky a écrit:Merci, mais je n'ai pas réussi à essayer l'ECM.

À partir du code précédent j'ai créer deux fichiers
idecimalsep.sty avec la première partie du code, et test.tex avec la seconde partie,
à la compilation, j'obtiens dans le log

Il ne faut rien créer manuellement du tout, tout est automatique. Supprimer le fichier idecimalsep.sty créé manuellement puis recopier le code en entier dans un fichier .tex et le compiler.
pg
Modérateur
 
Messages: 2592
Inscription: Jeudi 14 Juin 2007, 23:31

Re: virgule automatique

Messagepar Francky » Vendredi 09 Juillet 2010, 09:51

Merci, j'ai pu avoir l'ECM. J'édite le fil en résolu.

Reste la question : est-ce une bonne idée ?
Objectif = avoir un code mathématiques "international" et "partagé".

\siunitx semble se répandre, un jour il proposera peut-être le raffinement que vous proposez ...

Merci encore, il me reste un os (voir l'autre fil)
Je voudrais avoir
Code: Tout sélectionner
\SI{x}{\metre}

qui rende "x m" tout joli. (où x est une variable, une fraction, ...)
Mais il n'accepte que les nombres, c'est pas juste :oops:
Linux Mint | TeXLive - TexMaker - asymptote | Python3 & C - Geany - Project Euler - SPOJ
Entia non sunt multiplicanda praeter necessitatem
Francky
Giga-utilisateur
 
Messages: 683
Inscription: Dimanche 11 Avril 2010, 13:01
Statut actuel: Actif et salarié | Enseignant

Re: [résolu] virgule automatique

Messagepar pg » Vendredi 09 Juillet 2010, 21:08

L'auteur de siunitx est quelqu'un de très ouvert et réactif. Il a déjà rajouté des fonctionnalités à la demande d'utilisateurs. Il a un blog où il parle notamment du développement de siunitx.
pg
Modérateur
 
Messages: 2592
Inscription: Jeudi 14 Juin 2007, 23:31


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Exabot [Bot], Google [Bot], Yandex [Bot] et 6 invités