我对 TeX 还很陌生,正在边学边做。我正在尝试用 LaTeX 写日记。我正在使用提供的解决方案 使用 LaTeX 记日记. 它本质上是一种将每天的条目存储在新文件中的设置。
我No room for a new \read
在第 14 个条目处遇到了错误。似乎我能像这样添加的文件数量有限。即便如此,14 听起来也是一个非常小的数字。有解决方案吗?一个可以让我继续使用数年添加数千个条目的解决方案。我查看了没有空间容纳新的 \read/\write似乎讨论了此问题或类似问题。但我不确定如何修复此代码。
我已将代码放入journal.tex
文件中。在同一目录中有一个名为 2013 的文件夹,其中包含一个名为 Jan 的文件夹,其中包含 14 个.tex
文件1.tex
- 14.tex
。它们全部都是空的。
journal.tex
如下。
%This file layout courtesy of the following online recipe
%https://tex.stackexchange.com/questions/68525/using-latex-to-keep-a-diary
\documentclass{tufte-book}
%\usepackage{lipsum}
\usepackage{tikz}
\usepackage{xifthen}
\usepackage{soul}
\usepackage{minted}
\newenvironment{loggentry}[2]% date, heading
{\noindent\textbf{#2}\marginnote{#1}\par}{\vspace{0.5cm}}
\def\?#1{}
\pgfmathtruncatemacro{\StartYear}{2012}
\pgfmathtruncatemacro{\EndYear}{2013}
\newcommand{\writetitle}{0}
\newcommand{\mytitle}[1]
{ \ifthenelse{\writetitle=1}{#1}{}
}
\begin{document}
\foreach \Year in {\StartYear,...,\EndYear}
{ \foreach \Month in {Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}
{ \foreach \Day in {1,...,31}
{ \IfFileExists{\Year/\Month/\Day}
{ \newread\mysource
\openin\mysource=\Year/\Month/\Day.tex
\read\mysource to \firstline
\closein\mysource
\xdef\writetitle{1}
\begin{loggentry}{\Year - \Month - \Day}{\firstline}
\xdef\writetitle{0}
\input{\Year/\Month/\Day}
\end{loggentry}
}
{ % files does not exist, so nothing to do
}
}
}
}
\end{document}
答案1
TeX 仅允许读取 16 个文件流。这些是“最低级别”结构,限制了一次可以读取的文件数量。然而,这确实不是意味着你只能使用 16 个文件!假设你需要一次读取一行(IE你不能只读取\input
整个子文件),你需要的是单个读取流,因为你不需要一次读取多个文件。因此,
\foreach \Year in {\StartYear,...,\EndYear}
{ \foreach \Month in {Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}
{ \foreach \Day in {1,...,31}
{ \IfFileExists{\Year/\Month/\Day}
{ \newread\mysource
\openin\mysource=\Year/\Month/\Day.tex
\read\mysource to \firstline
\closein\mysource
\xdef\writetitle{1}
\begin{loggentry}{\Year - \Month - \Day}{\firstline}
\xdef\writetitle{0}
\input{\Year/\Month/\Day}
\end{loggentry}
}
{ % files does not exist, so nothing to do
}
}
}
}
你要
\foreach \Year in {\StartYear,...,\EndYear}
{ \foreach \Month in {Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}
{ \foreach \Day in {1,...,31}
{ \IfFileExists{\Year/\Month/\Day}
{ % Line removed here
\openin\mysource=\Year/\Month/\Day.tex
\read\mysource to \firstline
\closein\mysource
\xdef\writetitle{1}
\begin{loggentry}{\Year - \Month - \Day}{\firstline}
\xdef\writetitle{0}
\input{\Year/\Month/\Day}
\end{loggentry}
}
{ % files does not exist, so nothing to do
}
}
}
}
与线
\newread\mysource
已移动外部循环:我会把它放在序言中。