我遇到了一个包问题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
\lstnewenvironment
listings
。这记录在第 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}
(我在序言中注释掉了所有我认为不相关的包。)
如果您对字幕仍有疑问,也许您可以更详细地询问。