Список изменений из файла

Список изменений из файла

Я пытаюсь получить очень хорошую таблицу журнала изменений в моем шаблоне, и я пытаюсь сделать это с помощью таблицы содержания (то есть запись в файл и последующее чтение из него). Это работает хорошо, однако это не позволяет мне (насколько я могу судить) записывать эти строки в РЕАЛЬНУЮ таблицу (то есть не toc, а как tabu или tabularx).

Кто-нибудь здесь может мне помочь с этим?

Вот что я попробовал:

\documentclass{article}
\usepackage{hyperref}
\usepackage{verbatim}
\usepackage{tabu}
\makeatletter
\newcommand{\l@changelogline[2]}{
    #2\\
}
\makeatother

\newcommand{\changelog}{
    %\csname @starttoc\endcsname{cl}%
    \begin{tabu} spread \textwidth {l l l X[l]}
        \csname @starttoc\endcsname{cl}%    
    \end{tabu}
}
\addcontentsline{cl}{changelogline}{V0.1 & 21-02-2018 & Foitn & Initial version}
\addcontentsline{cl}{changelogline}{V0.2 & 22-02-2018 & Foitn & Some kind of change}
\begin{document}
    asdf
    \bigskip
    \changelog
\end{document} 

Сейчас он выдает мне такую ​​ошибку:

Missing } inserted. ...18 & Foitn & Initial version}{1}{Doc-Start}
Missing \endgroup inserted. ...18 & Foitn & Initial version}{1}{Doc-Start}

решение1

Вот код, который я использовал для создания файла. Он не пишет в файл *.aux, а напрямую в \jobname.cl.

\documentclass{article}
\usepackage{hyperref}
\usepackage{verbatim}
\usepackage{tabu}
\makeatletter
\newwrite\@changelog
\newcommand*\changelog@filename{\jobname.cl}
\newcommand*\changelog
  {%
    \IfFileExists{./\changelog@filename}
      {%
        \begin{tabu} spread \textwidth {l l l X[l]}%
          \input{\changelog@filename}
        \end{tabu}%
      }{}%
  }
\newcommand*\changelog@contents{}
\newcommand*\addchangelogline[4]
  {%
    \xdef\changelog@contents
      {%
        \unexpanded\expandafter{\changelog@contents
          #1 & #2 & #3 & #4\string\\
        }%
      }%
  }
\AtEndDocument
  {%
    \immediate\openout\@changelog=\changelog@filename
    \immediate\write\@changelog{\changelog@contents}%
    \immediate\closeout\@changelog
  }
\makeatother
\addchangelogline{v0.1}{21-02-2018}{Foitn}{Initial version}
\addchangelogline{v0.2}{22-02-2018}{Foitn}{Some kind of change}
\begin{document}
  asdf
  \bigskip
  \changelog
\end{document} 

Рабочий способ использования \addtocontentsи т.п.:

\documentclass{article}
\usepackage{hyperref}
\usepackage{verbatim}
\usepackage{tabu}
\makeatletter
\newwrite\@changelog
\newcommand*\changelog@extension{cl}
\newcommand*\changelog@filename{}
\edef\changelog@filename{\jobname.\changelog@extension}
\newcommand*\changelog
  {%
    \IfFileExists{./\changelog@filename}
      {%
        \begin{tabu} spread \textwidth {l l l X[l]}%
          \input{\changelog@filename}
        \end{tabu}%
      }{}%
      \bgroup
      \renewcommand*\changelogline[4]{}%
      \@starttoc{\changelog@extension}%
      \egroup
  }
\newcommand*\changelog@contents{}
\newcommand*\changelogline[4]{#1 & #2 & #3 & #4\\}
\newcommand*\addchangelogline[4]
  {%
    \addtocontents{\changelog@extension}
      {\protect\changelogline{#1}{#2}{#3}{#4}}%
  }
%\show\@starttoc
\makeatother
\addchangelogline{v0.1}{21-02-2018}{Foitn}{Initial version}
\addchangelogline{v0.2}{22-02-2018}{Foitn}{Some kind of change}
\begin{document}
  asdf
  \bigskip
  \changelog
\end{document}

Связанный контент