我想在开始新章节的页面顶部插入一些文本(期刊的作者姓名和作者相关信息)。虽然我知道像 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}
有没有不使用方框的解决方案(以获取有效的脚注)?