在新环境中上市

在新环境中上市

我遇到了一个包问题lstlisting。我想定义一个\newenvironment带有一个强制参数的,它将是的标题名称lstlisting。我还会拥有其他lstlisting环境,这就是为什么我尝试单独定义它们。

我也遇到了一些\lstinline命令方面的困难(我设置了一个命令\newcommand来简化编码),该命令将关键字排版为普通文本。为什么它不能出现在标题和类似内容中?

我认为序言可能有问题,这就是为什么要列出所有使用的包。

\documentclass{book}
\usepackage[a4paper, top=3cm, bottom=3cm, heightrounded, outer=3cm, inner=3cm, marginparwidth=1.5cm, marginparsep=0.5cm]{geometry} 
\usepackage{tocloft}
\usepackage{amsmath} 
\usepackage{eurosym}
\usepackage{url}
\usepackage{array}
\usepackage{tabularx}
\usepackage{multirow} 
\usepackage{multicol} 
\usepackage{graphics}
\usepackage[dvips]{graphicx} 
\usepackage{epstopdf} 
\usepackage[dvipsnames]{xcolor} 
\usepackage{verbatim}
\usepackage{fancyvrb} 
\usepackage{fancyhdr}
\usepackage{paralist} 
\usepackage{listings} 
\usepackage{pifont} 
\usepackage{indentfirst} 

\lstset{language=[Visual]Basic, %
keywordstyle=\color{blue},commentstyle=\color{ForestGreen},stringstyle=\color{Maroon},%
basicstyle=\ttfamily\normalsize, frame=lines, %
showspaces=false, showstringspaces=false,%
tabsize=4, aboveskip=10pt, belowskip=10pt, %
lineskip=2pt, numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt,%
numberblanklines=false, %
breaklines, breakatwhitespace, prebreak=\_, breakindent=0pt %
}

\lstset{morekeywords={Or, Loop, Until, To, As, Single, Module, Double, ByVal}}

\lstset{emph={Console}, emphstyle=\color{Aquamarine}}

\newenvironment{case}[1]{\renewcommand\lstlistingname{Case}%
\begin{lstlisting}[caption={#1}]}%
{\end{lstlisting}}

\newcommand{\code}[1]{\lstinline[basicstyle=\rmfamily\normalsize, prebreak=, keywordstyle=\ttfamily]{#1}} 

\begin{document}

Example with inline, that works: \code{Console, Sub in Module}.

\begin{case}{Hello world} %doesn't work
Module Module1
    Sub Main()
        Console.WriteLine("Hello World!")
        Console.ReadKey()
End Sub
End Module
\end{case}

\end{document}

先感谢您!

答案1

除非您另行通知,否则在处理以 开头的环境时\begin{lstlisting}listings会寻找 来\end{lstlisting}表示环境的结束。

您的环境以意想不到的方式case隐藏了。如果您从环境定义中删除 并将其放在 的每个实例之前,它就会起作用。但这显然不是一个解决方案,并且认识到了这一点,因此它提供了创建您想要的内容的自己的环境\end{lstlisting}listings\end{lstlisting}\end{case}listings\lstnewenvironmentlistings。这记录在第 4.16 节listings软件包文档

因此,您应该用以下形式替换case使用定义:\newenvironment\lstnewenvironment{case}[1]{\renewcommand\lstlistingname{Case}\lstset{caption={#1}}}{}

\documentclass{book}
\usepackage[a4paper, top=3cm, bottom=3cm, heightrounded, outer=3cm, inner=3cm, marginparwidth=1.5cm, marginparsep=0.5cm]{geometry} 
%\usepackage{tocloft}
%\usepackage{amsmath} 
%\usepackage{eurosym}
%\usepackage{url}
%\usepackage{array}
%\usepackage{tabularx}
%\usepackage{multirow} 
%\usepackage{multicol} 
%\usepackage{graphics}
%\usepackage[dvips]{graphicx} 
%\usepackage{epstopdf} 
\usepackage[dvipsnames]{xcolor} 
%\usepackage{verbatim}
%\usepackage{fancyvrb} 
%\usepackage{fancyhdr}
%\usepackage{paralist} 
\usepackage{listings} 
%\usepackage{pifont} 
%\usepackage{indentfirst} 

\lstset{language=[Visual]Basic, %
keywordstyle=\color{blue},commentstyle=\color{ForestGreen},stringstyle=\color{Maroon},%
basicstyle=\ttfamily\normalsize, frame=lines, %
showspaces=false, showstringspaces=false,%
tabsize=4, aboveskip=10pt, belowskip=10pt, %
lineskip=2pt, numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt,%
numberblanklines=false, %
breaklines, breakatwhitespace, prebreak=\_, breakindent=0pt %
}

\lstset{morekeywords={Or, Loop, Until, To, As, Single, Module, Double, ByVal}}

\lstset{emph={Console}, emphstyle=\color{Aquamarine}}

\lstnewenvironment{case}[1]{\renewcommand\lstlistingname{Case}%
\lstset{caption={#1}}}%
{}

\newcommand{\code}[1]{\lstinline[basicstyle=\rmfamily\normalsize, prebreak=, keywordstyle=\ttfamily]{#1}} 

\begin{document}

Example with inline, that works: \code{Console, Sub in Module}.

\begin{case}{Hello world}
Module Module1
    Sub Main()
        Console.WriteLine("Hello World!")
        Console.ReadKey()
End Sub
End Module
\end{case}

\end{document}

(我在序言中注释掉了所有我认为不相关的包。)

如果您对字幕仍有疑问,也许您可​​以更详细地询问。

相关内容