將清單與 tagstoc 套件一起使用

將清單與 tagstoc 套件一起使用

我正在使用描述的包這裡建立基於標籤的文章。

我有一個 csv 字串列表,用於建立表格,我也想使用 csv 字串的第一個實例作為標籤。



\listadd\aka{DVM , Distillation with value matching, RL}
\listadd\aka{RL , Reinforcement Learning, RL }
\listadd\aka{MARL , Multi agent reinforcement learning, RL }
\listadd\aka{RND , random network distillation, Novelty RL }
\listadd\aka{DRL , Deep reinforcement learning, RL }
\listadd\aka{MADRL , Multi agent Deep reinforcement learning, RL }
\listadd\aka{NLP , Natural language processing, NLP}
\listadd\aka{EM ,Emergent communication, EM}
\listadd\aka{LtT , Learning to teach , RL}
\listadd\aka{AA, Action advising , LtT }
\listadd\aka{TB, teacher budget, LtT }
\listadd\aka{CA, Continuous Actions, RL }
\listadd\aka{DA, Discrete Actions, RL}
\listadd\aka{NN, Noisy Nets , General }
\listadd\aka{SiA , Student initiated approach , LtT }
\listadd\aka{JiA , Joint initiated approach , LtT }
\listadd\aka{TiA , Teacher initiated approach , LtT }
\listadd\aka{DDS , Dynamic difficulty scaling , Flow}
\listadd\aka{BB , Believable bots , Flow}
\listadd\aka{ToF , Theory of flow , Flow}
\listadd\aka{GBL , Game-based learning , Flow}
\listadd\aka{HRL , Hierarchical reinforcement learning , RL}



