編輯

編輯

我正在使用報告類編寫一份包含許多章節的長文檔。

我想要某些部分標題的三個不同版本(長為文檔,中為目錄,短為標題)。我正在使用 package fancyhdr,所以我按照很好的說明進行操作常問問題(在這個問題中也給了:如何在標題中使用短小節標題但不在目錄中使用?)。

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

(我認為這個想法是內部標題sectionmark負責該部分開始的頁面,外部標題處理後續頁面。)

這一切都運作良好。但是,因為我的文件是雙倍行距,所以我也習慣titlesec縮小章節標題周圍的一些空白。

現在,我在該部分開始的頁面上獲得 TOC_title 標題(錯誤),然後在後續頁面上獲得(正確的)Header_title 標題。顯然我想解決這個問題。

我懷疑從fancyhdr長遠來看這是一個壞主意,我應該切換到另一個標頭包,但我不想弄亂當前的文件。我現在也不想放手,titlesec因為它確實對雙倍空白有很大幫助,而且相較之下,我遇到的問題很小。

有沒有辦法用 來解決這個問題titlesec?我嘗試過閱讀文件但我變得很困惑。我將非常感謝已經知道這個包的人提出建議。

這個問題之前已經被問過如何在標題中放置一個短標題,但在目錄中放置一個長標題(titlesec 包與節標記衝突)?。但唯一的答案是 KOMA-script;我懷疑這是我現在不打算學習的其他一些軟體包系列。

我還要補充一點,我的論文明天就要交,所以我今天沒有時間整理一個小小的工作範例。我有興趣解決當前和長期的問題,因此如果有必要,我可以稍後再回來執行此操作。但同時,我非常感謝今天的任何答覆!

更新(2015 年 5 月 1 日):這是一個最小的工作範例。如果 \usepackage{titlesec} 被註解掉,則其第一頁的 Ponysec 標頭是正確的,否則則不然。 Carouselsec 標頭使用 Ulrike Fischer 的 minihack 並以任何方式運作。

\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的替換為\sectionmarkshould不是work——畢竟命令被定義為不執行任何操作。

我不知道為什麼你不想使用 KONA 類,但恕我直言,使用 titlesec 的解決方案將涉及刪除 fancyhdr 並使用 titleps 代替。我很確定哈維爾在某個地方實現了一種正確設置標記的方法,但正如您已經發現的那樣,他的文檔不容易閱讀,並且找到有效的東西通常需要大量的試驗和錯誤以及閱讀代碼。

答案2

使用 KOMA 腳本,不會有任何問題:-)

\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}

annaTocHead 標題

相關內容