如何制作环境列表?

如何制作环境列表?

我知道LaTeX/TeX是一种完整的编程语言,但我找不到任何有关制作列表或向量的主题,就像在 C# 或 C++ 中一样。我的目标是制作一个列表,在其中存储我的名字\newenvironment(例如,让它成为类似部分的东西),并通过列表中的编号引用它。

列表大小不能是常数,而应该取决于环境被调用的时间。这能做到吗?(或者我应该制作一个程序,它将操作文本然后编译它?)

我已经写了一个通过写入外部文件并从中读取的示例,它正确吗?

\documentclass{book}

\setlength\parindent{0pt}

\makeatletter
\newcommand{\Dotfill}{\leavevmode \cleaders \hb@xt@ .8em{\hss .\hss }\hfill \kern \z@}
\makeatother

\newwrite\contentfile
\immediate\openout\contentfile=\jobname.txt

\newcounter{Section}
\newenvironment{Section}[1]
{   
    \stepcounter{Section}
    \vspace{10pt}
    {\Large{$\S\theSection.$ #1}} \\[5pt]
    \def\theSectionName {#1}

    \immediate\write\contentfile{\string\S \theSection. \theSectionName \string\Dotfill \thepage\string\\}
}


\begin{document}
\pagestyle{empty}

\immediate\write\contentfile{\string\begin{center}}
\immediate\write\contentfile{\string\begin{minipage}{10cm}}

\Section{section one}

this is first

\Section{section two}

hjykfkk


\Section{section three}

hjykfkk dfga dfgagr gagergreghah

\newpage

\Section{section four}
hjykfkk dfga dfgagr gagergreghah

\immediate\write\contentfile{\string\end{minipage}}
\immediate\write\contentfile{\string\end{center}}
\immediate\closeout\contentfile
\input{\jobname.txt}

\end{document}

答案1

实际上,我认为 OP 试图重新发明\addcontentsline\addtocontents功能,但在我看来,这些功能可以毫不费力地使用。这Section是任何其他环境的示例。

\documentclass{book}

\setlength\parindent{0pt}

\makeatletter
\newcommand{\listofenvironments}{%
  \section*{The environments}
  \@starttoc{env}% Starting to show the environment list (file extension `.env`)
}
\makeatother

\newcounter{Section}


\newenvironment{Section}[1]
{%   
    \stepcounter{Section}  % should be \refstepcounter rather?
    \vspace{10pt}
    {\Large{$\S\theSection.$ #1}} \\[5pt] %Is this necessary?
   % Write the number and enviroment name to the `.env` list file 
   \addcontentsline{env}{section}{\protect\numberline{\theSection}~#1}% 
    %  \addtocontents{env}{\protect\contentsline{section}{\theSection~#1}{\thepage}}
}

\AtBeginDocument{%
  \addtocontents{env}{\protect\begin{center}}
    \addtocontents{env}{\protect\begin{minipage}{10cm}}
}

\AtEndDocument{%
  \addtocontents{env}{\protect\end{minipage}}
  \addtocontents{env}{\protect\end{center}}
}

\begin{document}
\pagestyle{empty}

%\immediate\write\contentfile{\string\begin{center}}
%\immediate\write\contentfile{\string\begin{minipage}{10cm}}

\Section{section one}

this is first

\Section{section two}

hjykfkk


\Section{section three}

hjykfkk dfga dfgagr gagergreghah

\newpage

\Section{section four}
hjykfkk dfga dfgagr gagergreghah


\listofenvironments



\end{document}

在此处输入图片描述

相关内容