Criando uma caixa colorida com múltiplas linhas em LaTeX

Criando uma caixa colorida com múltiplas linhas em LaTeX

Estou tentando criar uma caixa colorida LaTeXcom duas linhas. Gostaria que o texto fosse centralizado. Idealmente, quero poder alterar a fonte do texto e o tamanho da caixa colorida.

Então, um exemplo do que pretendo está no lado esquerdo da imagem:

caixa colorida

Eu tentei várias coisas, principalmente de um post anterior (Defina o tamanho de \colorbox para um único caractere). Mas estou encontrando erros por diferentes motivos. Aqui está um MWE.texque criei com minhas duas tentativas que parecem mais próximas do que estou tentando alcançar:

\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}

Ao executar lualatex MWE.tex, recebo uma saída que mostra os resultados de minhas duas tentativas, parecida com a seguinte:

Saída MWE

Em ambas as tentativas, estou tendo dificuldade em me livrar da distinção óbvia entre as duas caixas que separam Nome e Sobrenome. Comecei a me perguntar se poderia haver uma solução mais fácil para o meu problema e possivelmente uma em que eu não precisasse criar duas caixas separadas.

Eu tentei várias alternativas, como:

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

Mas continuo sendo incapaz de alcançar o resultado desejado. Qualquer conselho é, como sempre, muito apreciado!

Responder1

Na verdade, isso é (muito, muito, muito) mais fácil e tcolorboxtem muitas opções.

\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}

insira a descrição da imagem aqui

Responder2

Este é outrocaixa de coressolução que usa as bibliotecas skinse xparse.xparseé usado para definir um novo comando

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

A largura da caixa esquerda é adaptada ao conteúdo das partes superior e inferior. A estrutura geral consiste numa sidebysidecaixa que se adapta à largura da caixa esquerda. O lado esquerdo da caixa consiste em mais tcolorboxuma parte superior e inferior. O lado direito da caixa consiste no que quer que esteja no terceiro argumento – neste caso, uma lista.

Isto é provavelmente mais fácil de demonstrar do que explicar:

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

Neste caso, o primeiro argumento tem mais largura que o segundo, então o lado esquerdo será definido para acomodar a largura 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}%
}

Neste caso, o segundo argumento precisa de mais espaço que o primeiro, então a caixa esquerda será dimensionada para acomodar Somewhat Longer Name.

Em ambos os casos, o restante da largura da linha estará disponível para o conteúdo do lado direito, ou seja, neste caso a lista com ícones.

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

define a fonte que será utilizada para o conteúdo das caixas. Adapte conforme desejado.

São definidos dois estilos que determinam os estilos utilizados para as caixas.

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

Este estilo é usado para o box de dois andares à esquerda.

    colback=black,

Fundo preto.

    lower separated=false,

Nenhuma linha separando a parte superior da inferior.

    coltext=white,

Texto branco.

    fontupper=\nameboxfont,
    fontlower=\nameboxfont,

Aplica a fonte definida anteriormente a ambas as partes da caixa.

    halign=center,
    halign lower=center,

Alinha o texto nos andares superior e inferior centralizado.

    sharpish corners,

O padrão é usar cantos arredondados. Eu usei sharpish cornersaqui. Outra possibilidade é sharp corners. Tente ver o que você gosta.

    middle=.75mm,

Embora o manual sugira o contrário, parece ser metade da distância entre as partes superior e inferior da caixa. (O manual sugere que isso éalém de boxsep, mas parece não ser o caso.)

  },

Esse é o estilo feito.

  two by two/.style={%

Esse é o estilo da caixa grande que inclui tudo.

    sidebyside gap=1mm,

A distância entre a caixa preta esquerda e o lado direito que contém a lista.

    lower separated=false,

Como acima: sem linha.

    halign upper=left,
    halign lower=left,

Define o alinhamento da caixa preta esquerda lefte o alinhamento da lista direita como left.

    sidebyside adapt=left,

Adapta a largura das peças à largura do material à esquerda.

    empty,

Sem fundo, linhas etc.

    size=minimal,

Não adicione espaçamento extra.

Esta caixa é puramente estrutural: seu objetivo é alinhar as coisas e não parecer uma caixa de forma alguma, por isso queremos esta versão simplificada e 'nua' fornecida pela biblioteca skins.

  },

Terminamos com esse estilo também.

}

Esses são todos os estilos que precisamos.

Também queremos algumas dimensões iniciais para quando medirmos coisas.

\newlength\nameboxtempa
\newlength\nameboxtempb

Aqui está a definição do comando final, \namebox{}{}{}.

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

Medimos as larguras do primeiro e do segundo argumentos.

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

Agora comparamos as larguras. Se a largura do material na parte inferior (sobrenome) for maior que a largura do material na parte superior (nomes), então definimos a largura \nameboxtempacomo a largura da parte inferior. Caso contrário, \nameboxtempajá é a largura que desejamos.

  \tcbsidebyside[two by two]{%

Aplique nosso estilo para a caixa grande.

    \begin{tcolorbox}[%

Comece a caixa à esquerda.

      name box,

Aplique nosso estilo para isso.

      text width=\nameboxtempa,

Defina a largura para \nameboxtempagarantir que ela acomode apenas a mais longa das duas linhas que conterá.

      ]
      #1

Os primeiros nomes vão aqui.

      \tcblower
      #2

O sobrenome vai na parte inferior.

    \end{tcolorbox}%

Feche o ambiente e terminamos com o lado esquerdo da grande caixa externa.

  }{%
    #3

O lado direito dessa caixa contém tudo o que está no terceiro argumento.

  }
}

<code>\namebox</code> demonstração

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}

Responder3

Uma solução simples com um tabularambiente e 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} 

insira a descrição da imagem aqui

Responder4

insira a descrição da imagem aqui

\documentclass{article}

\usepackage{color}

\begin{document}

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

\end{document}

informação relacionada