¿Cómo se crea un comando contado (por ejemplo, TODO) para usarlo en una lista?

¿Cómo se crea un comando contado (por ejemplo, TODO) para usarlo en una lista?

Pretexto: conozco paquetes como todonotes, todoy fixme, pero esta es más una tarea para aprender a programar en LaTeX. Por lo tanto, se desaconseja el uso de paquetes adicionales descargados de CTAN. También me gustaría evitar el uso de archivos *.sty adicionales.

¿Cómo se crea un comando en el *.tex principal para que un elemento contado se muestre más tarde en un listado?Por ejemplo:

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

La nota de tarea tendrá color, prefijo o marcará de otro modo en el texto en línea. Luego, la llamada \listoftodoscreará una lista de los \todomensajes de correo electrónico en el documento y generará una lista (hipervínculo) similar pero separada de \tableofcontents, donde el contenido de {}será reemplazado por el de []si y solo si está presente, con el número de página a la derecha. Esta lista solo necesitará un único nivel de profundidad.

Estaba revisando el código fuente del todonotespaquete, pero no pude encontrarle mucho sentido. Por lo que puedo decir, esta tarea requerirá definir dos nuevos comandos, almacenar los textos en una lista de todos, manejar argumentos opcionales y, finalmente, hacer una lista referenciada de todos usando hyperrefen una (otra) tabla de contenido. La lista se escribirá en el archivo *.aux.

Prima:

  • Seguridad para usarse dentro de una ecuación o encabezado de sección, seguridad para tener formato o una ecuación dentro de la nota

  • ¿Cómo se pueden agregar opciones? \listoftodosSería bueno tener una opción simple de mostrar u ocultar el texto en línea (sin dejar de mostrarse en el archivo ).

  • ¿Se puede extender este método a otros artículos? \myitem, \listofmyitems, \otheritems, \listofotheritems?

Anexo: ¿Existe alguna guía avanzada en línea para programar (La)TeX? Esto será útil para cualquier empresa futura.

Respuesta1

Una versión preliminar, sin claves de opciones.

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

información relacionada