写日记“没有空间阅读新书”

写日记“没有空间阅读新书”

我对 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

已移动外部循环:我会把它放在序言中。

相关内容