生成一个血糖记录本,统计数据随表格中数据编译后更新

发布于 2026-06-28 10:49:28
\documentclass[a4paper,landscape]{article}
\usepackage{ctex}
\usepackage{geometry}
\usepackage{array}
\usepackage{tabularray}
\usepackage{ninecolors}
\usepackage{xcolor}
\geometry{left=1.2cm,right=1.2cm,top=1.8cm,bottom=1.8cm}

\newcommand{\zz}[1]{\ifnum#1<10 0#1\else#1\fi}
\pagecolor{cyan!10}

\begin{document}
\title{\Large 血糖监测记录本}
\author{姓名:\underline{\hspace{4cm}} \quad 正常空腹:4.4~7.0 mmol/L}
\date{}
\maketitle

{\centering
\begin{longtblr}[caption={血糖记录本}]
{
  colspec = {c c c c c c c c c Q[8cm,c]},
  rowhead = 1,
  column{3} = {bg=pink!15},
  column{4-5} = {bg=green!15},
  column{6-7} = {bg=orange!15},
  column{8-9} = {bg=blue!15},
  vlines,
  hlines
}
日期               &星期   & 空腹  & 早餐后1h & 早餐后2h   & 午餐后1h & 午餐后2h & 晚餐后1h & 晚餐后2h & 备注 \\
% 6月第1周 1-7
2026-\zz{6}-\zz{1} & 周一  & & & & & & & & \\
2026-\zz{6}-\zz{2} & 周二  & & & & & & & & \\
2026-\zz{6}-\zz{3} & 周三  & & & & & & & & \\
2026-\zz{6}-\zz{4} & 周四  & & & & & & & & \\
2026-\zz{6}-\zz{5} & 周五  & & & & & & & & \\
2026-\zz{6}-\zz{6} & 周六  & & & & & & & & \\
2026-\zz{6}-\zz{7} & 周日  & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【6.1-6.7】本周无测量记录}} & & & & & & & & & \\
% 6月第2周 8-14
2026-\zz{6}-\zz{8} & 周一  & & & & & & & & \\
2026-\zz{6}-\zz{9} & 周二  & & & & & & & & \\
2026-\zz{6}-\zz{10}& 周三  & & & & & & & & \\
2026-\zz{6}-\zz{11}& 周四  & & & & & & & & \\
2026-\zz{6}-\zz{12}& 周五  & & & & & & & & \\
2026-\zz{6}-\zz{13}& 周六  & & & & & & & & \\
2026-\zz{6}-\zz{14}& 周日  & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【6.8-6.14】本周无测量记录}} & & & & & & & & & \\
% 6月第3周 15-21
2026-\zz{6}-\zz{15}& 周一 & & & & & & & & \\
2026-\zz{6}-\zz{16}& 周二 & & & & & & & & \\
2026-\zz{6}-\zz{17}& 周三 & & & & & & & & \\
2026-\zz{6}-\zz{18}& 周四 & & & & & & & & \\
2026-\zz{6}-\zz{19}& 周五 & & & & & & & & \\
2026-\zz{6}-\zz{20}& 周六 & & & & & & & & \\
2026-\zz{6}-\zz{21}& 周日 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【6.15-6.21】本周无测量记录}} & & & & & & & & & \\
% 6月第4周 22-28(带实测数据)
2026-\zz{6}-\zz{22}& 周一 & & & & & & & & \\
2026-\zz{6}-\zz{23}& 周二 & & & & & & & & \\
2026-\zz{6}-\zz{24}& 周三 & & & & & & & & \\
2026-\zz{6}-\zz{25}& 周四 & & & & & & & & \\
2026-\zz{6}-\zz{26}& 周五 &6.7(8:56) & & &7.3(13:41) & & &6.2(21:17) & 午餐后快步走40分钟 \\
2026-\zz{6}-\zz{27}& 周六 &6.7(8:55) & & &6.8(14:09) & &7.0(20:44) & & 早餐、午餐后快步走40分钟;晚餐后混氧运动 \\
2026-\zz{6}-\zz{28}& 周日 &6.0(9:12) & & & & & & &早餐后混氧运动 \\
\SetCell[c=10]{l}{\textbf{【6.22-6.28】本周统计:空腹最高6.7、最低6.0、均值6.47;餐后1h最高7.3、最低6.8、均值7.05;餐后2h最高6.2、最低6.2、均值6.2}} & & & & & & & & & \\
% 6月剩余29-30
2026-\zz{6}-\zz{29}& 周一 & & & & & & & & \\
2026-\zz{6}-\zz{30}& 周二 & & & & & & & & \\
\SetCell[c=10]{l}{\color{blue}\textbf{【6月整月】统计:空腹最高6.7、最低6.0、均值6.47;餐后1h最高7.3、最低6.8、均值7.05;餐后2h最高6.2、最低6.2、均值6.2}} & & & & & & & & & \\

