借口:我知道诸如、和之类的软件包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}.
待办事项注释将在内联文本中被着色、添加前缀或以其他方式标记。调用\listoftodos
将创建\todo
文档中的 s 列表,并生成与 类似但独立的(超链接)列表\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}