Crear un cuadro coloreado de varias líneas en LaTeX

Crear un cuadro coloreado de varias líneas en LaTeX

Estoy intentando crear un cuadro de color LaTeXque tenga dos líneas. Me gustaría que el texto estuviera centrado. Idealmente, quiero poder cambiar la fuente del texto y el tamaño del cuadro de color.

Entonces, un ejemplo de lo que busco está en el lado izquierdo de la imagen:

caja de color

He probado numerosas cosas, principalmente de una publicación anterior (Establecer el tamaño de \colorbox para un solo carácter). Pero me encuentro con errores por diferentes motivos. Aquí hay uno MWE.texque creé con mis dos intentos y que parece el más cercano a lo que estoy tratando de lograr:

\documentclass[paper=letterpaper,fontsize=10pt]{article}
\usepackage{amsmath,amsfonts,amsthm}
\usepackage{graphicx}
\usepackage[svgnames]{xcolor}
\usepackage{geometry}
\usepackage{url}
\usepackage{wrapfig}
\frenchspacing
\pagestyle{empty}
\usepackage{sectsty}
\sectionfont{
    \usefont{OT1}{phv}{b}{n}%
    \sectionrule{0pt}{0pt}{-5pt}{3pt}
    }
\usepackage{eqparbox} 

%%% BEGIN DOCUMENT ------------------------------------------------------------
\begin{document}

\vspace*{-7em}

%First attempt%
\noindent \colorbox{Black}{\parbox{4em} \hfill \color{White} \Huge \usefont{OT1}{phv}{b}{n} FirstName}
\vspace*{-.3mm} %doesn't work
\newline
\noindent \colorbox{Black}{\parbox{4em} \hfill \color{White} \Huge \usefont{OT1}{phv}{b}{n} LastName}

%Second attempt%
\noindent \colorbox{Black}{\makebox(60,30){\textcolor{white}{FirstName}}}
\newline
\vspace*{-2em} %doesn't work
\noindent \colorbox{Black}{\makebox(60,30){\textcolor{white}{LastName}}}
\vspace*{5em}

\vspace{2em}
My CV would follow here

\end{document}

Al ejecutar lualatex MWE.tex, obtengo un resultado que muestra los resultados de mis dos intentos y que tiene el siguiente aspecto:

Salida MWE

En ambos intentos, tengo dificultades para deshacerme de la distinción obvia entre los dos cuadros que separan Nombre y Apellido. Comencé a preguntarme si podría haber una solución más sencilla para mi problema y posiblemente una en la que no tuviera que crear dos cuadros separados.

Probé varias alternativas, tales como:

\noindent \colorbox{Black}{\makebox(60,60){\textcolor{white}{FirstName \n LastName}}}

Pero sigo sin poder alcanzar el resultado deseado. ¡Cualquier consejo es, como siempre, muy apreciado!

Respuesta1

De hecho, esto es (mucho, mucho, mucho) más fácil y tcolorboxtiene muchas opciones.

\documentclass[paper=letterpaper,fontsize=10pt]{article}
\usepackage{amsmath,amsfonts,amsthm}
\usepackage{graphicx}
\usepackage[svgnames]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{geometry}
\usepackage{url}
\usepackage{wrapfig}
\frenchspacing
\pagestyle{empty}
\usepackage{sectsty}
\sectionfont{
    \usefont{OT1}{phv}{b}{n}%
    \sectionrule{0pt}{0pt}{-5pt}{3pt}
  }
%\usepackage{eqparbox} % ??? What's this?

%%% BEGIN DOCUMENT ------------------------------------------------------------
\begin{document}
\begin{tcbraster}[raster columns=2,raster equal height]
\begin{tcolorbox}[enhanced jigsaw, % needed to really the frame off!
 colback=black, % black background
 coltext=white, % white text
 halign=center, % center
 fontupper={\Huge \bfseries}, % change the font here
 sharp corners, % no rounded corners
 colframe=black, % not really necessary
 boxrule=0pt % frame off 
 ]
  FirstName

  LastName
\end{tcolorbox}
\begin{tcolorbox}[enhanced jigsaw,sharp corners,coltext=black,colback=white,boxrule=0pt]
\begin{itemize}
\item Github
\item LinkedIn
\item Phone
\end{itemize}
\end{tcolorbox}
\end{tcbraster}

