Вставьте список элементов дважды в документ

Вставьте список элементов дважды в документ

Я пишу свою диссертацию и определил свою собственную команду приложения (я действительно делаю это в спешке, так что, возможно, есть способы сделать это лучше). Что меня беспокоит сейчас, так это то, что мне нужно включить список приложений дважды в документ, один раз перед началом настоящей диссертации, где находятся ToC, LoF и LoT, а затем дополнительно в конце перед приложениями.

Но это не работает. Где я что-то упускаю?

ПРИМЕЧАНИЕ: Я переопределил команду section, чтобы получить запрошенное форматирование, это также причина использования команды section в \prilogaмакросе, чтобы получить то же форматирование. Кроме того, мне пришлось обновить счетчик секционирования, чтобы он был алфавитным.

МВЭ:

\documentclass[a4paper,onecolumn,11pt,twoside]{article}
\usepackage{lipsum}

\usepackage{tocloft}
\newcommand{\listprilogename}{\normalsize SEZNAM PRILOG}
\newlistof{priloge}{pr}{\listprilogename}

\newcommand{\prilogalist}[1]{\refstepcounter{priloge}\addcontentsline{pr}{priloge}
{\protect\numberline{Priloga\;\Alph{priloge}}\hspace{1.6cm}#1}\par}

\newcommand{\priloga}[1]{\prilogalist{#1}\section{#1}}

\usepackage{titlesec}
\titleformat{\section}{\normalfont\normalsize\bfseries}{\thesection}{1em}{}
\titlespacing*{\section}{0pt}{*0.2}{*0.05}

\begin{document}

\clearpage
\section*{List of Appendices}
\listofpriloge 

\section{Introduction}
\lipsum

\clearpage
\section*{Appendices}
\listofpriloge %this command doesn't print anything :S

\setcounter{section}{0}
\renewcommand\thesection{\Alph{section}}

\clearpage
\priloga{Additional content}
\lipsum[1-5]

\end{document}

решение1

Проблема в том, что \@starttoc(используется внутренне для чтения всего списка... файлов) вводит существующий файл, чтобы отобразить список, но открывает его для записи, чтобы начать собирать новый список для этого запуска. Это стирает файл, поэтому вы не можете использовать его дважды.

Это просто локально переопределяет команду только для ввода, а не для открытия файла для записи. Это безопасно, пока команда выдается снова перед вашими приложениями, так что файл открыт в этой точке.

\documentclass[a4paper,onecolumn,11pt,twoside]{article}
\usepackage{lipsum}

\usepackage{tocloft}
\newcommand{\listprilogename}{\normalsize SEZNAM PRILOG}
\newlistof{priloge}{pr}{\listprilogename}

\newcommand{\prilogalist}[1]{\refstepcounter{priloge}\addcontentsline{pr}{priloge}
{\protect\numberline{Priloga\ \Alph{priloge}}\hspace{1.6cm}#1}\par}

\newcommand{\priloga}[1]{\prilogalist{#1}\section{#1}}

\usepackage{titlesec}
\titleformat{\section}{\normalfont\normalsize\bfseries}{\thesection}{1em}{}
\titlespacing*{\section}{0pt}{*0.2}{*0.05}

\begin{document}

\clearpage
\section*{List of Appendices}

{\expandafter\def\csname @starttoc\endcsname#1{\InputIfFileExists{\jobname.#1}{}{}}%
\listofpriloge 
}



\section{Introduction}
\lipsum

\clearpage
\section*{Appendices}
\listofpriloge %this command doesn't print anything :S

\setcounter{section}{0}
\renewcommand\thesection{\Alph{section}}

\clearpage
\priloga{Additional content}
\lipsum[1-5]

\end{document}

решение2

Дэвид уже объяснил, почему ваш первоначальный подход не сработал. Вот еще одно возможное решение — определение другой команды \listofprilogei(с внешним связанным файлом с .priрасширением). Я также исправил проблему с \hspaceкомандами в вашем исходном коде, которые вызывали переполнение hboxes. Новую команду \listofprilogeiможно безопасно использовать в любой точке документа:

\documentclass[a4paper,onecolumn,11pt,twoside]{article}
\usepackage{lipsum}
\usepackage{tocloft}
\usepackage{titlesec}

\titleformat{\section}
  {\normalfont\normalsize\bfseries}{\thesection}{1em}{}
\titlespacing*{\section}
  {0pt}{*0.2}{*0.05}
\newcommand{\listprilogename}{\normalsize SEZNAM PRILOG}
\newlistof{priloge}{pr}{\listprilogename}

\newlistentry{prilogi}{pr}{1}
\newlistentry{prilogii}{pri}{1}
\makeatletter
\renewcommand*\l@priloge{\@dottedtocline{1}{0em}{5.3em}}
\renewcommand*\l@prilogii{\@dottedtocline{1}{0em}{5.3em}}
\makeatother

\newcommand{\prilogalist}[1]{%
  \refstepcounter{priloge}%
  \addcontentsline{pr}{priloge}{\protect\numberline{Priloga\ \Alph{priloge}}#1}\par
\addcontentsline{pri}{priloge}
{\protect\numberline{Priloga\ \Alph{priloge}}#1}\par}

\newcommand{\priloga}[1]{\prilogalist{#1}\section{#1}}

\makeatletter
\renewcommand\contentsname{\listprilogename}
\newcommand\listofprilogei{%
    \section*{\contentsname
        \@mkboth{%
           \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
    \vskip10pt\@starttoc{pri}%
    }
\makeatother

\begin{document}

\clearpage
\section*{List of Appendices}
\listofpriloge 

\section{Introduction}
\lipsum

\clearpage
\section*{Appendices}
\listofprilogei

\setcounter{section}{0}
\renewcommand\thesection{\Alph{section}}

\clearpage
\priloga{Additional content}
\lipsum[1-5]
\clearpage
\priloga{Some additional content}
\lipsum[1-5]

\end{document}

Кстати, эта строка вашего кода

\newcommand{\prilogalist}[1]{\refstepcounter{priloge}\addcontentsline{pr}{priloge}
{\protect\numberline{Priloga\;\Alph{priloge}}\hspace{1.6cm}#1}\par}

выдает ошибки, так как вы используете команду пробела математического режима \;. В моем коде я использовал обычный межсловный пробел.

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