Hiding Content

From Wiki
Revision as of 14:48, 7 June 2020 by Garulfo (talk | contribs) (minor adjustments, nothing new)
Jump to navigation Jump to search

Probably for your slides, probably for some animation or for whatever reason you may want it: you can hide some content from the document, while leaving exactly the same amount of space as that content would need if typeset in the usual way.

Beware, this doesn’t work in current (2018) MkIV. Have a look at Viewer Layers, attr-lay.mkiv.

Overview

On the mailing list Hans suggested many different ways (astonishing easy to use) to hide the content in a PDF document. Sadly, most of them are viewer-dependent.

method properties
\defineeffect[my-secrets][layer][state=top]
\starteffect[my-secrets]
My public secret.
\stopeffect
  • makes (invisible) layer on top (JS-based)
  • completely hides everything
  • works with newer Adobe Acrobat/Viewer; in most other browsers the content is not hidden
  • I managed to freeze Acrobat 6.0 pro when trying to save the text
\defineeffect[my-hesitations][layer][state=stop]
\starteffect[my-hesitations]
To \ConTeXt\ or not to \ConTeXt?
\stopeffect
\button{Show   Decision}[VideLayer{my-hesitations}]
\button{Hide   Decision}[HideLayer{my-hesitations}]
\button{Toggle Decision}[ToggleLayer{my-hesitations}]
  • makes (invisible) layer, which can be switched on and off (JS-based)
  • you can switch the content on and off
  • when hidden, it is completely hidden
  • works with newer Adobe Acrobat/Viewer; in most other browsers the content is not hidden
  • even some new Acrobat versions can't handle the buttons
\starteffect[hidden] % In MkIV
My secret hidden for Adam's apple ;)
\stopeffect
  • makes transparent fonts
  • no JavaScript
  • pretty safe for different viewers
  • only text is hidden, but not images, rules, ...
the plain TeX way
  • puts a blank box instead of its content (letter)
  • absolutely no content in the document, not even hidden (only blank space)
  • only works for letters and whitespace, no macros, no figures, ...

The plain TeX way

This example was adapted from the TeXBOOK. However, it can only handle usual text. Forget about macros, forget about graphics ...

I hope and still believe that it is possible to extend this macro to make it work in general case. This would also be a preferred solution as it doesn't depend on the viewer's JavaScript incapabilities.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% the portion of code adapted from the TeXBOOK, Excercise 11.5 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\dolist{\afterassignment\dodolist\let\next= }
\def\dodolist{\ifx\next\endlist\let\next\relax
  \else \\\let\next\dolist \fi
\next}
\def\endlist{\endlist}

\def\\{\if\space\next\ % assume that \next is unexpandable
\else\setbox0=\hbox{\next}\setbox1=\hbox{}%
  \dp1=\dp0\ht1=\ht0\wd1=\wd0\box1\fi}

\def\demobox#1{{\dolist#1\endlist}}

Layer: state=top

You can try something like:

\defineproperty[my-secrets][layer][state=top]

I don't tell this to everybody:
%
\startproperty[my-secrets]%
\quotation{\ConTeXt\ goes beyond the limits of imagination, that's why I love it!}
\stopproperty
%
You'll understand that once you get to know it better.

which results in

This can be compared to the non-hidden version, which is:

Final Remarks

  • Just as a hint: don't ever think about hiding your secrets or solutions to the problems for your students this way. Readers with Adobe Acrobat Professional can select Layers on the left and switch the hidden layer on again. You have been warned.
  • Kerning could cause miniscule differences in the exact placement of the (hidden) content.