\newenvironment를 사용하여 오류를 찾는 데 도움

\newenvironment를 사용하여 오류를 찾는 데 도움

나는 배우고 \newenvironment있으며 제작 중 오류가 발생한 부분을 찾는 데 도움이 필요합니다 \newenvironment. 라텍스 오류가 발생했는데 내가 뭘 잘못하고 있는지 알 수 없습니다. 새로운 환경을 만들어 코드 중복을 줄이려고 노력 중입니다. 앞서 코드를 보여드리고, 환경을 만들어 볼 때 코드를 보여드리겠습니다.

이전에는 오류 없이 작동했습니다.

\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

or \begin{tcblisting}와 같이 다른 명령에 대한 인수 내부를 사용할 수 없습니다 .\begin{verbatim}\begin{lstlisting}

패키지 listings\lstnewenvironment새로운 환경을 기반으로 정의하는 경우에 대처하기 위한 lstlisting것이며 물론 패키지 에는 (매뉴얼 290페이지 섹션 15.2 참조) 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}.

많은 축어적 패키지는 이 동작(tcblisting이 lstlisting을 기반으로 하는 방식)이 있는 환경을 정의하는 방법을 제공하지만 패키지 설명서를 확인해야 합니다.

관련 정보