Erstellen einer mehrzeiligen farbigen Box in LaTeX

Erstellen einer mehrzeiligen farbigen Box in LaTeX

Ich versuche, ein farbiges Feld mit LaTeXzwei Zeilen zu erstellen. Ich möchte, dass der Text zentriert ist. Idealerweise möchte ich die Textschriftart und die Größe des farbigen Felds ändern können.

Auf der linken Seite des Bildes sehen Sie ein Beispiel meines Ziels:

farbige Box

Ich habe zahlreiche Dinge ausprobiert, die meisten davon aus einem früheren Beitrag (Größe von \colorbox für ein einzelnes Zeichen festlegen). Aber ich stoße aus verschiedenen Gründen auf Fehler. Hier ist ein MWE.texBeispiel, das ich mit meinen beiden Versuchen erstellt habe und das dem, was ich erreichen möchte, am nächsten kommt:

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

Beim Ausführen von lualatex MWE.tex erhalte ich eine Ausgabe mit den Ergebnissen meiner beiden Versuche, die wie folgt aussieht:

MWE-Ausgabe

Bei beiden Versuchen habe ich Schwierigkeiten, die offensichtliche Unterscheidung zwischen den beiden Feldern zwischen Vorname und Nachname aufzuheben. Ich begann mich zu fragen, ob es für mein Problem vielleicht eine einfachere Lösung gibt, bei der ich möglicherweise keine zwei separaten Felder erstellen muss.

Ich habe verschiedene Alternativen ausprobiert, wie zum Beispiel:

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

Aber ich kann mein gewünschtes Ergebnis immer noch nicht erreichen. Jeder Rat ist wie immer sehr willkommen!

Antwort1

Dies ist tatsächlich (viel, viel, viel) einfacher, tcolorboxda es viele Optionen gibt.

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

Bildbeschreibung hier eingeben

Antwort2

Dies ist ein weitererAbonnierenLösung, die die skinsund xparseBibliotheken verwendet.xparsewird verwendet, um einen neuen Befehl zu definieren

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

Die Breite der linken Box wird an den Inhalt der oberen und unteren Teile angepasst. Die Gesamtstruktur besteht aus einer sidebysideBox, die sich an die Breite der linken Box anpasst. Die linke Seite der Box besteht aus einer weiteren tcolorboxmit oberen und unteren Teilen. Die rechte Seite der Box besteht aus dem, was im dritten Argument steht – in diesem Fall eine Liste.

Dies ist wahrscheinlich leichter zu demonstrieren als zu erklären:

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

In diesem Fall ist das erste Argument breiter als das zweite, sodass die linke Seite so eingestellt wird, dass sie der Breite von entspricht 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}%
}

In diesem Fall benötigt das zweite Argument mehr Platz als das erste, daher wird die Größe des linken Felds entsprechend angepasst Somewhat Longer Name.

In beiden Fällen steht die restliche Zeilenbreite für den Inhalt der rechten Seite zur Verfügung, also in diesem Fall die Liste mit den Symbolen.

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

legt die Schriftart fest, die für den Inhalt der Felder verwendet wird. Passen Sie diese nach Wunsch an.

Es sind zwei Stile definiert, die die für die Boxen verwendeten Stile bestimmen.

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

Dieser Stil wird für die zweistöckige Box auf der linken Seite verwendet.

    colback=black,

Schwarzer Hintergrund.

    lower separated=false,

Keine Linie, die den oberen Teil vom unteren trennt.

    coltext=white,

Weißer Text.

    fontupper=\nameboxfont,
    fontlower=\nameboxfont,

Wendet die zuvor definierte Schriftart auf beide Teile der Box an.

    halign=center,
    halign lower=center,

Richtet den Text in den Ober- und Untergeschossen zentriert aus.

    sharpish corners,

Standardmäßig werden abgerundete Ecken verwendet. Ich habe sharpish cornershier verwendet. Eine andere Möglichkeit ist sharp corners. Probieren Sie aus, was Ihnen gefällt.

    middle=.75mm,

Obwohl das Handbuch etwas anderes vermuten lässt, scheint dies die Hälfte der Distanz zwischen dem oberen und unteren Teil der Box zu sein. (Das Handbuch deutet darauf hin, dass dieszusätzlich zu boxsep, aber das scheint nicht der Fall zu sein.)

  },

So sieht dieser Stil aus.

  two by two/.style={%

Dies ist der Stil für die große Box, die alles enthält.

    sidebyside gap=1mm,

Der Abstand zwischen der linken schwarzen Box und der rechten Seite, die die Liste enthält.

    lower separated=false,

Wie oben: keine Linie.

    halign upper=left,
    halign lower=left,

Legt die Ausrichtung des linken schwarzen Kästchens leftund die Ausrichtung der rechten Liste auf fest left.

    sidebyside adapt=left,

Passt die Breite der Teile an die Breite des Materials links an.

    empty,

Kein Hintergrund, Linien usw.

    size=minimal,

Fügen Sie keinen zusätzlichen Abstand hinzu.

Diese Box hat einen rein strukturellen Zweck: Ihr Zweck besteht darin, Dinge auszurichten und in keiner Weise wie eine Box auszusehen, daher möchten wir diese abgespeckte „nackte“ Version, die von der Bibliothek bereitgestellt wird skins.

  },

Auch mit diesem Stil sind wir fertig.

}

Das sind alle Stile, die wir brauchen.

Wir möchten außerdem einige Grundabmessungen für die Messung.

\newlength\nameboxtempa
\newlength\nameboxtempb

Hier ist die Definition des letzten Befehls \namebox{}{}{}.

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

Wir messen die Breite des ersten und zweiten Arguments.

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

Wir vergleichen nun die Breiten. Wenn die Breite des unteren Teils (Nachname) größer ist als die Breite des oberen Teils (Vornamen), dann setzen wir die Breite \nameboxtempaauf die Breite des unteren Teils. Andernfalls \nameboxtempaist es bereits die gewünschte Breite.

  \tcbsidebyside[two by two]{%

Wenden Sie unseren Stil für die große Box an.

    \begin{tcolorbox}[%

Starten Sie die Box auf der linken Seite.

      name box,

Wenden Sie hierfür unseren Stil an.

      text width=\nameboxtempa,

Stellen Sie die Breite so ein, \nameboxtempadass nur die längste der beiden Zeilen hineinpasst, die es enthalten wird.

      ]
      #1

Hier kommen Vornamen hin.

      \tcblower
      #2

Der Nachname kommt in den unteren Teil.

    \end{tcolorbox}%

Schließen Sie die Umgebung und wir sind mit der linken Seite der großen, äußeren Box fertig.

  }{%
    #3

Die rechte Seite dieses Felds erhält das, was im dritten Argument steht.

  }
}

<code>\namebox</code> Demo

Vollständiger Code:

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

Antwort3

Eine einfache Lösung mit einer tabularUmgebung und 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} 

Bildbeschreibung hier eingeben

Antwort4

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{color}

\begin{document}

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

\end{document}

verwandte Informationen