堆叠 3 种字体粗细

堆叠 3 种字体粗细

我想以以下方式写演示文稿标题:

在此处输入图片描述

3 种字体粗细似乎堆叠在一起。可以使用 Tikz 来管理吗?

答案1

修改后的答案(包括实际的 3 号字体)

这次修改实际上使事情变得简单了一些,因为我不需要使用 pdfliteral 技巧来改变字体粗细,而是实际上使用具有 3 种字体粗细的字体(OpenSans)。

这里的新技巧是将每个字体粗细的字母间距设置为与粗体间距相等,为此我创建了宏\boldwidth{}

\documentclass{article}
\usepackage[default]{opensans}
\usepackage{stackengine,xcolor,trimclip}
\setstackgap{L}{0pt}
\setstackEOL{\\}
\newcommand\boldwidth[1]{\boldwidthaux#1\relax}
\def\boldwidthaux#1#2\relax{%
  \setbox0=\hbox{\fontseries{b}\selectfont#1}%
  \makebox[\wd0][c]{#1}%
  \ifx\relax#2\relax\else\boldwidthaux#2\relax\fi%
}
\begin{document}
\pagecolor{black!80}
\sffamily

\fontseries{l}\selectfont
\color{black!70}\savestack\light{\kern1pt\boldwidth{JUNCTION}}
\color{black}\savestack\lightA{LIGHT}

\fontseries{m}\selectfont
\color{black!50}\savestack\regular{\kern.1pt\rotatebox{3.5}{\clipbox{-1pt -1pt 0pt 4pt}{%
                                   \rotatebox{-3.5}{\boldwidth{JUNCTION}}}}\kern-.1pt}
\color{black}\savestack\regularA{REGULAR}

\fontseries{b}\selectfont
\color{black!30}\savestack\heavy{\clipbox{-1pt -1pt 0pt 5pt}{\boldwidth{JUNCTION}}}
\color{black}\savestack\heavyA{BOLD}

\stackunder[0pt]{\Longunderstack{\light\\\regular\\\heavy}}{%
  \scalebox{.15}{\lightA\qquad\regularA\qquad\heavyA}}
\end{document}

在此处输入图片描述

原始答案

根据我第二部分答案的简化版本让 LaTeX 文档从一种字体慢慢转换为另一种字体,它采用了 Malipivo 提供的 pdfliteral 魔法TikZ:文本周围有光晕?。这些“东西”允许我使用 pdf 文字代码设置文本的颜色和粗细。我丢弃了那些答案中关于根据文本长度自动改变转换的部分。

注意:如果我有一种字体可以直接提供三种不同的粗细,我就根本不需要这个 pdfliteral 东西了。也许有人可以推荐一种字体。

一旦我有了可变厚度/颜色的文本,我就会创建三种不同颜色/粗细的三个版本,然后\trimclip(根据需要旋转)并叠加它们。

\documentclass{article}
\usepackage{xcolor,stackengine,trimclip}
%%%
\makeatletter
%%% MALIPIVO's PDF SPECIAL TO CHANGE FONT OUTLINE THICKNESS/COLOR
% https://tex.stackexchange.com/questions/18472/tikz-halo-around-text/169549#169549
\input pdf-trans
\newbox\qbox
\def\usecolor#1{\csname\string\color@#1\endcsname\space}
\newcommand\bordercolor[1]{\colsplit{1}{#1}}
\newcommand\fillcolor[1]{\colsplit{0}{#1}}
\newcommand\outline[1]{\leavevmode%
  \def\maltext{#1}%
  \setbox\qbox=\hbox{\maltext}%
  \boxgs{Q q 2 Tr \thickness\space w \fillcol\space \bordercol\space}{}%
  \copy\qbox%
}
\makeatother
\newcommand\colsplit[2]{\colorlet{tmpcolor}{#2}\edef\tmp{\usecolor{tmpcolor}}%
  \def\tmpB{}\expandafter\colsplithelp\tmp\relax%
  \ifnum0=#1\relax\edef\fillcol{\tmpB}\else\edef\bordercol{\tmpC}\fi}
\def\colsplithelp#1#2 #3\relax{%
  \edef\tmpB{\tmpB#1#2 }%
  \ifnum `#1>`9\relax\def\tmpC{#3}\else\colsplithelp#3\relax\fi
}
\bordercolor{black}
\fillcolor{black}
%%% BRUNO's \slantbox
% https://tex.stackexchange.com/questions/63179/shear-transform-a-box/63188#63188
\newsavebox\foobox
\newcommand{\slantbox}[2][.2]{\mbox{%
        \sbox{\foobox}{#2}%
        \hskip\wd\foobox
        \pdfsave
        \pdfsetmatrix{1 0 #1 1}%
        \llap{\usebox{\foobox}}%
        \pdfrestore
}}
%%%
\setstackgap{L}{0pt}
\setstackEOL{\\}
\begin{document}
\pagecolor{black}
\sffamily

\savestack\light{%
  \def\thickness{0.0}%
  \fillcolor{black!60}%
  \bordercolor{black!60}%
  \outline{JUNCTION}%
}

\savestack\medium{%
  \def\thickness{0.4}%
  \fillcolor{black!40}%
  \bordercolor{black!40}%
  \rotatebox{3}{\clipbox{0pt -1pt 0pt 4pt}{\rotatebox{-3}{\outline{JUNCTION}}}}%
}

\savestack\heavy{%
  \def\thickness{0.8}%
  \fillcolor{black!20}%
  \bordercolor{black!20}%
  \clipbox{0pt -1pt 0pt 5pt}{\outline{JUNCTION}}%
}

\Longunderstack{\light\\\medium\\\heavy}
\end{document}

在此处输入图片描述

答案2

我仍然遇到字母对齐问题,但这是使用TikZ和 的初始解决方案microtype。因为我不知道如何使用microtype,甚至不知道这是否是解决问题的方法,所以请随意更改它。

在此处输入图片描述

\documentclass[tikz,border=2mm]{standalone}
\usepackage[default]{opensans}
\usepackage{tikz}
\usepackage{microtype}

\begin{document}

\begin{tikzpicture}[font=\sffamily]

\node[minimum height=1cm, minimum width=3cm,
    fill=black!80, font=\fontseries{l}\selectfont, text=black!70] (A) {\textls[50]{JUNCTION}};

\begin{scope}
\clip ([yshift= -1pt]A.west)|-(A.south east)--([yshift= 4pt]A.east)--cycle;
\node[minimum height=1cm, minimum width=3cm,
    fill=none, font=\fontseries{m}\selectfont, text=black!50, anchor=south] (B) at (A.south) {\textls[25]{JUNCTION}};
\end{scope}

\begin{scope}
\clip ([yshift= -2pt]A.west)|-(A.south east)--([yshift= 1pt]A.east)--cycle;
\node[minimum height=1cm, minimum width=3cm,
    fill=none, font=\fontseries{b}\selectfont, text=black!30, anchor=south] (C) at (A.south) {JUNCTION};
\end{scope}

\end{tikzpicture}

\end{document}

相关内容