使用以下(伪)代码
\newenvironment{A}[2]{\AddToToC{#1}{#2}}{}
\begin{A}{Test1}{1}
\end{A}
\begin{A}{Test2}{2}
\end{A}
\begin{A}{Test3}{1,2}
\end{A}
我想要生成以下输出:
Table of Content 1:
Test1......1
Test3......1
Table of Content 2:
Test2......1
Test3......1
A
即我有不同的 ToC,我想根据调用环境时给出的第二个值将环境名称添加到它们中。该值将是一个整数(但如有必要,可以更改)。
另一个好处是,我能够将一个环境包含在多个 ToC 中(如中Test3
),即使它没有像本草案中那样实现。这可能吗?
答案1
我目前的草稿(也是其他情况的可能解决方案,但由于太多而不适合我的情况\writes
):
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage{tocloft}
\usepackage{pgffor}
\newcommand{\AddToToCSingle}[2]{
\refstepcounter{ToC#1%
}
\def\list{#1ToC}
\def\listname{\list}
\addcontentsline{\listname}{ToC#1}
{\protect\numberline{\csname theToC#1\endcsname}#2}\par
}
\newcommand{\AddToToCMulti}[2]{
\foreach\x in {#1}{\AddToToCSingle{\x}{#2}}
}
\newcommand{\PrintMultiToC}[1]{
%\def\curToC{\expandafter\csname listofToC#1\endcsname}
%\curToC
\foreach\i in {#1}{\expandafter\csname listofToC\i \endcsname}
}
\newcommand{\GenerateMultiToc}[1]{
\foreach\i in {#1}{%
\newcommand\ToC{\expandafter\csname ToC\i\endcsname}
\newlistof{ToC\i}{\i ToC}{\ToC\i}
\expandafter\csname listofToC\i\endcsname
}
}
\newcommand{\ToCA}{A}
\newlistof{ToCA}{AToC}{\ToCA}
\newcommand{\ToCB}{B}
\newlistof{ToCB}{BToC}{\ToCB}
\newcommand{\ToCC}{C}
\newlistof{ToCC}{CToC}{\ToCC}
\newenvironment{Test}[2]{\AddToToCMulti{#2}{#1}#1}{}
\begin{document}
\PrintMultiToC{A,B}
\GenerateMultiToc{F, G}
%\PrintMultiToC{F,G}
\begin{Test}{Hello}{A,G}
World
\end{Test}
\end{document}
目前唯一不起作用的是,我无法\PrintMultiToC{}
使用我生成的列表进行调用,我必须直接在 中打印它们\GenerateMultiToc{}
。