version.tex
我创建了一个包含消息的文件git log
。.tex
然后,此文件被包含到我的main.tex
文件中,如下所示:
\renewcommand{\footsnippy}{%
Author Name,
Title of my Book, %
\input{version}
}
因为footsnippy
文档类使用它来将当前日期、作者、标题(现在还有 git log)打印到每一页上。
但是:LaTeX 现在慢了不少,因为似乎现在\input
执行的是每一页。嗯……
看:
...
) [11] (./version.tex) [12] (./version.tex) [13] (./version.tex) [14]
(./version.tex) [15] (./version.tex) [16] (./version.tex) [17] (./version.tex)
[18] (./version.tex) [19] (./version.tex) [20] (./version.tex) [21]
(./version.tex) [22]) (./wikitex/00Vorwort.tex (./version.tex) [23]
(./version.tex) [24]) (./version.tex) [25] (./wikitex/teil01beginn.tex
(./version.tex) [26]
...
有什么方法可以避免文件被一遍又一遍地读取?
答案1
您只需加载一次文件即可,关键是catchfile
包:
\usepackage{catchfile}
\newcommand{\gitinput}[1]{%
\begingroup
\ifcsname gitinput#1\endcsname
\else
\CatchFileDef\temp{#1}{}
\global\expandafter\let\csname gitinput#1\endcsname\temp
\fi
\endgroup
\csname gitinput#1\endcsname
}
\renewcommand{\footsnippy}{%
Author Name,
Title of my Book,
\gitinput{version}
}
第一次执行时\gitinput{version}
,将定义宏\gitinputversion
,展开为文件内容version.tex
。然后,\gitinputversion
每次调用时都会执行该命令\gitinput{version}
;但文件不会被读取多次。
这比设置可重复使用的框具有优势,因为本方法将尊重周围的字体形状和字体大小条件。
答案2
没有任何包,我savebox
按照@MarcoDaniel 的建议使用了。
\newsavebox{\tversion}
\savebox{\tversion}{{\tiny\input{version}}}
\renewcommand{\footsnippy}{%
Author Name,
Title of my Book,
\usebox{\tversion}
}
如您所见,我必须将格式添加\tiny
到保存框中,因为保存框本身,而不仅仅是加载的文件内容。这意味着,之前在footsnippy
文本命令中完成的格式\input{version}
不再适用于保存框。所以我必须在保存框中应用它。