조건식에서 총 페이지 수를 어떻게 사용합니까?

조건식에서 총 페이지 수를 어떻게 사용합니까?

문서의 페이지가 하나 이상인지 여부에 따라 바닥글이나 페이지 스타일을 다르게 하고 싶습니다. 나는 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

문서의 페이지 번호와 관련하여 동일한 문제가 있으며 몇 가지 해결책을 찾았습니다.

Ulrike Fisher의 답변에서 일부 코드를 빌려서이 질문나는 이 매크로를 정의할 수 있었습니다:

\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가 지적한 오류를 수정했습니다.

오늘은 패치가 필요 없는 두 가지 추가 솔루션도 찾을 수 있었습니다..:

의 논의를 바탕으로이 질문그리고이 답변또 다른 질문으로는 추가 패키지가 필요하지 않고 KOMAscript 및 표준 클래스에서 작업하는 작업 솔루션을 함께 만들었습니다. 그것은 살아남는다 \pagenumbering{Roman}. egreg가 지적한 것처럼 아직 완벽한 것은 아니지만 -bundle 에서 atendvi- 및 -패키지를 로드 하고 해당 패키지의 명령을 사용하여 테스트를 연기해 보았습니다. 그런 다음 테스트가 실패합니다. 따라서 아래 MWE의 경우 .atveryendoberdiek\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}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}

유용하길 바랍니다.

관련 정보