Cuando compilo el siguiente código con xelatex, %\end{lstlisting}
hay una línea necesaria para evitar errores. ¿Cuál es el problema?
\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}
Respuesta1
Respuesta corta: no se puede pasar un lstlisting
entorno como argumento a una macro.
En su lugar, puede definir un nuevo entorno.
\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}