LaTeXで進捗資料のタスクを燃やす話

この記事はTUT Advent Calendar 202017日目の記事です.

普段僕は進捗資料にいろんなタスクを書き込むことで締め切りドリブンな行動をしているのですが,今日はそんなタスクたちを燃やしてみた話です.

何がしたいのか

普段から進捗報告資料をちゃんと書きたいなー,と思っていて,その一環としてタスクリストにちゃんとした粒度でタスクを書くということを行なっています.ただ,ちゃんとした粒度でタスクを書き出すと,結構タスクリストが長くなってしまい,どのタスクのpriorityが高いのかがわかりづらくなってしまいます.

タスクのpriorityとして,最も用いられている指標は「期日」です.巷では,「締め切りドリブン」というタスク処理方策があるとも言われています.そこで,この記事ではLaTeXで書いている進捗資料のタスクリストのうち,期日が近いものや期日を過ぎているものに対して炎マークを付与するコードを紹介します.

どんなコード

こんなコードを書きました.LaTeXで制御構造を書くのが初めてだったので結構めんどくさいなーとか思ったんですが,やってることは至極単純です.

まず,datetime2というパッケージを使っています.これを使わないバージョンも一度書いたのですが,よく考えたら月を跨ぐ日付の計算がめっちゃめんどくさかったので,日付を処理できるパッケージがないか探しました.うまく日付を計算してくれる上に,独自の制御構造も持っているので使わない手はなかったです.

タスクを燃やすためだけに,わざわざ\docday,\docmonth,\docyear,\docdurationというコマンドを定義しています.これらは単純に文書の日付と,何日後までのタスクを燃やすかを指定するコマンドです.本当は\dateから引っ張って来れるといいんでしょうけど,parseするのがめんどくさいのでこれでいいやってなりました.一応簡単に書くために\docdateコマンドを作っています.

そして,\duedateコマンドが本体です.燃やしてます.\docdateで指定された文書の日付と,\duedateコマンドに渡された日付を比較し,それぞれで出力を変えるだけの簡単なお仕事です.コメントで来週までのやつ,とか書いてますが,\duedurationで指定された日数で判断するので3日後とか,100日後とかにもできます.100日後に燃えるタスク.また,期日をすでに過ぎているものについては,闇の炎を表示するようにしてます.炎はpdfファイルを流し込んでいるだけなので,pdfさえあれば⭐️とか🥺とかにもできます.

\usepackage[calc]{datetime2}


\date{\docyear/\docmonth/\docday}

\newcommand{\docdate}[3]{%

\renewcommand{\docday}{#3}

\renewcommand{\docmonth}{#2}

\renewcommand{\docyear}{#1}

}

\newcommand{\docday}{0}

\newcommand{\docmonth}{0}

\newcommand{\docyear}{0}

\newcommand{\dueduration}{8}


\newcommand{\duedate}[3][\docyear]{%

\newcount\tmpdate

\pgfcalendardatetojulian{\docyear-\docmonth-\docday+\dueduration}{\tmpdate}

\DTMsavejulianday{oneweekafter}{\tmpdate}

\DTMsavenoparsedate{thisweek}{\docyear}{\docmonth}{\docday}{-1}

\hspace{-1em}

\DTMifdate{oneweekafter}

{at most=#1-#2-#3}

{} %まだ大丈夫なやつ

{

\hspace{-1em}

\DTMifdate{thisweek}

{at most=#1-#2-#3}{

\includegraphics[height=1em]{/template/fire_emoji.pdf} %来週までのやつ

}{

\includegraphics[height=1em]{/template/darkfire_emoji.pdf} %期限切れのやつ

}

}

\hspace{-1em}

\ifnum #1=\docyear\relax #2/#3 \else #1/#2/#3 \fi

}


実際に使ってます

\renewcommand{\dueduration}{8} %燃えるタスクを期日まで8日以内にする.

\docdate{2020}{12}{16}


\begin{document}

\maketitle

\begin{task}

\taskcategory{研究室関係}

Angel入替 & N/A & 2 & 0 & B & ulab\_shareのチェック忘れつづけている\\

\completed M1輪講 & \duedate{12}{10} & 10 & 12.5 & D & \cite{oshima2019},\cite{oshima2017}.\\

\completed \child \cite{oshima2017}\cite{oshima2019}要点まとめ & \duedate{12}{5} & 2 & N/A & A & スライド作成と統合\\

\completed \child スライド作成 & \duedate{12}{7} & 3 & 9 & B & 結局めっちゃ時間使ってしまった\\

\completed \child スライド見直し & \duedate{12}{9} & 1 & N/A & B & スライド作成と統合\\

\end{task}


とか書くと,こうなります.期日過ぎてるので闇の炎になってますが,\completedで水ぶっかけてるので鎮火してますね.

最近で一番やばかった炎上はこんな感じになってます.燃えてる燃えてる.

LaTeXは結構楽しい

LaTeXで文章書いてると,「俺は文章が書きたいのであってLaTeXが書きたいんじゃない!」ってなる人多いと思うんですが,手が空いている時に少しでも整備しておくと楽になりますよ,という一例です.

特に,僕にとって進捗報告資料は毎週書くものなので,ストレスなく書くことが重要です.そのための整備を少し時間かけてやったので,今はかなりスッキリ書けるようになってます.そんな整備の一端として,ちょっとお茶目にタスクを燃やしてみたわけです.結構僕にとっては使えるもので,進捗報告資料のタスクリストだけデスクに貼って,今何やるべきかをぱっと見で把握してます.タスクが完了した時の報告では必ずタスクが燃えてるんですが,ちゃんと青色塗りつぶしで鎮火させてるのでOKです.闇の炎が燃えてるだけのときや,闇の炎に小便かかってるだけのときがやばいです.

ちなみに今日ちょうど週次の進捗報告会だったんですが,燃えてるタスクが3つあったのでやっぱり師走だなぁと思ってます.

明日17日目の記事は,Collonvilleさんの「本場環境でやらかした話」です.僕は研究でシステムを運用したり,研究室の基盤システムを運用していますが,今の所奇跡的にやらかしてないです.しかし,肝を冷やしたことが何度かあるので気をつけます…