LINUX.ORG.RU

LaTeX автоматически применять стиль для последней страницы

 


0

1

Не могу найти рабочий вариант автоматического применения кастомного стиля для последней страницы. Использую fancyhdr. Создал 3 стиля: для титульной, для обычных страниц, для последней страницы. Стили работают, проблем нет. Неудобство в том, что каждый раз нужно вручную искать последнюю страницу, чтобы применить стиль для последней страницы. Хочу, чтобы применялось автоматом. Нашел некую команду (макрос) \AtEndDocument{}, в которую засунул применения моего стиля - \AtEndDocument{\thispagestyle{lastpage}}, но стиль не применяется, хотя ошибок при компиляции нет. По описанию команда выполняется перед формированием содержания последней страницы, значит стиль должен применяться. Если есть какие-то альтернативные варианты, буду рад почитать.



Последнее исправление: Yorween (всего исправлений: 1)

Ответ на: комментарий от anonymous

Это я тут опечатался, спасибо. В документе \AtEndDocument{\thispagestyle{lastpage}}, но это не помогает.

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

Пробовал такой вариант. Не работает.

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

Работает \AtEndDocument{} (по крайней мере в простейшем случае):

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{lipsum}
\fancypagestyle{lastpage}{\fancyhead[C]{The last page}}
\AtEndDocument{\thispagestyle{lastpage}}
\begin{document}
\lipsum
\lipsum
\lipsum
\end{document}

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

Твой вариант работает потому, что абзац на последней странице не разрывается. Попробуй растянуть абзац на предпоследнюю и последнюю страницу. Тогда такой вариант уже не будет работать.

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

Заметил, что если установить в преамбуле \AtEndDocument{\thispagestyle{lastpage}}, а перед последней страницей сделать ручной разрыв, например, с \clearpage, то стиль применяется.

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

Так работает при разрыве абзаца с текстом на предпоследней и последней странице, но не работает с вынужденным переносом таблицы или изображения на последнюю страницу, если не умещается в конце предпоследней…

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

Тогда ой. Все, что автоматически переносится на следующую страницу (та же отложенная таблица), будет вставлено после \thispagestyle{lastpage}. Тогда только читать по ссылке от anonymous и применять технику из последнего ответа (zref-totpages). То есть, использовать один и тот же стиль для всех страниц и для последней, но в этом стиле менять вывод в зависимости от номера страницы.

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

Я последнего чела толком не понял. Он пишет про какие-то заморочки в латехе, что стили устанавливаются до того, как латех определил, что будет перенос страницы.

Если ты перенос на последнюю страницу руками делаешь, то получается же как надо?

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

Я так понял, что иногда перенос вручную не сделать никак (если переносится отложенная таблица, скажем).

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

Я не понимаю о чём ты. \clearpage все отложеные таблицы должен зафорсить и потом сделать новую страницу, к которой будет применён новый стиль. Мы не этого добиваемся?

anonymous
()
Ответ на: комментарий от Yorween

Ты покажи свои стили для обычной страницы и для последней страницы. Попробуем что-нибудь придумать, если они не слишком кардинально отличаются.

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

Они элементарные

\fancypagestyle{title}{ 
  \fancyhf{}
  \fancyfoot[C]{footer}
}
\fancypagestyle{main}{ 
  \fancyhf{}
  \fancyhead[C]{\thepage}
  \fancyfoot[C]{footer}
}
\fancypagestyle{lastpage}{ 
  \fancyhf{}
  \fancyhead[C]{\thepage}
}
Yorween
() автор топика
Ответ на: комментарий от anonymous

Опять же, насколько я понимаю, если есть отложенная таблица, то она попадает на последнюю страницу, и для этой страницы нужно применить спецстиль. Но при этом на этой странице вообще нет текста, соответственно некуда вставить \thispagestyle{lastpage}.

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

Тогда очень просто, прямо copy&paste из ответа в том треде: \usepackage{zref-totpages} и

\fancypagestyle{main}{ 
  \fancyhf{}
  \fancyhead[C]{\thepage}
  \fancyfoot[C]{\ifnum\value{page}=\ztotpages\else footer\fi}
}
Компилировать два раза.

TeopeTuK ★★★★
()
Последнее исправление: TeopeTuK (всего исправлений: 1)
Ответ на: комментарий от TeopeTuK

Мне кажется, должно быть не так, а

\fancypagestyle{main}{ 
  \fancyhf{}
  \fancyhead[C]{\thepage}
  \fancyfoot[C]{\ifnum\value{page}<\ztotpages\fi}
}

чтобы нижний колонтитул использовался, если страница не последняя. Но это все равно не работает.

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

В твоём варианте нижний колонтитул вообще всегда пустой. Свой я проверил с отложенной таблицей. Он сработал.

TeopeTuK ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.