以下为原表
我有以下代码
\begin{table}
\caption{February}
\begin{center}
\begin{tabular}{c|c|c|c|c|c|c}
\hline
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}
\end{center}
\end{table}
\begin{table}
\caption{March}
\begin{center}
\begin{tabular}{c|c|c|c|c|c|c}
\hline
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& &\\
\hline
\end{tabular}
\end{center}
\end{table}
其结果如下:
你如何做到
- 桌子是并排的吗?
- 标题是彩色的
- 并且游行队伍最后一排只有三个格子有边框?
答案1
要为某一行着色,可以使用\rowcolor
,要为前 3 个单元格划线,可以使用\cline{1-3}
。
如果您不需要浮点数,我可以这样做。
\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}
导致
答案2
这是具有 LaTeX3 功能的实现;您只需提供月份、月份的初始日期(缩写形式)和特殊日子的列表。
\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}
对于闰年,用作Februaryleap
月份名称。
初始日期可以根据年份计算出来,但这需要更多的工作。
答案3
还有一些一般性评论:
Excel 转 LaTeX非常擅长为带有水平和垂直边框、合并单元格等的表格创建 LaTeX 代码。(免责声明:我贡献了部分相关代码。)
有一个专门的蒂克兹图书馆,日历,这有助于创建自定义日历——还有不少问题我已经在 TeX.SX 上讨论过这个话题了。不过我不太清楚边界问题。