如何在不垂直移动的情况下在章节标题上方添加文本

如何在不垂直移动的情况下在章节标题上方添加文本

我想在开始新章节的页面顶部插入一些文本(期刊的作者姓名和作者相关信息)。虽然我知道像 textpos 这样的解决方案和这里的不同解决方案,但我想找到一种简单的方法(因为不兼容性和速度)。

看看\chapter在不同的类中是如何工作的,我重新定义了\clearpage\cleardoublepage并插入了一个\parbox宽度和高度为零的。显然,这个框对于 latex 来说不是不可见的,所以它在 book 类中省略了 0.34 厘米的垂直空间。在回忆录中scrbook 章节标题的高度完全相同。

我该如何更改代码以防止\chapter省略某些垂直间距?是否有可能找到一种方法使文本不可见\chapter

我很想有一个通用的解决方案(例如不触及@makechapterhead,因为 scrbook 没有使用它)或者至少一个适用于回忆录、scrbook 和书籍/报告类的解决方案。

在此处输入图片描述

\documentclass[oneside]{book}
%\documentclass[oneside]{report}
%\documentclass[oneside]{scrbook}
%\documentclass[oneside]{memoir}
\usepackage{zref-savepos}
\usepackage[margin=0pt,paperwidth=10cm,paperheight=10cm]{geometry}
\makeatletter
\newcommand\cauthor[1]{\def\@cauthor{#1}}
\newcommand\ctitle[1]{\def\@ctitle{#1}}
\NewDocumentCommand \cmaketitle {}
{
  \bgroup
  \if@openright 
    \cleardoublepage
    \let\cleardoublepage\relax
  \else 
    \clearpage
    \let\clearpage\relax
  \fi
  \noindent\parbox[t][0pt]{0pt}{\@cauthor}%
  \noindent\parbox[t]\textwidth{%
  \chapter{\@ctitle}\mbox{}}
  \egroup
}
\makeatother
\begin{document}

\chapter{Normal Position\zsavepos{normal}\hrulefill}

\ctitle{My problem\zsavepos{cmaketitle}}
\cauthor{Schmid\footnote{Blacksmith University}\\
         Kovačević\\
         Ferrari\\
         Kowalski}
\cmaketitle

\noindent This heading (made by \verb|\cmaketitle|) is shifted by
\ExplSyntaxOn
\dim_new:N \l_diff_dim
\dim_sub:Nn \l_diff_dim {\zposy{normal}sp-\zposy{cmaketitle}sp}
\dim_to_decimal_in_unit:nn { \dim_use:N \l_diff_dim } { 1cm }cm~
\ExplSyntaxOff
compared to the normal \verb|\chapter|.


\end{document}

如果有一个解决方案,没有阻止脚注文本显示的框,那就太好了!

答案1

我认为我找到了解决方案。但也许其他人可以看到这种方法是否存在问题。至少它似乎可以与 book、scrbook、memoir 以及其他一些类以及 fncychap 很好地协同工作。主要部分(仍然)是\cauthor\title和-命令。使用和\cmaketitle的组合效果很好。仅在 scrbook 类中才需要。\makebox(0,0)[lt]\parbox[t]\textwidth\par

\newcommand\cauthor[1]{\def\@cauthor{#1}}
\newcommand\ctitle[1]{\def\@ctitle{#1}}
\NewDocumentCommand \cmaketitle {}
{%
  \bgroup%
  \if@openright %
    \cleardoublepage%
  \else %
    \clearpage%
  \fi%
  \noindent\makebox(0,0)[lt]{\parbox[t]{\textwidth}{\@cauthor}}
  \ifscrbook\else\par\fi
    \let\cleardoublepage\relax \let\clearpage\relax%
  \chapter{\@ctitle}
  \egroup
}

在此处输入图片描述 现在一切都已完美对齐。

包含一些经过测试的类和包的完整文档。所有经过测试的组合均有效。

\PassOptionsToPackage{margin=0pt,paperwidth=10cm,paperheight=10cm}{geometry}
\documentclass[oneside]{book}
%\documentclass[oneside]{report}
%\documentclass[oneside]{scrbook}
%\documentclass[oldfontcommands,oneside]{memoir}
%\documentclass{basque-book}
%\documentclass{ycbook}
%\documentclass{octavo}
%\documentclass{willowtreebook}
%\documentclass{elegantbook}
\usepackage{geometry}
%\usepackage[Lenny]{fncychap}
%\usepackage[Sonny]{fncychap}
%\usepackage[Glenn]{fncychap}
%\usepackage[Conny]{fncychap}
%\usepackage[Rejne]{fncychap}
%\usepackage[Bjarne]{fncychap}
%\usepackage[Bjornstrup]{fncychap}
\makeatletter
\newif\ifscrbook
\newif\iffncychap
\@ifclassloaded{scrbook}{\scrbooktrue}{\scrbookfalse}
\@ifpackageloaded{fncychap}{\fncychaptrue}{\fncychapfalse}

\newcommand\cauthor[1]{\def\@cauthor{#1}}
\newcommand\ctitle[1]{\def\@ctitle{#1}}
\NewDocumentCommand \cmaketitle {}
{%
  \bgroup%
  \if@openright %
    \cleardoublepage%
  \else %
    \clearpage%
  \fi%
  \noindent\makebox(0,0)[lt]{\parbox[t]{\textwidth}{\@cauthor}}
  \ifscrbook\else\par\fi
    \let\cleardoublepage\relax \let\clearpage\relax%
  \chapter{\@ctitle}
  \egroup
}
\makeatother
\begin{document}

\chapter{Normal chapter\hrulefill}
text after normal chapter\hrulefill

\cauthor{Schmid\footnote{Blacksmith University}\\
         Kovačević\\
         Ferrari}
\ctitle{Ctitle chapter\hrulefill}
\cmaketitle
text after ctitle chapter\hrulefill

\chapter{Normal chapter\hrulefill}
text after normal chapter\hrulefill

\end{document}

有没有不使用方框的解决方案(以获取有效的脚注)?

相关内容