1

逐語的な環境といくつかのインデントでパラメーターを使用して新しいコマンドを作成することは可能ですか?

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

これは動作しません。他の方法はありますか?

4

2 に答える 2

5

どのように\begin{verbatim}動作します。簡潔に、そして大まかに。

  1. \begin{verbatim}に展開され\verbatimます。
  2. 次に\verbatim、各特殊文字のカテゴリ コードを 12 に設定します。これで、すべての文字が数字または句読点のようになります。
  3. 次に\verbatimfont、parindent、calls を設定します\@xverbatim
  4. \@xverbatim次のトリックを使用して逐語的な終わりをキャッチします。

    \def\@xverbatim#1\end{#1\end}
    
  5. その後\end{verbatim}作業終了。

どのように\newcommand{\codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}}動作します。

  1. まず、\codeblock{Some {}$&%^_}その引数を読み取ります。
  2. #1 --> Some code {}$&%^_

    注: { , }, $, &, %,^は、11 または 12 ではなく、_ 1、2、3、4、6、7、8 のカテゴリがあります!!! )

  3. \codeblockに展開し\begin{quote}\begin{verbatim} Some {}$&%^_\end {verbatim}\end {quote}ます。 重要:のバックスラッシュは\end11 ではなくカテゴリ 0 です。さらに、 and は 11では{なくカテゴリ}1 と 2 を持ちます。そして、、、、、はカテゴリ 3、4、6、7、8 を持ちます。$&%^_
  4. \begin{quote}に展開し\quote\quote実行します。
  5. \begin{verbatim}に展開し\varbatimます 。\varbatimすべてのカテゴリとフォントを変更します。しかし、(重要) バックスラッシュ (in \end) のカテゴリは 0 のままです。また、「引数の読み取り」がすべてのカテゴリを変更する前に実行されるため、後に入力された{, }, , ,$&カテゴリが残ります。ただし、すべての char のカテゴリが 11 または 12 である必要があります。%^_Some\verbatim
  6. 次に、\verbatimを呼び出します\@xverbatim
  7. \@xverbatim次のトリックを使用して、引数をキャッチしようとします。

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

    しかし、すべての文字 ( , , , )がカテゴリ 12 と 11 を持っている 場所を\@xverbatimキャッチしようとする ため、それは不可能です。\end\end\end

    トリックがより巧妙である可能性があります(私にはわかりません):

    代替テキスト

    赤色の文字はカテゴリ 12 です。緑色の文字はカテゴリ 11 です。 \def\@xverbatim、(カテゴリ 0) と文字 (カテゴリ 11)\endを持つマクロです。\

  8. \@xverbatim\endバックスラッシュ ( \) がカテゴリ 11 を持っている場所を見つけようとしていますが....File ended while scanning use of \@xverbatim

新しいマクロを作成したい場合は\codeblock、上記のテキストのようなことをしなければなりません。

于 2010-12-14T21:26:48.920 に答える
2

ドキュメントにコードを入れたいようです。その場合は、逐語的にではなく、パッケージの一覧を表示した方がよいでしょう。Listings は、多くの一般的な言語の行番号付けや構文の強調表示などの優れた機能も提供します。LaTeX ディストリビューションにまだインストールされていない場合は、 http://www.ctan.org/tex-archive/macros/latex/contrib/listings/を参照してください。

于 2010-12-14T14:28:49.233 に答える