\newenvironment を使用してエラーを見つけるのに役立ちます

\newenvironment を使用してエラーを見つけるのに役立ちます

私は学習中です\newenvironmentが、作成中にエラーがどこにあるのかを見つけるのに助けが必要です\newenvironment。Latex エラーが発生し、何が間違っているのかわかりません。新しい環境を作成して、コードの重複を減らそうとしています。環境を作成する前のコードと、環境を作成しようとしたときのコードを示します。

以下はエラーなしで動作する以前のバージョンです。

\documentclass[12pt]{book}%
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\usepackage{matlab-prettifier}
\definecolor{bg}{RGB}{240,240,240}
\usepackage{upquote} %to fix string quotes    
\begin{document}

\begin{tcblisting}{colback=bg,size=minimal,hbox,listing only,
                     listing options={style=Matlab-editor,
                                      basicstyle=\ttfamily\normalsize,
                                      breaklines         = false,
                                      escapechar         = `
                                      }%
                      }%
K=[3 -2;-2 2]; M=[1 0;0 3];
[phi,lam]=eig(K,M)
\end{tcblisting}
\end{document}

lualatexでコンパイルすると、

Mathematica グラフィックス

以下は、上記とまったく同じ定義で\newenvironment呼び出すことを試す新しいコードです。matlab

\documentclass[12pt]{book}%
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{listings}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\usepackage{matlab-prettifier}
\definecolor{bg}{RGB}{240,240,240}    
\usepackage{upquote} %to fix string quotes

\newenvironment{matlab}
{
  \begin{tcblisting}{colback=bg,size=minimal,hbox,listing only,
                     listing options={style=Matlab-editor,
                                      basicstyle=\ttfamily\normalsize,
                                      breaklines         = false,
                                      escapechar         = `
                                      }%
                      }%
}%
{
 \end{tcblisting}\ignorespacesafterend
}%

\begin{document}

\begin{matlab}
K=[3 -2;-2 2]; M=[1 0;0 3];
[phi,lam]=eig(K,M)
\end{matlab}
\end{document}

上記をコンパイルすると、

lualatex foo2.tex
This is LuaTeX, Version beta-0.80.0.1 (TeX Live 2015) (rev 5863) 
 restricted \write18 enabled.
(./foo2.tex
LaTeX2e <2015/10/01> patch level 2
Babel <3.9m> and hyphenation patterns for 79 languages loaded.
(/usr/local/texlive/2015/texmf-dist/tex/latex/base/book.cls
Document Class: book 2014/09/29 v1.4h Standard LaTeX document class
...
(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/etexcmds.sty)))
(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)))
Runaway argument?
! File ended while scanning use of \next.
<inserted text> 
\par 
<*> foo2.tex

? 

の定義を調べたのです\newenvironmentが、何を間違えているのか分かりません。定義

    \newenvironment{nam}[args]{begdef}{enddef}

TL 2015 の使用

答え1

または\begin{tcblisting}と同様に、別のコマンドの引数内でを使用することはできません。\begin{verbatim}\begin{lstlisting}

パッケージには、 に基づいて新しい環境を定義するケースに対処するための機能listingsがあり、もちろん、パッケージには と呼ばれる適切な機能もあります(マニュアルの 290 ページ、セクション 15.2 を参照)。\lstnewenvironmentlstlistingtcolorbox\newtcblisting

\documentclass[12pt]{book}
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{listings}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\usepackage{matlab-prettifier}
\definecolor{bg}{RGB}{240,240,240}    
\usepackage{upquote} %to fix string quotes

\newtcblisting{matlab}{
  colback=bg,
  size=minimal,
  hbox,
  listing only,
  listing options={
    style=Matlab-editor,
    basicstyle=\ttfamily\normalsize,
    breaklines= false,
    escapechar=`,
  },
}

\begin{document}

\begin{matlab}
K=[3 -2;-2 2]; M=[1 0;0 3];
[phi,lam]=eig(K,M)
\end{matlab}
\end{document}

ここに画像の説明を入力してください

答え2

リストのような逐語的環境は、解析を無効にするという単純な理由で定義内にネストできません。\begin{matlab}逐語的リスト モードを開始した後は、\通常の意味を持たなくなるため、コード リストに逐語的に表示されなくなります。これは、\end{matlab}環境を終了する命令ではなく、タイプセットされる文字のシーケンスにすぎません。

明らかに、コードには特定の文字列を探すための何らかの終了方法が必要です\end{tcblisting}

多くの verbatim パッケージでは、この動作を持つ環境を定義する方法 (tcblisting が lstlisting に基づく方法) が提供されていますが、パッケージのドキュメントを確認する必要があります。

関連情報