РЕДАКТИРОВАТЬ

РЕДАКТИРОВАТЬ

Я работаю над длинным документом со многими главами, используя класс report.

Я хотел бы иметь три разных версии определенных заголовков разделов (длинный для документа, средний для оглавления и короткий для заголовка). Я использую пакетfancyhdr , поэтому я следовал инструкциям в хорошемЧасто задаваемые вопросы(также дано в этом вопросе:Как использовать краткое название подраздела в заголовке, но не в оглавлении?).

\section[TOC_title]{Full_title\sectionmark{Header_title}}
\sectionmark{Header_title}

(Я полагаю, что идея заключается в том, что внутренний заголовок sectionmarkотвечает за страницу, с которой начинается раздел, а внешний — за последующие страницы.)

Все это работало отлично. Однако, поскольку мой документ имеет двойной интервал, я также titlesecсокращал некоторые пробелы вокруг названий глав и разделов.

Теперь я получаю заголовок TOC_title на странице, на которой начинается раздел (неправильный), а затем (правильный) заголовок Header_title на последующих страницах. Очевидно, я хотел бы это исправить.

Я подозреваю, что fancyhdrэто плохая идея в долгосрочной перспективе, и мне следует перейти на другой пакет заголовков, но я не хочу возиться с текущим документом. Я также не хочу отказываться от него titlesecпрямо сейчас, потому что он действительно очень помог с двойным пробелом, и проблема, с которой я столкнулся, незначительна по сравнению с этим.

Есть ли способ исправить это с помощьюtitlesec ? Я пробовал читатьдокументацияно я совсем запутался. Я был бы очень благодарен, если бы кто-то, кто уже знает этот пакет, мог что-то подсказать.

Этот вопрос уже задавался ранее вКак поместить короткий заголовок в заголовок, а длинный заголовок в оглавление (конфликт пакета titlesec с sectionmark)?. Но единственный ответ предполагает KOMA-script; подозреваю, что это какое-то другое семейство пакетов, которое я сейчас изучать не буду.

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

ОБНОВЛЕНИЕ (1 мая 2015 г.): Вот минимальный рабочий пример. Заголовок Ponysec на первой странице верен, если \usepackage{titlesec} закомментирован, и не иначе. Заголовок Carouselsec использует минихак Ульрике Фишера и работает в любом случае.

\documentclass{report}
\usepackage{fancyhdr}
\usepackage{titlesec}
\newcommand{\funnysection}[3]
     {\let\orisectionmark\sectionmark
     \renewcommand\sectionmark[1]{}%
     \section[{#2}]{{#1}\orisectionmark{{#3}}}
     \orisectionmark{{#3}}
     \let\sectionmark\orisectionmark}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% BEGIN DOCUMENT    %%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\tableofcontents
\pagestyle{fancy}

\chapter{Mychapter}
\section{Cactussec (UNIVERSION)}
No header on this page.
\clearpage
\section[Ponysec (TOC)]{Ponysec (main)\sectionmark{Ponysec (header)}}
\sectionmark{Ponysec (header)} 
Desired header here is "Ponysec (header)".
\clearpage
Desired header here is "Ponysec (header)".
\clearpage
\funnysection{Carouselsec (main)}{Carouselsec (TOC)}{Carouselsec (header)}
Desired header here is "Carouselsec (header)".
\clearpage
Desired header here is "Carouselsec (header)".
\end{document}

Если правильным решением (для меня, который толком не знает, что означает KOMA/KONA/script, но все же хочет создавать приличные наборные документы сегодня, на этой неделе, в этом месяце, несмотря на это массовое невежество) является использование titlepsвместо fancyhdr, я все равно хотел бы узнать, как это сделать.

решение1

Чтобы обмануть titlesec, можно попробовать сделать что-то вроде этого:

\let\orisectionmark\sectionmark
\renewcommand\sectionmark[1]{}%
\section[TOCtitle]{Fulltitle\orisectionmark{Headertitle}}
\orisectionmark{Headertitle}
\let\sectionmark\orisectionmark

РЕДАКТИРОВАТЬ

Некоторые замечания относительно комментариев: Вы не привели минимальный пример, поэтому большая часть была догадками. titlesec вызывает внутренне \sectionmark{TOCtitle}так рано, что ваши собственные \sectionmarkкоманды слишком поздние. Поэтому я переопределяю \sectionmarkна ничего, чтобы titlesec больше не мог устанавливать отметку и использовать копию \orisectionmarkдля установки ваших отметок. Замена средних \orisectionmark' на\sectionmark shouldнетработа — в конце концов, команда определена так, чтобы ничего не делать.

Я не знаю, почему вы не хотите использовать KONA-классы, но imho решение с titlesec будет включать отказ от fancyhdr и использование titleps вместо этого. Я вполне уверен, что Хавьер реализовал где-то способ правильной установки меток, но, как вы уже поняли, его документацию нелегко читать, а поиск того, что работает, часто требует множества проб и ошибок и чтения кода.

решение2

Используя KOMA-script, проблем бы не было :-)

\documentclass[headings=optiontoheadandtoc]{scrartcl}
\usepackage[automark]{scrlayer-scrpage}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\section[tocentry={platypus dancing till morning},%
head={dancing platypus}]%
{The platypus went on dancing till the mornig sun rose
over the hills}
\blindtext[5]
\end{document}

annaTocHeadTitles

Связанный контент