如何仅显示 TeX 框

如何仅显示 TeX 框

我想使用一系列的方框来展示 TeX 的工作原理。我前段时间读到过,TeX 中的所有内容(或几乎所有内容)都是方框。

那么,如何仅显示围绕每个字符、每行、每段落的 TeX 框?

我想要一些类似于下面的图像,但不fbox包含周围空白的东西。

在此处输入图片描述

答案1

在练习 11.5 中(第11 盒)第 67 页电子书Knuth 提出了命令的定义\demobox;在附录 A 第 310-311 页中,Knuth 给出了解决方案。对于这个问题中提出的问题,该解决方案并不完整(例如,宏和重音字符的行为不符合预期),但它是一个有趣的代码,可以作为部分答案。由于我只是在这里抄录它,因此我将这个答案作为 CW,并全部归功于 DE Knuth:

\documentclass{article}
\usepackage[utf8]{inputenc}

\def\dolist{\afterassignment\dodolist\let\next= }
\def\dodolist{\ifx\next\endlist \let\next\relax
\else \\\let\next\dolist \fi
\next}
\def\endlist{\endlist}
\def\hidehrule#1#2{\kern-#1%
\hrule height#1 depth#2 \kern-#2 }
\def\hidevrule#1#2{\kern-#1{\dimen0=#1
\advance\dimen0 by#2\vrule width\dimen0}\kern-#2 }
\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
\kern-#1 % overlap the rules at the corners
\hbox to \wd0{\hidevrule{#1}{#2}%
\raise\ht0\vbox to #1{}% set the vrule height
\lower\dp0\vtop to #1{}% set the vrule depth
\hfil\hidevrule{#2}{#1}}%
\kern-#1\hidehrule{#2}{#1}}}}
\def\maketypebox{\makeblankbox{0pt}{1pt}}
\def\makelightbox{\makeblankbox{.2pt}{.2pt}}
\def\\{\if\space\next\ % assume that \next is unexpandable
\else \setbox0=\hbox{\next}\maketypebox\fi}
\def\demobox#1{#1~\setbox0=\hbox{\dolist#1\endlist}%
\leavevmode\copy0\kern-\wd0\makelightbox\par}

\begin{document}

\demobox{Test}
\demobox{Some Other Words}
\demobox{\TeX :-(}% doesn't produce the desired result
%\demobox{Céfiro}% fails

\end{document}

在此处输入图片描述

答案2

我认为这不是该问题的完美解决方案。由于该问题似乎很有趣,因此可以手动实现以下一种方式:

\documentclass{article}

\begin{document}
\parindent=0pt

\makeatletter
\def\boxit#1{%
   \fboxsep=0pt%
   \fboxrule=.1pt%
   \@tfor\xx:=#1\do{%
       \fbox{\phantom{\xx}}%
   } #1%
}

\boxit{Grupa}\\
\boxit{U{\.z}ytkownik{\'o}w}\\
\boxit{Systemu}\\
\boxit{\TeX}  %This wont work ;-(

\end{document}

在这里,如果我们传递宏,那么它将\boxit{\TeX}出现在单个框中,而不是三个框中。此外,对于重音字符,我们需要将其分组为{\'a}{\'{a}}。另一个问题是,我们需要手动放置框。

相关内容