Como criar um comando contado (por exemplo, TODO) para uso em uma lista?

Como criar um comando contado (por exemplo, TODO) para uso em uma lista?

Pretexto: conheço pacotes como todonotes, todo, e fixme, mas esta é mais uma tarefa para aprender programação LaTeX. Portanto, o uso de pacotes adicionais baixados do CTAN é desencorajado. Também gostaria de evitar o uso de arquivos *.sty adicionais.

Como criar um comando no *.tex principal para que um item contado seja posteriormente exibido em uma listagem?Por exemplo:

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

A nota de tarefa será colorida, prefixada ou marcada de outra forma no texto embutido. A chamada \listoftodoscriará então uma lista dos \todos no documento e gerará uma lista (com hiperlink) semelhante, mas separada de \tableofcontents, onde o conteúdo em {}será substituído por aquele em []se e somente se estiver presente, com o número da página à direita. Esta lista precisará apenas de um único nível de profundidade.

Estava procurando o código-fonte do todonotespacote, mas não consegui entendê-lo muito. Pelo que sei, esta tarefa exigirá a definição de dois novos comandos, o armazenamento dos textos em uma lista de todos, o tratamento de argumentos opcionais e, finalmente, a criação de uma lista referenciada de todos usando hyperrefem um (outro) índice. A lista será gravada no arquivo *.aux.

Bônus:

  • Segurança para ser usada dentro de uma equação ou cabeçalho de seção, segurança para ter formatação ou uma equação dentro da nota

  • Como as opções podem ser adicionadas? Uma opção simples de mostrar ou ocultar o texto embutido (embora ainda seja exibido no arquivo \listoftodos) seria legal.

  • Este método pode ser estendido para outros itens? \myitem, \listofmyitems, \otheritems, \listofotheritems?

Adendo: existe algum guia avançado online para programação de (La)TeX? Isso será útil para quaisquer empreendimentos futuros.

Responder1

Uma versão preliminar, sem teclas de opção

\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}

informação relacionada