stackoverflow like resume based on res.cls
You need to add a \strut
so that each node is the same height:
As per Qrrbrbirlbel's suggestion, using \vphantom{y}
produces slightly tighter output:
\newcommand{\tagf}[2][]{%
\begin{tikzpicture}[baseline={(TAG.base)}]
\node[draw,#1] (TAG) {#2};
\node[font=\tiny,draw,#1] (TAG) {#2\vphantom{y}};
\end{tikzpicture}
}
Code:
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\newcommand{\mytag}[1]{%
\begin{tikzpicture}[baseline={(TAG.base)}]
\node[draw, minimum height=1ex] (TAG) {#1};
\end{tikzpicture}}
\newcommand{\tagf}[2][]{%
\begin{tikzpicture}[baseline={(TAG.base)}]
\node[draw,#1] (TAG) {#2};
\node[font=\tiny,draw,#1] (TAG) {#2\strut};
\end{tikzpicture}
}
\begin{document}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{SAMBA}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{Red Hat}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{Windows}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{NFS}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{Python}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{Shell}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{MySQL}\hspace{-0.25cm}
\end{document}
You can also greatly simply your code if you use \tikzset
to define styles, and use a \foreach
loop for repetitive tasks:
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\newcommand{\tagf}[2][]{%
\begin{tikzpicture}[baseline={(TAG.base)}]
\node[draw,#1] (TAG) {#2};
\node[font=\tiny,draw,#1] (TAG) {#2\vphantom{y}};
\end{tikzpicture}
}
\tikzset{My Tag Style/.style={blue!80, fill=blue!20, rounded corners, , font=\fontsize{0.1}{.1}}}
\begin{document}
\foreach \x in {SAMBA, Red Hat, Windows, NFS, Python, Shell, MySQL} {%
\tagf[My Tag Style]{\x}\hspace{-0.25cm}
}
\end{document}
As requested …
But first, let me summarize some things:
\vphantom{y}
doesn't add vertical space like capital letters, in your all minuscule example you could add\vphantom{Ay}
for example.The
\strut
is something similar by the way. It adds a zero-width vertical rule with a height (above the baseline) of.7\baselineskip
and a depth (below the baseline) of.3\baselineskip
.
(You get the same effect with\rule[-.3\baselineskip]{0pt}{\baselineskip}
.)Judging of the original example this was too much depth in my opinion, and as all other nodes had majuscule letter there was no need for more adjusting.
- The class option
a4papper
gives me—to no surprise—a warning as this option is none. - Even though
res
is based on thearticle
class it does not forward an option likea4paper
so that I even get a warning than. - … which is the reason for using
[a4paper]{article}
in my examples (but you can, of course, use any class you want) - Your
\hspace{-.25cm}
is unneeded if you add a%
at the end of the lines containing your tag. (→ What is the use of percent signs (%) at the end of lines?)
(In my comment I was wrong: The additional horizontal space doesn't come fromouter sep
but from the space that is inserted.) \fontsize{0.1}{.1}
doesn't work, it even gives a warning:LaTeX Font Warning: Font shape `OT1/cmr/m/n' in size <0.1> not available size <5> substituted on input line 48.
font=\tiny
doesn't get used, as it gets overwritten, too.- All the while you're using
\scalefont{0.8}
anyway. Let's just use that. - Don't use
\it
. (→ Does it matter if I use \textit or \it, \bfseries or \bf, etc)
Now, before we play with all the \vphantom
s, \rule
s and \strut
s they are, we just make use of TikZ' own styles, namely:
text height
andtext depth
.
We get the most appealing output (in my eyes) when we don't use a depth (ignoring all descenders in letters like y
and g
) and set the height to the one of a majuscule letter. When the above mentioned TikZ styles are used the actual heights and depths of the node text are ignored.
We could mimic this output using \vphantom{A}\smash{#2}
as the node text (#2
being the actual text), or, with the help of amsmath
's extension of \smash
, \smash[b]{#2}
(b
stands for bottom, i.e. only the bottom part is smashed).
TikZ' default settings of inner xsep
and inner ysep
of .3333em
make sure that the lines have a little padding to the text. (These settings can be changed, too, of course, to get yet another output.)
To cut a long story short
Code
\newcommand{\tagf}[2][]{{%
\scalefont{0.8}%
\sbox0{A}%
\tikz[baseline={(TAG.base)}]{
\node[draw=blue!80, fill=blue!20, rounded corners, text height=\ht0, text depth=0pt, #1] (TAG) {#2};
}%
}}
Output
Depths? Heights? What the …?
(\strut
has problems inside a TikZ-node inside tabular
so I removed it from the last column.)
Table
Closer
Full code
\documentclass[a4paper]{article}
\usepackage{parskip}% to mimic res' output
\usepackage{tikz} % loads xcolor by default
\usepackage{scalefnt}
\usepackage{amsmath}% only for the extended version of \smash
\usepackage{calc}
\usetikzlibrary{shapes.geometric}
\newcommand{\tagf}[2][]{{%
\scalefont{0.8}%
\sbox0{A}%
\tikz[baseline={(TAG.base)}]{
\node[draw=blue!80, fill=blue!20, rounded corners, text height=\ht0, text depth=0pt, #1] (TAG) {#2};
}%
}}
\begin{document}
Responsibilities include installation and configuration of Linux clusters and workstations
\tagf{SAMBA}%
\tagf{Red Hat}%
\tagf{Windows}%
\tagf{NFS}%
\tagf{Python}%
\tagf{Shell}%
\tagf{MySQL} %
Responsibilities include installation and configuration of Linux clusters and workstations
\par
Responsibilities include installation and configuration of Linux clusters and workstations
\tagf{Fortran95}%
\tagf{Make}%
\tagf{gcc}%
\tagf{GCC}%
\tagf{Python}
Responsibilities include installation and configuration of Linux clusters and workstations
\par
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The following code should not be used inside your resumee! %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\boxme}[2][black]{{%
\fboxrule=.4pt%
\fboxsep=0pt%
{\color{#1}\fbox{\color{black}#2}}%
}}
\newcommand{\showmeheightanddepth}[2][]{%
\global\sbox0{#2}%
\rlap{\kern-.4em\rule[-.1pt]{\wd0+.8em}{.2pt}}% baseline
\boxme{#2}#1
& \the\ht0
& \the\dp0
& \the\dimexpr\ht0+\dp0\relax
& \ifx#2\strut\else\let\boxme\dontboxmeinsideTikZ%
\tagf[text height=, text depth=]{#2}\fi
}
\newcommand{\dontboxmeinsideTikZ}[2][black]{%
#2%
}
\edef\baselineskipinnormaltext{\the\baselineskip}
\begin{tabular}{lrrrc}
boxed & height & depth & totalheight & Ti\emph{k}Z \\\hline
\showmeheightanddepth{ace}\\
\showmeheightanddepth{ABC}\\
\showmeheightanddepth{gy}\\
\showmeheightanddepth{Age}\\
\showmeheightanddepth{\vphantom{A}\smash{\boxme[green]{Age}}}\\
\showmeheightanddepth{\smash[b]{\boxme[green]{Age}}}\\ % needs \usepackage{amsmath}
\showmeheightanddepth[ (\texttt{strut})]{\strut}
\end{tabular}
\end{document}