我的目标是根据数字列表拥有不同的标题和排序。
我有多个按项目编号(降序)排序的项目。现在我想突出显示一些项目,以便突出显示的项目排在前面,然后是其他项目。突出显示的项目仍然按编号排序,其他项目也是如此。
如果我只突出显示项目或没有人突出显示,则标题应为“项目”。如果我有一个或多个突出显示的项目,则标题应为“突出显示的项目”,而对于未突出显示的项目,标题应为“其他项目”。
我的项目代码没有任何突出显示,如下所示:
\xdef\myHighlights{ 01,03 }
\let\mylist\empty
\foreach\x in {00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, ...,20} {
\ifx\mylist\empty
\xdef\mylist{\x}%
\else
\xdef\mylist{\x,\mylist}%
\fi
}
\foreach\x in \mylist {%
\edef\projectNumber{\x}%
\edef\FileName{path/to/project_\x}%
\IfFileExists{\FileName}{%
\newpage%
\input{\FileName}%
}
}
我必须将 \mylist 拆分为 \normalProjectList 和 \highlightedProjectList。但我不知道如何比较 \mylist 中的 \x 是否在 \myHighlights 中。
答案1
这里我使用listofitems
搜索列表\myList
中的每个元素\myHighlights
,并据此构建两个请求的(高亮和普通)列表。
\documentclass{article}
\usepackage{listofitems}
\def\myHighlights{01,03}
\def\myList{00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20}
\begin{document}
\newcommand\normalProjectList{}
\newcommand\highlightedProjectList{}
\readlist*\tlist{\myList}
\foreachitem\z\in\tlist[]{%
\expandafter\setsepchar\expandafter{\z}%
\readlist*\hlist{\myHighlights}
\ifnum\listlen\hlist[]>1\relax
\xdef\highlightedProjectList{\highlightedProjectList \z, }%
\else
\xdef\normalProjectList{\normalProjectList \z, }%
\fi
}
Highlighted Projects:
\highlightedProjectList
Normal Projects:
\normalProjectList
\end{document}
答案2
我已经为这项工作设置了一个界面。
主命令是\loadprojects
将第一个项目编号和最后一个项目编号作为参数(缺少的数字不会成为问题)。
请\highlightprojects
说明要突出显示哪些(在这里您可以指定精确的终止)。
如果您这样做\loadprojects*
,那么所有项目都将被视为突出显示并被\sethighlights
忽略。
您可以使用可选参数(默认值为 2)指定数字的格式;因此
\loadprojects[3]{0}{3}
将尝试加载编号为 000、001、002 和 003 的项目。
在下面的例子中,我\loadprojects
使用了不同的设置\sethighlights
。首先突出显示其中几个,然后不突出显示,然后全部突出显示。
可用的文件有ramona00.tex
、、、和(缺少编号 04 ramona01.tex
)。ramona02.tex
ramona03.tex
ramona05.tex
\documentclass{article}
\usepackage[a6paper]{geometry} % to make smaller pictures
\usepackage{fancyhdr}
\fancyhf{}
\fancyhead[R]{\projecttype}
\fancyfoot[C]{\thepage}
\pagestyle{fancy}
\ExplSyntaxOn
\NewDocumentCommand{\sethighlights}{m}
{
\seq_gset_from_clist:Nn \g_ramona_project_highlights_seq { #1 }
}
\NewDocumentCommand{\setprojectroot}{m}
{
\tl_gset:Nn \g_ramona_project_root_tl { #1 }
}
\NewDocumentCommand{\loadprojects}{sO{2}mm}
{% #1 = * for all highlighted,
% #2 = number of digits,
% #3 = start point,
% #4 = end point
\ramona_project_load:nnnn { #1 } { #2 } { #3 } { #4 }
}
\NewDocumentCommand{\projecttype}{}
{
\tl_use:N \l_ramona_project_header_tl
}
\bool_new:N \g_ramona_project_all_highlighted_bool
\tl_new:N \g_ramona_project_root_tl
\tl_new:N \l_ramona_project_header_tl
\seq_new:N \g_ramona_project_highlights_seq
\cs_new_protected:Nn \ramona_project_load:nnnn
{
% if all projects are highlighted or none is, set the conditional to true
\bool_lazy_or:nnT
{ \bool_if_p:n { #1 } } % all highlighted
{ \seq_if_empty_p:N \g_ramona_project_highlights_seq } % none highlighted
{
\bool_gset_true:N \g_ramona_project_all_highlighted_bool
}
% now input the files
\int_step_inline:nnn { #3 } { #4 }
{
\clearpage
\bool_if:NTF \g_ramona_project_all_highlighted_bool
{% all or no projects are highlighted
\tl_set:Nn \l_ramona_project_header_tl { Projects }
}
{% check whether the current project is highlighted
\seq_if_in:NxTF \g_ramona_project_highlights_seq
{ \__ramona_projects_pad:nn { #2 } { ##1 } } % the current item
{% the project is highlighted
\tl_set:Nn \l_ramona_project_header_tl { Highlighted~Projects }
}
{% the project is not highlighted
\tl_set:Nn \l_ramona_project_header_tl { Other~Projects }
}
}
\file_if_exist_input:n { \g_ramona_project_root_tl \__ramona_projects_pad:nn { #2 } { ##1 } }
}
}
\cs_new:Nn \__ramona_projects_pad:nn
{
\prg_replicate:nn { #1 - \tl_count:n { #2 } } { 0 } #2
}
\ExplSyntaxOff
\setprojectroot{./ramona}
\begin{document}
\thispagestyle{empty}
\begin{center}
Only some are highlighted
\end{center}
\sethighlights{00,02}
\loadprojects{0}{5}
\clearpage
\thispagestyle{empty}
\begin{center}
None highlighted
\end{center}
\sethighlights{}
\loadprojects{0}{5}
\clearpage
\thispagestyle{empty}
\begin{center}
All are highlighted
\end{center}
\loadprojects*{0}{5}
\end{document}