編集

編集

私はレポート クラスを使用して、多くの章を含む長いドキュメントに取り組んでいます。

特定のセクションタイトルの3つの異なるバージョン(ドキュメント用長、目次用中、ヘッダー用短)を用意したいと思います。私はパッケージを使用しているので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 を示唆しています。これは、私が今すぐに学習するつもりのない別のパッケージ ファミリであると思われます。

また、私の論文の提出期限は明日なので、今日は小さな実例をまとめる時間がありません。この問題を今日だけでなく長期的に解決することに関心があるので、必要に応じて後で戻ってこれます。しかし、それまでの間、今日中に回答していただければ大変ありがたく思います。

更新 (2015 年 5 月 1 日): 以下に最小限の動作例を示します。最初のページの Ponysec ヘッダーは、\usepackage{titlesec} がコメント アウトされている場合は正しく、そうでない場合は正しくありません。Carouselsec ヘッダーは Ulrike Fischer のミニハックを使用しており、どちらの方法でも動作します。

\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}非常に早く呼び出されるため、独自のコマンドは遅すぎます。そのため、titlesec がマークを設定できなくなり、コピーを使用してマークを設定できるように、何も\sectionmark定義しません。中間の 's をshouldに置き換えると、\sectionmark\orisectionmark\orisectionmark\sectionmarkないwork -- 結局、コマンドは何もしないように定義されます。

KONA クラスを使用したくない理由がわかりませんが、私の意見では、titlesec を使用したソリューションでは、fancyhdr を削除し、代わりに titleps を使用します。 Javier がどこかでマークを正しく設定する方法を実装したことは間違いありませんが、すでにご存知のとおり、彼のドキュメントは読みにくく、機能するものを見つけるには、多くの試行錯誤とコードの読み取りが必要になることがよくあります。

答え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}

annaTocヘッドタイトル

関連情報