我目前正在排版一个相对较长的文档(大约 170 页);为了避免减慢编译速度,我正在外部生成图形,并将它们包含在主文件中tex
。到目前为止,我在编译图形pdfs
时includegraphics
没有遇到任何重大麻烦,但我在绘制树木时遇到了麻烦。也就是说,在绘制树木时,standalone
完全不尊重图形的实际大小。在进一步解释我的问题之前,让我给你看一张图来说明我的问题:
这是重现我的问题的 MWE:
\documentclass[]{standalone}
\usepackage{tikz} % To plot almost everything.
\usepackage{pstricks,pst-node,egameps} % To get extensive form games.
\begin{document}
\begin{egame}(0,350)
\putbranch(100,340)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$1,1$][]
\putbranch(300,240)(2,1){200}
\iib{$2$}[o]{$D$}{$A$}[c][$0,3$][]
\putbranch(500,140)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$2,2$][]
\putbranch(700,40)(2,1){200}
\iib{$2$}[o]{$D$}{$A$}[c][$1,4$][]
\putbranch(900,-60)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$3,3$][$...$]
\putbranch(1100,-210)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$99,99$][]
\putbranch(1300,-310)(2,1){200}
\iib{$2$}[o]{$D$}{$A$}[c][$98,101$][$100,100$]
\end{egame}
\end{document}
我正在使用该包绘制树egameps
(完整文档在这里:https://www.economics.utoronto.ca/osborne/latex/egameps.pdf) 因为它的语法简单,而且是排版博弈论时的标准。因此,我确实想坚持使用这个依赖于的包pstricks
(它也可以与之一起使用pdftricks
)。问题是我无法独立地正确获取树的大小;因此得到不完整的树或/和太大的边距。据说可以通过正确指定树的大小来解决该问题:
\begin{egame}(0,350)
其中 (0,350) 表示宽度为 0mm、高度为 350mm 的图形。但是,我完全无法计算出树的正确大小。有人能帮我指定树的正确大小吗?我需要一种方法来计算正确的大小,因为我要画几棵树,而且大多数树都有这个问题。因此,手动估计这棵特定树的大小是不够的。还要注意,我已经阅读了两遍完整的软件包 pdf;但无论我做什么,我都无法得到正确的大小。
或者,如果指定每棵树的正确大小太难;也许有人可以提供另一种方法(通过standalone
? 中的规范)来强制standalone
获取正确的文档大小,即使树大小指定错误。这对我来说就足够了。
另外,也许有人知道另一种不会产生此问题而只产生我想要的输出的文档类。这样的解决方案对我来说也足够了。
请注意,我曾尝试将图形编译为文章,然后将其转换为,eps
但我并不喜欢这样做,因为在将转换为时pdf
,eps
某些东西(如希腊字母或其他花哨的东西)会发生变化并且看起来很奇怪。此外,将其包含eps
在我的主要 tex 文件中会大大减慢编译速度,而我恰恰不希望这样。虽然我可以使用文章文档类生成图形,然后转换为 eps,然后使用正确的尺寸再次将 eps 还原为 pdf,但我认为这不是一个好的解决方案(它太耗时,而且像希腊字母这样的花哨的东西仍然是错误的)。
如果有人能帮助我,我会非常高兴(我知道这是一个非常特定于用户的问题,我知道我可能得不到任何答案;但我需要把这个问题解决好!)。
答案1
的代码egame
完全是错误的。内部定义的pspicture
坐标完全错误。但是,您可以直接使用环境pspicture
:
\documentclass[pstricks]{standalone}
\usepackage{pstricks,pst-node,egameps} % To get extensive form games.
\begin{document}
\psset{unit=0.1mm}\initialtrue
\begin{pspicture}(-200,-500)(1600,400)
\putbranch(100,340)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$1,1$][]
\putbranch(300,240)(2,1){200}
\iib{$2$}[o]{$D$}{$A$}[c][$0,3$][]
\putbranch(500,140)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$2,2$][]
\putbranch(700,40)(2,1){200}
\iib{$2$}[o]{$D$}{$A$}[c][$1,4$][]
\putbranch(900,-60)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$3,3$][$...$]
\putbranch(1100,-210)(2,1){200}
\iib{$1$}[o]{$D$}{$A$}[c][$99,99$][]
\putbranch(1300,-310)(2,1){200}
\iib{$2$}[o]{$D$}{$A$}[c][$98,101$][$100,100$]
\end{pspicture}
\end{document}
egame
如果用户不修改, 内部单位设置为0.1mm。第一个节点从 开始,左右100,340
臂为。最后一个节点也设置为 ,臂为。这就是为什么我选择 pspicture 环境的左下角坐标和右上角的原因。类似于 的东西没有任何意义:它会创建一个宽度为 0 、高度为 350 的绘图区域。200
1300,-310
200
(-200,-500)
(1600,400)
\begin{egame}(0,350)
答案2
这是使用istgame
包,它基于TikZ
。istgame
环境与环境几乎相同tikzpicture
。使用istgame
包(基本上tikz tree
),您无需担心找到正确的坐标。相反,您可以使用 来\xtdistance
确定游戏树的形状。
\documentclass[border=1pt]{standalone}
\usepackage{istgame}
\begin{document}
\begin{istgame}[scale=1]
% tree
\tikzset{oval node/.style={ellipse node,draw=none}}
\xtdistance{15mm}{50mm}
% \xtdistance{15mm}{30mm}
\istrooto(0){1}
\istb{D}[fill=white]{1,1}
\istb{A}[fill=white]
\endist
\istrooto(1)(0-2){2}
\istb{D}[fill=white]{0,3}
\istb{A}[fill=white]
\endist
\istrooto(2)(1-2){1}
\istb{D}[fill=white]{2,2}
\istb{A}[fill=white]
\endist
\istrooto(3)(2-2){2}
\istb{D}[fill=white]{1,4}
\istb{A}[fill=white]
\endist
\istrooto(4)(3-2){1}
\istb{D}[fill=white]{3,3}
\istb{A}[fill=white]{\dots}
\endist
\istrooto(5)([yshift=-5mm]4-2){1}
\istb{D}[fill=white]{99,99}
\istb{A}[fill=white]
\endist
\istrooto(6)(5-2){2}
\istb{D}[fill=white]{98,101}
\istb{A}[fill=white]{100,100}
\endist
\end{istgame}
\end{document}