%7月全月无数据
2026-\zz{7}-\zz{1} & 周三 & & & & & & & & \\
2026-\zz{7}-\zz{2} & 周四 & & & & & & & & \\
2026-\zz{7}-\zz{3} & 周五 & & & & & & & & \\
2026-\zz{7}-\zz{4} & 周六 & & & & & & & & \\
2026-\zz{7}-\zz{5} & 周日 & & & & & & & & \\
2026-\zz{7}-\zz{6} & 周一 & & & & & & & & \\
2026-\zz{7}-\zz{7} & 周二 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【7.1-7.7】本周无测量记录}} & & & & & & & & & \\
2026-\zz{7}-\zz{8} & 周三 & & & & & & & & \\
2026-\zz{7}-\zz{9} & 周四 & & & & & & & & \\
2026-\zz{7}-\zz{10}& 周五 & & & & & & & & \\
2026-\zz{7}-\zz{11}& 周六 & & & & & & & & \\
2026-\zz{7}-\zz{12}& 周日 & & & & & & & & \\
2026-\zz{7}-\zz{13}& 周一 & & & & & & & & \\
2026-\zz{7}-\zz{14}& 周二 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【7.8-7.14】本周无测量记录}} & & & & & & & & & \\
2026-\zz{7}-\zz{15}& 周三 & & & & & & & & \\
2026-\zz{7}-\zz{16}& 周四 & & & & & & & & \\
2026-\zz{7}-\zz{17}& 周五 & & & & & & & & \\
2026-\zz{7}-\zz{18}& 周六 & & & & & & & & \\
2026-\zz{7}-\zz{19}& 周日 & & & & & & & & \\
2026-\zz{7}-\zz{20}& 周一 & & & & & & & & \\
2026-\zz{7}-\zz{21}& 周二 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【7.15-7.21】本周无测量记录}} & & & & & & & & & \\
2026-\zz{7}-\zz{22}& 周三 & & & & & & & & \\
2026-\zz{7}-\zz{23}& 周四 & & & & & & & & \\
2026-\zz{7}-\zz{24}& 周五 & & & & & & & & \\
2026-\zz{7}-\zz{25}& 周六 & & & & & & & & \\
2026-\zz{7}-\zz{26}& 周日 & & & & & & & & \\
2026-\zz{7}-\zz{27}& 周一 & & & & & & & & \\
2026-\zz{7}-\zz{28}& 周二 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【7.22-7.28】本周无测量记录}} & & & & & & & & & \\
2026-\zz{7}-\zz{29}& 周三 & & & & & & & & \\
2026-\zz{7}-\zz{30}& 周四 & & & & & & & & \\
2026-\zz{7}-\zz{31}& 周五 & & & & & & & & \\
\SetCell[c=10]{l}{\color{blue}\textbf{【7月整月】无测量记录}} & & & & & & & & & \\

