更新 Overleaf 文档中每一页的代码

更新 Overleaf 文档中每一页的代码

我有一个用 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}

相关内容