私は論文を執筆中で、独自の付録コマンドを定義しました (急いでいるので、もっと良い方法があるかもしれません)。現在、私を悩ませているのは、付録のリストを文書に 2 回含める必要があることです。1 回は ToC、LoF、LoT がある実際の論文の開始前、もう 1 回は付録の前の最後に追加します。
しかし、うまくいきません。何かが足りないのでしょうか?
注: 要求された書式設定を取得するためにセクション コマンドを再定義しました。これは、同じ書式設定を取得するためにマクロでセクション コマンドを使用する理由でもあります\priloga
。さらに、セクション カウンターをアルファベット順に更新する必要がありました。
MWE:
\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
(内部的にすべてのリストを読み取るために使用される... ファイルは、リストを表示するために既存のファイルを入力しますが、この実行の新しいリストの収集を開始するために書き込み用にファイルを開くため、ファイルが消去され、2 回使用できなくなることです。
これは、コマンドをローカルで再定義して入力のみを行うようにし、書き込み用にファイルを開くようにはしません。コマンドが付録の前に再度発行され、その時点でファイルが開かれている限り、これは安全です。
\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
David は、最初のアプローチがうまくいかなかった理由をすでに説明しています。別の解決策として、別のコマンド\listofprilogei
(拡張子付きの外部関連ファイル.pri
) を定義します。また、元のコードで hbox がいっぱいになる原因となっていたコマンドの問題も修正しました\hspace
。新しいコマンドは、\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}
数式モードのスペース コマンド \; を使用しているため、エラーが発生します。私のコードでは、代わりに通常の単語間スペースを使用しました。