使用 eskdx 时出现错误“输出例程未使用全部 \box255。”

使用 eskdx 时出现错误“输出例程未使用全部 \box255。”

win+miktex(最新)+xelatex

微电子工程协会

\documentclass[simple]{eskdtext}
\usepackage{tinos}
\usepackage{xecyr}
\usepackage{xunicode,xltxtra}
\providecommand{\No}{\textnumero}
\begin{document}
12345
\end{document}

答案1

我在使用 win+texlive2021 时遇到了同样的问题pdflatex。在 Win+texlive2020 中没有这样的问题。

eskdx通过包使用 \EveryShipout 上的钩子绘制图章everyshi。我猜想先前解决方案中非直线上的“非常糟糕的形状”是由某种递归引起的 - shipout 钩子添加了另一个钩子,钩子导致 shipout 等等... 也许我错了,我不确定。

另有一个带有 GOST 印章的包裹 -eskd它使用不同的方法。它通过 绘制印章fancyhdr,定义自己的页面样式并应用它们。

我尝试过用 做同样的事情eskdx。不幸的是,仅仅更新一个命令是不够的,所以我复制了整个文件eskdstamp.sty从 texlive复制.../tex/latex/eskdx/eskdstamp.sty到了我自己样式的文件夹(或复制到了包含源 .tex 文件的文件夹)。eskdstamp 的文件版本在 texlive2021 中是 v0.98。

之后,我不得不做出一些改变我的副本eskdstamp.sty文件。

首先,注释掉(或删除)行9881003禁用页面样式重置:

line 988:  %\pagestyle{empty}%
line 1003: %\thispagestyle{empty}%

然后修改第 937 至 980 行(从\RequirePackage{everyshi}\EveryShipout{\ESKD@ShipoutPicture}),如下所示(我在此处对这些行进行了注释):

%\RequirePackage{everyshi}
\def\ESKD@curstyle{}
\def\ESKD@thisstyle{}
\def\ESKD@extra@Hook{}
\def\ESKD@extra@ThisHook{}
%% create new save box
\newsavebox{\ESKDFRAME}

\newcommand{\ESKD@ShipoutPicture}{%
    \ifESKD@twoside
      \ifodd\c@page
        \ESKDframeX=\ESKD@margin@si
      \else
        \ESKDframeX=\ESKD@margin@so
      \fi
    \else
      \ESKDframeX=\ESKD@margin@si
    \fi
    \ESKDframeY=\ESKD@margin@b
    \ESKDstampX=\ESKDframeX
    \advance\ESKDstampX \ESKDframeW
    \advance\ESKDstampX -185mm
    \ESKDstampY=\ESKDframeY
    \savebox{\ESKDFRAME}(0,0){
    \unitlength=1mm
    \begin{picture}(0,0)(\ESKDltu{\ESKD@origin@x},\ESKDltu{\ESKD@origin@y})%
      \ifx\ESKD@thisstyle\@empty
        \let\ESKD@thisstyle\ESKD@curstyle
      \fi
      \loop
      \ifnum \ESKD@hash@pos{@style@draw@\ESKD@thisstyle} %
        < \ESKD@hash@count{@style@draw@\ESKD@thisstyle}
        \ESKD@hash@next@value{@style@draw@\ESKD@thisstyle}\relax
      \repeat
      \global\let\ESKD@thisstyle\@empty%
    \end{picture}}%
}

\RequirePackage{fancyhdr}
%% set "fancy" pagestyle and apply it for all pages as default
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}%% disable ruler in header
%% setup "fancy" pagestyle
\fancyhf{}
\fancyhead[L]{%
\unitlength=1mm
\begin{picture}(0,0)(0,0)
  \ifthenelse{\equal{\ESKD@curstyle}{title}}{% for title page style
  \ESKD@ShipoutPicture             % create saved box
  \put(0,-12){\usebox{\ESKDFRAME}} % put saved
  }{ % for any other page style
  \ESKD@ShipoutPicture             % create saved box
  \put(2,-7){\usebox{\ESKDFRAME}}  % put saved box
  }
\end{picture}
}
%\EveryShipout{\ESKD@ShipoutPicture}

