Создание многострочного цветного блока в LaTeX

Создание многострочного цветного блока в LaTeX

Я пытаюсь создать цветной блок с LaTeXдвумя строками. Я хочу, чтобы текст был выровнен по центру. В идеале я хочу иметь возможность менять шрифт текста и размер цветного блока.

Итак, пример того, к чему я стремлюсь, находится в левой части изображения:

цветная коробка

Я перепробовал множество вещей, в основном из предыдущего поста (Установить размер \colorbox для одного символа). Но я сталкиваюсь с ошибками по разным причинам. Вот MWE.texчто я создал с помощью двух попыток, которые кажутся наиболее близкими к тому, чего я пытаюсь достичь:

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

После запуска lualatex MWE.tex я получаю вывод, показывающий результаты моих двух попыток, который выглядит следующим образом:

Выход МВЭ

В обеих попытках мне трудно избавиться от очевидного различия между двумя полями, разделяющими FirstName и LastName. Я начал задаваться вопросом, может ли быть более простое решение моей проблемы, и, возможно, такое, в котором мне не нужно создавать два отдельных поля.

Я пробовал разные альтернативы, такие как:

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

Но я все еще не могу достичь желаемого результата. Любой совет, как всегда, очень ценен!

решение1

На самом деле это (гораздо, намного, намного) проще и tcolorboxимеет множество вариантов.

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

введите описание изображения здесь

решение2

Это еще одинtcolorboxрешение, использующее библиотеки skinsи xparse.xparseиспользуется для определения новой команды

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

Ширина левого блока адаптируется к содержимому верхней и нижней частей. Общая структура состоит из sidebysideблока, который адаптируется к ширине левого блока. Левая сторона блока состоит из следующего tcolorboxс верхней и нижней частями. Правая сторона блока состоит из того, что находится в третьем аргументе — в данном случае, списка.

Это, вероятно, легче продемонстрировать, чем объяснить:

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

В этом случае первый аргумент занимает большую ширину, чем второй, поэтому левая часть будет установлена ​​с учетом ширины 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}%
}

В этом случае второму аргументу требуется больше места, чем первому, поэтому размер левого поля будет подобран так, чтобы вместить Somewhat Longer Name.

В обоих случаях оставшаяся часть ширины строки будет доступна для содержимого правой стороны, т.е. в данном случае для списка со значками.

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

устанавливает шрифт, который будет использоваться для содержимого полей. Адаптируйте по желанию.

Определены два стиля, которые определяют стили, используемые для коробок.

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

Этот стиль использован для двухэтажного бокса слева.

    colback=black,

Черный фон.

    lower separated=false,

Нет линии, разделяющей верхнюю часть от нижней.

    coltext=white,

Белый текст.

    fontupper=\nameboxfont,
    fontlower=\nameboxfont,

Применяет шрифт, определенный ранее, к обеим частям поля.

    halign=center,
    halign lower=center,

Выравнивает текст в верхнем и нижнем слоях по центру.

    sharpish corners,

По умолчанию используются закругленные углы. Я использовал sharpish cornersздесь. Другая возможность — sharp corners. Попробуйте посмотреть, что вам нравится.

    middle=.75mm,

Хотя в руководстве указано иное, это, по-видимому, половина расстояния между верхней и нижней частями коробки. (В руководстве указано, что этов дополнение к boxsep, но, похоже, это не так.)

  },

Вот и все, стиль готов.

  two by two/.style={%

Это стиль большой коробки, в которую входит все.

    sidebyside gap=1mm,

Расстояние между левым черным ящиком и правой стороной, содержащей список.

    lower separated=false,

Как и выше: линии нет.

    halign upper=left,
    halign lower=left,

Устанавливает выравнивание левого черного поля leftи выравнивание правого списка на left.

    sidebyside adapt=left,

Адаптирует ширину деталей к ширине материала слева.

    empty,

Без фона, линий и т.п.

    size=minimal,

Не добавляйте дополнительных интервалов.

Этот блок носит исключительно структурный характер: его цель — выравнивать элементы, а не выглядеть как блок, поэтому нам нужна эта урезанная «голая» версия, предоставляемая библиотекой skins.

  },

С этим стилем мы тоже закончили.

}

Это все стили, которые нам нужны.

Нам также нужно иметь несколько дополнительных размеров для измерений.

\newlength\nameboxtempa
\newlength\nameboxtempb

Вот определение последней команды \namebox{}{}{}:

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

Измеряем ширину первого и второго аргументов.

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

Теперь сравним ширины. Если ширина материала снизу (фамилия) больше ширины материала сверху (имена), то мы устанавливаем ширину \nameboxtempaна ширину нижнего бита. В противном случае \nameboxtempaэто уже та ширина, которую мы хотим.

  \tcbsidebyside[two by two]{%

Примените наш стиль для большой коробки.

    \begin{tcolorbox}[%

Начните с поля слева.

      name box,

Примените для этого наш стиль.

      text width=\nameboxtempa,

Установите ширину, равную той, \nameboxtempaкоторая гарантирует, что она вмещает только самую длинную из двух строк, которые она будет содержать.

      ]
      #1

Здесь указываются имена.

      \tcblower
      #2

Фамилия указывается в нижней части.

    \end{tcolorbox}%

Закройте среду, и мы закончим с левой стороной большого внешнего ящика.

  }{%
    #3

Правая часть этого поля получает то, что указано в третьем аргументе.

  }
}

<code>\namebox</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}

решение3

Простое решение с tabularокружающей средой и 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} 

введите описание изображения здесь

решение4

введите описание изображения здесь

\documentclass{article}

\usepackage{color}

\begin{document}

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

\end{document}

Связанный контент