文書が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
使用して、オンザフライでパッチを適用します。\patchcmd
etoolbox
\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 については を信頼する必要があります。atendvi
atveryend
oberdiek
\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
、これも に耐えます。テストのおよび部分にコードを追加することもできます。scrpage2
zref-totpages
\pagenumbering{Roman}
false
true
\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}
役に立つと幸いです。