%8月全月无数据
2026-\zz{8}-\zz{1} & 周六 & & & & & & & & \\
2026-\zz{8}-\zz{2} & 周日 & & & & & & & & \\
2026-\zz{8}-\zz{3} & 周一 & & & & & & & & \\
2026-\zz{8}-\zz{4} & 周二 & & & & & & & & \\
2026-\zz{8}-\zz{5} & 周三 & & & & & & & & \\
2026-\zz{8}-\zz{6} & 周四 & & & & & & & & \\
2026-\zz{8}-\zz{7} & 周五 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【8.1-8.7】本周无测量记录}} & & & & & & & & & \\
2026-\zz{8}-\zz{8} & 周六 & & & & & & & & \\
2026-\zz{8}-\zz{9} & 周日 & & & & & & & & \\
2026-\zz{8}-\zz{10}& 周一 & & & & & & & & \\
2026-\zz{8}-\zz{11}& 周二 & & & & & & & & \\
2026-\zz{8}-\zz{12}& 周三 & & & & & & & & \\
2026-\zz{8}-\zz{13}& 周四 & & & & & & & & \\
2026-\zz{8}-\zz{14}& 周五 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【8.8-8.14】本周无测量记录}} & & & & & & & & & \\
2026-\zz{8}-\zz{15}& 周六 & & & & & & & & \\
2026-\zz{8}-\zz{16}& 周日 & & & & & & & & \\
2026-\zz{8}-\zz{17}& 周一 & & & & & & & & \\
2026-\zz{8}-\zz{18}& 周二 & & & & & & & & \\
2026-\zz{8}-\zz{19}& 周三 & & & & & & & & \\
2026-\zz{8}-\zz{20}& 周四 & & & & & & & & \\
2026-\zz{8}-\zz{21}& 周五 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【8.15-8.21】本周无测量记录}} & & & & & & & & & \\
2026-\zz{8}-\zz{22}& 周六 & & & & & & & & \\
2026-\zz{8}-\zz{23}& 周日 & & & & & & & & \\
2026-\zz{8}-\zz{24}& 周一 & & & & & & & & \\
2026-\zz{8}-\zz{25}& 周二 & & & & & & & & \\
2026-\zz{8}-\zz{26}& 周三 & & & & & & & & \\
2026-\zz{8}-\zz{27}& 周四 & & & & & & & & \\
2026-\zz{8}-\zz{28}& 周五 & & & & & & & & \\
\SetCell[c=10]{l}{\textbf{【8.22-8.28】本周无测量记录}} & & & & & & & & & \\
2026-\zz{8}-\zz{29}& 周六 & & & & & & & & \\
2026-\zz{8}-\zz{30}& 周日 & & & & & & & & \\
2026-\zz{8}-\zz{31}& 周一 & & & & & & & & \\
\SetCell[c=10]{l}{\color{blue}\textbf{【8月整月】无测量记录}} & & & & & & & & & \\
\end{longtblr}
}

\section{血糖监测统计汇总}
\subsection{6月22日-28日 周统计}
\begin{itemize}
    \item 空腹血糖:最高6.7、最低6.0、均值6.47
    \item 餐后1小时血糖:最高7.3、最低6.8、均值7.05
    \item 餐后2小时血糖:最高6.2、最低6.2、均值6.2
\end{itemize}

\subsection{6月整月统计}
\begin{itemize}
    \item 空腹血糖:最高6.7、最低6.0、均值6.47
    \item 餐后1小时血糖:最高7.3、最低6.8、均值7.05
    \item 餐后2小时血糖:最高6.2、最低6.2、均值6.2
\end{itemize}

\subsection{7月、8月}
暂无有效测量数据。

\end{document}

image.png

查看更多

关注者
0
被浏览
266
Sagittarius Rover
Sagittarius Rover 2026-07-03
这家伙很懒,什么也没写!

不建议用LaTeX的宏包来实现这种自动化。

IMHO...应该vibecoding一个简易的APP来记录更靠谱

srds...基于tabularray以及functional库是可以实现的,就是逻辑可能要做很多判断...

先简化例子

