问题
我想将事件的持续时间表示为水平条内的彩色补丁,最新的表示 24 小时时间轴(即 24 个单位长的条),这应该可以作为一天中时间的“参考”条来帮助读者。然后,我想将补丁和 24 小时时间轴条添加到表格的单元格内。
我想要的输出类似于下图。例如,我绘制了 2 个红色斑块,表示两个不同事件的持续时间和两个 24 小时长度的“参考”时间轴条(每 6 小时参考一次,即 00:00、06:00、12:00、18:00 和 24:00)。最好的方法是仅将事件的开始和结束时间作为输入来绘制这两个图形。
如何绘制代表 24 小时时间线的补丁和“参考”栏?
我的起点(MWE)
我尝试开始研究是否可以在表格中创建条形图?,但我不知道该如何继续……
\documentclass{article}
\usepackage{xfp}
\usepackage{color}
\begin{document}
% (1) define the 24 hours bar
\def\mybar#1{
{\color{black}\rule{\fpeval{#1/\myscale*\barwidth} cm}{\barheight}} #1
}
\newcommand{\barwidth}{5} % cm max bar widths
\newcommand{\barheight}{4pt} % height of each bar
\newcommand{\myscale}{24} % max scale for hours bars
% (2) draw the 24 hours bar
\mybar{24}
\end{document}
生成此条:
答案1
基于 Ti 的快速解决方案钾Z:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\NewDocumentCommand{\hoursbar}{ O{5cm} O{4pt} O{red} m m }{%
\begin{tikzpicture}[baseline]
\fill[#3] ({(#4/24)*#1},0) rectangle ({(#5/24)*#1},{#2});
\draw (0,0) rectangle ({0.25*#1},{#2});
\draw ({0.25*#1},0) rectangle ({0.5*#1},{#2});
\draw ({0.5*#1},0) rectangle ({0.75*#1},{#2});
\draw ({0.75*#1},0) rectangle ({#1},{#2});
\end{tikzpicture}%
}
\hoursbar{9}{17}
\hoursbar[3cm]{15}{24}
\hoursbar[4cm][8pt]{8}{20}
\hoursbar[5cm][8pt][cyan]{8}{20}
\end{document}
该宏的参数\hoursbar
是:
#1
(可选):条形的宽度#2
(可选):条形图的高度#3
(可选):内栏颜色#4
:开始小时(24 小时格式)#5
:结束小时(24 小时格式)
答案2
这展示了如何使用图片环境。
我将其改为\barheight
长度以减少命令数量\dimexpr
。例如,使用宏时-0.5\barheight
会变成。{\dimexpr -0.5*\barheight}
\unitlength
是内置的,并且在没有提供任何单元时使用。
\line
有点奇怪,因为它使用长度而不是坐标,并且只能处理有限数量的斜率。
\documentclass{article}
\usepackage{xfp}
\usepackage{color}
\newlength{\barheight}
\setlength{\barheight}{4pt}
\newcommand{\barwidth}{5cm} % max bar widths
\begin{document}
\fboxsep=0pt
\setlength{\unitlength}{\dimexpr \barwidth/24}% set de3fault scale
Current location:
% draw red bar from 6am to 6pm
\framebox{\begin{picture}(24,\barheight)(0pt,-0.5\barheight)
\put(6,0pt){\color{red}\linethickness{\barheight}\line(1,0){12}}
\end{picture}}
\end{document}