答案2

类似这样的代码应该(希望)以一种安全的方式重新定义 shipout 代码(基于 Joseph 的代码)。它假设使用当前的 latex。但如果课程作者能看一下,那就更好了。有大量文件包含重新定义。

\documentclass[simple]{eskdtext}
\usepackage{xecyr}
\usepackage{xunicode,xltxtra}
\providecommand{\No}{\textnumero}
\makeatletter
\newsavebox\ESKDpicturebox

\renewcommand{\ESKD@ShipoutPicture}{%
     \ifESKD@twoside
       \ifodd\c@page
         \ESKDframeX=\ESKD@margin@si
       \else
         \ESKDframeX=\ESKD@margin@so
       \fi
     \else
       \ESKDframeX=\ESKD@margin@si
     \fi
     \ESKDframeY=\ESKD@margin@b
     \ESKDstampX=\ESKDframeX
     \advance\ESKDstampX \ESKDframeW
     \advance\ESKDstampX -185mm
     \ESKDstampY=\ESKDframeY    
     \sbox\ESKDpicturebox{%
        \unitlength=1mm
        \begin{picture}(0,0)(\ESKDltu{\ESKD@origin@x},\ESKDltu{\ESKD@origin@y})%
          \ifx\ESKD@thisstyle\@empty
            \let\ESKD@thisstyle\ESKD@curstyle
          \fi
          \loop
          \ifnum \ESKD@hash@pos{@style@draw@\ESKD@thisstyle} %
            < \ESKD@hash@count{@style@draw@\ESKD@thisstyle}
            \ESKD@hash@next@value{@style@draw@\ESKD@thisstyle}\relax
          \repeat
          \ifx\ESKD@extra@ThisHook\@empty%
            \ESKD@extra@Hook\else\ESKD@extra@ThisHook%
          \fi%
          \global\let\ESKD@thisstyle\@empty%
          \global\let\ESKD@extra@ThisHook\@empty%
        \end{picture}
        }%
       \AddToHook{shipout/foreground}{%
       \put(1in,-1in){\usebox\ESKDpicturebox}}%        
}

\makeatother
\begin{document}

12345
\end{document}

答案3

该类正在全局设置框 255,但是这不应该发生:

\documentclass[simple]{eskdtext}
\usepackage{xecyr}
\usepackage{xunicode,xltxtra}
\providecommand{\No}{\textnumero}
\makeatletter
\renewcommand{\ESKD@ShipoutPicture}{%
  \bgroup
    \ifESKD@twoside
      \ifodd\c@page
        \ESKDframeX=\ESKD@margin@si
      \else
        \ESKDframeX=\ESKD@margin@so
      \fi
    \else
      \ESKDframeX=\ESKD@margin@si
    \fi
    \ESKDframeY=\ESKD@margin@b
    \ESKDstampX=\ESKDframeX
    \advance\ESKDstampX \ESKDframeW
    \advance\ESKDstampX -185mm
    \ESKDstampY=\ESKDframeY
    \unitlength=1mm
    \setbox\@cclv\vbox{%
      \vbox{\let\protect\relax
    \begin{picture}(0,0)(\ESKDltu{\ESKD@origin@x},\ESKDltu{\ESKD@origin@y})%
      \ifx\ESKD@thisstyle\@empty
        \let\ESKD@thisstyle\ESKD@curstyle
      \fi
      \loop
      \ifnum \ESKD@hash@pos{@style@draw@\ESKD@thisstyle} %
        < \ESKD@hash@count{@style@draw@\ESKD@thisstyle}
        \ESKD@hash@next@value{@style@draw@\ESKD@thisstyle}\relax
      \repeat
      \ifx\ESKD@extra@ThisHook\@empty%
        \ESKD@extra@Hook\else\ESKD@extra@ThisHook%
      \fi%
      \global\let\ESKD@thisstyle\@empty%
      \global\let\ESKD@extra@ThisHook\@empty%
    \end{picture}}%
    \nointerlineskip%
      \box\@cclv}%
  \egroup
}
\makeatother
\begin{document}

12345
\end{document}

(我只是删除了一个 \global。)

相关内容