iftoggle com minipágina: erro faltando número, unidade de medida ilegal

iftoggle com minipágina: erro faltando número, unidade de medida ilegal

enquanto combinaalternarcomminipágina, recebi a seguinte mensagem de erro:

Missing number, treated as zero }
Illegal unit of measure (pt inserted) 
Emergency stop
Text dropped after begin of listing

\iftogglefunciona bem combinado com lstlisting (sem minipágina). Mas eu gostaria de obter 2 listagens lado a lado, C e Python ou C++ e Python dependendo do toggletrue...

Obrigado pela ajuda!

\documentclass[12pt]{article} % classe de document
\usepackage[latin1]{inputenc} % encodage des caractères d'entrée
\usepackage[T1]{fontenc} % encodage de la police
\usepackage[english,frenchb]{babel}% langue

\usepackage{listings}

\usepackage{etoolbox}
\newtoggle{LANGC}
\toggletrue{LANGC}  

\begin{document}

\iftoggle{LANGC}{%
\noindent\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=C,caption=code C,frame=tlrb]{Name}
int i = 1;
while (i <= 10) {
printf(" %d", i);
i = i + 1;
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Python, caption=code Python ,frame=tlrb,firstnumber=1]{Name}
i = 1
while (i <= 10):
print " ", i
i = i + 1
\end{lstlisting}
\end{minipage}
}{%
\noindent\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=C++,caption=code C++,frame=tlrb]{Name}
int i = 1;
while (i <= 10) {
cout << i;
i = i + 1;
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Python, caption=code Python ,frame=tlrb,firstnumber=1]{Name}
i = 1
while (i <= 10):
print " ", i
i = i + 1
\end{lstlisting}
\end{minipage}
}         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< error here !
\end{document}

Obrigado pela ajuda!

Responder1

Você não pode ter um lstlistingambiente no argumento de outro comando. É fácil ter um formulário “independente”:

\documentclass[12pt]{article} % classe de document
\usepackage[latin1]{inputenc} % encodage des caractères d'entrée
\usepackage[T1]{fontenc} % encodage de la police
\usepackage[english,frenchb]{babel}% langue

\usepackage{listings}

\usepackage{etoolbox}
\newtoggle{LANGC}
\toggletrue{LANGC}

\newcommand{\doiftoggle}[1]{\iftoggle{#1}{\iftrue}{\iffalse}\ignorespaces}

\begin{document}

\doiftoggle{LANGC}
\noindent\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=C,caption=code C,frame=tlrb]{Name}
int i = 1;
while (i <= 10) {
printf(" %d", i);
i = i + 1;
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Python, caption=code Python ,frame=tlrb,firstnumber=1]{Name}
i = 1
while (i <= 10):
print " ", i
i = i + 1
\end{lstlisting}
\end{minipage}
\else
\noindent\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=C++,caption=code C++,frame=tlrb]{Name}
int i = 1;
while (i <= 10) {
cout << i;
i = i + 1;
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Python, caption=code Python ,frame=tlrb,firstnumber=1]{Name}
i = 1
while (i <= 10):
print " ", i
i = i + 1
\end{lstlisting}
\end{minipage}
\fi

\togglefalse{LANGC}

\doiftoggle{LANGC}
\noindent\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=C,caption=code C,frame=tlrb]{Name}
int i = 1;
while (i <= 10) {
printf(" %d", i);
i = i + 1;
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Python, caption=code Python ,frame=tlrb,firstnumber=1]{Name}
i = 1
while (i <= 10):
print " ", i
i = i + 1
\end{lstlisting}
\end{minipage}
\else
\noindent\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=C++,caption=code C++,frame=tlrb]{Name}
int i = 1;
while (i <= 10) {
cout << i;
i = i + 1;
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Python, caption=code Python ,frame=tlrb,firstnumber=1]{Name}
i = 1
while (i <= 10):
print " ", i
i = i + 1
\end{lstlisting}
\end{minipage}
\fi

\end{document}

insira a descrição da imagem aqui

Responder2

Obrigado pelos comentários, vou tentar comseestrutura (VER INFERIOR...), mas no momento mudeilistaparalistagem de entrada...mais esforço para exportar arquivos de origem, mas uma chance de verificá-los mais facilmente

        \iftoggle{LANGC}{%
        \noindent\begin{minipage}{.45\textwidth}
        \lstinputlisting[language=C,caption={Compter de 1 à 10 en C},frame=tlrb]{code000.c}
        \end{minipage}\hfill
        \begin{minipage}{.45\textwidth}
        \lstinputlisting[language=Python,caption={Compter de 1 à 10 en Python},frame=tlrb]{code000.py}
        \end{minipage}
        }{%
        \noindent\begin{minipage}{.45\textwidth}
        \lstinputlisting[language=C++,caption={Compter de 1 à 10 en C++},frame=tlrb]{code000.c++}
        \end{minipage}\hfill
        \begin{minipage}{.45\textwidth}
        \lstinputlisting[language=Python,caption={Compter de 1 à 10 en Python},frame=tlrb]{code000.py}
        \end{minipage}
        }

ou ainda mais curto:

        \noindent\begin{minipage}{.45\textwidth}
        \iftoggle{LANGC}{%
        \lstinputlisting[language=C,caption={Compter de 1 à 10 en C},frame=tlrb]{code000.c}
        }{%
        \lstinputlisting[language=C++,caption={Compter de 1 à 10 en C++},frame=tlrb]{code000.c++}
        }
        \end{minipage}\hfill
        \begin{minipage}{.45\textwidth}
        \lstinputlisting[language=Python,caption={Compter de 1 à 10 en Python},frame=tlrb]{code000.py}
        \end{minipage}

EDITAR 1

\se... funciona bem !

adicionando:

    \newif\iflangageC
    \langageCtrue

elista:

        \noindent\begin{minipage}{.45\textwidth}
        \iflangageC
          \begin{lstlisting}[language=C,caption=code C,frame=tlrb]{Name}
          int i = 1;
          while (i <= 10) {
            printf(" %d", i);
            ++i;
          }
          \end{lstlisting}
        \else
          \begin{lstlisting}[language=C++,caption=code C++,frame=tlrb]{Name}
          int i = 1;
          while (i <= 10) {
            cout << " " << i;
            ++i;
           }
          \end{lstlisting}
        \fi
        \end{minipage}\hfill
        \begin{minipage}{.45\textwidth}
        \begin{lstlisting}[language=Python, caption=code Python ,frame=tlrb,firstnumber=1]{Name}
        i = 1
        while (i <= 10):
           print " ", i
           i = i + 1
         }
        \end{lstlisting}
        \end{minipage}

informação relacionada