Когда я компилирую следующий код с помощью xelatex, %\end{lstlisting}
нужна ли строка для предотвращения ошибки. В чем проблема?
\documentclass[a4paper,11pt, onecolumn, openany,]{memoir}
\usepackage[english]{babel} % English please
%\usepackage[final]{microtype} % Less badboxes
\usepackage{fontspec}
\usepackage{listings}
\usepackage{xcolor}
\newfontfamily{\lstcode}[Scale=0.85]{Ubuntu Mono}
\lstdefinestyle{csharp}
{
language=[Sharp]C,
frame=shadowbox,
rulecolor=\color{white!80!black},
rulesepcolor=\color{white!80!black},
basicstyle=\lstcode,
showstringspaces=false,
breaklines=true
}
\def\bcsh#1\ncsh
{
\lstset{style=csharp}
\begin{lstlisting}[numbers=left]
#1
\end{lstlisting}
}
\begin{document}
\bcsh
class Program
{
static void Main()
{
System.Console.WriteLine("Hello World!");
System.Console.ReadKey();
}
}
\ncsh
%\end{lstlisting}
\end{document}
решение1
Короткий ответ: вы не можете передать lstlisting
окружение в качестве аргумента макросу.
Вместо этого вы можете определить новую среду.
\documentclass[a4paper,11pt, onecolumn, openany,]{memoir}
\usepackage[english]{babel} % English please
%\usepackage[final]{microtype} % Less badboxes
\usepackage{fontspec}
\usepackage{listings}
\usepackage{xcolor}
\newfontfamily{\lstcode}[Scale=0.85]{Ubuntu Mono}
\lstdefinestyle{csharp}
{
language=[Sharp]C,
frame=shadowbox,
rulecolor=\color{white!80!black},
rulesepcolor=\color{white!80!black},
basicstyle=\lstcode,
showstringspaces=false,
breaklines=true
}
\lstnewenvironment{bcsh}[1][]
{\lstset{style=csharp,numbers=left,#1}}
{}
\begin{document}
\begin{bcsh}
class Program
{
static void Main()
{
System.Console.WriteLine("Hello World!");
System.Console.ReadKey();
}
}
\end{bcsh}
\end{document}