私は学習中です\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でコンパイルすると、
以下は、上記とまったく同じ定義で\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 を参照)。\lstnewenvironment
lstlisting
tcolorbox
\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 に基づく方法) が提供されていますが、パッケージのドキュメントを確認する必要があります。