2010-12-14 10 views
1

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

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

これは機能しません。別の方法がありますか?

+1

[TeX StackExchange](http://tex.stackexchange.com/)にコミュニティ全体があります。TeX関連の質問は小さすぎません。あなたに役立つかもしれない多くの[リストパッケージに関する質問](http://tex.stackexchange.com/questions/tagged/listings)があります。 –

答えて

2

あなたはおそらくより良い逐語的にするよりも、パッケージのリストによって提供していた場合には、ドキュメント、内のコードを持つようにしたいように見えます。リストには、多くの共通言語の行番号付けや構文ハイライトなどの優れた機能もあります。 LaTeXディストリビューションにまだインストールされていない場合は、http://www.ctan.org/tex-archive/macros/latex/contrib/listings/を参照してください。

+0

ありがとうございます、リストパッケージは正常に動作します。 – sschaef

5

どのように\begin{verbatim}が機能しますか。短く大まかに。

  1. \begin{verbatim}\verbatimに拡張されています。
  2. その後12 これで、すべての文字になるように、各特殊文字の\verbatim組のカテゴリコードは、数字またはpunctsのようなものです。
  3. \verbatimは、font、parindentを設定し、\@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 {}$&%^_

    注:{}$&%^_カテゴリ1,2,3,4,6,7,8 なく、11または12を有します!

  3. \codeblockは、\begin{quote}\begin{verbatim} Some {}$&%^_\end {verbatim}\end {quote}に展開されています。重要 は:\endバックスラッシュは、カテゴリー0を有するよりもむしろ11 また{}カテゴリ1及び2よりもむしろ11 そして$&%^を有する、_は、カテゴリ3,4,6,7-を有します8。
  4. \begin{quote}\quote\quote実行に展開されます。
  5. \begin{verbatim}は、\varbatimに展開されます。 \varbatimはすべてのカテゴリとフォントを変更します。しかし、(重要) バックスラッシュ(\end)のカテゴリは0のままです。そしてSome後に入力{}$&%^_のカテゴリがあるため、「引数の読み取り」のまま\verbatimは、すべてのカテゴリを変更する前に実行されます。しかし、あなたはすべての文字がカテゴリー11の12を持っている必要があります。
  6. 次に\verbatim\@xverbatimと呼ばれます。
  7. \@xverbatimは、以下のトリック使って引数をキャッチしようとします:

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

    をしかし、それはすべての文字(\end)は、カテゴリ12を持っている \endをキャッチするため\@xverbatim試行は不可能です実際には他のカテゴリコードには4つの文字があります: \カテゴリ0、e,n、カテゴリー11.

    と210それが可能である(私はわからない)というトリックがもっと見事です:

    alt text

    赤文字は、カテゴリ12グリーン文字は、カテゴリ11 \def\@xverbatimを持ってい\end\(カテゴリ0)と文字(カテゴリ11)のマクロです。

  8. \@xverbatimしようとバックスラッシュ(\)は、新しいマクロ\codeblockを作成したい場合は、テキストの上のような何かをしなければなりませんカテゴリ11しかし.... File ended while scanning use of \@xverbatim

を持って\endを見つけようとしています。

+0

+1私はすべてを理解していませんでしたが説明のために。 – sschaef

関連する問題