Ich verwende das beschriebene PaketHierum einen tagbasierten Artikel zu erstellen.
Ich habe eine Liste mit CSV-Zeichenfolgen, die zum Erstellen einer Tabelle verwendet wird, und ich möchte die erste Instanz der CSV-Zeichenfolge auch als Tag verwenden.
\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}}
Die Befehle addtags
und addtag
durchlaufen die Liste, greifen das erste CSV-Element (mit \readlist*\mylist{#1}
) und verwenden declaretag
es damit. Wenn ich versuche, es addtags
im Dokument zu verwenden, gibt es ein aus LaTex Error: No counter '1' defined
und scheint nur das letzte Tag zu berücksichtigen. Wenn ich es hingegen declaretag
als verwende:
\declaretag{DVM}
\declaretag{RL}
...
\declaretag{HRL}
Es funktioniert gut.
Was mache ich falsch?
Bearbeiten 1
Ich bearbeite die Seite, um die Anfrage nach weiteren Informationen zu beantworten.
Mein eigentliches Ziel besteht also darin, eine Liste (alias) von Tags mit zugehöriger Beschreibung und Domäne (durch Kommas getrennte Werte) zu führen.
Diese Liste wird verwendet, um eine Tabelle mit folgenden Elementen zu füllen:
% 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}}
Und ich möchte, dass es funktioniert mit demtagstoc
Paket von funktioniertRyan Reich Hier:
\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.
Um alle Tags aus der Liste hinzuzufügen, verwenden Sie einen benutzerdefinierten Befehl wie den, den ich ausprobiert habe:
\newcommand{\addtag}[1]{
\readlist*\mylist{#1} \declaretag{\mylist[1]}}
\newcommand*{\addtags}{\forlistloop{\addtag}{\aka}}
Aber wenn ich es verwende, spielt das Ganze verrückt und das letzte Element der Liste (HRL) wird 22 Mal wiederholt (die Elemente in der Liste).
Hoffe, das klärt die Sache.
Bearbeiten 2
Ich füge ein Arbeitsdokument hinzu, das Sie überprüfen können
\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}