2010-12-14 38 views
1

est-il possible de créer une nouvelle commande avec un paramètre dans un environnement verbatim et une certaine indentation?commandes définies par l'utilisateur dans l'environnement verbatim

\newcommand{codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}} 

Cela ne fonctionne pas. Y a-t-il un autre moyen?

+1

Vous pouvez trouver une communauté entière sur le [TeX StackExchange] (http://tex.stackexchange.com/), où aucune question liée à TeX n'est trop petite. Il y a beaucoup de [questions là-bas liées au paquet d'annonces] (http://tex.stackexchange.com/questions/tagged/listings) qui pourraient vous être utiles. –

Répondre

2

Il semble que vous vouliez avoir du code dans votre document, auquel cas vous êtes probablement mieux servi par les listes de paquets que par verbatim. Les listes vous offrent également des fonctionnalités intéressantes telles que la numérotation des lignes et la mise en évidence de la syntaxe pour de nombreuses langues courantes. Voir http://www.ctan.org/tex-archive/macros/latex/contrib/listings/ s'il n'est pas déjà installé avec votre distribution LaTeX.

+0

Merci, le paquet annonces fonctionne très bien. – sschaef

5

Comment \begin{verbatim} fonctionne. brièvement et à peu près.

  1. \begin{verbatim} est étendue à \verbatim.
  2. Puis \verbatim définit le code de catégorie de chaque caractère spécial à 12. Maintenant, tous les caractères sont comme des chiffres ou des points.
  3. Puis \verbatim définit la police, le paramètre et appelle \@xverbatim.
  4. \@xverbatim attrape la fin de mot à mot en utilisant l'astuce suivante:

    \def\@xverbatim#1\end{#1\end} 
    
  5. Puis \end{verbatim} finitions travail.

Comment \newcommand{\codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}} fonctionne.

  1. Tout d'abord, \codeblock{Some {}$&%^_} lit son argument.
  2. #1 --> Some code {}$&%^_

    Note:{, }, $, &, %, ^, _ ont des catégories 1,2,3,4,6,7,8 au lieu de 11 ou 12 !!!)

  3. \codeblock se développe en \begin{quote}\begin{verbatim} Some {}$&%^_\end {verbatim}\end {quote}. Important: backslash de \end a la catégorie 0 plutôt que 11. De plus { et } ont des catégories 1 et 2 au lieu de 11. Et $, &, %, ^, _ avoir des catégories 3,4,6,7, 8.
  4. \begin{quote} s'exécute en \quote et \quote s'exécute.
  5. Puis \begin{verbatim} se développe en \varbatim. \varbatim modifie toutes les catégories et les polices. Mais (important) la catégorie de barre oblique inverse (en \end) reste égale à 0.Et les catégories de {, }, $, &, %, ^, _ typée après Some reste à cause de "lecture de l'argument" exécute avant \verbatim change toutes les catégories. Mais vous avez besoin que tout char a des catégories 11 ou 12.
  6. Puis \verbatim appelle \@xverbatim.
  7. \@xverbatim essaie d'attraper votre argument en utilisant l'astuce suivante:

    \def\@xverbatim#1\end{#1\end} 
    

    mais il est impossible à cause de \@xverbatim essaie d'attraper \end où toutes les lettres (\, e, n, d) ont la catégorie 12 et 11. Mais en fait, il y a quatre lettres avec un autre code de catégorie: \ avec la catégorie 0 et e, n, d à la catégorie 11.

    Il est possible (je ne suis pas sûr) ce truc est plus magistral:

    alt text

    caractères rouges ont la catégorie 12. caractères verts ont la catégorie 11. \def, \@xverbatim, \end sont des macros avec \ (catégorie 0) et des lettres (catégorie 11).

  8. \@xverbatim tente et essayer de trouver \end où backslash (\) a la catégorie 11 mais .... File ended while scanning use of \@xverbatim

Si vous voulez créer de nouvelles macro \codeblock vous devez faire quelque chose comme du texte ci-dessus.

+0

+1 pour l'explication même si je n'ai pas tout compris. – sschaef