答案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}