条件式で総ページ数を使用するにはどうすればよいでしょうか?

条件式で総ページ数を使用するにはどうすればよいでしょうか?

文書が1ページか複数ページかによって、異なるフッターやページスタイルを設定したいのですが。私はTeXプログラミングの経験があまりないので、答えは「引数が etoolbox を使用したコマンドの結果である場合に引数を文字列と比較する」についてあまり役に立たなかったし「\edef、\noexpand、\expandafter はいつ使用すればよいですか?」初めてなので少し複雑です。

これを試してみましたが、うまくいきませんでした:

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{lastpage}
\begin{document}

\expandafter\ifstrequal{\pageref*{LastPage}}{1}{
  \pagestyle{empty}
  }{
  \pagestyle{plain}}

\lipsum[2-3]

\end{document}

実験を続けるかもしれません。

誰か、これを実行する良い方法を教えてもらえませんか?

答え1

代わりにパッケージlastpageを使用することもできますtotcount

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{totcount}
\regtotcounter{page}

\begin{document}

\ifnumcomp{\totvalue{page}}{>}{1}{\pagestyle{plain}}{\pagestyle{empty}}

\lipsum[2]

\end{document}

ここに画像の説明を入力してください

これを安定させるには 2 回のコンパイル実行が必要です。

答え2

ドキュメントのページ番号に関しても同じ問題があり、いくつかの解決策を見つけました。

ウルリケ・フィッシャーの回答からコードを借りてこの質問このマクロを定義することができました:

\documentclass{article}
\usepackage{lipsum,ifthen}
\usepackage[lastpage]{zref}

\makeatletter
\zref@newprop*{numpage}{\the\value{page}}
\zref@addprop{main}{numpage}
\newcommand{\oneormorepages}%
    {\ifthenelse{\zref@extractdefault{LastPage}{numpage}{1}>1}%
        {\thispagestyle{plain}}%
        {\thispagestyle{empty}}%
    }
\makeatother

\title{Test}
\author{Test Testson}

\begin{document}
\maketitle
\oneormorepages
\lipsum[1-60] %More than one page
%\lipsum[1]   % One page
\end{document}

今日まで使用してきた結果は次のとおりです。私は、他の目的で「実際の」ドキュメントにロードするパッケージであるfrom を\maketitle使用して、オンザフライでパッチを適用します。\patchcmdetoolbox

\documentclass{article}
\usepackage{lipsum,etoolbox}

%% No page number  if the document ai a onepager
\makeatletter
\AtEndDocument{%
  \ifnum\value{page} > \@ne
    \immediate\write\@auxout{\global\let\string\@multipage\relax}%
  \fi
}
\newcommand*{\oneormorepages}{%
    \ifdefined\@multipage
        \thispagestyle{plain}%
    \else
        \thispagestyle{empty}%
    \fi
 }
\patchcmd{\maketitle}
    {\thispagestyle{plain}}%
    {\oneormorepages}{}{}
%% Change `plain` to `title` if you are using a `memoir` class
\makeatother

\title{Test}
\author{Test Testson}

\begin{document}
\maketitle
\lipsum[1-60] % More than one page
%\lipsum[1]   % One page
\end{document}

egreg が以下のコメント (および元の回答へのコメント) で強調しているように、このソリューションは 100% 確実というわけではありません (例: では動作しませんscrartcl)。jfbu が指摘したエラーを修正しました。

今日、私はパッチを当てる必要のない2つの追加の解決策を見つけることができました.:

の議論に基づいてこの質問そしてこの答え別の質問に対して、私は追加のパッケージを必要とせず、KOMAscript と標準クラスで動作する実用的なソリューションを作り上げました。これは に耐えます。egreg が指摘したように、これはまだ絶対確実ではありませんが、 - バンドルから- および- パッケージ\pagenumbering{Roman}をロードし、それらのパッケージのコマンドを使用することでテストを延期しようとしました。すると、テストは失敗します。したがって、以下の MWE については を信頼する必要があります。atendviatveryendoberdiek\AtEndDocument

MWE は次のとおりです。

\documentclass{article}
\usepackage{lipsum}
\makeatletter % You may remove this line if you change\@ne to 1
\AtEndDocument{\ifnum\value{page]=\@ne\thispagestyle{empty}{}\fi} % survives `\pagenumbering{Roman}`
\makeatother % You may remove this line if you change\@ne to 1
\title{Test}
\author{Test Testson}

\begin{document}
\maketitle
\lipsum[1]
\lipsum[1-6] % Turn on/off this line...
\end{document}

ローマ数字が必要な場合は、zref-totpagesテストをロードして次のように変更することもできます。

\AtEndDocument{\ifnum\ztotpages=\@ne\thispagestyle{empty}{}\fi}

に基づくこの答え、および を使用した解決策を見つけましたがscrartcl、これも に耐えます。テストのおよび部分にコードを追加することもできます。scrpage2zref-totpages\pagenumbering{Roman}falsetrue

\documentclass{scrartcl}
\usepackage{zref-totpages,lipsum,scrpage2}
\pagestyle{scrplain}
\clearscrheadfoot
% You may use \@ne instead of 1 if you enclose the line in a `\makeatletter\makeatother`
\cfoot[\ifnum\ztotpages=1 \else\pagemark\fi]{\pagemark}

\begin{document}

\lipsum[1] % automatically remove page number in a document with this line
%\lipsum[1-6] % automatically keep page numbers in a document with this line
\end{document}

役に立つと幸いです。

関連情報