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
文件。
首先,注释掉(或删除)行988和1003禁用页面样式重置:
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
。)