Newsgroups: comp.text.tex Date: 2001-05-02 23:01:00 PST
I need a cross-out checkbox in my document (which is supposed to be printed). An example might be
[ ] Male [ ] Female
I think the box should have the height of X and be aligned with the baseline. I did the following:
\newlength{\Xheight} \settoheight{\Xheight}{X}
\newcommand{\checkbox}{% \setlength{\fboxsep}{0pt}% \framebox[\height]{\rule{0pt}{\Xheight}}% }
It works, but
1) I would like to put the definition of \Xheight inside \checkbox so that \checkbox is stand-alone. How do I do that ? Or in other words - how can I do this smarter? 2) Is there already such a macro somewhere?
Hans
PS! I'm aware of ex and \Xheight in CM is approx 1.5ex but that might be different in another font.
> what's this \height?
\height, \width, \depth, \totalheight are (latex) length parameter which is defined for framebox/makebox. They specify the natural size of the text to be boxed. I used it to get a square box …. (which was what I wanted, but forgot to say).
> what's wrong with > \newcommand\checkbox{{% note double braces to isolate \setlength > \setlength\fboxsep{0pt}% > \fbox{\phantom{X}}% > }}
It isn't square, else it is fine. I had forgotten about \phantom - and thx for warning me about the needed double braces - why?
Using \phantom my macro is now:
\newcommand\checkbox{{% \setlength\fboxsep{0pt}% \framebox[\height]{\phantom{X}}% }
Hans Nordhaug,
>thx for warning me about the needed double braces - why?
in general, macros shouldn't set global parameters as side-effects of their behaviour. imho, anyway. the extra braces cause the assignment to be local only.
>Using \phantom my macro is now: > >\newcommand\checkbox{{% >\setlength\fboxsep{0pt}% >\framebox[\height]{\phantom{X}}% >}
if my brain hadn't faded i would have realised you wanted a square box. that lot looks good.
Robin Fairbairns
Another way, that automatically gives squares, is to set fboxsep to half the size.
\newcommand\checkbox{\mbox{% \settoheight\fboxsep{X}\setlength\fboxsep{.5\fboxsep}% \raisebox\depth{\fbox{}}% }}
Donald Arseneau
The following should work:
\newcommand{\checkbox}[1]{% \settoheight{\Xheight}{#1}% \setlength{\fboxsep}{0pt}% \framebox[\height]{\rule{0pt}{\Xheight}}%
Dr. D. P. Story
As an alternative to drawing these manually, note that a number of fonts contain square boxes, which you can scale as necessary.
wasysym even provides a \Square, \CheckedBox, and \XBox macro, to represent an unchecked box, a checked box, and an xed box, respectively.
Check out the Comprehensive LaTeX Symbol List on CTAN for font samples.
Scott