如果 \currfilebase 存在,则 \input 中的计数器值加倍

如果 \currfilebase 存在,则 \input 中的计数器值加倍

使用包currfile

\setcounter{foo}{\inputlineno}%
\def\barfile{.aux/\currfilebase\thefoo.bar}%
\def\texfile{.aux/\currfilebase\thefoo.tex}%
% ...
\input{\texfile}

然后计数器的值加倍:

! LaTeX Error: File `.aux/filename363363.tex' not found.

\texfile仅包含\fname或 仅包含 时\thefoo,我没有看到任何重复。此外,使用包fink并且\def\fname{\finkfile},没有出现任何问题。

最小工作示例:

创建一个包含以下内容的主文件:

\documentclass{article}
\usepackage{currfile}
\newcounter{counter}
\setcounter{counter}{0}
\begin{document}
    \def\texfile{\currfilebase\thecounter.tex}
    \input{a_main0.tex}
    \input{\texfile}
\end{document}

和另一个名为 的文件a_main0.tex。排版引发错误:

...
(./a_main.aux) (./a_main0.tex)
! LaTeX Error: File `a_main00.tex' not found.

a_main0.tex显然,可以通过 找到文件\input,但是当使用 给出文件名时却找不到\texfile,因为字符“0”重复了。

答案1

语句\def\texfile{\currfilebase\thecounter.tex}在第二次调用中被评估\input{\texfile},但是当前输入文件a_main0由于\currfilebase在 时将其内容切换为该名称\input,因此\texfile扩展为a_main00.tex

一种可能的解决方案是使用\edef\textfile,即扩展定义,因此\currentfilebase不再包含宏,而是包含定义时的值。

a_main.tex

\documentclass{article}
\usepackage{currfile}
\newcounter{counter}
\setcounter{counter}{0}
\begin{document}
    \edef\texfile{\currfilebase\thecounter.tex}
    \input{a_main0.tex}
    \input{\texfile}
\end{document}

a_main0.tex只包含行

\section{Foo from the file with the 0 suffix}

然而,我既不建议在图形文件名称中使用下划线(即使有使用)(这里不是这种情况),也不建议使用名为;-)currfile的计数器counter

相关内容