我有一个用 Overleaf(pdfLaTex 2020 编译器)编写的大型文档。每个部分都可以很好地编译,但整个文档需要 4 分钟以上的时间才能编译完成,因此我需要下载并在本地进行编译。由于存在交叉引用和页码,因此需要将其编译为一个文档。
我正在按照建议运行 texlive 2020这里。
但是,我在放置 tikzpicture 框时遇到了问题,这似乎是由于每个页面的更新造成的(我不确定,但这是我在日志中收到的唯一警告消息)。它在 Overleaf 上看起来很棒,但是...当我在计算机上编译时就不那么好了。下图左侧显示了来自 overleaf 的屏幕截图,右侧显示了本地编译。请注意灰色补丁中的“此处的文本”(灰色补丁在本地版本中位于文本 1/2 下方)。 我想更新代码,以便它能与 texlive2020 中当前版本的 everypage 兼容。MWE 如下。如果有人有任何见解或建议,我们将不胜感激。提前致谢!
\documentclass[twoside]{scrbook}
\usepackage[outer=2.25in, inner=.75in]{geometry}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}
\usepackage{ifthen,ifoddpage}
\usetikzlibrary{calc}
% CHapter number in margins
\usepackage{background}
\usetikzlibrary{calc}
\usepackage{ifthen}
\pagestyle{plain}
% background common settings
\SetBgScale{1}
\SetBgAngle{0}
\SetBgOpacity{1}
\SetBgContents{}
\makeatletter
\newcommand\ChapFrame{%
\AddEverypageHook{%
\ifthenelse{\isodd{\thepage}}
{\SetBgContents{% right-side pages
\begin{tikzpicture}[overlay,remember picture, text centered]
\node[fill={black!10},inner sep=0pt,rectangle,
text width=1cm, text height=8cm, align=center,anchor=north east]
at ($ (current page.north east) + (-0cm,-2*\thechapshift cm) $)
{\rotatebox{90}{{\textcolor{black}{\centering\quad\scshape{\rightmark}}}}};
\end{tikzpicture}}%
}
{\SetBgContents{%
\begin{tikzpicture}[overlay,remember picture]
\node[fill={black!10},inner sep=0pt,rectangle,text width=.75cm,
text height=6cm,align=center,anchor=north west]
at ($ (current page.north west) + (-0cm,-2*\thechapshift cm) $)
{\rotatebox{90}{\hspace*{.3cm}\parbox[c][0cm][c]{5cm}{%
\centering\textcolor{black}{\scshape\leftmark}}}};
\end{tikzpicture}}
}
\bg@material}%
\stepcounter{chapshift}
}
\makeatother
% redefinition of \chaptermark to contain only the title
\renewcommand\chaptermark[1]{\markboth{\thechapter.~#1}{}}
\newcounter{chapshift}
\addtocounter{chapshift}{-1}
\begin{document}
\chapter{The text here} \ChapFrame
\lipsum[1-10]
\end{document}
更新:我将编译器改为 pdflatex(与上一个链接中推荐的不同,但我没有资格评论那篇文章)并重新编译了四次。现在看起来好多了(前三次编译仍然有很多格式问题)。
答案1
我极其偏见地简化了你的代码。 \AddToHook
是内置的。[align] 自动将文本放入表格中,而 [text width] 将文本放入\parbox
。[minimum height] 和 [minimum width] 控制填充矩形。
\documentclass[twoside]{scrbook}
\usepackage[outer=2.25in, inner=.75in]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{lipsum}
% CHapter number in margins
\pagestyle{plain}
\AddToHook{shipout/background}{\ifodd\value{page}%
\sbox0{\begin{tikzpicture}
\node[fill={black!10}, inner sep=0pt, align=center,
minimum height=1cm, minimum width=8cm, rotate=90]
{\quad\scshape\rightmark};
\end{tikzpicture}}%
\put({\dimexpr \paperwidth-\wd0},{\dimexpr -\ht0-\chapshift}) {\box0}%
\else
\sbox0{\begin{tikzpicture}
\node[fill={black!10},inner sep=0pt, align=center,
minimum height=.75cm, minimum width=6cm, rotate=90]
{\scshape\leftmark};
\end{tikzpicture}}
\put(0pt,{\dimexpr -\ht0-\chapshift}) {\box0}%
\fi}
% redefinition of \chaptermark to contain only the title
\renewcommand\chaptermark[1]{\markboth{\thechapter.~#1}{}}% ???
\newlength{\chapshift}
\setlength{\chapshift}{-2cm}
\begin{document}
\chapter{The text here} \addtolength{\chapshift}{2cm}
\lipsum[1-10]
\end{document}