Sideways text with rule as table label
Here's an automated solution, allowing page breaks (in the case the table spans several pages); all you have to do is to enclose the table using the tikzborder
environment, providing as mandatory argument the label:
\documentclass{article}
\usepackage{fontspec, tabularx,xunicode}
\usepackage{longtable}
\usepackage{atbegshi}
\usepackage{refcount}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{lipsum}
\newcounter{bordercntr}
\newcounter{borderpages}
\newcommand\tikzmark[1]{%
\tikz[overlay,remember picture] \node (#1) {};}
\newenvironment{tikzborder}[1]
{%
\gdef\bordertitle{#1}
\stepcounter{bordercntr}%
\tikzmark{start-border}\label{start-border\thebordercntr}%
\ifnum\getpagerefnumber{start-border\thebordercntr}=\getpagerefnumber{end-border\thebordercntr} \else
\begin{tikzpicture}[overlay, remember picture]
\draw [ultra thick,gray]
let \p1 = (start-border.south), \p2 = (end-border), \p3 = (current page.center) in%
( $ (\x3,\y1) + (-.55\textwidth,2pt) $ ) -- ( $ (\x3,\y3) + (-0.55\textwidth,-0.5\textheight-15pt) $ );
\end{tikzpicture}%
\begin{tikzpicture}[overlay, remember picture]
\path let \p1 = (start-border.south), \p2 = (current page.center) in%
node[rotate=90,fill=white,anchor=east,font=\color{black!70}\sffamily] at ( $ (\x2,\y1) + (-.55\textwidth,2pt) $ ) {\bordertitle};
\end{tikzpicture}
\setcounter{borderpages} {\numexpr\getpagerefnumber{end-border\thebordercntr}-\getpagerefnumber{start-border\thebordercntr}}\theborderpages
\ifnum\value{borderpages}>1
\AtBeginShipoutNext{\tikzborderpage}%
\fi
\fi%
}
{\tikzmark{end-border}\label{end-border\thebordercntr}
\ifnum\getpagerefnumber{start-border\thebordercntr}=\getpagerefnumber{end-border\thebordercntr}
\begin{tikzpicture}[overlay, remember picture]
\draw [ultra thick,gray]
let \p1 = (start-border.south), \p2 = (end-border), \p3 = (current page.center) in
( $ (\x3,\y1) + (-.55\textwidth,2pt) $ ) -- ( $ (\x3,\y2) + (-.55\textwidth,10pt) $ );
\end{tikzpicture}%
\begin{tikzpicture}[overlay, remember picture]
\path let \p1 = (start-border.south), \p2 = (current page.center) in%
node[rotate=90,fill=white,anchor=east,font=\color{black!70}\sffamily] at ( $ (\x2,\y1) + (-.55\textwidth,2pt) $ ) {\bordertitle};
\end{tikzpicture}
\else
\begin{tikzpicture}[overlay, remember picture]
\draw [ultra thick,gray]
let \p1 = (start-border.north), \p2 = (end-border), \p3 = (current page.center) in
( $ (\x3,\y3) + (-.55\textwidth,.5\textheight-6pt) $ ) -- ( $ (\x3,\y2) + (-.55\textwidth,20pt) $ );
\end{tikzpicture}%
\fi%
}
\newcommand\tikzborderpage{%
\begin{tikzpicture}[overlay, remember picture]
\draw [ultra thick,gray]
let \p1 = (current page.center) in
( $ (\x1,\y1) + (-.55\textwidth,0.5\textheight-15pt) $ ) -- ( $ (\x1,\y1) + (-.55\textwidth,-0.5\textheight) $ );
\end{tikzpicture}
\addtocounter{borderpages}{-1}%
\ifnum\value{borderpages}>1
\AtBeginShipoutNext{\tikzborderpage}%
\fi%
}
\begin{document}
\begin{tikzborder}{skills}
\noindent\begin{tabularx}{\textwidth}{X}
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\end{tabularx}
\end{tikzborder}
\begin{tikzborder}{expertise}
\begin{longtable}{p{.7\textwidth}}
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\textbf{Spoken Languages} \\
English, Hebrew (fluent in speaking, reading, and writing) \\
\\
\textbf{Programming Languages} \\
Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
\emph{Familiar with C++, Haskell, PHP} \\
\\
\textbf{Technologies} \\
OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\emph{Familiar with Windows, Windows Server, MySQL} \\
\end{longtable}
\end{tikzborder}
\end{document}
Here is a very manual attempt at obtaining the result. Since the vertical rule + text spans 12 rows of the table (in my example), I draw a \rule
of length 12\normalbaselineskip
, and then rotate it into position:
\documentclass{article}
\usepackage{graphicx, tabularx, xcolor}% http://ctan.org/pkg/{graphicx,tabularx,xcolor}
\begin{document}
\begin{tabularx}{\textwidth}{l X}
& \textbf{Spoken Languages} \\
& English, Hebrew (fluent in speaking, reading, and writing) \\
& \\
& \textbf{Programming Languages} \\
& Objective-C, C, Ruby, Java, Python, HTML + CSS/SASS + JavaScript/CoffeeScript \\
& \emph{Familiar with C++, Haskell, PHP} \\
& \\
& \textbf{Technologies} \\
& OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
\smash{\rotatebox{90}{%
\color{black!20}\rule[.5ex]{12\normalbaselineskip}{.4pt}\llap{\colorbox{white}{\color{black!75}skills}}%
}} &
\emph{Familiar with Windows, Windows Server, MySQL}
\end{tabularx}
\end{document}
graphicx
provides \rotatebox{<degrees>}{<stuff>}
while xcolor
allows for changing the text/rule colours. I have foregone multirow
since \smash
removes the vertical height of its argument.
It is also possible to use zref
's savepos
module to identify the start/end of the rsection
, and insert a rule accordingly:
\documentclass{article}
\usepackage{graphicx, tabularx, xcolor, environ}% http://ctan.org/pkg/{graphicx,tabularx,xcolor,environ}
\usepackage{zref-savepos}% http://ctan.org/pkg/zref
\usepackage[margin=1in]{geometry}% http://ctan.org/pkg/geometry
\makeatletter
% Taken from http://tex.stackexchange.com/a/69076/5764
% \zsaveposx/y is defined since 2011/12/05 v2.23 of zref-savepos
\@ifundefined{zsaveposy}{\let\zsaveposy\zsavepos}{}
\newlength{\tablewidth}
\newcounter{@rsection}
\NewEnviron{rsection}[3]{%
% #1 = label
% #2 = tabularx width
% #3 = column specification
\setlength{\tablewidth}{#2}%
\stepcounter{@rsection}% Mark labels top/bottom based on rsection counter
%
\noindent\begin{tabularx}{\tablewidth}{l #3}
\zsaveposy{rsection-top-\the@rsection}% Store top y-position
\BODY \\[-\normalbaselineskip]% Place content
\zsaveposy{rsection-bot-\the@rsection}% Store bottom y-position
\zref@refused{rsection-top-\the@rsection}%
\zref@refused{rsection-bot-\the@rsection}%
\smash{\rotatebox{90}{%
\color{black!33}%
\rule[.5ex]{\dimexpr\normalbaselineskip+\zposy{rsection-top-\the@rsection}sp-\zposy{rsection-bot-\the@rsection}sp}{.4pt}%
\llap{\colorbox{white}{\color{black!66}#1}}
}} &
\end{tabularx}%
}
\makeatother
\begin{document}
\begin{rsection}{education}{0.5\textwidth}{X}
& \textbf{Binghamton University, State University of New York} \\
& B.S. — Computer Science · Expected 2016 \\
& \\
& Binghamton University Scholars Program \\
& Binghamton President's Scholars Program
\end{rsection}%
\begin{rsection}{skills}{0.5\textwidth}{X}
& \textbf{Spoken Languages} \\
& English, Hebrew (fluent in speaking, reading, and writing) \\
& \\
& \textbf{Programming Languages} \\
& Objective-C, C, Ruby, Java, Python, HTML, CSS, SASS, JavaScript, CoffeeScript \\
& \emph{Familiar with C++, Haskell, PHP} \\
& \\
& \textbf{Technologies} \\
& OS X, iOS, Xcode, Unix/Linux Systems, LaTeX, Shell Scripting, Git, Vim, Jekyll \\
& \emph{Familiar with Windows, Windows Server, MySQL}
\end{rsection}
\end{document}
In the above example, the labels rsection-bot-\the@rsection
and rsection-top-\the@rsection
store the y-position (in scaled points/sp
s) of the table bottom & top, respectively. An appropriate \dimexpr
calculates the height of the table and inserts the rule (as before) in the first column.