使用 todonotes 标记“待完成”的地方

使用 todonotes 标记“待完成”的地方

我正在尝试创建一个\tbd(待完成)宏,以便使用以下属性轻松地在章节/部分/小节/等上添加待办事项。

  • 通过一个简单的宏调用来获得一个有用的待办事项列表:待办事项列表条目应该代表待办事项在文档结构中的位置(在名为“C”的章节中应该有“TBD:C”,在“C”内的“S”节中应该有“TBD:C/S”)
  • 避免冗余:我不想每次都输入章节标题作为标题参数。如果我想更改标题怎么办?
  • 仅在注释中显示 TBD(这似乎更优雅)
  • 首选:将命令的名称保留为\section(和其他)(也许使用可选参数?)
  • 首选(但似乎不太可能):不弄乱section和朋友的定义
  • 首选(但似乎真的很乱):将 todonote “指向” 标题

\tbd注意:我考虑过在节内放置命令 ( \section{title\tbd}) 来指向正确位置的可能性todonote,但这似乎弊大于利。特别是如果我想使用标题...

就像这样(蓝色边框的东西在不同的页面上):

在此处输入图片描述

是否有用于此的宏/包,或者你们中有类似的实现吗?

示例使用一半(或更少)的解决方案。我能以某种方式列出章节/部分/等的当前堆栈吗?

\documentclass{book}

\usepackage{todonotes}

\newcommand\treeloc{dummy} % this should be replaced

\newcommand\tbd{\todo[caption={TBD: \treeloc}]{TBD}}

\begin{document}

\chapter{C-1}

\section{S-1}\tbd

\section{S-2}

\chapter{C-2}\tbd

\section{S-1}

\section{S-2}

\subsection{SS-1}\tbd

\section{S-3}

\listoftodos

\end{document}

并且\treeloc应该将待办事项列表更改为包含这些内容而不是虚拟内容:

  • C-1/S-1
  • C-2
  • C-2/S-2/SS-1

我会努力解决这个问题,但我认为这是一个很好的问题。

参考文献(我正在考虑使用):

答案1

[这不是你想要的,是吗?]

它通过解析来实现\thesubsection,如果相应的单位不等于,则打印出一些内容0。相关例程是\getss\gets

\documentclass{book}
\usepackage{todonotes}
\usepackage{etoolbox}
\makeatletter
\def\getss#1.#2|{\expandafter\gets#1|\ifstrequal{#2}{0}{}{/SS-#2}}
\def\gets#1.#2|{C-#1\ifstrequal{#2}{0}{}{/S-#2}}
\newcommand\treeloc{\expandafter\getss\thesubsection|}
\makeatother
\newcommand\tbd{\todo[caption={TBD: \treeloc}]{TBD}}

\begin{document}

\chapter{C-1}

\section{S-1}\tbd

\section{S-2}

\chapter{C-2}\tbd

\section{S-1}

\section{S-2}

\subsection{SS-1}\tbd

\section{S-3}

\listoftodos

\end{document}

在此处输入图片描述

答案2

这是更符合我的规范的解决方案:

在此处输入图片描述

\documentclass[openany,14pt]{book}

\usepackage[a5paper,margin=2cm,bindingoffset=0cm,marginparwidth=1.6cm,marginparsep=0.2cm]{geometry} % for demo only

\usepackage[textwidth=1.6cm]{todonotes}
\usepackage{xpatch}

\def\resetnamelevel#1{%
    \ifnum#1<1\let\thischaptername\relax\fi
    \ifnum#1<2\let\thissectionname\relax\fi
    \ifnum#1<3\let\thissubsectionname\relax\fi
    \ifnum#1<4\let\thissubsubsectionname\relax\fi
}\resetnamelevel{0}

\def\chaptername#1{\resetnamelevel{0}\def\thischaptername{#1}}
\def\sectionname#1{\resetnamelevel{1}\def\thissectionname{#1}}
\def\subsectionname#1{\resetnamelevel{2}\def\thissubsectionname{#1}}
\def\subsubsectionname#1{\resetnamelevel{3}\def\thissubsubsectionname{#1}}

\let\Chaptermark\chaptermark
\let\Sectionmark\sectionmark
\let\Subsectionmark\subsectionmark
\let\Subsubsectionmark\subsubsectionmark
\def\chaptermark#1{\chaptername{#1}\Chaptermark{#1}}
\def\sectionmark#1{\sectionname{#1}\Sectionmark{#1}}
\def\subsectionmark#1{\subsectionname{#1}\Subsectionmark{#1}}
\def\subsubsectionmark#1{\subsubsectionname{#1}\Subsubsectionmark{#1}}

\makeatletter
\newcommand\treeloc{%
    \ifx\thischaptername\relax%
        ??\@latex@warning{\textbackslash treeloc called outside of structure}
    \else
        \thischaptername%
        \ifx\thissectionname\relax%
        \else
            \ /\ \thissectionname%
            \ifx\thissubsectionname\relax%
            \else
                \ /\ \thissubsectionname%
                \ifx\thissubsubsectionname\relax%
                \else
                    \ /\ \thissubsubsectionname%
                \fi
            \fi
        \fi
    \fi
    }
\makeatother

\newcommand\tbd{%
    \todo[caption={TBD: \expandafter\treeloc}]{TBD}
}

\begin{document}

TREELOC: \treeloc

\chapter{Chapter one}\tbd
TREELOC: \treeloc

\section{Section one}\tbd
TREELOC: \treeloc

\subsection{Subsection one}\tbd
TREELOC: \treeloc

\subsubsection{Subsubsection one}\tbd
TREELOC: \treeloc

\subsection{Subsection two}\tbd
TREELOC: \treeloc

%\chapter*{Not indexed chapter}\tbd
%TREELOC: \treeloc

%\chapter*{Unset chapter}\resetnamelevel{0}\tbd
%TREELOC: \treeloc

\chapter*{Manually named chapter}\chaptername{Manually named chapter}\tbd
TREELOC: \treeloc

\section*{Manually named section}\sectionname{Manually named section}\tbd
TREELOC: \treeloc

\listoftodos

\end{document}

如果没有设置章节名称,则会发出并??显示警告。

在此处输入图片描述

相关内容