Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I wrote the following LaTeX documents.

\documentclass[11pt]{book}

\newlength{\mywidth}
\newlength{\myheight}
\setlength{\mywidth}{85mm}
\setlength{\myheight}{112mm}

\newcommand{\setpagesize}[2]{%
  \special{papersize=#1,#2}%
}

\setpagesize{\mywidth}{\myheight}

\begin{document}
The quick brown fox jumps over the lazy dog
\end{document}

I got following error messages from dvipdfmxand failed.

$ latex abc.tex
$ dvipdfmx abc.dvi 
abc.dvi -> abc.pdf

** WARNING ** Reading special command failed: "papersize=\mywidth ,\myheight "
[1
** WARNING ** Reading special command failed: "papersize=\mywidth ,\myheight "
]
4327 bytes written

When I use \def in place of \newlength and \setlength, it worked.

\documentclass[11pt]{book}

\def\mywidth{85mm}
\def\myheight{112mm}

\newcommand{\setpagesize}[2]{%
  \special{papersize=#1,#2}%
}
% ...


$ latex abc.tex
$ dvipdfmx abc.dvi 
abc.dvi -> abc.pdf
[1]
4331 bytes written

Why?

share|improve this question
    
I can't reproduce that with my version of dvipdfmx. Perhaps try changing \setpagesize{\mywidth}{\myheight} to \setpagesize{\the\mywidth}{\the\myheight}? –  Bruno Le Floch Apr 13 '11 at 14:50
    
@Bruno: I didn't get an error too, but I didn't get a sensible pagesize either. \the is certainly needed. –  Ulrike Fischer Apr 13 '11 at 15:30
    
Thank you for your response. My version of dvipdfmx is "dvipdfmx-20110311 by the DVIPDFMx project team, an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks". –  SAEKI Yoshiyasu Apr 13 '11 at 21:45
    
Since you have some responses below that seem to answer your question, please consider marking one of them as ‘Accepted’ by clicking on the tickmark below their vote count. This shows which answer helped you most, and it assigns reputation points to the author of the answer (and to you!). –  Martin Scharrer May 12 '11 at 0:15
add comment

2 Answers 2

\newlength is a LaTeX macro which defines a new length register, which holds a length as number and can be used for calculations (e.g. using \addtolength). The \def macro is the primitive version of \(re)newcommand and simply defines the content as string.

In your case you want to place the length as string inside the \special which is written into the DVI file. However, if you use the length register like \mywidth directly it doesn't return its value as string but awaits some operation like an assignment. You need to write \the\mywidth to get the string representation of the length register. However, a macro defined using \def is simply expanded by \special and its string content is simply added to the DVI.

share|improve this answer
add comment

\mywidth is a length register, not a value. In some places it can be used as if it were a value, but if e.g. you would use simply \mywidth in the middle of your text you would get an error. You get the value of a length register with \the. So try \setpagesize{\the\mywidth}{\the\myheight}

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.