我正在使用報告類編寫一份包含許多章節的長文檔。
我想要某些部分標題的三個不同版本(長為文檔,中為目錄,短為標題)。我正在使用 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
的替換為\sectionmark
should不是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}