
我正在寫我的論文並定義了我自己的附錄命令(我真的很著急,所以可能有辦法做得更好)。現在困擾我的是,我必須在文件中包含兩次附錄列表,一次是在真正的論文開始之前,即 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}
由於您使用的是數學模式間距命令 \;,因此會產生錯誤。在我的程式碼中,我使用了普通的詞間空間。