是否可以将数据添加到文件.log
?
例如,我创建了一个 LaTeX 文件,在某个时候,我想输入一个将数据添加到.log
文件中的命令。
我不想将某些内容硬编码到 LaTeX 文件中。我想添加一条消息,例如“您现在正在解析第 1 节”。然后在文档的其他地方,我想添加“您现在正在解析第 2 节”。
这可能吗?如果可以,我该如何实现?
答案1
就像我在我的回答中建议的那样你的其它问题,你可以挂接到\section
宏中。问题是这\section
不是一个简单的宏。它的扩展涉及一个辅助宏\@startsection
,而辅助宏又会扩展\@sect
为八参数。您可以阅读第 61.2 节来源2e了解血腥细节,但第一个参数是节的“级别”(section
、subsection
等),第八个参数是节的名称。
您需要一个带有 e-TeX 原语的 TeX 可执行文件才能使用etoolbox
包。但你可能不知道。下面的代码将\@sect
日志指令添加到命令中。它基本上按照 David 和 Werner 在他们的评论中所建议的那样做,但在每个分段命令之后都会自动执行。
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\makeatletter
\apptocmd{\@sect}{
\typeout{You are now parsing #1 \expandafter\csname the#1\endcsname, ``#8''}
}
{%
\typeout{Patch of \string\@sect\space succeeded}
}
{%
\typeout{Patch of \string\@sect\space failed}
}
\makeatother
\begin{document}
\section{First}
\lipsum[1-2]
\subsection{A subsection}
\lipsum[3-7]
\section{Second}
\lipsum
\section{Third}
\lipsum
\end{document}
以下是控制台输出的片段:
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2012/texmf-dist/tex/latex/lipsum/lipsum.sty)
(/usr/local/texlive/2012/texmf-dist/tex/latex/etoolbox/etoolbox.sty
(/usr/local/texlive/2012/texmf-dist/tex/latex/etex-pkg/etex.sty))
Patch of \@sect succeeded
(./Pete.aux)
You are now parsing section 1, ``First''
You are now parsing subsection 1.1, ``A subsection''
[1{/usr/local/texlive/2012/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
You are now parsing section 2, ``Second''
[2]
You are now parsing section 3, ``Third''
[3] [4] [5] (./Pete.aux) )</usr/local/texlive/2012/texmf-dist/fonts/type1/publi
c/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2012/texmf-dist/fonts/type1/public
/amsfonts/cm/cmr10.pfb>
Output written on Pete.pdf (5 pages, 41359 bytes).
Transcript written on Pete.log.