\shipout

\shipout

我正在尝试分析不是我写的复杂 TeX 代码。代码创建了许多框,其中一些框嵌套在其他框中。我如何将某个(嵌套)框保存到文件中,以便在原始文档排版完成后我可以随意查看它,以查看该框在创建后的样子?

保存的文件最好是图像文件:jpg、png 或 pdf,但我也可以接受 TeX 文档或其片段,我可以将其完成为工作文档并正常排版。

答案1

TeX 提供\showbox。信息量可以通过\showboxbreadth和进行配置\showboxdepth。TeX 会像错误消息一样停止,但会将框的内容写入文件.log。示例:

\showboxbreadth=2147483647 % largest number
\showboxdepth=2147483647 % largest number
\tracingonline=1 % optional to show output to the console additionally

\setbox0=\hbox{Hello World}
\showbox0

\csname @@end\endcsname\end

结果:

> \box0=
\hbox(6.94444+0.0)x52.52788
.\tenrm H
.\tenrm e
.\tenrm l
.\tenrm l
.\tenrm o
.\glue 3.33333 plus 1.66666 minus 1.11111
.\tenrm W
.\kern-0.83334
.\tenrm o
.\tenrm r
.\tenrm l
.\tenrm d

! OK.
l.6 \showbox0

还有\showlists输出当前主垂直列表。

\documentclass{article}
\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\tracingonline=1
\begin{document}
\[ E=mc^2 \]

\showlists
\end{document}

结果:

### vertical mode entered at line 0
### current page:
\write-{}
\glue(\topskip) 10.0
\hbox(0.0+0.0)x345.0, glue set 122.9979fil
.\hbox(0.0+0.0)x15.0
.\hbox(0.0+0.0)x207.0021, glue set 103.50105fil
..\glue 0.0 plus 1.0fil minus 1.0fil
..\glue 0.0 plus 1.0fil minus 1.0fil
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.\glue(\rightskip) 0.0
\penalty 10000
\glue(\abovedisplayskip) 10.0 plus 2.0 minus 5.0
\glue(\baselineskip) 3.35997
\hbox(8.64003+0.0)x38.88536, shifted 153.05733, display
.\OML/cmm/m/it/10 E
.\kern0.57637
.\glue(\thickmuskip) 2.77771 plus 2.77771
.\OT1/cmr/m/n/10 =
.\glue(\thickmuskip) 2.77771 plus 2.77771
.\OML/cmm/m/it/10 m
.\OML/cmm/m/it/10 c
.\hbox(4.51111+0.0)x4.48613, shifted -4.12892
..\OT1/cmr/m/n/7 2
\penalty 0
\glue(\belowdisplayskip) 10.0 plus 2.0 minus 5.0
total height 42.0 plus 4.0 minus 10.0
 goal height 550.0
prevdepth 0.0, prevgraf 4 lines

! OK.
l.8 \showlists

\shipout

可以使用 输出一个框\shipout.log文件包含方括号中的页码。通常,它只是寄存器page编号为 0 的计数器。但是,TeX 支持从 0 到 9 的所有计数寄存器。示例使用值为 42 的计数寄存器 1:

\documentclass[a5paper]{article}
\usepackage{lipsum}
\begin{document}
\lipsum
\sbox0{Hello World}
\begingroup
  \count1=42 % local change inside the group
  \shipout\copy0 % copy the box to output and keep contents
\endgroup
\lipsum
\end{document}

控制台输出包含:

[1] [2] [3.42] [3] [4] [5] [6]

共有七页。第三页标有,3.42内含盒子。

当然,你可以自由地输出一些更具描述性的内容:

\shipout\vbox{\hbox{My name}\noindent\fbox{\copy0}}%

或者

\documentclass[a5paper]{article}
\usepackage{lipsum}
\begin{document}
\lipsum
\sbox0{Hello World}
\begingroup
  \count1=42 %
  \shipout\hbox{%
    \begin{tabular}{ll}
      \multicolumn{2}{c}{\textbf{Box output}}\\
      Width: & \the\wd0 \\
      Height: & \the\ht0 \\
      Depth: & \the\dp0 \\
      \multicolumn{2}{c}{\fbox{\copy0}}%
    \end{tabular}%
  }%
\endgroup
\lipsum
\end{document}

结果

相关内容