Pour entrer un bit de dialogue à l'aide du package code> scénario code>, je dois utiliser
\dialogue{Johnny} Some dialogue. \dialogue{Jane} I see.
3 Réponses :
Essayez ceci:
\newcommand{\dialogueline}[2]{\begin{dialogue}{#1} #2 \end{dialogue}} % Usage example: \dialogueline{Johnny}{Some dialogue.} \dialogueline{Jane}{I see.}
C'est une bonne réponse, mais si quelqu'un sait comment reproduire le format exact demandé par l'affiche originale, ce serait bien de voir.
Je pense que c'est à peu près aussi proche que possible de ce que l'affiche veut. Il doit y avoir des bretelles autour du texte afin que le latex sait où mettre \ commencez {dialogue} code> et
\ fin {dialogue} code> correctement. Aussi, j'ai utilisé
\ \ dialoguelaine code> au cas où il y a déjà une autre commande nommée
\ dialogue code>, mais si ce n'est pas le cas, l'affiche peut remplacer
\ dialogueline code > Avec
\ dialogue code> à la place s'il ne provoque aucune erreur.
Vous pouvez en fait obtenir exactement ce que vous voulez: Ce code doit être La façon dont il fonctionne est que Suivant, nous définissons et tout devrait fonctionner. P> p> \ MakeAreTletter Code> -Protected
-Eraté entouré de \ MakeArelette
\ Makeather code> ( edit em>: cela signifie que vous mettez
\ makeatletter code> avant la définition et
\ makeather code> après-le), ou dans un
.sty code> fichier. Notez qu'un environnement nommé
dialogue code> définit une commande nommée
\ dialogue code>, vous avez donc besoin d'un nom différent. Ne changez pas le formatage! P>
\ dialogueline code> est une commande qui ne prend aucun argument, mais se développe à plusieurs séquences. Premièrement, un jeton d'ouverture de groupe, pour mettre tout ce qui suit dans sa propre portée. Deuxièmement, le
\ catcode` ^^ m = 12 code> séquence. Latex attribue chaque lettre A Catcode em> : un nombre qui dit quel type il est. Par exemple, le backslash est CATCODE 0, le constructeur de nom de commande; Les lettres sont Catcode 11; et les caractères d'impression de non-lettres, tels que le signe au signe, sont CATCODE 12. Cette séquence rend
^^ m code>, le caractère NEWLINE, a du CATCODE 12, afin que nous puissions interagir avec elle. Enfin, nous écrivons la commande
\ dialogueline @ eol code>, qui fait la levée lourde. P>
\ dialogueline @ eol code>. Nous le faisons dans un groupe où le personnage de la nouvelle ligne est CATCODE 12, comme ce sera le lieu où
\ dialogueline code> est élargi. Notez que c'est pourquoi vous ne pouvez pas casser la deuxième ligne avec une nouvelle ligne, ce serait interprété comme texte. Ensuite, nous définissons
\ dialogueline @ eol code> pour prendre deux arguments, se terminant par une nouvelle ligne; Il se développe en prenant le premier argument (que vous passez en bretelles) et en le transmettant comme une dispute à l'environnement code> de dialogue code> et en passant le deuxième argument (tout après la première et avant la fin de la ligne) le corps de l'environnement. Enfin,
\ dialogueline @ eol code> termine le groupe ouvert dans
\ dialogueline code>, de sorte que la modification du CATCODE de
^^ m code> n'est pas visible nulle part autre. Compte tenu de cela, vous pouvez écrire p>
C'est plutôt intelligent. Je ne savais pas sur \ catcode code> jusqu'à maintenant. Bien que ma solution fonctionne pour tout ce qui est placée à l'intérieur des accolades, le vôtre fonctionnera pour une doublure et est plus proche de la syntaxe demandée de l'Asker.
L'astuce est en fait moins sur les cacodes et plus sur la correspondance de modèle dans \ \ \ code>: vous pouvez aussi faire quelque chose comme
\ gdef \ dialogueline @ eol # 1: # 2 ^^ m code > Pour être capable d'écrire
\ dialogueline johnny: un dialogue. code>. Le commutateur CATCODE est de sorte que la fin d'une ligne ne soit que traitée comme un caractère d'espace et ignoré, mais est traitée à la place comme un caractère assorti. Vous avez raison que cela puisse interdire certaines chaînes valides (même si certaines d'entre elles peuvent être autorisées en caché la chaîne assortie en bretelles bouclées, par exemple
\ dialogueline {alexandre: le super}: mourir! Code>), mais C'est bien pour les raccourcis et les DSL intégrés.
Vrai bien. Fonctionne comme vous le dites. Merci pour l'explication minutieuse!
En fait, j'ai eu une "utilisation de \ dialogueline ne correspond pas à sa définition" Erreur lorsque j'ai utilisé \ Makeather, mais cela fonctionne très bien avec \ Makeatletter.
Désolé, je n'ai pas clarifié cela - la définition doit venir après i> \ makeatletter avant i>
\ makeather code> . (Le premier change le cacode de
@ code> à celui d'une lettre, il peut donc faire partie des noms de séquence de contrôle; ce dernier le change.)
J'ai compris. Cela a fonctionné juste bien en sandwich entre deux commandes \ Makeatterter, mais je suppose que ce n'est pas vraiment la syntaxe correcte. Merci encore.
Si vous supposez que chaque boîte de dialogue occupe un paragraphe (généralement, elle commence et se termine par une pause de paragraphe double ligne), alors il existe une autre façon d'avoir Ce code est un type de sale et d'un-latexy -it -it sets \ dialogue code> prend juste un argument: < PRE> XXX PRE>
\ everypar code> sans se soucier de son contenu existant et de sa latex a des abstractions plus propres pour le faire, que je ont oublié, mais le principe devrait être clair. p> p>
C'est intelligent, je n'avais pas vu cette technique auparavant.
Selon l'éditeur que vous utilisez, vous pouvez également examiner également un package d'extraits.
+1 C'est une question vraiment intéressante