LaTeX forum ⇒ Text FormattingMeasure remaining length of line Topic is solved

Information and discussion about LaTeX's general text formatting features (e.g. bold, italic, enumerations, ...)
Posts: 10
Joined: Fri Sep 24, 2010 7:27 pm

Measure remaining length of line

Postby rhino7890 » Fri Sep 24, 2010 7:38 pm

I am using the package eforms as found in the AcroTex bundle. With it, I am trying to make an electronic form in which the user fills out text fields. With eforms, you can make interactive text boxes in LaTeX using the command \textField{<ID>}{<box width>}{<box height>}.

Where I run into trouble is the length of the text box. The way that I would like the form to look is as follows:

text1: _______________________________
text2: _______________________________
textN: _______________________________

where the underline section is where the interactive text field exists. As the command \textField requires an absolute length to specify the box width, I need some way of measuring the remaining length of the current line. Commands like \linewidth only return the current linewidth of the environment and not the remaining width of the current line. I also tried some variations of \hfill but without any luck. I even tried subtracting the length the leading text (by measuring it with the command \settowidth{\gnat}{text}) from the \linewidth value, but this was inconsistent from line to line.

Does anyone have any ideas on how I can get a text box to stretch the remaining length of the page?
Last edited by cgnieder on Thu Aug 29, 2013 1:53 pm, edited 3 times in total.
Reason: added inline code markup


User avatar
Posts: 2313
Joined: Wed Jul 11, 2007 11:45 pm
Location: Colombia

Postby gmedina » Sat Sep 25, 2010 4:08 am


in the code below I defined a command \MyField that solves your problem:

  1. \documentclass{book}
  2. \usepackage[pdftex]{eforms}
  4. \newsavebox\mybox
  5. \newlength\mylen
  6. \newlength\fieldlen
  8. % Syntax: \MyField{title-of-the-field}{text-before-the-field}
  9. \newcommand\MyField[2]{%
  10. \sbox\mybox{#2}
  11. \settowidth\mylen{\usebox\mybox}
  12. \setlength\fieldlen{\linewidth}
  13. \addtolength\fieldlen{-\mylen}
  14. \addtolength\fieldlen{-1em}
  15. \par\noindent\usebox\mybox\hspace*{1em}\hfil\textField{#1}{\the\fieldlen}{20pt}\par\medskip
  16. }
  18. \begin{document}
  20. \MyField{field1}{Text}
  22. \MyField{field2}{Text two}
  24. \MyField{field3}{Text three is longer}
  26. \end{document}

Feel free to modify my example to suit your needs.

Posts: 10
Joined: Fri Sep 24, 2010 7:27 pm

Postby rhino7890 » Mon Sep 27, 2010 2:39 pm

Awesome! That did the trick. Thanks so much!

Posts: 1
Joined: Tue Apr 24, 2012 7:42 am

Postby martin_gm » Tue Apr 24, 2012 7:55 am

Just to clarify the herein provided solution:

You don't actually measure the remaining of the current line, you measure the beginning of the line and subtract it from \linewidth.

At least that's what the example code does. I don't know if there is actually a way to get the remainder of the line. I feel like it should be possible b/c LaTeX needs to know. How else could it produce the wonderful "overful \hbox" greetings?

Posts: 1
Joined: Wed Aug 28, 2013 12:17 pm

Postby tfrangakis » Wed Aug 28, 2013 12:36 pm

Hi all

I have been studying gmedina's code to try to solve a slightly different problem but with no answer yet - perhaps some kind soul out there can help me.

I am a lecturer and have an issue when compiling test and exam questions. The question looks something like this, where the marks shown in brackets are right justified on the last line of the problem:

  1. 1. Determine the reactions and draw the shear force and bending moment diagrams. \hfill(10 marks)

Using \hfill works well except where there is not sufficient space on the line to accommodate the marks bracket, in which case it wraps to the next line. I use (rather crudely) the code \\ \hfill\makebox{\hspace{13.3cm}(10 marks)} to get the mark allocation right justified on the succeeding line, but have to play with the hspace length to get it to look right.

Is there a way to measure the remaining space on a line and simultaneously measure the length of the marks bracket, then, in the case where the marks bracket length is larger than the remaining space get the marks bracket to right justify on the succeeding line. Note that the exact length of the marks bracket varies (consider the lengths of "(1 mark)" and "(20 marks)" and the exact text of the last line is not known until the text is compiled (as compared rhino7890's example where the exact text is known).

Thanks for your assistance.
Last edited by cgnieder on Thu Aug 29, 2013 1:47 pm, edited 1 time in total.
Reason: added code markup

User avatar
Site Moderator
Posts: 1955
Joined: Sat Apr 16, 2011 7:27 pm
Location: Germany

Postby cgnieder » Thu Aug 29, 2013 1:51 pm

Hi tfrangakis,

instead of adding a new post to a thread that has been marked as solved it would have been better to start a new thread. You could have referred to this thread by linking to it.

To me it seams you're setting various details of your exams by hand. Have you considered using a dedicated package or class such as exam, answers, probsoln or exsheets?

chemmacros, acro, leadsheets, xsim

Return to “Text Formatting”

Who is online

Users browsing this forum: MSNbot Media and 4 guests