我正在尝试根据文件名自动添加节标签。我的结构如下:
- 主文本
- 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}前。