Problema ao adicionar um título ao tcolorbox

Problema ao adicionar um título ao tcolorbox

Eu defini um ambiente python em meu documento usando tcolorbox. Gostaria de adicionar um título ao anúncio. No entanto, o compilador reclama da adição do seguinte ao pythoncodeambiente:

\begin{pythoncode}[colback=red!5!white,colframe=red!75!black,title=My nice heading]

Quando removo as opções acima e uso apenas \begin{pythoncode}[], o código é compilado com sucesso. Abaixo está um MWE sobre este problema.

\documentclass{book}    
\usepackage[left=1.00in, right=1.00in, top=1.00in, bottom=1.00in]{geometry}    

\usepackage{amsmath}    
\usepackage[pdftex]{graphicx, color}    
\usepackage{hyperref}       
\hypersetup{ %    
    pdfborder = {0 0 0},    
    colorlinks=true,    
}    

\usepackage[T1]{fontenc} 

\usepackage{tcolorbox}    
\tcbuselibrary{minted,skins,breakable}    


\newtcblisting{pythoncode}[1][]{    
  listing engine=minted,    
  breakable,   
  colback=bg,    
  colframe=black!70,    
  listing only,    
  minted style=colorful,    
  minted language=python,    
  minted options={linenos=true,numbersep=3mm,texcl=true,#1},    
  left=5mm,enhanced,    
  overlay={\begin{tcbclipinterior}\fill[black!25] (frame.south west)    
            rectangle ([xshift=5mm]frame.north west);\end{tcbclipinterior}}    
}    


\definecolor{bg}{rgb}{0.85,0.85,0.85}    

\begin{document}    

\section{Python example}    
\begin{pythoncode}[colback=red!5!white,colframe=red!75!black,title=My nice heading]    
# indent your Python code to put into an email    
import glob    
# glob supports Unix style pathname extensions    
python_files = glob.glob('*.py')    
for file_name in sorted(python_files):    
    print '    ------' + file_name    

    with open(file_name) as f:    
        for line in f:    
            print '    ' + line.rstrip()    

    print    
\end{pythoncode}    

\end{document}    

Alguém poderia esclarecer esse problema?

Responder1

Você tem o argumento, #1no lugar incorreto; você atualmente o tem aqui:

minted options={linenos=true,numbersep=3mm,texcl=true,#1},    

então você está passando as opções para o mintedpacote, o que não é o que você deseja fazer.

Em vez disso, mova-o para o final da sua lista de opções, logo após o overlaycomando:

  overlay={\begin{tcbclipinterior}\fill[black!25] (frame.south west)    
            rectangle ([xshift=5mm]frame.north west);\end{tcbclipinterior}},
            #1,

Aqui está uma versão funcional - observe que hyperrefdeve ser carregada por último neste caso; verQuais pacotes devem ser carregados após o hyperref em vez de antes?para mais detalhes.

% arara: pdflatex: {shell: yes}
\documentclass{book}    
\usepackage[left=1.00in, right=1.00in, top=1.00in, bottom=1.00in]{geometry}    

\usepackage{amsmath}    
\usepackage{tcolorbox}    
\tcbuselibrary{minted,skins,breakable}    

\usepackage{hyperref}       
\hypersetup{ %    
    pdfborder = {0 0 0},    
    colorlinks=true,    
}    

\newtcblisting{pythoncode}[1][]{    
  listing engine=minted,    
  breakable,   
  colback=bg,    
  colframe=black!70,    
  listing only,    
  minted style=colorful,    
  minted language=python,    
  minted options={linenos=true,numbersep=3mm,texcl=true},    
  left=5mm,enhanced,    
  overlay={\begin{tcbclipinterior}\fill[black!25] (frame.south west)    
            rectangle ([xshift=5mm]frame.north west);\end{tcbclipinterior}},
            #1,
}    

\begin{document}    

\section{Python example}    
\begin{pythoncode}[colback=red!5!white,colframe=red!75!black,title=My nice heading]    
# indent your Python code to put into an email    
import glob    
# glob supports Unix style pathname extensions    
python_files = glob.glob('*.py')    
for file_name in sorted(python_files):    
    print '    ------' + file_name    

    with open(file_name) as f:    
        for line in f:    
            print '    ' + line.rstrip()    

    print    
\end{pythoncode}    

\end{document}    

informação relacionada