リストで使用するカウントコマンド (例: TODO) を作成するにはどうすればよいですか?

リストで使用するカウントコマンド (例: TODO) を作成するにはどうすればよいですか?

todonotes前提: 、、などのパッケージがあることは承知していますtodofixme、これは LaTeX プログラミングを学習するためのタスクです。したがって、CTAN からダウンロードした追加パッケージの使用はお勧めしません。追加の *.sty ファイルの使用も避けたいと思います。

カウントされた項目を後でリストに表示するためのコマンドをメインの *.tex に作成するにはどうすればよいですか?例えば:

Text before\todo[optional caption]{my text here}. 
Some other text in the document\todo{another todo but without caption}.

ToDo メモは、インライン テキストで色付け、プレフィックス付け、またはその他の方法でマークされます。 を呼び出すと、ドキュメント内の\listoftodosのリストが作成され、 に似ていますが別の (ハイパーリンク付き)リストが生成されます。 内のコンテンツは、が存在する場合に限り内のコンテンツに置き換えられ、右側にページ番号が表示されます。このリストに必要な深さは 1 レベルだけです。\todo\tableofcontents{}[]

パッケージのソース コードを調べましたtodonotesが、あまり意味がわかりませんでした。私の理解では、このタスクでは、2 つの新しいコマンドを定義し、todo リストにテキストを保存し、オプションの引数を処理し、最後にhyperref(別の) 目次を使用して todo の参照リストを作成する必要があります。リストは *.aux ファイルに書き込まれます。

ボーナス:

  • 数式またはセクションヘッダー内で使用する安全性、注釈内に書式または数式を含める安全性

  • オプションを追加するにはどうすればよいでしょうか? インライン テキスト ( に表示されたまま\listoftodos) の簡単な表示または非表示のオプションがあると便利です。

  • このメソッドは他のアイテムにも拡張できますか? \myitem、、、?\listofmyitems\otheritems\listofotheritems

補足: (La)TeX プログラミングに関するオンラインの高度なガイドはありますか? これは将来のあらゆるベンチャーに役立つでしょう。

答え1

オプションキーのない暫定版

\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{etoolbox}%
\usepackage{blindtext}% Just as text filler
\usepackage{hyperref}
\makeatletter
\def\todolist{}

\newcounter{todolistcounter}

\newcommand{\ToDo}{%
  \@ifnextchar[{\todoopt}{\todonoopt}%
}%

\newcommand{\todonoopt}[1]{%
  \refstepcounter{todolistcounter}
  % \addcontentsline{todo}{section}{\thetodolistcounter~#1} % No contents line
  \listgadd{\todolist}{#1}%
   #1%
   %      \colorbox{green}{\thetodolistcounter~#1}
}

\newcommand{\todoopt}[2][]{%
  \refstepcounter{todolistcounter}
  \addcontentsline{todo}{section}{\thetodolistcounter~#1}
  \listgadd{\todolist}{#2}%
   #2%
   %      \colorbox{green}{\thetodolistcounter~#2}
}%



\newcommand{\listoftodos}{%
  \section{List of Todos}
  \@starttoc{todo}
  \clearpage
}%

% inline display (as a enumerate) list 
\newcommand{\InTextListOfToDos}{%
\begin{enumerate}%
  \renewcommand*{\do}[1]{%
  \item ##1%
  }
  \dolistloop{\todolist}%
\end{enumerate}%
}


\makeatother

\begin{document}
\listoftodos
\ToDo{first} \ToDo{We}

\blindtext[5] \ToDo[should not]{should} \blindtext[10]\ToDo{start from scratch}
\ToDo{\begin{equation}
    E = mc^2%
    \end{equation}%
}

\blindtext

\section{The ToDos}

\section{A heading with a ToDo \protect\ToDo{Something}}


\InTextListOfToDos


\end{document}

関連情報