说实话,我对此已经束手无策了,试图找出这个错误已经很累了,但我没有其他选择。我正在写一份需要大量围棋棋盘(游戏)图表的文档,只有该软件包才psgo
真正适合。由于我还包含了 png 文件,所以我不得不使用 xelatex。使用auto-pst-pdf
不是一个选择,它根本不起作用,所以我只能使用 xelatex。
当包含hyperref
包裹时,图中的任何编号棋子都会移位并破坏图。下图中的 MWE 中可以看到这种情况。
\documentclass{report}
\usepackage[]{pstricks}
\usepackage{psgo}
\usepackage[xetex]{hyperref}
\begin{document}
\begin{psgopartialboard*}{(8,6)(14,12)}
\stone{black}{k}{10}
\stone{black}{l}{11}
\stone{black}{k}{11}
\stone{black}{l}{10}
\stone{white}{l}{8}
\stone{white}{k}{9}
\stone{white}{l}{9}
\setcounter{gomove}{0}
\move{j}{10}
\move{j}{9}
\move{j}{8}
\move{j}{7}
\end{psgopartialboard*}
\end{document}
我一直在用来latexmk -xelatex main.tex --enable-write18
编译这个。
如果您复制所示的 psgo 部分板,那么它将xdvipdfmx:warning: Object @gomove.1 already defined.
在编译时显示为警告,但它仍然有效。
我已将其缩小到 hyperref 与计数器交互方式的问题(我认为),因为计数器必须在每个棋盘上重置。任何没有计数器放置的静态棋子都可以正常工作。令人沮丧的是,它通过 dvipdf 完美运行,但我无法将其用于这个项目。
有没有办法修复这个问题而不失去功能?我正在重写psgo
,有什么技巧可以用吗?很多其他东西都需要 Hyperref,所以我不知道这里该怎么做。
任何帮助都将不胜感激,谢谢!
答案1
psgo
使用\refstepcounter
(恕我直言没有必要)并且使用 hyperref 会添加改变间距的目的地。
您可以使用布尔值来隐藏目标。在当前的 texlive 中,您可以使用 lualatex 来获取 pstricks。它比 xelatex 快得多,但对于某些效果(如不透明度),它需要新的 pdfmanagement。
%for lualalatex:
\DocumentMetadata{} %required to activate the pdfmanagement
\documentclass{report}
\usepackage[]{pstricks}
\usepackage{psgo}
\usepackage{hyperref}
\makeatletter
\AddToHook{env/psgopartialboard*/before}{\@skiphyperreftrue} %\LinkTargetOff in the next hyperref
\makeatother
\begin{document}
\begin{psgopartialboard*}{(8,6)(14,12)}
\stone{black}{k}{10}
\stone{black}{l}{11}
\stone{black}{k}{11}
\stone{black}{l}{10}
\stone{white}{l}{8}
\stone{white}{k}{9}
\stone{white}{l}{9}
\setcounter{gomove}{0}
\move{j}{10}
\move{j}{9}
\move{j}{8}
\move{j}{7}
\end{psgopartialboard*}
\end{document}