在文件中插入元素列表兩次

在文件中插入元素列表兩次

我正在寫我的論文並定義了我自己的附錄命令(我真的很著急,所以可能有辦法做得更好)。現在困擾我的是,我必須在文件中包含兩次附錄列表,一次是在真正的論文開始之前,即 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原始程式碼中導致 hbox 過滿的命令的問題。新命令\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}

由於您使用的是數學模式間距命令 \;,因此會產生錯誤。在我的程式碼中,我使用了普通的詞間空間。

相關內容