100 能否使用latex3令自定义的part和chapter从一堆图片中自动选取图片?

发布于 2023-08-18 10:41:14

我在这里描述下需求,可能会有些许描述不清的地方,请多多担待。
我的模板中定义了两种带图片的标题样式,分别为part和chapter,且都必须区分奇偶数页,也就是偶数页需要方向为左的图片,奇数页则为方向向右的图片。我的需求是,设计一种latex3程序,可以提供一个命令来输入两组不同方向图片名称的字符串,用英文逗号间隔,其中方向向左的分为一组,向右的也分为一组,类似于

\titleimage{
chapterevenimage={<方向向左的图片分组>},
chapteroddimage={<方向向右的图片分组>},
partevenimage={<方向向左的图片分组>},
partoddimage={<方向向右的图片分组>},
}

然后自动判别奇偶数页,并根据奇数页向右和偶数页向左的规则来自动按顺序循环插入图片,即若我们的输入为\chapterevenimage={a,b,c},则第一个偶数页章为其分配a,然后第二个偶数页章为b,第三个偶数页章为c,到了第四个偶数页章又回到a,……,就这样依次循环。
上面就是我想要的效果,小生实在不会弄,所以还是厚着脸皮求求各位了,不胜感激!
代码见: 123云盘 提取码:ivYS

查看更多

关注者
1
被浏览
1k
雾月
雾月 2023-08-18
这家伙很懒,什么也没写!

把图片名分别保存到 seq 里即可。

\seq_new:N \g__my_chapter_oimage_seq % odd 
\seq_new:N \g__my_chapter_eimage_seq % even 
\seq_new:N \g__my_part_oimage_seq % odd 
\seq_new:N \g__my_part_eimage_seq % even 

\keys_define:nn { my/titleimage }
  {
    chapteroddimage  .code:n = 
      \seq_gset_from_clist:Nn \g__my_chapter_oimage_seq {#1} ,
    chapterevenimage .code:n = 
      \seq_gset_from_clist:Nn \g__my_chapter_eimage_seq {#1} ,
    partoddimage     .code:n = 
      \seq_gset_from_clist:Nn \g__my_part_oimage_seq    {#1} ,
    partevenimage    .code:n = 
      \seq_gset_from_clist:Nn \g__my_part_eimage_seq    {#1} ,
  }
\cs_new:Npn \__my_title_image:Nn #1#2 % image seq, number
  { \seq_item:Nn #1 { \int_mod:nn {#2} { \seq_count:N #1 } + 1 } }
\cs_new:Npn \my@chapterimagename
  {
    \int_if_odd:nTF { \value{page} } 
      { \__my_title_image:Nn \g__my_chapter_oimage_seq { \value{chapter} } }
      { \__my_title_image:Nn \g__my_chapter_eimage_seq { \value{chapter} } }
  }
\cs_new:Npn \my@partimagename
  {
    \int_if_odd:nTF { \value{page} }
      { \__my_title_image:Nn \g__my_part_oimage_seq { \value{part} } }
      { \__my_title_image:Nn \g__my_part_eimage_seq { \value{part} } }
  }
\cs_new_protected:Npn \titleimage #1 
  { \keys_set:nn { my/titleimage } {#1} }

使用时

\titleimage{
  chapteroddimage={inner_pics/songodd, inner_pics/yinghuaodd},
  chapterevenimage={inner_pics/songeven, inner_pics/yinghuaeven},
  ...
}

\includegraphics{\my@chapterimagename} % 会自动改变
\includegraphics{\my@partimagename}    % 会自动改变

放到文档类中时,不要用 my 作为模块名,改成你自己的名字。

2 个回答
烟云幻梦
烟云幻梦 2023-08-19
数学系咸鱼一枚!

大师,您真强!!!!!完美契合!!

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览