![当使用“fancyhdr”和“todonotes”时,文本会移至标题中](https://linux22.com/image/335739/%E5%BD%93%E4%BD%BF%E7%94%A8%E2%80%9Cfancyhdr%E2%80%9D%E5%92%8C%E2%80%9Ctodonotes%E2%80%9D%E6%97%B6%EF%BC%8C%E6%96%87%E6%9C%AC%E4%BC%9A%E7%A7%BB%E8%87%B3%E6%A0%87%E9%A2%98%E4%B8%AD.png)
我目前正在用 Latex(Lyx)编写 KOMA 文章文档,发现以下问题:
为了在 pdf 中显示注释,我尝试了 pdfcomment 包和 todonotes 包。不幸的是,当将这两个包中的一个与 fancyhdr 一起使用时,必要的文本偏移量被忽略,因此文本会写在标题上。
没有评论包就完全没有问题。
这个问题已经知道了吗? 有解决办法吗?
先感谢您。
编辑:
我只是尝试创建一个最小的示例(从 Lyx 导出 Latex),因为我意识到,即使使用 fancyhdr 包,我也只能在第一部分看到转变:
%% LyX 2.1.3 created this file. For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}
\usepackage{float}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\parbox{9cm}{\flushleft \bfseries Test\\ \scriptsize Test} \\ \vspace*{0.15cm} \mdseries \scriptsize Test}
\renewcommand{\headrulewidth}{0.4pt}
\makeatother
\usepackage{babel}
\begin{document}
\section{Intro}
TEST TEST TEST
\newpage{}
\section{Second}
TEST TEST TEST
\end{document}
答案1
以下是一个适合 KOMA 的方法,使用方式如下scrlayer-scrpage
:
\documentclass[headheight=55pt,headsepline]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}
\usepackage{scrlayer-scrpage}
\ihead{%
\parbox{9cm}{%
\begin{flushleft}
\bfseries Test\\
\scriptsize Test\\\vspace*{0.15cm}
\mdseries \scriptsize Test
\end{flushleft}%
}%
}
\pagestyle{scrheadings}
\begin{document}
\section{Intro}
TEST TEST TEST
\newpage
\section{Second}
TEST TEST TEST
\end{document}
请注意,fancyhdr
和都scrlayer-scrpage
很好地说明了为什么阅读控制台输出和/或日志文件至关重要。如果指定的内容不适合分配的空间,这两个包都会提供警告消息。例如,它们会告诉您标题的当前高度是多少以及需要的高度是多少。scrlayer-scrpage
还为您提供了设置相关选项所需的语法。(fancyhdr
无法执行此操作,因为它无法假设您如何布局页面 - 直接、使用geometry
或使用其他东西,而scrlayer-scrpage
做出可反驳但合理的假设,即您正在使用 KOMA 或 typearea 并且不会覆盖它。)
答案2
如果您检查代码中收到的警告,您会发现一条警告告诉您太低\headheight
了。因此您需要将其设置为适当的值,例如:
\setlength{\headheight}{44pt}
然后覆盖就消失了。
请查看更正后的、稍微简化的 MWE:
\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}
%\makeatletter % <================================================ Why??
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\parbox{9cm}{\flushleft \bfseries Test\\ \scriptsize Test} \\ \vspace*{0.15cm} \mdseries \scriptsize Test}
\renewcommand{\headrulewidth}{0.4pt}
\setlength{\headheight}{44pt} % <================================= to avoid warning and overwriting
%\makeatother % <================================================== Why??
\begin{document}
\section{Intro}
TEST TEST TEST
\newpage{}
\section{Second}
TEST TEST TEST
\end{document}
结果如下:
但最好只使用 KOMA-Script 来执行此操作。请参阅以下 MWE:
\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage[headsepline]{scrlayer-scrpage}
\pagestyle{scrheadings}
\ihead{\bfseries Test\\ \scriptsize Test \\ \vspace*{0.15cm} \mdseries \scriptsize Test}
\chead{}
\ohead{}
\ifoot{}
\cfoot{\pagemark} % pagenumber
\ofoot{}
\setlength{\headheight}{37pt}
\begin{document}
\section{Intro}
TEST TEST TEST
\newpage{}
\section{Second}
TEST TEST TEST
\end{document}
结果如下: