Как создать счетную команду (например, TODO) для использования в списке?

Как создать счетную команду (например, TODO) для использования в списке?

Предлог: Я знаю о таких пакетах, как todonotes, todoи fixme, но это скорее задача для изучения программирования 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затем создаст список s \todoв документе и сгенерирует (гиперссылочный) список, аналогичный , но отдельный от \tableofcontents, где содержимое в {}будет заменено тем, что в , []если и только если оно присутствует, с номером страницы справа. Для этого списка потребуется только один уровень глубины.

Просматривал исходный код пакета todonotes, но не смог извлечь из него много смысла. Насколько я могу судить, эта задача потребует определения двух новых команд, сохранения текстов в списке задач, обработки необязательных аргументов и, наконец, создания списка задач с ссылками, используя hyperrefв (другой) таблице содержания. Список будет записан в файл *.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}

Связанный контент