Tidak dapat memasukkan daftar Python di LaTeX

Aug 31 2020

Saya mencoba memasukkan daftar Python ke a \fbox\parboxtetapi saya selalu mendapatkan kesalahan.

Ini kode saya:

\documentclass[12pt]{article}

% Packages
\usepackage[utf8]{inputenc}    % support for accents
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}   % doc language
\usepackage{lmodern}
\usepackage[a4paper]{geometry} % marges
\usepackage{xcolor}            % text color
\usepackage{sectsty}           % colorize sections
\usepackage{changepage}
\usepackage{moreverb}          % code with indent
\usepackage{listings}          % display code with magnification
\usepackage{amssymb}
\usepackage{amsmath}           % Text into equation
\usepackage{enumitem}          % Continue enumerate numbers
\usepackage{fourier}           % Double brackets

% Python listing
\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\sffamily,
keywordstyle=\textbf,
commentstyle=\color{blue},
showstringspaces=false,
frame=tb, numbers=left }}
% Python environment
\lstnewenvironment{python}[1][]{
\pythonstyle \lstset{#1} }{}

\begin{document}
\begin{enumerate}
    \item On suppose qu'on dispose d'une fonction \texttt{binom(n,k)}, prenant en entrée deux entiers, et qui calcule $\binom{n}{k}$. Ecrire en langage \textsc{Python} une fonction \texttt{bernoulli(n)}, qui prend en entrée un entier naturel, et qui renvoie la liste \texttt{[b\_0, b\_1, ..., b\_n]}. \par
        \fbox{\parbox{\linewidth-2\fboxrule-2\fboxsep}{
            La relation précédente donne, pour $n \ge 2$ :
            \[ \binom{n}{n-1} b_{n-1} = - \sum_{j=0}^{n-2} \binom{n}{j} b_j \]
            autrement dit on a la relation de récurrence, pour tout $m \ge 1$ :
            \[ b_m = -\frac{1}{m+1} \sum_{j=0}^{m-1} \binom{n}{j} b_j \]
            On en déduit le code demandé :
        }}
        \fbox{\parbox{\linewidth-2\fboxrule-2\fboxsep}{
            \begin{python}
                def bernoulli(n) :
                     liste_bj = [1]
                     for m in range(1,n+1):
                         b = 0
                         for j in range(m):
                             b -= binom(m+1,j) * liste_bj[j]
                         b /= m+1
                         liste_bj.append(b)
                     return liste_bj
            \end{python}
        }} %err1
    \end{enumerate}

Saya mendapat kesalahan berikut:

  • Pada documentclass: Berhenti darurat, terjadi kesalahan fatal, tidak ada keluaran PDF yang dihasilkan!
  • Pada err1: Argumen \ lst @ next memiliki ekstra}. Paragraf diakhiri sebelum \ lst @ next selesai. Extra}, atau lupa \ endgroup
  • Pada \ end {enumerate}: \ begin {python} diakhiri dengan \ end {enumerate}
  • Pada \ end {document}: \ begin {enumerate} diakhiri dengan \ end {document}. Anda tidak dapat menggunakan '\ end' dalam mode vertikal internal. Tidak ada {dimasukkan

Saya mencoba untuk menghapus "daftar python" dan "lingkungan python" pada pembukaan dan mengganti \begin{python}dengan \begin{listings}(sama dengan \end) untuk mereset proyek LaTeX saya dengan presentasi kode standar, tetapi saya masih mendapatkan kesalahan yang sama. Jadi sepertinya LaTeX mengalami kesulitan untuk membaca bahwa perintah penutupan listing saya diletakkan sebelum menutup yang enumerate. Mungkin karena saya memasukkan daftar ke \fbox\parbox?

The \fbox\parboxbekerja dengan baik dengan teks dan persamaan di dalamnya, sehingga masalah ini tidak datang dari sana.

Jawaban

samcarter_is_at_topanswers.xyz Aug 31 2020 at 06:38

Anda tidak boleh menggunakan konten yang rapuh, seperti listingan, sebagai argumen makro lain.

Bagaimanapun, fbox \ parbox benar-benar berlebihan - lstingsmemiliki opsi bingkai untuk ini:

\documentclass[12pt]{article}

% Packages
\usepackage[utf8]{inputenc}    % support for accents
\usepackage[T1]{fontenc}
\usepackage[french]{babel}   % doc language
\usepackage{lmodern}
\usepackage[a4paper]{geometry} % marges
\usepackage{xcolor}            % text color
\usepackage{sectsty}           % colorize sections
\usepackage{changepage}
\usepackage{moreverb}          % code with indent
\usepackage{listings}          % display code with magnification
\usepackage{amssymb}
\usepackage{amsmath}           % Text into equation
\usepackage{enumitem}          % Continue enumerate numbers
\usepackage{fourier}           % Double brackets

% Python listing
\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\sffamily,
keywordstyle=\textbf,
commentstyle=\color{blue},
showstringspaces=false,
frame=tb, numbers=left }}
% Python environment
\lstnewenvironment{python}[1][]{
\pythonstyle \lstset{#1} }{}

\begin{document}
\begin{enumerate}
    \item On suppose qu'on dispose d'une fonction \texttt{binom(n,k)}, prenant en entrée deux entiers, et qui calcule $\binom{n}{k}$. Ecrire en langage \textsc{Python} une fonction \texttt{bernoulli(n)}, qui prend en entrée un entier naturel, et qui renvoie la liste \texttt{[b\_0, b\_1, ..., b\_n]}. \par
        \fbox{\parbox{\linewidth-2\fboxrule-2\fboxsep}{
            La relation précédente donne, pour $n \ge 2$ :
            \[ \binom{n}{n-1} b_{n-1} = - \sum_{j=0}^{n-2} \binom{n}{j} b_j \]
            autrement dit on a la relation de récurrence, pour tout $m \ge 1$ :
            \[ b_m = -\frac{1}{m+1} \sum_{j=0}^{m-1} \binom{n}{j} b_j \]
            On en déduit le code demandé :
        }}
%        \fbox{\parbox{\linewidth-2\fboxrule-2\fboxsep}{
            \begin{python}[frame=single,linewidth=1.035\linewidth]
def bernoulli(n) :
     liste_bj = [1]
     for m in range(1,n+1):
         b = 0
         for j in range(m):
             b -= binom(m+1,j) * liste_bj[j]
         b /= m+1
         liste_bj.append(b)
     return liste_bj
            \end{python}
%        }} %err1
    \end{enumerate}
    \end{document}

(dan \end{document}jelas hilang)