将 TikZ 代码添加到目录

将 TikZ 代码添加到目录

朋友们,我已经成功地使用该tocloft包来管理自定义索引。但现在我对一个棘手的部分有些怀疑,是否可行。考虑以下代码:

\documentclass{article}

\usepackage[titles]{tocloft}
\usepackage{tikz}

\newcommand*\info[1]{%
  \begin{tikzpicture}
    \node[draw,inner sep=1pt, minimum height=0.2cm, minimum width=0.5cm] {\tt\tiny #1};
  \end{tikzpicture}}

\newcommand{\listfoo}{List of foo}
\newlistof[section]{foo}{idf}{\listfoo}

\begin{document}

\info{123} \info{ABC} Hello world.

\refstepcounter{foo}
\addcontentsline{idf}{foo}{Hello world.}

\refstepcounter{foo}
\addcontentsline{idf}{foo}{Hello bar.}

\listoffoo

\end{document}

输出符合预期:

foo 列表

在这个特殊情况下,我想知道是否可以将 TikZ 图像添加到列表条目中。我尝试添加\addcontentsline{idf}{foo}{\info{123} \info{ABC} Hello world.}但没有成功。我希望实现这样的效果:

foo 列表第 2 部分

我也尝试了内联\tikz,但没有成功。可能我忽略了一些显而易见的东西,或者可能比我想象的更棘手。有什么想法吗?

答案1

只需保护\info命令:

\documentclass{article}

\usepackage[titles]{tocloft}
\usepackage{tikz}

\newcommand*\info[1]{%
  \begin{tikzpicture}
    \node[draw,inner sep=1pt, minimum height=0.2cm, minimum width=0.5cm] {\tt\tiny #1};
  \end{tikzpicture}}

\newcommand{\listfoo}{List of foo}
\newlistof[section]{foo}{idf}{\listfoo}

\begin{document}

\info{123} \info{ABC} Hello world.

\refstepcounter{foo}
\addcontentsline{idf}{foo}{\protect\info{123}\ \protect \info{ABC}\ Hello world.}

\refstepcounter{foo}
\addcontentsline{idf}{foo}{\protect\info{123}\ \protect \info{ABC}\ Hello bar.}

\listoffoo

\end{document}

答案2

\info\DeclareRobustCommand而不是来定义\newcommand并简单地说

\addcontentsline{idf}{foo}{\info{123} \info{ABC} Hello world.}

您还可以\newrobustcmd使用电子工具箱包裹。

“强化”那些进入“移动参数”的命令是很常见的,比如目录中的内容。

相关内容