\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Este es otrocaja de coloressolución que utiliza las bibliotecas skinsy xparse.xparsese utiliza para definir un nuevo comando

\namebox{<first names>}{<last name>}{<content of right hand box e.g. list>}

El ancho de la caja de la izquierda se adapta al contenido de las partes superior e inferior. La estructura general consta de un sidebysidecajón que se adapta al ancho del cajón izquierdo. El lado izquierdo de la caja consta de otra parte tcolorboxcon partes superior e inferior. El lado derecho del cuadro consta de lo que esté en el tercer argumento (en este caso, una lista).

Probablemente esto sea más fácil de demostrar que de explicar:

\namebox{First Names}{Last Name}{%
  \begin{itemize}
    \item[\faGithubSquare] github.com/Repository
    \item[\faLinkedinSquare] linkedin.com/Account
    \item[\faMobile] 0123 456789
  \end{itemize}%
}

En este caso, el primer argumento tiene más ancho que el segundo, por lo que el lado izquierdo se configurará para acomodar el ancho de First Names.

\namebox{Short Name}{Somewhat Longer Name}{%
  \begin{itemize}
    \item[\faGithubSquare] github.com/Repository
    \item[\faLinkedinSquare] linkedin.com/Account
    \item[\faMobile] 0123 456789
  \end{itemize}%
}

En este caso, el segundo argumento necesita más espacio que el primero, por lo que el cuadro de la izquierda tendrá el tamaño adecuado para acomodar Somewhat Longer Name.

En ambos casos, el resto del ancho de línea estará disponible para el contenido del lado derecho, es decir, en este caso la lista con iconos.

\DeclareRobustCommand{\nameboxfont}{\normalfont\sffamily\bfseries\Large\baselineskip14pt}

establece la fuente que se utilizará para el contenido de los cuadros. Adáptese como desee.

Se definen dos estilos que determinan los estilos utilizados para las cajas.

\tcbset{%
  name box/.style={%

Este estilo se utiliza para la caja de dos pisos de la izquierda.

    colback=black,

Fondo negro.

    lower separated=false,

No hay línea que separe la parte superior de la inferior.

    coltext=white,

Texto blanco.

    fontupper=\nameboxfont,
    fontlower=\nameboxfont,

Aplica la fuente definida anteriormente a ambas partes del cuadro.

    halign=center,
    halign lower=center,

Alinea el texto en los pisos superior e inferior centrado.

    sharpish corners,

El valor predeterminado es utilizar esquinas redondeadas. He usado sharpish cornersaquí. Otra posibilidad es sharp corners. Prueba a ver cuál te gusta.

    middle=.75mm,

Aunque el manual sugiere lo contrario, esta parece ser la mitad de la distancia entre las partes superior e inferior de la caja. (El manual sugiere que esto esademás de boxsep, pero ese parece no ser el caso).

  },

Ese es ese estilo hecho.

  two by two/.style={%

Este es el estilo de la caja grande que incluye todo.

    sidebyside gap=1mm,

La distancia entre el cuadro negro de la izquierda y el lado derecho que contiene la lista.

    lower separated=false,

Como arriba: sin línea.

    halign upper=left,
    halign lower=left,

Establece la alineación del cuadro negro izquierdo lefty la alineación de la lista derecha en left.

    sidebyside adapt=left,

Adapta el ancho de las piezas al ancho del material de la izquierda.

    empty,

Sin fondo, líneas, etc.

    size=minimal,

No agregue espacios adicionales.

Este cuadro es puramente estructural: su propósito es alinear las cosas y no parecerse a un cuadro de ninguna manera, por lo que queremos esta versión simplificada y "simple" proporcionada por la biblioteca skins.

  },

También hemos terminado con este estilo.

}

Esos son todos los estilos que necesitamos.

También queremos un par de dimensiones iniciales para cuando medimos cosas.

\newlength\nameboxtempa
\newlength\nameboxtempb

Aquí está la definición del comando final \namebox{}{}{}.

