2015-04-18 5 views
0

Я использую пакет everypage. Используя команду \ AddEverypageHook, я могу повторять действия в начале каждой страницы документа. Теперь я хочу сделать что-то вроде этого:Как проверить латекс, начнется ли новая глава на текущей странице?

\AddEverypageHook{ 
    \if "New chapter starts at current page." - "Do stuff." 
    \else "Do other stuff." 
    \fi 
} 

Как я могу проверить в латексе, начинается ли новая глава в текущей странице?

+1

Возможно, проще всего использовать макрос '\ chapter', а не проверять на каждой странице. Что вы хотите сделать именно так? – Werner

+0

Привет, Вернер. Я добавил на каждую страницу индекс цветного большого пальца (это причина для каждого пакета). Это работает очень хорошо.Однако я хочу, чтобы его внешний вид был другим для страниц, содержащих строку «глава X». –

+0

@ Werner: Поскольку я не знаю, будет ли какой-либо другой код переопределять макрос главы где-нибудь, опасно ли это сделать снова? –

ответ

2

В типичном документе после команды \chapter выполняется автоматическая разрывы страниц. Например, посмотрим, что \chapter делает в report.cls:

\newcommand\chapter{\[email protected]\cleardoublepage\else\clearpage\fi 
        \thispagestyle{plain}% 
        \global\@topnum\[email protected] 
        \@afterindentfalse 
        \secdef\@chapter\@schapter} 

Он выдает \clearpage (или \cleardoublepage), гиперемия все, что в ожидании, и, начиная с новой страницы.

Таким образом, в зависимости от настроек, может быть достаточно, чтобы использовать afterpage package «s \afterpage{<stuff>} макрос для выполнения <stuff>после текущей страницы. Например, в вашей преамбуле, вы

\let\oldchapter\chapter % Store \chapter 
\renewcommand{\chapter}{% Redefine \chapter to... 
    \afterpage{\customcommand}% ...execute \customcommand after this page 
    \oldchapter} 

Конечно, это будет иметь смысл только если вы что-нибудь еще на не-главе страниц не выполняются, так как условие связано с \chapter. Таким образом, для принятия решения по всему документу на уровне для каждой страницы может потребоваться несколько иной подход.

Я бы предложил использовать макрос \chapter, но с использованием условного. Вот пример (нажмите, чтобы увеличить):

enter image description here

\documentclass{report} 
\usepackage{lipsum,afterpage,everypage} 

\newcounter{chapterpage}% For this example, a chapterpage counter 
\newcounter{regularpage}% For this example, a regularpage counter 
\newif\ifchapterpage% Conditional used for a \chapter page 
% Just for this example, print page number using: 
\renewcommand{\thepage}{\LARGE\thechapterpage--\theregularpage} 

\AddEverypageHook{ 
    \ifchapterpage % If on a \chapter page... 
    \stepcounter{chapterpage}% Increase chapterpage counter 
    \global\chapterpagefalse% Remove conditional 
    \else % ...otherwise 
    \stepcounter{regularpage}% Increase regularpage counter 
    \fi 
} 
\let\oldchapter\chapter % Store \chapter 
\renewcommand{\chapter}{% Redefine \chapter to... 
    \afterpage{\global\chapterpagetrue}% ... set \ifchapterpage to TRUE _after_ this page 
    \oldchapter} 

\begin{document} 

\chapter{First chapter}\lipsum[1-50] 
\chapter{Second chapter}\lipsum[1-50] 
\chapter*{Third chapter}\lipsum[1-50] 
\chapter{Final chapter}\lipsum[1-50] 

\end{document} 

Преимущество описанного выше способа является то, что он работает как \chapter и \chapter*. \chapter* не увеличивает счетчик chapter, и поэтому недостаточно полагаться на условие, основанное на таком сравнении.

0

У меня есть решение. Идея состоит в том, чтобы проверить, изменился ли счетчик chapternumber. Это делается с помощью пользовательского счетчика:

\newcounter{CurrentChapNum} 
  • если глава счетчик не изменится, мы все еще в текущей главе, так что \ customcommand1 вещи.
  • Если счетчик изменился, мы, похоже, находимся в начале новой главы, так что \ customcommand2 stuff и сбросьте CurrentChapNum-счетчик на значение текущей главы.

Это делается с помощью этого кода.

\AddEverypageHook{ 
    \ifnum\value{chapter}=\value{CurrentChapNum} \customcommand1 
    \else \customcommand2 \setcounter{CurrentChapNum}{\value{chapter}} 
    \fi 
} 

Поскольку я совершенно новичок в материалах с латексной разметкой, я надеюсь, что это не слишком неуклюже.

+0

Это использование должно быть прекрасным, если вы не используете '\ chapter *'. Я добавил [ответ] (http://stackoverflow.com/a/29733183/914686), обращаясь к этому. – Werner

 Смежные вопросы

  • Нет связанных вопросов^_^