\documentclass[a4paper,landscape]{article}
\usepackage[fontset=fandol]{ctex}
\usepackage{xcharter-otf}
\usepackage[hmargin=1.2cm,vmargin=1.8cm]{geometry}
\usepackage{tabularray}
\usepackage{ninecolors}
\usepackage{xcolor}

\newcommand{\zz}[1]{\ifnum#1<10 0#1\else#1\fi}
\pagecolor{cyan!10}

\begin{document}
\title{\Large 血糖监测记录本}
\author{姓名:\underline{\hspace{4cm}} \quad 正常空腹:4.4~7.0 mmol/L}
\date{}
\maketitle

{\centering
\begin{longtblr}[caption={血糖记录本}]
{
  colspec = {*{9}{c}Q[8cm,c]},
  vlines,hlines,rowhead = 1,
  column{3} = {bg=pink!15},
  column{4-5} = {bg=green!15},
  column{6-7} = {bg=orange!15},
  column{8-9} = {bg=blue!15}
}
    日期 & 星期 & 空腹 & 早餐后1h & 早餐后2h & 午餐后1h & 午餐后2h & 晚餐后1h & 晚餐后2h & 备注 \\
    % 6月第4周 22-28(带实测数据)
    2026-\zz{6}-\zz{22}& 周一 &5.6 & & & 5.6 & 6.7 & & 7.8 & \\
    2026-\zz{6}-\zz{23}& 周二 & & & & & & & & \\
    2026-\zz{6}-\zz{24}& 周三 &2.33 & & & & & & & \\
    2026-\zz{6}-\zz{25}& 周四 &9.0 & & &  & & & & \\
    2026-\zz{6}-\zz{26}& 周五 &6.7(8:56) & & &7.3(13:41) & & &6.2(21:17) & 午餐后快步走40分钟 \\
    2026-\zz{6}-\zz{27}& 周六 &6.7(8:55) & & &6.8(14:09) & &7.0(20:44) & & 早餐、午餐后快步走40分钟;晚餐后混氧运动 \\
    2026-\zz{6}-\zz{28}& 周日 &6.0(9:12) & & & & & & &早餐后混氧运动 \\
    \SetCell[c=10]{l}{} & & & & & & & & & \\
\end{longtblr}
}

\end{document}

基于简化问题的“自动化”代码

\documentclass[a4paper,landscape]{article}
\usepackage[fontset=fandol]{ctex}
\usepackage{xcharter-otf}
\usepackage[hmargin=1.2cm,vmargin=1.8cm]{geometry}
\usepackage{tabularray}
\UseTblrLibrary{functional}
\usepackage{ninecolors}
\usepackage{xcolor}

\newcommand{\zz}[1]{\ifnum#1<10 0#1\else#1\fi}
\pagecolor{cyan!10}

\IgnoreSpacesOn
\prgNewFunction \SugarReadingValue { m } {
  \regexExtractOnceTF { \A \s* ([0-9]+ (?: \. [0-9]+)?) } {#1} \lTmpaSeq {
    \prgReturn { \seqVarItem \lTmpaSeq {2} }
  } {
    \prgReturn {}
  }
}

\prgNewFunction \SugarValuesFromCells { m m m M } {
  \clistClear #4
  \intStepOneInline {#1} {#2} {
    \clistMapVariable {#3} \lTmpbTl {
      \tlSet \lTmpaTl { \SugarReadingValue { \cellGetText {##1} {\tlUse \lTmpbTl} } }
      \tlVarIfEmptyF \lTmpaTl {
        \clistPutRight #4 { \tlUse \lTmpaTl }
      }
    }
  }
}

\prgNewFunction \SugarValuesMax { M } {
  \clistVarIfEmptyTF #1 {
    \prgReturn {}
  } {
    \clistGet #1 \lTmpaTl
    \clistVarMapInline #1 {
      \fpCompareT {##1} > { \lTmpaTl } {
        \tlSet \lTmpaTl {##1}
      }
    }
    \prgReturn { \tlUse \lTmpaTl }
  }
}

\prgNewFunction \SugarValuesMin { M } {
  \clistVarIfEmptyTF #1 {
    \prgReturn {}
  } {
    \clistGet #1 \lTmpaTl
    \clistVarMapInline #1 {
      \fpCompareT {##1} < { \lTmpaTl } {
        \tlSet \lTmpaTl {##1}
      }
    }
    \prgReturn { \tlUse \lTmpaTl }
  }
}

\prgNewFunction \SugarValuesMean { M } {
  \clistVarIfEmptyTF #1 {
    \prgReturn {}
  } {
    \fpZero \lTmpaFp
    \clistVarMapInline #1 {
      \fpAdd \lTmpaFp {##1}
    }
    \prgReturn { \fpEval { round((\fpUse \lTmpaFp) / \clistVarCount #1, 2) } }
  }
}

\prgNewFunction \FillSugarWeekStats { } {
  \SugarValuesFromCells {2} {8} {3} \lTmpaClist
  \SugarValuesFromCells {2} {8} {4,6,8} \lTmpbClist
  \SugarValuesFromCells {2} {8} {5,7,9} \lTmpcClist
  \cellSetText {9} {1} {
    \textbf{
      空腹:最高 \SugarValuesMax \lTmpaClist,最低 \SugarValuesMin \lTmpaClist,均值 \SugarValuesMean \lTmpaClist;
      餐后1h:最高 \SugarValuesMax \lTmpbClist,最低 \SugarValuesMin \lTmpbClist,均值 \SugarValuesMean \lTmpbClist;
      餐后2h:最高 \SugarValuesMax \lTmpcClist,最低 \SugarValuesMin \lTmpcClist,均值 \SugarValuesMean \lTmpcClist
    }
  }
}
\IgnoreSpacesOff

\begin{document}
\title{\Large 血糖监测记录本}
\author{姓名:\underline{\hspace{4cm}} \quad 正常空腹:4.4~7.0 mmol/L}
\date{}
\maketitle

{\centering
\begin{longtblr}[caption={血糖记录本}]
{
  colspec = {*{9}{c}Q[8cm,c]},
  vlines,hlines,rowhead = 1,
  column{3} = {bg=pink!15},
  column{4-5} = {bg=green!15},
  column{6-7} = {bg=orange!15},
  column{8-9} = {bg=blue!15},
  process = \FillSugarWeekStats
}
    日期 & 星期 & 空腹 & 早餐后1h & 早餐后2h & 午餐后1h & 午餐后2h & 晚餐后1h & 晚餐后2h & 备注 \\
    % 6月第4周 22-28(带实测数据)
    2026-\zz{6}-\zz{22}& 周一 &5.6 & & & 5.6 & 6.7 & & 7.8 & \\
    2026-\zz{6}-\zz{23}& 周二 & & & & & & & & \\
    2026-\zz{6}-\zz{24}& 周三 &2.33 & & & & & & & \\
    2026-\zz{6}-\zz{25}& 周四 &9.0 & & &  & & & & \\
    2026-\zz{6}-\zz{26}& 周五 &6.7(8:56) & & &7.3(13:41) & & &6.2(21:17) & 午餐后快步走40分钟 \\
    2026-\zz{6}-\zz{27}& 周六 &6.7(8:55) & & &6.8(14:09) & &7.0(20:44) & & 早餐、午餐后快步走40分钟;晚餐后混氧运动 \\
    2026-\zz{6}-\zz{28}& 周日 &6.0(9:12) & & & & & & &早餐后混氧运动 \\
    \SetCell[c=10]{l}{} & & & & & & & & & \\
\end{longtblr}
}

\end{document}

image.png

To-Do(我是不想做...)

  • 处理日期结构
  • 处理分周、分月的计算统计逻辑
  • 处理每周新增一行进行记录的表格排布逻辑
  • 表末输出不同层级的总结

这里每一步都需要做海量的逻辑处理... 意义也不大...

2 个回答
Sagittarius Rover
Sagittarius Rover 2026-06-28
这家伙很懒,什么也没写!
统计数据随表格中数据编译后更新

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览