\NewDocumentCommand \namebox { m m +m }{%
  \settowidth\nameboxtempa{\nameboxfont #1}%
  \settowidth\nameboxtempb{\nameboxfont #2}%

Medimos los anchos del primer y segundo argumento.

  \ifdim\nameboxtempa<\nameboxtempb\setlength\nameboxtempa{\nameboxtempb}\fi%

Ahora comparamos los anchos. Si el ancho de las cosas en la parte inferior (apellido) es mayor que el ancho de las cosas en la parte superior (nombres), entonces establecemos el ancho \nameboxtempaal ancho del bit inferior. En caso contrario, \nameboxtempaya tiene el ancho que queremos.

  \tcbsidebyside[two by two]{%

Aplica nuestro estilo para la caja grande.

    \begin{tcolorbox}[%

Inicie el cuadro de la izquierda.

      name box,

Aplica nuestro estilo para esto.

      text width=\nameboxtempa,

Establezca el ancho en \nameboxtempapara asegurarse de que se ajuste solo a la más larga de las dos líneas que contendrá.

      ]
      #1

Los nombres van aquí.

      \tcblower
      #2

El apellido va en la parte de abajo.

    \end{tcolorbox}%

Cierra el entorno y terminamos con el lado izquierdo de la caja exterior grande.

  }{%
    #3

El lado derecho de ese cuadro obtiene lo que esté en el tercer argumento.

  }
}

<code>\namebox</code> demostración

Código completo:

\documentclass{article}
\usepackage{tcolorbox,fontawesome}
\tcbuselibrary{xparse,skins}
\DeclareRobustCommand{\nameboxfont}{\normalfont\sffamily\bfseries\Large\baselineskip14pt}
\newlength\nameboxtempa
\newlength\nameboxtempb
\NewDocumentCommand \namebox { m m +m }{%
  \settowidth\nameboxtempa{\nameboxfont #1}%
  \settowidth\nameboxtempb{\nameboxfont #2}%
  \ifdim\nameboxtempa<\nameboxtempb\setlength\nameboxtempa{\nameboxtempb}\fi%
  \tcbsidebyside[two by two]{%
    \begin{tcolorbox}[%
      name box,
      text width=\nameboxtempa,
      ]
      #1
      \tcblower
      #2
    \end{tcolorbox}%
  }{%
    #3
  }
}
\tcbset{%
  name box/.style={%
    colback=black,
    lower separated=false,
    coltext=white,
    fontupper=\nameboxfont,
    fontlower=\nameboxfont,
    halign=center,
    halign lower=center,
    sharpish corners,
    middle=.75mm,
  },
  two by two/.style={%
    sidebyside gap=1mm,
    boxrule=0pt,
    boxsep=0pt,
    lower separated=false,
    halign upper=left,
    halign lower=left,
    sidebyside adapt=left,
    empty,
    size=minimal,
  },
}
\begin{document}
\namebox{First Names}{Last Name}{%
  \begin{itemize}
    \item[\faGithubSquare] github.com/Repository
    \item[\faLinkedinSquare] linkedin.com/Account
    \item[\faMobile] 0123 456789
  \end{itemize}%
}
\namebox{Short Name}{Somewhat Longer Name}{%
  \begin{itemize}
    \item[\faGithubSquare] github.com/Repository
    \item[\faLinkedinSquare] linkedin.com/Account
    \item[\faMobile] 0123 456789
  \end{itemize}%
}
\end{document}

Respuesta3

Una solución sencilla con un tabularentorno y colortbl:

\documentclass[paper=letterpaper,fontsize=10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{geometry}
\usepackage{cabin}
\usepackage{fontawesome}
\usepackage{amsmath}
\usepackage{graphicx, array, multirow, makecell,}
\usepackage[svgnames, table]{xcolor}
\usepackage{url}
\frenchspacing
\pagestyle{empty}
\renewcommand\theadfont{\normalsize\bfseries\color{white}}

%%% BEGIN DOCUMENT ------------------------------------------------------------
\begin{document}

\sffamily
\begin{tabular} {>{\columncolor{black}}ccl}
& \faGithub & Github.com/Lastname\\
 & \faLinkedin & Linkedin.com/Lastname\\
\multirowthead{-3}{First name\\Last name} & \faMobile& 1234.5678
\end{tabular}

\end{document} 

ingrese la descripción de la imagen aquí

Respuesta4

ingrese la descripción de la imagen aquí

\documentclass{article}

\usepackage{color}

\begin{document}

\colorbox{black}{\textcolor{white}{\Large\bfseries\sffamily
\begin{tabular}{@{}l@{}}
FirstName\\
lastName
\end{tabular}}}

\end{document}

información relacionada