У меня есть заголовки на каждой странице, которые используются \usepackage{fancyhdr}
во всем моем документе, и я хочу отключить их на определенных страницах с большими фигурами. Если я \thispagestyle{empty}
правильно использую его, заголовок удаляется, но только на случайной странице. Я думал, что могу применить эффект к нужной странице, поместив \newpage
прямо перед моей фигурой и затем используя \thispagestyle{empty}
, но результат все тот же. Мне нужно создать новый .tex
только для фигуры или есть более простой способ сделать это?
В моем main.tex
документе есть \begin{document}
, а затем \pagestyle{fancy}
,
\fancyfoot{}
,
\lhead{\thepage}
,
\rhead{\nouppercase{\rightmark}}
,за которым следуют различные .tex
документы. Глядя на определенный .tex
документ, у меня есть много текста с графикой, вставленной следующим образом:
\begin{figure}
\centering
\hbox{\hspace{-15mm} \includegraphics[scale=0.9]{my-image}}
\caption{my caption}
\label{myfigure}
\end{figure}
Я пробовал ставить \newpage
following by \thispagestyle{empty}
прямо перед изображением, но оно применяет его к неправильной странице. Я также пробовал, \clearpage
как предлагалось в комментариях, но произошло то же самое.
решение1
Похоже, это работает (хотя мы не знаем ваших \documentclass
или каких-либо других решений, полученных методом проб и ошибок):
\documentclass{article}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{lipsum} % For text
\begin{filecontents}[overwrite]{chapter1.tex}
\clearpage
\thispagestyle{empty}
\begin{figure}[p]
\centering
\hbox{\hspace{-15mm} \includegraphics[scale=0.9]{example-image-a}}
\caption{my caption}
\label{myfigure}
\end{figure}
\end{filecontents}
\fancyhead{}
\fancyfoot{}
\fancyhead[L]{\thepage}
\fancyhead[R]{\nouppercase{\rightmark}}
\renewcommand{\headrulewidth}{0pt}
\pagestyle{fancy}
\begin{document}
\section{Test}
\lipsum[1-8]
\include{chapter1}
\lipsum[1-8]
\end{document}
Приведенные ниже части filecontents
— это всего лишь пример одного из .tex
созданных мной файлов.
Чтобы разместить номер страницы на [p]
странице, используйте это:
\documentclass{article}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{lipsum} % For text
\begin{filecontents}[overwrite]{chapter1.tex}
\clearpage
\thispagestyle{floatp}
\begin{figure}[p]
\centering
\hbox{\hspace{-15mm} \includegraphics[scale=0.9]{example-image-a}}
\caption{my caption}
\label{myfigure}
\end{figure}
\end{filecontents}
\fancyhead{}
\fancyfoot{}
\fancyhead[L]{\thepage}
\fancyhead[R]{\nouppercase{\rightmark}}
\renewcommand{\headrulewidth}{0pt}
% ------------ Added
\fancypagestyle{floatp}{%redefining plain pagestyle
\fancyfoot{}
\fancyhead{}
\fancyfoot[R]{\thepage} % Page number in bottom right
}
\pagestyle{fancy}
\begin{document}
\section{Test}
\lipsum[1-8]
\include{chapter1}
\lipsum[1-8]
\end{document}
решение2
А как насчет \floatpagestyle{empty}
использования только [p]
для больших поплавков?
См. также \rotfloatpagestyle
и \thisfloatpagestyle
в руководстве по floatpag
упаковке.
Обратите внимание также, чтоfancyhdr
обеспечивает
\iffloatpage{
значение для плавающей страницы}{
значение для других страниц}
.
\documentclass[twoside]{article}
\usepackage{graphicx}
\usepackage{floatpag}\floatpagestyle{empty}
\usepackage{lipsum}
\usepackage{fancyhdr}
\pagestyle{fancy}
\begin{document}
\section{foo1}\subsection{foo}\lipsum[1]
\section{foo}\subsection{foo}\lipsum[1]
\section{foo}\subsection{foo}\lipsum[1-2]
\begin{figure}[h]\includegraphics[]{example-image-9x16}\caption{foo}\end{figure}
\section{foo}\subsection{foo}\lipsum[1]
\begin{figure}[p]\centering\includegraphics[]{example-image-9x16}\caption{foo}\end{figure}
\section{foo}\subsection{foo}\lipsum[1]
\section{foo}\subsection{foo}\lipsum[1]
\end{document}
решение3
Необходимо, чтобы директива \pagestyle{empty}
была выдана после отправки страницы, на которой размещен рисунок.
В последней версии LaTeX вы можете использовать хук
shipout/after
для выполнения кода сразу после того, как LaTeX отправил какую-то страницу. (Согласно\changes
записям вltshipout.dtx(Этот крючок был добавлен 8 января 2021 года.)Вы можете использовать пакетzrefдля хранения и извлечения значения так называемого «абсолютного номера страницы» страницы, на которой LaTeX размещает рассматриваемый рисунок.
Кроме того, вы можете определить макрос
\CodeAfterShipoutOfAbsolutePage
, в котором можно указать абсолютный номер страницы и некоторый код, чтобы к хуку добавлялись директивыshipout/after
для выполнения кода только после отправки страницы, абсолютный номер которой имеет указанное значение.В примере ниже абсолютный номер страницы может быть указан с помощью вычислений TeX, которые могут включать доступ к zref-метке. Поэтому в примере ниже
\CodeAfterShipoutOfAbsolutePage
принимает не только два аргумента, а три аргумента, один из которых обозначает разделенный запятыми список zlabels, которые должны быть определены для спецификации абсолютного номера страницы. Если один из этих zlabels не определен, как в любом случае в случае 1-й компиляции, код также не будет выполнен.!! Таким образом, необходимо как минимум две компиляции, чтобы все совпало. !!
Итак, синтаксис \CodeAfterShipoutOfAbsolutePage
:
\CodeAfterShipoutOfAbsolutePage
{<comma-list of zref-labels that must exist for the code to be carried out>%
% Here you specify both those zref-labels that are needed for the
% <expression for computing the absolute page number of the page after
% whose shipping-out code shall be carried out> to work out and probably
% also those zref-labels that are needed for the <code to carry out after
% the page has been shipped out> to work out.
}%
{<expression for computing the absolute page number of the page after
whose shipping-out code shall be carried out>}%
{<code to carry out after the page has been shipped out>%
% Be aware that you cannot use this for adding visible material
% or glue to a page. You can use this only for doing abstract actions
% like calculations or directives like `\thispagestyle{...}`.
}%
Вот минимальный рабочий пример.
В примере shipout/after
используется крючок.
Согласно\changes
-записям вltshipout.dtxэтот хук был добавлен 8 января 2021 года.
Таким образом, пример определенно не работает с выпусками LaTeX до 8 января 2021 года, но с такими более ранними выпусками LaTeX вы не получите сообщений об ошибках!
Это потому, что назначение кода хуку, который не существует в том смысле, что его использование не реализовано, не вызывает предупреждений или сообщений об ошибках. Пример работает, например, с TeX Live 2022. Таким образом, он компилируется, например, с помощьюНа оборотеесли в меню Overleaf выбран TeX Live 2022.
\NeedsTeXFormat{LaTeX2e}[2021/01/08]
% (According to \changes-entry in ltshipout.dtx the hook
% shipout/after was added in January 8, 2021.)
\makeatletter
\RequirePackage[abspage]{zref}
\ExplSyntaxOn
%...............................................................................
% Save the value of abspage-counter to a zref-label:
%...............................................................................
\cs_new_protected:Npn \saveabspage #1 {\zref@labelbyprops{#1}{abspage}}
%...............................................................................
% Obtain the saved abspage-counter-value from zref-label if possible, otherwise
% deliver -1:
%...............................................................................
\cs_new_protected:Npn \getabspage #1 {\zref@extractdefault{#1}{abspage}{-1}}
%...............................................................................
% Map over comma-list #1 denoting zref-labels and execute code #2 in case all of
% them are defined, otherwise execute code #3; this is for doing calculations
% with zref-labels which can only be done in case all of them are defined:
%...............................................................................
\cs_new:Npn \CheckWhetherAllZlabelsDefined #1
{
\exp:w
\clist_map_function:nN {#1} \mystuff_checkzlabel:nwnn
\exp_after:wN\exp_end:\use_i:nn
}
\cs_new:Npn \mystuff_checkzlabel:nwnn #1#2 \exp_after:wN\exp_end:\use_i:nn #3#4
{
\int_compare:nNnTF {\getabspage{#1}}={-1}
{#2 \exp_after:wN\exp_end:\use_i:nn {#4}}
{#2 \exp_after:wN\exp_end:\use_i:nn {#3}}{#4}%
}
%...............................................................................
% Map over comma-list denoting zref-labels and generate warning for each
% undefined zref-label:
%...............................................................................
\cs_new_protected:Npn \WarnForUndefinedZlabels #1
{
\clist_map_function:nN {#1}\zref@refused
}
%...............................................................................
% Provide code to execute on background-picture-environment of page whose
% absolute page number is to be specified:
%...............................................................................
\cs_new_protected:Npn \CodeAfterShipoutOfAbsolutePage#1#2#3{
% #1 = comma-list of zref-labels that must exist for the code (#3) to be
% carried out.
% #2 = expression for computing the absolute page number of the page
% after whose shipout the code #3 shall be carried out:
% #3 = code to carry out after shipping out the specified page
\AddToHook{shipout/after}{
\WarnForUndefinedZlabels{#1}
\int_compare:nNnT {\CheckWhetherAllZlabelsDefined{#1}{#2}{-1}}
=
{\value{abspage}}
{#3}
}
}
\ExplSyntaxOff
\makeatother
\documentclass{article}
\usepackage{lipsum}
\pagestyle{headings}
\CodeAfterShipoutOfAbsolutePage{Some ABS label}%
{\getabspage{Some ABS label}-1}%
{\thispagestyle{empty}}%
\begin{document}
\section{Some headings}
\subsection{Some more headings}
\lipsum{1-2}
\begin{figure}
\noindent\rule{\textwidth}{.6\textheight}
\caption{Some figure}\saveabspage{Some ABS label}
\end{figure}
\lipsum{3-18}
\end{document}
(Недостатком является то, что вы не можете использовать это для изменения первой страницы, поскольку до нее не будет страницы, после отправки которой можно было бы что-то сделать.)