IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en forme Discussion :

Environnement mondialogue forme roman et non théâtre


Sujet :

Mise en forme

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Environnement mondialogue forme roman et non théâtre
    L’Imprimerie nationale préconise pour un dialogue type roman ou nouvelle (pas théâtre) la typographie suivante :

    « A parle.
    – B répond.
    – A parle longuement, en plusieurs paragraphes.
    « Chaque nouveau paragraphe de la même tirade commence par un guillemet de continuité.
    « Enfin A termine.
    – B clôt le débat. »

    Je souhaite produire le résultat précédent avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    \begin{mondialogue}
      \speak Le 1er personnage parle.
      \speak Le 2nd répond.
      \speak Le 1er parle longuement, en plusieurs paragraphes. //
                D'où le guillemet (ouvrant) de continuité. //
                Il termine.
      \speak Le 2nd termine le dialogue.
    \end{mondialogue}
    En préambule, j’ai défini ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    \newenvironment{mondialogue}{%
        \begin{list}{}{%
            \newboolean{NoMoreGuillemet}
            \setboolean{NoMoreGuillemet}{false}
            \defcommand\speak{%
                \ifNoMoreGuillemet
                    \item[---]
                \else
                    \item[\go]
                    \setboolean{NoMoreGuillemet}{true}
                \fi % \ifx\NoMoreGuillemet\undefined
                }%
            }{%
        \end{list}%
        }}
    Mais j'ai des erreurs que je ne comprends pas... Et en plus, je n'ai même pas réfléchi à la façon d'insérer un guillemet ouvrant au début de chaque paragraphe...

    Quelqu'un peut-il m'aider?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 142
    Points
    142
    Par défaut
    J'ai voulu redefinir \par mais en vain...

    J'ai fait ça mais ça fait un peu amateur >_<, mais faute de mieux...

    \newenvironment{mondialogue}{%
    \newcommand{\p}{\newline\og}%
    \newcommand{\newspeak}{\newline -\hspace{6pt}}%
    \setlength{\parindent}{0pt}
    \og}%
    {\fg%
    setlength{\parindent}{20pt}}
    Ce qui donne comem syntaxe pour un dialogue :

    \begin{mondialogue}
    A parle
    \newspeak B parle
    \newspeak A parle longuement
    \p 2eme paragraphe commençant par des guillemets
    \p 3eme paragraphe commençant par des guillemets
    \newspeak B clot la conversation
    \end{mondialogue}
    Il doit y avoir surement mieux mais je n'ai pas trouvé pour l'instant...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Merci bien pour ton code!
    Redéfinir un paragraphe ou la commande \par, c'est une des multiples questions face à laquelle je me suis senti incompétent... Puisque tu y as réfléchi, tu as donc essayé qqch, peut-être à partir d'un code... Lequel? Qu'as-tu essayé? (Même si je n'en tire rien, ça m'instruit et j'apprends petit à petit sur des cas concrets, et ce d'autant plus si ça a été l'objet d'une préoccupation certaine...

    Sinon, le code, je l'ai essayé, mais j'ai eu un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ! Missing number, treated as zero.
    <to be read again> 
                       }
    l.312 \end{mondialogue}
    Chez toi, ça marche? J'ai manqué qqch? Pour info, j'ai eu deux erreurs, la 2eme étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ! Illegal unit of measure (pt inserted).
    <to be read again> 
                       }
    l.312 \end{mondialogue}

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 142
    Points
    142
    Par défaut
    Chez moi ça marche sans probleme, une petite erreur de frappe toutefois, il manque le backslash avant le dernier setlength...

    Sinon jai voulu redfinir la commande \par de la façon suivante mais celà m'a donné des messages d'erreur :

    \newcommand{\savepar}{\par}
    \newenvironment{mondialogue}{%
    \setlength{\parident}{0pt}%
    \renewcommand{\par}{\newline\og}}%
    {\fg%
    \setlength{\parindent}{20pt}%
    \renewcommand{\par}{\savepar}}
    Ici en fait j'ai l'impression qu'à la place de redefinir ma commande il fait ce que je lui demande (je m'expilque, il me fait le \newline\og).

    Les messages d'erreur que j'obtiens sont les suivants :

    ! Paragraph ended before \renew@command was complete.
    <to be read again>
    \par
    l.13 \begin{mondialogue}


    Puis

    ! Extra }, or forgotten \endgroup.
    \mondialogue ... indent}{0pt}\renewcommand {\par}
    {\newline \og}

    l.13 \begin{mondialogue}


    Puis

    ! LaTeX Error: There's no line here to end.
    See the LaTeX manual or LaTeX Compagnion for explanation.
    Type H <return> for immediate help.
    ...
    l.13 Runaway argument?
    {
    Puis 2 autres erreurs similaires au 2 premières.

    Dans mon .tex j'utilise l'environemment comme suit:

    \begin{mondialogue}
    A parle

    B parle
    \end{mondialogue}
    En espérant avoir été a peu près clair ^^

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Effectivement, ça marche! (Je n'avais même pas vu qu'il manquait le backslash...)

    Le message d'erreur avec \renew@command m'inspire qu'il faudrait faire usage de \makeatletter et \makeatother... Mais si j'arrive tout juste à comprendre certaines commandes un peu élaborées utilisant ces deux commandes, je suis bien incapable de savoir m'en servir... Donc ça n'est qu'une idée...

    Sinon, savoir redéfinir le paragraphe m'intéresserait quand même! Non pas pour faire ce que je voulais (environnement dialogue), puisque tu m'as donné une façon de faire, mais pour apprendre mieux Latex...

    J'ai lu qq part (mais je ne le retrouve pas) que \par signifiait "nouveau paragraphe" (ce qui voudrait dire que que cette commande \par ne serait pas faite pour définir ou modifier la mise en forme du paragraphe)... et que Latex mettait en page paragraphe par paragraphe, ce qui se fait en autre à chaque ligne vide, mais aussi à chaque instruction \newpar.

    J'ai alors eu l'idée de redéfinir \indent, de sorte qu'on puisse rajouter un guillement ouvrant à chaque paragraphe, que ce soit lors de l'interlocution du 1er personnage, après le premier guillemet du dialogue, ou à chaque paragraphe après un tiret. Malheureusement, cela génère encore deux erreurs... Par contre, elles sont différentes! Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    \newcommand{\oldindent}{\indent}
    \newenvironment{mondialogue}
    {%
    \setlength{\parindent}{0pt}%
    \renewcommand{\indent}{\oldindent\og~}%
    \newcommand{\newspeak}{\renewcommand{\indent}{\oldindent\og~}%
    			\newline\indent---~}%
    }%
    {%
    \fg%
    \setlength{\parindent}{20pt}%
    \renewcommand{\indent}{\oldindent}%
    }
    Voici le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TeX capacity exceeded, soory [input stack size=5000]
    \indent -> \oldindent
    La deuxième erreur dit simplement "fatal error"...

    Peut-être que tu tireras qqch de tout ça... Moi, je ne sais rien en dire!

    En tout cas, merci bien pour ton aide!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 142
    Points
    142
    Par défaut
    Si je me trompe pas, je pense que l'erreur vient du fait que tu veuille redefinir l'instruction \indent par \oldindent\og~

    Car tu a defini la commande \oldindent par \indent

    En gros il essaye de redéfinir \indent par \indent\og~, en essayant de remplacer a nouveau le 2eme \indent par \indent\og~

    Une sorte de référence circulaire quoi, ce qui expliquerai qu'il fasse exploser la pile...

    Si tu utilise \indent pour mettre ton guillemet gauche, autant utilisé le guillement gauche >_<...

    Je ne trouve pas comment redéfinir la méthode d'indentation pour remplacer l'alinéa par un guillemet, même en redéfinissant \parindent par \og dans l'environnement, il continu a me faire un alinéa >_<

    Il faut chercher encore ...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    J'ai un peu progressé, avec l'aide de certains connaisseurs, mais ce n'est pas fini...

    Concernant le TeX capacity exceeded, je cite le commentaire d'un expert (merci Manuel!):

    "En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \newcommand{\oldindent}{\indent}
    \renewcommand{\indent}{\oldindent\og}
    TeX part dans une boucle sans fin quand on appelle \indent après ces définitions : quand TeX développe \indent, ça donne \oldindent\og, puis \oldindent se développe en \indent, qui donne à nouveau \oldindent\og (avec l'ancien \og qui traîne encore derrière)...
    C'est un problème assez classique, dont la solution consiste à remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \newcommand\oldindent{\indent}
    par Ainsi, \oldindent ne sera pas remplacé par \indent, mais par la signification qu'avait ce dernier au moment du \let, et la boucle est évitée."

    Ensuite, voici une proposition (encore merci à Manuel et merci à Jean-Côme qui ont contribué à l'élaboration de ce code) qui se rapproche de ce que je veux, mais qu'il faudrait modifier, je dirai comment après:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    \documentclass{article}
    \usepackage[T1]{fontenc}
    \usepackage[latin1]{inputenc}
    \usepackage[a4paper]{geometry}
    \usepackage{lmodern}
    \usepackage[frenchb]{babel}
     
    \newlength{\saveindent}
    \newenvironment{dialogue}
    {%
       \setlength{\saveindent}{\parindent}%
       \setlength{\parindent}{0pt}%
       \everypar{\hbox to\saveindent{\hss \ouvrant}\def\ouvrant{\og}}%
       \par
    }
    {\fg\everypar{}\par}
     
    \newcommand\ouvrant{\og}
    \newcommand\reponse{\def\ouvrant{--- }}
     
    \begin{document}
    Un texte d'introduction
    \begin{dialogue}
       Je suis un texte sur un seul paragraphe
    \end{dialogue}
    Un texte entre les deux
    \begin{dialogue}
       Je suis un texte sur plusieurs paragraphes.
     
       Voici le deuxième.
     
       \reponse Tiens, quelqu'un répond au milieu. Et comme il est bavard il prend plusieurs ligne pour me répondre. À vrai dire, il va même prendre plusieurs paragraphes.
     
      Voilà en effet qu'il commence un deuxième paragraphe. Ça ne peut plus durer, il faut absolument que je reprenne la parole au plus vite.
     
       \reponse
     
       Et voici le troisième et dernier (avec plein de blabla inutile afin d'obtenir un résultat sur plusieurs lignes).
    \end{dialogue}
    Du texte après pour voir que tout est rentré dans l'ordre.
    \end{document}
    Le problème, c'est qu'avec ce code, les guillemets de continuité sont décalés vers la gauche, de sorte que la première lettre du paragraphe est alignée avec toutes celles qui commencent un paragraphe avec alinéa et sans ces guillemets de continuité... C'est très intéressant, mais j'aurais bien voulu aussi la même chose avec les guillemets alignés sur l'indentation normale...

    Peut-être qu'avec l'aide de tous, je parviendrai à mes fins...

    Merci d'avance!

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 123
    Points : 142
    Points
    142
    Par défaut
    Je ne comprend pas très bien ce que tu veux obtenir en fait...

    Quelque chose dans ce genre la ? :

    « A parle.
    - B repond
    - A reparle (aligne sur le A et le B précedent)
    « 2eme paragraphe de A aligné sur son premier paragraphe...»

    Je n'ai pas pu testé le code que tu a fournit parceque mon pc est est en train de compiler l'interface graphique de mon linux mais il me semble qu'il te permet d'obtenir le même formalisme que le dialogue ci-dessus... A moins que ce que tu veuilles qu'il n' y ai pas du tout d'indentation et que ton paragraphe commence par \og

    Dans ce cas dans \everypar, il ne faut pas mettre \hbox to\saveindent{\hss\ouvrant} qui en fait te crée uen boite horizontale de la taille de \saveindent et qui la rempli d'un ressort indéfiniment étirable et rétrécissable suivi d'un guillement ouvrant...

    Car en gros celà revien à indenter mais en mettant un guillemet ouvrant aligné a droite "dans l'alinéa"...

    Dans ce cas il faudrait plutot mettre :
    \everypar{\ouvrant{}\def\ouvrant{\og}}
    Je ne sais pas si '{}' après \ouvrant est vraiment utile, mais je l'ai mis en pensant qu'il faudrait mettre un espace entre le guillemet ouvrant et le premier mot du paragraphe...

    En espérant que cela te conviendra ^^

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Formidable! Tu m'as mis sur la piste!
    Il suffisait effectivement de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    \newenvironment{dialogueroman}
    {\everypar{\ouvrant\def\ouvrant{\og}}\par}
    {\fg\everypar{}\par}
     
    \newcommand\ouvrant{\og}
    \newcommand\reponse{\def\ouvrant{---~}}
    et on obtient le dialogue typographié selon les règles utilisées par l'Imprimerie nationale en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    \begin{dialogueroman}
    Et bonjour! Comment vas-tu?
    \reponse
    On ne peut mieux! Merci.
     
    Au fait, tant que j'y pense, as-tu [...]?
    \reponse
    Ah mince, non! j'ai oublié!
     
    Tu fais bien de me le rappeler! J'y vais immédiatement!
    \reponse
    A bientôt! Le bonjour à Mr ton jardinier!
    \reponse
    Je n'y manquerai pas! Au revoir!
    \end{dialogueroman}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Virtual Pascal] Paramètre sous forme de constante non typée
    Par Alcatîz dans le forum Autres IDE
    Réponses: 3
    Dernier message: 18/06/2006, 08h13
  2. [Forms 6i] Bloc non basé et navigation
    Par macben dans le forum Oracle
    Réponses: 3
    Dernier message: 13/01/2006, 12h27
  3. [FORMS][6i] Erreur non explicitée
    Par badara1 dans le forum Forms
    Réponses: 15
    Dernier message: 13/05/2005, 10h56
  4. [FORMS] Champ image non basé
    Par macharius dans le forum Forms
    Réponses: 5
    Dernier message: 08/03/2005, 17h04
  5. Input File, Request.form Firefox, Chemin non spécifié
    Par Phenolphtaleine dans le forum ASP
    Réponses: 6
    Dernier message: 13/01/2005, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo