LINUX.ORG.RU

LaTeX. Некорректно работает условие

 ,


0

1

Приветствую! Решил я тут в дизайн страниц документа поиграться. Проблема с отработкой условия. Мне нужно 4 вида водяных знака для документа, размещающихся следующим образом: 1 стр – без знаков, 2 стр – левый нижний угол, 3–(последняя-1) – левый нижний и левый верхний, последняя стр – левый верхний.

Задача на первый взгляд тривиальная. Накидал условия, а код работает не правильно. Условия работают корректно для 1, 2 и последней страницы. Для диапазона стр 3–(последняя-1) применяется водяной знак последней страницы. ЧЯДНТ?

\documentclass[a4paper,12pt, oneside]{extarticle}

\usepackage[main=russian, english]{babel}
\usepackage{tikz}
	\usetikzlibrary{shapes,calc}


\usepackage[dvipsnames]{xcolor}
\definecolor{OliveGreen}{HTML}{78AB24}

\usepackage{eso-pic}
\usepackage{etoolbox}

% Включаем отслеживание последней страницы
\usepackage{zref-user,zref-abspage}

% --- Водяной знак на фоне каждой страницы ---
\AddToShipoutPictureBG{%
	\ifnum\value{page}=1
	% Первая страница: ничего
	\else
	\ifnum\value{page}=2
	% Вторая страница
	\begin{tikzpicture}[remember picture, overlay]
		\foreach \i in {1,...,10}
		{
			\node[rounded corners,OliveGreen!99,draw,regular polygon,regular polygon sides=6, minimum size=\i cm,ultra thick, opacity=0.15] at ($(current page.south west)+(0,0)$) {} ;
		}
	\end{tikzpicture}%
	\else
	% Проверяем: последняя ли страница?
	\ifnum\value{page}=\value{abspage}
	% Последняя страница
	\begin{tikzpicture}[remember picture, overlay]
		\foreach \i in {1,...,10}
		{
			\node[rounded corners,OliveGreen!99,draw,regular polygon,regular polygon sides=6, minimum size=\i cm,ultra thick, opacity=0.15] at ($(current page.north west)+(0,0)$) {} ;
		}
	\end{tikzpicture}%
	\else
	% Страницы с 3 по предпоследнюю (т.е. page >= 3 и page < lastpage)
	\ifboolexpr{
		test {\ifnumgreater{\value{page}}{2}} and
		test {\ifnumless{\value{page}}{\value{abspage}}}
	}{
		\begin{tikzpicture}[remember picture, overlay]
			\foreach \i in {1,...,10}
			{
				\node[rounded corners,OliveGreen!99,draw,regular polygon,regular polygon sides=6, minimum size=\i cm,ultra thick, opacity=0.15] at ($(current page.north west)+(0,0)$) {} ;
			}
			
			\foreach \i in {1,...,10}
			{
				\node[rounded corners,OliveGreen!99,draw,regular polygon,regular polygon sides=6, minimum size=\i cm,ultra thick, opacity=0.15] at ($(current page.south west)+(0,0)$) {} ;
			}
		\end{tikzpicture}%
	}{} % пустое "else" — не нужно
	\fi
	\fi
	\fi
}
% ---

\usepackage{lipsum}


\begin{document}
	
	
	\lipsum[2-20]
	
	
\end{document}


А зачем ты делаешь \ifboolexpr{, если ты перед этим проверяешь, не первая ли страница, не вторая и не последняя? Все остальные будут с 3 по предпоследнюю, очевидно.

https://tex.stackexchange.com/questions/659534/how-to-make-abspagelast-work-as-the-number-of-total-pages

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

от отчаяния. Три вложенных if...else не срабатывали. Поэтому попробовал через \ifboolexpr{. Сейчас проблему решил. Дело было в некорректном определении номера последней страницы

arbyz
() автор топика
Ответ на: комментарий от TeopeTuK

Благодарю за наводку. Переписал без этих пакетов. Вопрос решил, но с миникостылём. Заработать конструкцию с laspage почему-то не получилось. Использовал костыль: последней странице поставил \label{finalpage}, а в условии использовал \ifnum\value{page}=\getpagerefnumber{finalpage}.

Кстати, всё руки не доходили написать. А можно ли взглянуть на исходники вот этого чуда? Или я с автором ошибся?

arbyz
() автор топика
Ответ на: комментарий от TeopeTuK

Буду ждать! Примеры очень интересные. Результат радует глаз. Да и популяризацией \LaTeX в русскоязычном сообществе занимается (прямо скажем) не очень много людей. Спасибо Вам за труд!

arbyz
() автор топика