Problema com destaque de código embutido usando tcbox e mintedinline - Renderiza # como ##

Problema com destaque de código embutido usando tcbox e mintedinline - Renderiza # como ##

Criei um comando para realce de código embutido usando tcbox e mintedinline, mas estou encontrando um problema. Quando tento escrever apenas um #, ele é renderizado como ##. Experimentei várias opções para o tcbox, mas nada parece resolver o problema. Curiosamente, quando uso apenas o mintedinline, funciona conforme o esperado. Portanto, não acredito que o problema esteja na minha configuração \setminted.

Quaisquer insights ou sugestões sobre como resolver esse problema serão muito apreciados.

Código mínimo de látex:

\documentclass{article}
\usepackage{xcolor}
\usepackage{minted}
\usepackage{tcolorbox}

\definecolor{codeinlineBlue}{HTML}{CFE2FC}
\newcommand\mystrut{\rule[-2.5pt]{0pt}{12pt}}
\newcommand{\codeinline}[2][text]{%
    \tcbox[
      on line,
      boxsep=0pt,
      left=2pt,
      right=2pt,
      top=0pt,
      bottom=0pt,
      enlarge top initially by=-4pt,
      enlarge bottom by=-4pt,
      enlarge right by=-4pt,
      enlarge left by=-2pt,
      opacityframe=0,
      colback=codeinlineBlue,
      fontupper={\ttfamily\mystrut},
      fontlower={\ttfamily\mystrut}]
      {\mintinline{#1}{#2}}
}

\begin{document}

Text before code \codeinline{int main() \{ return 0; \}}, text after. Problem: \codeinline{#}.
This works as expected: \mintinline{text}{#}

\end{document}

insira a descrição da imagem aqui

Responder1

Você deve reunir o argumento literalmente (mas não poderá usá-lo \codeinlinecomo argumento para outro comando). Para fazer isso você usa \NewTotalTCBox.

\documentclass{article}
\usepackage{xcolor}
\usepackage{minted}
\usepackage{tcolorbox}
\tcbuselibrary{xparse}

\definecolor{codeinlineBlue}{HTML}{CFE2FC}
\newcommand\mystrut{\rule[-2.5pt]{0pt}{12pt}}

\NewTotalTCBox{\codeinline}{O{text}v}{
  on line,
  boxsep=0pt,
  left=2pt,
  right=2pt,
  top=0pt,
  bottom=0pt,
  enlarge top initially by=-4pt,
  enlarge bottom by=-4pt,
  enlarge right by=-4pt,
  enlarge left by=-2pt,
  opacityframe=0,
  colback=codeinlineBlue,
  fontupper={\ttfamily\mystrut},
  %fontlower={\ttfamily\mystrut},
}{\mintinline{#1}{#2}}


\begin{document}

Text before code \codeinline{int main() \{ return 0; \}}, 
text after. Problem: \codeinline{#}.
This works as expected: \mintinline{text}{#}

\end{document}

insira a descrição da imagem aqui

informação relacionada