How to recreate the following table in LaTeX similarly?
To color a row you can use \rowcolor
and to underline the first 3 cells use \cline{1-3}
.
If you do not need the floats, here is how I would do it.
\documentclass{article}
\usepackage{xcolor,colortbl}
\begin{document}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
\rowcolor{gray!40}
M & T & W & Th & F & S & Su \\ \hline
& C & & & C & C & \\ \hline
& C & & C & C & & \\ \hline
& C & & & C & C & C \\ \hline
& C & & & C & C & \\ \hline
\end{tabular}
\hspace{2em} %space between tables
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
\rowcolor{gray!40}
M & T & W & Th & F & S & Su \\ \hline
& C & C & C & C & C & \\ \hline
& C & & C & & & \\ \hline
& C & C & & C & C & \\ \hline
& C & C & & C & C & \\ \hline
& C & \\ \cline{1-3}
\end{tabular}
\end{document}
Resulting in
Here's an implementation with LaTeX3 features; you just supply the month, the initial month's day (in abbreviated form) and the list of special days.
\documentclass{article}
\usepackage{xparse}
\usepackage{xcolor,colortbl}
\ExplSyntaxOn
% #1 = month name, #2 = initial day of week, #3 = list of days
\NewDocumentCommand{\monthtable}{ m m m }
{
\alby_monthtable:nnn { #1 } { #2 } { #3 }
}
\cs_new_protected:Npn \alby_monthtable:nnn #1 #2 #3
{
%% compute the number of days from the month name
\int_set:Nn \l_alby_days_int
{
\str_case:nnn { #1 }
{
{January}{31}
{February}{28}
{Februaryleap}{29}
{March}{31}
{April}{30}
{May}{31}
{June}{30}
{July}{31}
{August}{31}
{September}{30}
{October}{31}
{November}{30}
{December}{31}
}
{OOPS}
}
%% compute the initial shift
\int_set:Nn \l_alby_initial_int
{
\str_case:nnn { #2 }
{
{Mo}{0}
{Tu}{1}
{We}{2}
{Th}{3}
{Fr}{4}
{Sa}{5}
{Su}{6}
}
{OOPS}
}
%% the table body is stored in \l_alby_table_tl
%% compose the first table row
\tl_set:Nn \l_alby_table_tl
{
\rowcolor{gray!40}
\makebox[1.5em]{Mo} &
\makebox[1.5em]{Tu} &
\makebox[1.5em]{We} &
\makebox[1.5em]{Th} &
\makebox[1.5em]{Fr} &
\makebox[1.5em]{Sa} &
\makebox[1.5em]{Su} \\ \hline }
%% if the initial shift is non zero, we add a \multicolumn
\int_compare:nT { \l_alby_initial_int > 0 }
{ \tl_put_right:Nn \l_alby_table_tl { \multicolumn{\l_alby_initial_int}{c|}{} & } }
%% store in \l_alby_cdays_seq the list of special days
\seq_set_split:Nnn \l_alby_cdays_seq { , } { #3 }
%% loop through the days to add cells
\int_step_inline:nnnn { 1 } { 1 } { \l_alby_days_int}
{
%% if the day is special, add a C
\seq_if_in:NxT \l_alby_cdays_seq { \int_to_arabic:n { ##1 } }
{ \tl_put_right:Nn \l_alby_table_tl { C } }
%% if the day is not the last, add & or \\\hline, according
%% if we are at the end of a row or not
\int_compare:nF { ##1 == \l_alby_days_int }
{
\int_compare:nTF
{\int_mod:nn { ##1 + \l_alby_initial_int } { 7 } == 0 }
{\tl_put_right:Nn \l_alby_table_tl { \\ \hline } }
{\tl_put_right:Nn \l_alby_table_tl { & } }
}
}
%% finally, add \\\hline if the month ends with Sunday, or add
%% a suitable \\\cline{1-x} command
\int_compare:nTF { \int_mod:nn { \l_alby_initial_int + \l_alby_days_int } { 7 } == 0 }
{
\tl_put_right:Nn \l_alby_table_tl { \\ \hline }
}
{
\tl_put_right:Nx \l_alby_table_tl
{
\exp_not:n { \\ \cline }
{ 1 - \int_to_arabic:n { \int_mod:nn { \l_alby_initial_int + \l_alby_days_int } { 7 } } }
}
}
%% print the table
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
\l_alby_table_tl
\end{tabular}
}
%% the needed variables
\int_new:N \l_alby_days_int
\int_new:N \l_alby_initial_int
\tl_new:N \l_alby_table_tl
\seq_new:N \l_alby_cdays_seq
\ExplSyntaxOff
\begin{document}
\monthtable{February}{Fr}{1,3,5,7,9,11,13,15,17,19,21,23,25,28}
\bigskip
\monthtable{April}{Mo}{1,30}
\end{document}
For a leap year, use Februaryleap
as the month name.
The initial day might be computed from the year, but it's much more work.