Quiero definir un comando como \maplebox
; por ejemplo el comando \maplebox{\latex}
.
¿Por qué no se compila el siguiente código?
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{tcolorbox}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{lipsum}
\usepackage[top=2.5cm,right=3.5cm,bottom=2.5cm,left=2.5cm]{geometry}
\tcbuselibrary{listings,skins,theorems}
\newtcbinputlisting{\maplebox}[1][white]{
listing only,
nobeforeafter,
tcbox raise base,
% fontupper=\latinfont\setLTR\ttfamily\bfseries,
fontupper=\ttfamily\bfseries,
arc=0pt,
outer arc=0pt,
colback=#1!10!white,
colframe=#1!50!black,
boxsep=0pt,
left=1pt,
right=1pt,
top=2pt,
bottom=2pt,
boxrule=0pt,
bottomrule=1pt,
toprule=1pt}
\begin{document}
The \maplebox{\latex}
\end{document}
Respuesta1
Hay varios problemas/advertencias. En primer lugar, \newtcbinputlisting
crea un nuevo comando de entrada de listado, pero no desea leer un archivo, si estoy en lo cierto. Entonces, \newtcblisting
debería usarse. Esto crea un entorno literal, no una macro. No se recomienda utilizar un entorno de este tipo sólo con un parámetro opcional. Si tiene un parámetro obligatorio, también puede utilizar un parámetro opcional.
Ahora, transformé un poco tu ejemplo y espero que te sea útil:
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{tcolorbox}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{lipsum}
\usepackage[top=2.5cm,right=3.5cm,bottom=2.5cm,left=2.5cm]{geometry}
\tcbuselibrary{listings,skins,theorems}
\newtcblisting{maplebox}[1]{
listing only,
colupper=black,
nobeforeafter,
hbox,
tcbox raise base,
fontupper=\ttfamily\bfseries,
arc=0pt,
outer arc=0pt,
colback=#1!10!white,
colframe=#1!50!black,
boxsep=0pt,
left=1pt,
right=1pt,
top=2pt,
bottom=2pt,
boxrule=0pt,
bottomrule=1pt,
toprule=1pt,
}
\begin{document}
The
\begin{maplebox}{white}
\latex
\end{maplebox}
\
\begin{maplebox}{red}
\latex
\end{maplebox}
\
\begin{maplebox}{blue}
\latex
\end{maplebox}
\
\begin{maplebox}{green}
\latex
\end{maplebox}
\ test.
\end{document}
Actualizar:
Con la ayuda del xparse
paquete, es posible una solución macro. Utiliza \lstinline
un paquete from listings
incrustado en un \tcbox
paquete from tcolorbox
. Las opciones de formato se configuran directamente en \lstinline
.
\documentclass{article}
\usepackage{xparse}
\usepackage[svgnames]{xcolor}
\usepackage{tcolorbox}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{lipsum}
\usepackage[top=2.5cm,right=3.5cm,bottom=2.5cm,left=2.5cm]{geometry}
\tcbuselibrary{listings,skins,theorems}
\NewDocumentCommand{\maplebox}{ O{white} v}{%
\tcbox[colupper=black,nobeforeafter,tcbox raise base,
arc=0pt,outer arc=0pt,colback=#1!10!white,
colframe=#1!50!black,
boxsep=0pt,left=1pt,right=1pt,top=2pt,bottom=2pt,
boxrule=0pt,bottomrule=1pt,toprule=1pt]{%
\lstinline[style=tcblatex,texcsstyle=*\color{blue}\bfseries]§#2§}}
\begin{document}
\maplebox{\LaTeX}
\maplebox[red]{Some \LaTeX\ code}
\maplebox[blue]{$a^2+b^2=c^2$}
\maplebox[green]{\textbf{something}}
\end{document}
Actualización final:Se puede producir el mismo resultado con una sintaxis más elegante usando tcolorbox
from version 2.80 (2014/03/31)
:
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{tcolorbox}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{lipsum}
\usepackage[top=2.5cm,right=3.5cm,bottom=2.5cm,left=2.5cm]{geometry}
\tcbuselibrary{listings,skins,theorems,xparse}
\NewTotalTCBox{\maplebox}{ O{white} v}
{ colupper=black,nobeforeafter,tcbox raise base,
arc=0pt,outer arc=0pt,colback=#1!10!white,
colframe=#1!50!black,
boxsep=0pt,left=1pt,right=1pt,top=2pt,bottom=2pt,
boxrule=0pt,bottomrule=1pt,toprule=1pt}
{\lstinline[style=tcblatex,texcsstyle=*\color{blue}\bfseries]§#2§}
\begin{document}
\maplebox{\LaTeX}
\maplebox[red]{Some \LaTeX\ code}
\maplebox[blue]{$a^2+b^2=c^2$}
\maplebox[green]{\textbf{something}}
\end{document}