
Может ли кто-нибудь любезно дать мне знать, как я могу передать один параметр в minted options
и один в tcolorbox
одновременно в pythoncode
список tcolorbox? Я имею в виду, я хочу, чтобы некоторые параметры передавались в minted options
, как показано #1
в MWE ниже, а некоторые передавались в tcolorbox
, как показано #2
.
\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}[2][]{
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}},
#2,
}
\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}
решение1
То, что вы сделали, работает с небольшими изменениями. Вам нужно передать параметры в pythoncode
среду, как это
\begin{pythoncode}[linenos=true,]{colback=red!5!white,colframe=red!75!black,title=My nice heading}
Вы сделали параметры tcolorbox
(т. е. pythoncode
) обязательными, поэтому их необходимо заключить в фигурные скобки, тогда как minted
параметры находятся внутри brakets
.
\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}[2][]{
listing engine=minted,
breakable,
colback=bg,
colframe=black!70,
listing only,
minted style=colorful,
minted language=python,
minted options={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}},
#2,
}
\begin{document}
\section{Python example}
\begin{pythoncode}[linenos=true,]{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}
Некоторые пояснения:
Когда вы определяете
\newtcblisting{pythoncode}[2][]{
Вы говорите, что будет два аргумента для окружения pythoncode
. С пустым []
вы делаете первый аргумент, optional
значением по умолчанию которого является none. Необязательный аргумент должен использоваться внутри brackets
или его можно просто опустить, в этом случае будет использоваться значение по умолчанию (здесь none). Второй аргумент является обязательным и заключен в фигурные скобки. Если вы не хотите придавать ему никаких значений, просто используйте {}
(в отличие от первого, где вам не нужно использовать никаких значений). Следовательно, без опций вам придется использовать
\begin{pythoncode}{}
В нижней строке это [2][]
означает, что есть два аргумента, первый аргумент является необязательным и имеет значение по умолчанию none
.