如何使用 typeout 在控制台上输出重复字符串

如何使用 typeout 在控制台上输出重复字符串

我正在尝试创建一个简单的宏来在控制台上跟踪我输入的源文件。首先,我想创建一个名为“TraceHere”的新命令,它将在两行星号之间输出当前文件名(它与嵌入式源配合得很好,我试过了),作为清晰的分隔符。

我创建了一个命令“RepeatAst”来输出一行星号。我的问题是我无法在“typeout”中调用它,因为我在输出中获得了它的定义。

这是最小代码,我认为可以直接编译。

\documentclass{article}

\usepackage{lipsum}
\usepackage[realmainfile]{currfile}

\newcount\TraceHereStar
\newcommand{\RepeatAst}{\TraceHereStar0\loop\ifnum\TraceHereStar < 25 $\ast$\advance\TraceHereStar by 1\repeat}

\newcounter{TraceHereCount}
\setcounter{TraceHereCount}{1}
% forcer les notes toujours à gauche
\newcommand{\TraceHere}{\typeout{^^J\RepeatAst^^J\arabic{TraceHereCount} *** Source file: \currfilepath^^J\RepeatAst^^J}\stepcounter{TraceHereCount}}

\begin{document}

\TraceHere
\lipsum[1-4]
\newpage
\TraceHere
\lipsum[5-7]

\end{document}

以下是输出示例

\TraceHereStar 0\def \iterate {$\ast $\advance \TraceHereStar by 1\relax \itera
te }\iterate \let \iterate \relax
1 *** Source file: test.tex
\TraceHereStar 0\def \iterate {$\ast $\advance \TraceHereStar by 1\relax \itera
te }\iterate \let \iterate \relax

有人能解释一下为什么列出的是命令“RepeatAst”而不是其预期结果吗(以及我需要实施哪些修正)?提前致谢。

答案1

在我看来,它\typeout在这里无法工作,因为它扩展了参数,并且里面有两个作业(实际上这里有 26 个!)阻止了扩展。

  • \TraceHereStar0 是一项任务
  • \advance\TraceHereStar by 1也是一项任务

此外,`$\ast$ 对于控制台来说没有任何意义,并且无法在那里扩展!


\RepeatAst一种可能的解决方法是在宏中使用之前进行“填充” \TraceHere

\documentclass{article}

\usepackage{lipsum}
\usepackage[realmainfile]{currfile}

\newcount\TraceHereStar

\newcommand{\PrepareRepeatAst}{%
\TraceHereStar0
\def\RepeatAst{}
\loop\ifnum\TraceHereStar < 25 
\xdef\RepeatAst{\RepeatAst *}
\advance\TraceHereStar by 1
\repeat
}

\PrepareRepeatAst  
\newcounter{TraceHereCount}
\setcounter{TraceHereCount}{1}

% forcer les notes toujours à gauche
\newcommand{\TraceHere}{\typeout{^^J\RepeatAst^^J\arabic{TraceHereCount} *** Source file: \currfilepath^^J\RepeatAst^^J}\stepcounter{TraceHereCount}}

\begin{document}

\TraceHere
\lipsum[1-4]
\newpage
\TraceHere
\lipsum[5-7]

\end{document}

输出如下:

Package currfile-abspath Warning: The required recorder file (.fls) was not fou
nd.
(currfile-abspath)                Please compile with the '-recorder' option.
(currfile-abspath)                Note that MikTeX requires two compiler runs.
(currfile-abspath)                Occurred on input line 292.

) (./repeat.aux)

*************************
1 *** Source file: repeat.tex
*************************

[1{/usr/local/texlive/2016/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]

*************************
2 *** Source file: repeat.tex
*************************

相关内容