\newcommand{\addtag}[1]{
\readlist*\mylist{#1} \declaretag{\mylist[1]}}

\newcommand*{\addtags}{\forlistloop{\addtag}{\aka}}

命令addtagsaddtag迭代列表,抓取第一個 csv 元素(帶有\readlist*\mylist{#1})並使用declaretag它。當我嘗試addtags在文件中使用時,它給出了 aLaTex Error: No counter '1' defined並且似乎只考慮最後一個標籤。另一方面,如果我使用declaretag

\declaretag{DVM}
\declaretag{RL}
...
\declaretag{HRL}

效果很好。

我究竟做錯了什麼?

編輯1

我正在編輯以回答更多資訊的請求。

所以我的實際目標是保留具有相關描述和網域(逗號分隔值)的標籤清單(又名)。

此列表用於填充表格:


% create row with three elements
\newcommand{\fillrow}[1]{
\readlist*\mylist{#1} \mylist[1] & %
\readlist*\mylist{#1} \mylist[2] & %
\readlist*\mylist{#1} \mylist[3] \\ \hline
}

% fill tabular
\newcommand*{\filltab}{\forlistloop{\fillrow}{\aka}}

我希望它能夠與tagstoc賴安·賴克 這裡:

\usepackage{filecontents}

% Here's the package file
\begin{filecontents*}{tagstoc.sty}
\usepackage{tocloft,etoolbox}

% Declare the master TOC.  This will contain:
% * A list of tags
% * A sequence of entries where tags are referenced
% and it will be used multiple times to generate lists of tag usage
\newlistof{tags}{tags}{All tags}
\renewcommand*\cfttagstitlefont{\Large\bfseries}% For example

% Use this in the preamble to make a new tag.
\newcommand*\declaretag[1]{%
 \newlistentry[tags]{tag#1}{tags}{0}%
 \listadd\Tags{#1}%
 \addtocontents{tags}{(#1) }%
}
% This is only true when printing the list of tags
\newif\ifprintingtags
% This makes sure that the list of tags is not printed most of the time...
\addtocontents{tags}{\protect\ifprintingtags}
% ...because it wraps the entire TOC from the preamble
\AtBeginDocument{\addtocontents{tags}{\protect\fi}}

% This is a rather inefficient way to selectively print particular tags.
% Presumably, I should just pop each tag from the list as I go,
% but etoolbox doesn't seem to handle stacks.  Probably I'm missing something.
\newcommand*\deactivatetag[1]{%
 \expandafter\let\csname l@tag#1\endcsname=\@gobbletwo
}
\newcommand*\activatetag[1]{%
 \forlistloop\deactivatetag\Tags
 \expandafter\let\csname l@tag#1\endcsname=\l@section
}

% These are hooks for the user
\providecommand*\currenttag{}
\providecommand*\listoftagstitle{}
% This prints all the references to a particular tag.
% Effectively, it's a partial ToC for that tag.
\newcommand*\dotag[1]{%
 \renewcommand*\currenttag{#1}%
 \begingroup
  \activatetag{#1}%
  \section*{\listoftagstitle}%
  \@input{\jobname.tags}%
 \endgroup
}%
% This prints the snippets, placed (with repeats) beneath their tags.
% It also prints a list of defined tags, more or less as an excuse
% to have \listoftags handle the .tags auxiliary ToC file.
\newcommand*\snippetsbytag{%
 \forlistloop\dotag\Tags
 \activatetag{}
 \printingtagstrue
 \listoftags
}

% This is how to proclaim a snippet, which is what gets tagged.
\newcounter{snippet}
\providecommand*\snippetname{}
\newcommand*\snippettitle{\snippetname}
\newcommand*\snippet[1]{%
 \refstepcounter{snippet}%
 \renewcommand*\snippetname{#1}%
 \noindent{\normalsize\bfseries\snippettitle.}%
}

% In case of no hyperref
\providecommand\phantomsection{}
% This is how you place a tag beneath a snippet.
\newcommand*\placetag[1]{%
 \phantomsection% In case of hyperref
 \addcontentsline{tags}{tag#1}{\snippettitle}%
 (tag~#1)%
}
\end{filecontents*}

\usepackage{tagstoc}

\renewcommand*\listoftagstitle{Snippets tagged with \currenttag}
% Preferred way to declare tags.  They will be printed in this order.

因此,請使用自訂命令(例如我嘗試過的命令)​​來新增清單中的所有標籤:


\newcommand{\addtag}[1]{
\readlist*\mylist{#1} \declaretag{\mylist[1]}}

\newcommand*{\addtags}{\forlistloop{\addtag}{\aka}}

但當我使用它時,整個事情變得瘋狂,清單的最後一個元素 (HRL) 重複了 22 次(清單中的元素)。

希望這能澄清事情。

編輯2

我正在添加一份工作文檔,您可以檢查

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[colorlinks]{hyperref}
\usepackage[table,xcdraw]{xcolor}





\usepackage{filecontents}

% Here's the package file
\begin{filecontents*}{tagstoc.sty}
\usepackage{tocloft,etoolbox}

% Declare the master TOC.  This will contain:
% * A list of tags
% * A sequence of entries where tags are referenced
% and it will be used multiple times to generate lists of tag usage
\newlistof{tags}{tags}{All tags}
\renewcommand*\cfttagstitlefont{\Large\bfseries}% For example

% Use this in the preamble to make a new tag.
\newcommand*\declaretag[1]{%
 \newlistentry[tags]{tag#1}{tags}{0}%
 \listadd\Tags{#1}%
 \addtocontents{tags}{(#1) }%
}
% This is only true when printing the list of tags
\newif\ifprintingtags
% This makes sure that the list of tags is not printed most of the time...
\addtocontents{tags}{\protect\ifprintingtags}
% ...because it wraps the entire TOC from the preamble
\AtBeginDocument{\addtocontents{tags}{\protect\fi}}

% This is a rather inefficient way to selectively print particular tags.
% Presumably, I should just pop each tag from the list as I go,
% but etoolbox doesn't seem to handle stacks.  Probably I'm missing something.
\newcommand*\deactivatetag[1]{%
 \expandafter\let\csname l@tag#1\endcsname=\@gobbletwo
}
\newcommand*\activatetag[1]{%
 \forlistloop\deactivatetag\Tags
 \expandafter\let\csname l@tag#1\endcsname=\l@section
}

% These are hooks for the user
\providecommand*\currenttag{}
\providecommand*\listoftagstitle{}
% This prints all the references to a particular tag.
% Effectively, it's a partial ToC for that tag.
\newcommand*\dotag[1]{%
 \renewcommand*\currenttag{#1}%
 \begingroup
  \activatetag{#1}%
  \section*{\listoftagstitle}%
  \@input{\jobname.tags}%
 \endgroup
}%
% This prints the snippets, placed (with repeats) beneath their tags.
% It also prints a list of defined tags, more or less as an excuse
% to have \listoftags handle the .tags auxiliary ToC file.
\newcommand*\snippetsbytag{%
 \forlistloop\dotag\Tags
 \activatetag{}
 \printingtagstrue
 \listoftags
}

% This is how to proclaim a snippet, which is what gets tagged.
\newcounter{snippet}
\providecommand*\snippetname{}
\newcommand*\snippettitle{\snippetname}
\newcommand*\snippet[1]{%
 \refstepcounter{snippet}%
 \renewcommand*\snippetname{#1}%
 \noindent{\normalsize\bfseries\snippettitle.}%
}

% In case of no hyperref
\providecommand\phantomsection{}
% This is how you place a tag beneath a snippet.
\newcommand*\placetag[1]{%
 \phantomsection% In case of hyperref
 \addcontentsline{tags}{tag#1}{\snippettitle}%
 (tag~#1)%
}
\end{filecontents*}

\usepackage{tagstoc}

\renewcommand*\listoftagstitle{Snippets tagged with \currenttag}
% Preferred way to declare tags.  They will be printed in this order.





\usepackage{etoolbox}
\usepackage{listofitems}

% create row with three elements
\newcommand{\fillrow}[1]{
\readlist*\mylist{#1} \mylist[1] & %
\readlist*\mylist{#1} \mylist[2] & %
\readlist*\mylist{#1} \mylist[3] \\ \hline
}

% fill tabular
\newcommand*{\filltab}{\forlistloop{\fillrow}{\aka}}




\listadd\aka{DVM , Distillation with value matching, RL}
\listadd\aka{RL , Reinforcement Learning, RL }
\listadd\aka{MARL , Multi agent reinforcement learning, RL }
\listadd\aka{RND , random network distillation, Novelty RL }
\listadd\aka{DRL , Deep reinforcement learning, RL }
\listadd\aka{MADRL , Multi agent Deep reinforcement learning, RL }
\listadd\aka{NLP , Natural language processing, NLP}
\listadd\aka{EM ,Emergent communication, EM}
\listadd\aka{LtT , Learning to teach , RL}
\listadd\aka{AA, Action advising , LtT }
\listadd\aka{TB, teacher budget, LtT }
\listadd\aka{CA, Continuous Actions, RL }
\listadd\aka{DA, Discrete Actions, RL}
\listadd\aka{NN, Noisy Nets , General }
\listadd\aka{SiA , Student initiated approach , LtT }
\listadd\aka{JiA , Joint initiated approach , LtT }
\listadd\aka{TiA , Teacher initiated approach , LtT }
\listadd\aka{DDS , Dynamic difficulty scaling , Flow}
\listadd\aka{BB , Believable bots , Flow}
\listadd\aka{ToF , Theory of flow , Flow}
\listadd\aka{GBL , Game-based learning , Flow}
\listadd\aka{HRL , Hierarchical reinforcement learning , RL}



\newcommand{\addtag}[1]{
\readlist*\mylist{#1} \declaretag{\mylist[1]}}

\newcommand*{\addtags}{\forlistloop{\addtag}{\aka}}




\begin{document}
\addtags




 \snippetsbytag
 \newpage
 

\renewcommand{\arraystretch}{1.7}
% Please add the following required packages to your document preamble:
% \usepackage[table,xcdraw]{xcolor}
% If you use beamer only pass "xcolor=table" option, i.e. \documentclass[xcolor=table]{beamer}
\begin{table}[!h]
\centering

\begin{tabular}{|lll|}
\rowcolor[HTML]{C0C0C0} 
\textbf{Aka} & \textbf{Definition} & \textbf{Field} \\ \hline
\filltab
\end{tabular}
\caption{List of acrimonious with corresponding description and field}
\label{tab:akas}
\end{table} 

 \newpage


\snippet{TMp1}
\placetag{SiA}\placetag{NN}\placetag{TiA }

Something

\snippet{TMp2}
\placetag{MADRL}\placetag{HRL}\placetag{TiA }

Something else



\end{document}

相關內容