所以我正在编辑一份历史手稿,我希望手写手稿的原始页码出现在页眉中,无论是左页还是右页。此外,它们还需要出现在文本中,在每个原始页面的开头(可以是打印页面上的任何位置)。
我使用一个名为的命令实现了此功能,\origpage
该命令打印原始页码并执行 \markboth 命令来更改页眉。
到目前为止一切顺利。只是有时原始页码会出现在表格中(使用 呈现\longtable
)或框的开头(使用 呈现\tcolorbox
)。在这些情况下,\markboth
命令不知何故无法“到达”运行头,显然是因为它被包裹在\tcolorbox
或\longtable
环境中。\markboth
不过,当命令被包裹在空白环境中时,它会起作用,因此阻止其效果的不是环境本身。
此处的 MWE 仅显示\tcolorbox
情况。如果您编译代码,您将看到前十个原始页面正确创建了运行头,但第十一和第十二个原始页面失败,但第十三和第十四个页面再次正常工作。
为什么会失败?
\tcolorbox
有人能帮我想出一种方法,即使在或中也能将原始页码显示在页眉中吗\longtable
?使用会有\fancyhdr
帮助吗?
% !TEX TS-program = lualatex
% !TEX encoding = UTF-8 Unicode
% !TEX spellcheck = en_EN
\documentclass[letterpaper,12pt]{book}
\usepackage[english]{babel}
\usepackage{fontspec}
\usepackage{lipsum}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
\newcommand{\origpage}[1]{%
{\textsf{\large{[#1.]}}}%
\markboth{\hfill #1 \hfill}{\hfill #1 \hfill}
}
% +++++++++++++++++++++++++++++++++++++++++++
\begin{document}
\pagenumbering{gobble}
\origpage{1} \lipsum \lipsum \origpage{2} \lipsum \lipsum \origpage{3} \lipsum \lipsum \origpage{4} \lipsum \lipsum \origpage{5} \lipsum \lipsum \origpage{6} \lipsum \lipsum \origpage{7} \lipsum \lipsum \origpage{8} \lipsum \lipsum \origpage{9} \lipsum \lipsum \origpage{10} \lipsum \lipsum
\begin{tcolorbox}[width=\linewidth,valign=center,breakable]
\origpage{11} \lipsum \lipsum \origpage{12} \lipsum \lipsum
\end{tcolorbox}
\origpage{13} \lipsum \lipsum \origpage{14} \lipsum \lipsum
\end{document}
答案1
我最终解决了这个问题,并得到了我想要的输出,尽管使用了两个棘手的解决方法。但它们并不适用于所有情况。
在\longtable
环境中:我刚刚结束了longtable
,排版了原始页码(以便结果\markboth
位于顶层),然后重新启动了表格。这不是我作为文档设计师想要的,但也不是一场灾难。
使用\tcolorbox
: 在我的实际代码中,\tcolorbox
环境会调用 (称之为\mybox
)。起初,我尝试让\origpage
中的命令\tcolorbox
设置一个标志,该标志将由环境的右括号保留和分析\mybox
。但是,在 结束后,该标志的值没有保留\tcolorbox
。所以这种方法不起作用。(也许 可以解决\gdef
?)
我找到了另一种可行的方法。那就是将原始页码更改为\mybox
环境的可选参数。这允许环境使用 if 语句在顶层\mybox
发出命令,并发出在 内显示原始页码的命令。这只在我的情况下有效,因为很短并且从不跨越分页符,并且原始页码始终出现在框的开头。使用环境定义是必要的,因为参数必须在环境语句的右括号中使用。这不是我想要设置文件的方式,而且我发现它不是很优雅,但它确实完成了工作。\markboth
\origpage
tcolorbox
\tcolorboxes
xparse
本质上是这样的:
\NewDocumentEnvironment{mybox}{o}
{
\begin{tcolorbox}
\IfValueT{#1}{{\large{[#1.]}}}
}
{
\end{tcolorbox}%
\IfValueT{#1}{\markboth{\hfill #1 \hfill}{\hfill #1 \hfill}}%
}