나는 배우고 \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로 컴파일하면 다음과 같은 결과가 나옵니다.
위와 동일한 정의로 \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을 기반으로 하는 방식)이 있는 환경을 정의하는 방법을 제공하지만 패키지 설명서를 확인해야 합니다.