根据文件名自动添加章节标签

根据文件名自动添加章节标签

我正在尝试根据文件名自动添加节标签。我的结构如下:

  • 主文本
  • 1.0.介绍.tex
  • 1.1.0.foo.tex
  • 1.1.1.bar.tex

我正在使用包中的 \currfilenamecurr文件获取文件名{删除 .tex} 和字符串删除最后一个 {.} 之前的所有内容,最多三层。

所以我的新命令明确名称产生了预期结果:从 1.0.introduction -> Introduction。尝试将我的命令添加到标签时出现问题。

尽管\标签{\currfilename}可以工作并且标签被创建,当执行 \label{\clearname{\currfilename}} 时,我收到 6 个不同的编译错误,对于这些错误,我作为一个新手无法理解。

梅威瑟:

主文本

\documentclass{article}
\usepackage{xstring}
\usepackage{currfile}
\usepackage{showkeys}

\newcommand{\clearname}[1]{%
    \StrCount{#1}{.}[\tmp]
    \IfEqCase{\tmp}{%
        {1}{\StrBehind{#1}{.}}%
        {2}{\StrBehind{#1}{.}[\tmp2]\StrBehind{\tmp2}{.}}%
        {3}{\StrBehind{#1}{.}[\tmp2]\StrBehind{\tmp2}{.}[\tmp3]\StrBehind{\tmp3}{.}}
    }
  }
\begin{document}
\input{1.0.introduction}
\end{document}

1.0.介绍.tex

\section{Introduction}
\currfilename
\label{\currfilename}

\clearname{\currfilename}

% \label{\clearname{\currfilename}}

As clearly seen in \ref{1.0.introduction}

总而言之,我需要创建的标签是introduction而不是1.0.introduction

在此处输入图片描述

答案1

嗯...在花了几个小时进行非常详细和复杂的字符串文档...为了获得 xstring 宏的扩展,您必须向输出传递一个参数,例如:[\我的结果]

我还意识到我需要的东西可以轻松实现\StrGobbleLeft

因此,详细说明下面的代码,其工作方式如预期:

\newcommand{\clearname}[1]{%
    \StrCount{#1}{.}[\tmp]
    \IfEqCase{\tmp}{%
    {1}{\StrGobbleLeft{#1}{2}[\myresult]}%
    {2}{\StrGobbleLeft{#1}{4}[\myresult]}%
    {3}{\StrGobbleLeft{#1}{6}[\myresult]}
    }
  }

...并通过调用产生正确的结果\label{\myresult}尽管你仍然需要运行\clearname{\currfilename}前。

相关内容