7

私はこの新しい環境をLaTeXに実装しようとしています:

\newenvironment{javacode}[2]
{\begin{lstlisting}[language=java, label=#1, caption=#2]}
{\end{lstlisting}}

そして、次のように使用します。

\begin{javacode}{c}{some code}
int x = 5;
\end{javacode}

しかし、次のエラーが発生します。

Overfull \hbox (6.0pt too wide) in paragraph at lines 6--6
[][][][][][][] 
[1] [2]) [3])
*

誰かがこの問題の修正に関して助けることができますか?

[アップデート]

赤い鼻のユニコーンが指示したようにやってみましたが、正しく動作しました。

しかし今、私はその\begin{singlespace}ようなものを追加しようとしました:

\lstnewenvironment{javacode}[2]
{
\begin{singlespace}
\lstset{language=java, label=#1, caption=#2}}
{
\end{singlespace}
}

そして、私は同じエラーを受け取りました:

Overfull \hbox (6.0pt too wide) in paragraph at lines 6--6
[][][][][][][] 
[1]) [2] [3])
*
4

2 に答える 2

17

これは特殊なケースです。これは、リスト環境がそれ自体の終わりを見つけるためにそれ自体を前方に解析する必要があるためです。その理由は、リスト環境のマクロを展開してはならないためです。もちろん、環境の終了タグが含まれています。

したがって、基本的に、行に含まれている場合は各行を調べますが、マクロがまだ展開されていない\end{lstlisting}ため、そのような行は存在しません。\end{javacode}したがって、リストはファイルの最後まで検索を続けます。

リストは、これを回避するための独自のコマンドを定義します。ドキュメントから:

\lstnewenvironment 
  {⟨name⟩}[⟨number⟩][⟨opt. default arg.⟩]
  {⟨starting code⟩}
  {⟨ending code⟩}

例えば:

\lstnewenvironment{javacode}[2]
  {\lstset{language=java, label=#1, caption=#2}}
  {}

編集あなたの編集された質問に答えて:私は次の最小限の「実用的な」例をコンパイルしようとしました。実際には、それほど機能していません。latexプロセッサは途中で停止し、ユーザー入力を待ちます。

リストのドキュメントにはの特別な扱いについては記載されていないのでsinglespace、バグを発見した可能性があります。最善の行動は、おそらくリストパッケージのメンテナからフィードバックを得ることです。

% mini.dvi
\documentclass{article}

\usepackage{listings}
\usepackage{setspace}
\doublespacing

\lstnewenvironment{javacode}
 {\begin{singlespace}
  \lstset{language=java}}
 {\end{singlespace}}

\begin{document}
\begin{javacode}
int a = 1;
int b = 2;
\end{javacode}
\end{document}
于 2010-04-09T11:03:48.407 に答える
3

さらに調べてみると、このhttp://www.tug.org/pipermail/texhax/2009-June/012699.htmlが見つかりました。

ソリューションを回避する\singlespacingには、環境の代わりにを使用する必要がありsinglespaceます。

これが私の作業コードです。

\lstnewenvironment{javacode}[2]
{\singlespacing\lstset{language=java, label=#1, caption=#2}}
{}
于 2010-04-10T08:17:44.713 に答える