Quero usar showexpl
e imprimir o código LaTeX com colchetes coloridos. Posso fazer isso dentro de um lstlisting
ambiente adicionando uma opção alfabetizada como no exemplo abaixo, mas não dentro de um LTXexample
ambiente (produz um erro). Existe uma maneira de colorir os colchetes no bloco de código de um LTXexample
ambiente?
\documentclass{article}
\usepackage{xcolor}
\usepackage{showexpl}
\lstset{language=[LaTeX]Tex,texcsstyle=*\color{red}}
\begin{document}
\begin{LTXexample}
\textit{Test}
\end{LTXexample}
\begin{lstlisting}[
literate=
*{\{}{{\textcolor{blue}{\{}}}{1}
{\}}{{\textcolor{blue}{\}}}}{1}
]
\textit{Test}
\end{lstlisting}
\end{document}
Responder1
Por showexpl
ser baseado no listings
pacote, a maioria dos recursos deste último, incluindo a literate
chave, deveriam, em teoria, funcionar imediatamente. Por alguma razão, porém, definir as substituições literais globalmente, assim
\lstset
{
literate=
*{\{}{{\textcolor{blue}{\{}}}{1}
{\}}{{\textcolor{blue}{\}}}}{1},
}
parece quebrar showexpl
, o que reclama de um arquivo Undefined control sequence \textitTest
. Não conheço showexpl
bem as entranhas para ter uma boa explicação para esse erro, mas parece que os aparelhos são descartados quando não deveriam. Parece um bug showexpl
para mim, especialmente porque o início da literate
chave em listings
(1999) é anterior ao primeiro lançamento de showexpl
(2004).
Uma solução alternativa é definir essas substituições alfabetizadas, não globalmente, mas dentro de um estilo personalizado; você não deve receber nenhum erro, então.
\documentclass{article}
\usepackage{xcolor}
\usepackage{showexpl}
%% returns an error!
%\lstset
%{
% literate=
% *{\{}{{\textcolor{blue}{\{}}}{1}
% {\}}{{\textcolor{blue}{\}}}}{1},
%}
\lstdefinestyle{myLaTeX}
{
language=[LaTeX]Tex,
texcsstyle=*\color{red},
literate=
*{\{}{{\textcolor{blue}{\{}}}{1}
{\}}{{\textcolor{blue}{\}}}}{1},
}
\begin{document}
\begin{LTXexample}[style=myLaTeX]
\textit{Test}
\end{LTXexample}
\begin{lstlisting}[style=myLaTeX]
\textit{Test}
\end{lstlisting}
\end{document}