What command should I use to be warned of this collision beforehand?
After a hunt through several subfiles, I've narrowed down what I thought was a bug down to this MWE
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newdimenR
R=.4cm
$R$
end{document}
Clearly user error. Although this is what I get for copy and pasting code without paying too close attention to the variables they use. What commands should I use to be warned of this collision in compiling instead of getting the error ! Missing number...
and having to scour several files for what this could be?
I feel like this is along the lines of def
versus newcommand
.
tex-core
add a comment |
After a hunt through several subfiles, I've narrowed down what I thought was a bug down to this MWE
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newdimenR
R=.4cm
$R$
end{document}
Clearly user error. Although this is what I get for copy and pasting code without paying too close attention to the variables they use. What commands should I use to be warned of this collision in compiling instead of getting the error ! Missing number...
and having to scour several files for what this could be?
I feel like this is along the lines of def
versus newcommand
.
tex-core
1
Use LaTeX'snewlength
instead ofnewdimen
.
– Henri Menke
Dec 19 '18 at 5:30
by the way, usetheR
instead ofR
if it is a dimen register and you want to typeset its value (in pt units)
– jfbu
Dec 19 '18 at 8:06
add a comment |
After a hunt through several subfiles, I've narrowed down what I thought was a bug down to this MWE
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newdimenR
R=.4cm
$R$
end{document}
Clearly user error. Although this is what I get for copy and pasting code without paying too close attention to the variables they use. What commands should I use to be warned of this collision in compiling instead of getting the error ! Missing number...
and having to scour several files for what this could be?
I feel like this is along the lines of def
versus newcommand
.
tex-core
After a hunt through several subfiles, I've narrowed down what I thought was a bug down to this MWE
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newdimenR
R=.4cm
$R$
end{document}
Clearly user error. Although this is what I get for copy and pasting code without paying too close attention to the variables they use. What commands should I use to be warned of this collision in compiling instead of getting the error ! Missing number...
and having to scour several files for what this could be?
I feel like this is along the lines of def
versus newcommand
.
tex-core
tex-core
asked Dec 19 '18 at 5:08
Robert Wolfe
12410
12410
1
Use LaTeX'snewlength
instead ofnewdimen
.
– Henri Menke
Dec 19 '18 at 5:30
by the way, usetheR
instead ofR
if it is a dimen register and you want to typeset its value (in pt units)
– jfbu
Dec 19 '18 at 8:06
add a comment |
1
Use LaTeX'snewlength
instead ofnewdimen
.
– Henri Menke
Dec 19 '18 at 5:30
by the way, usetheR
instead ofR
if it is a dimen register and you want to typeset its value (in pt units)
– jfbu
Dec 19 '18 at 8:06
1
1
Use LaTeX's
newlength
instead of newdimen
.– Henri Menke
Dec 19 '18 at 5:30
Use LaTeX's
newlength
instead of newdimen
.– Henri Menke
Dec 19 '18 at 5:30
by the way, use
theR
instead of R
if it is a dimen register and you want to typeset its value (in pt units)– jfbu
Dec 19 '18 at 8:06
by the way, use
theR
instead of R
if it is a dimen register and you want to typeset its value (in pt units)– jfbu
Dec 19 '18 at 8:06
add a comment |
3 Answers
3
active
oldest
votes
You should use LaTeX's newlength
and setlength
instead of newdimen
and =
assignment.
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newlengthR
setlengthR{.4cm}
$R$
end{document}
add a comment |
Yes, it's the same as the problem with def
.
The newdimen
macro comes from plain TeX and it's in LaTeX for historical reasons: in order to ease transition from plain TeX, LaTeX was loaded with a copy of plain TeX, barring a few commands that were reused (line
, for instance).
The only difference between plain TeX's and LaTeX's newdimen
is that the former is outer
and the latter isn't.
outerdefnewdimen{alloc@1dimendimendefinsc@unt} %% <-- plain TeX
defnewdimen{alloc@1dimendimendefinsc@unt} %% <--- LaTeX (up to 2015)
The LaTeX definition has slightly changed in 2015, because a different set of allocation macros was introduced to cope with the extended range of registers afforded by e-TeX.
The alloc@
macro in LaTeX was (and its current variant is) essentially the same as in plain; the dimendef
primitive (the ultimate responsible for assigning the desired meaning to foo
in newdimenfoo
) does no check for definedness of the control sequence.
The LaTeX commands that do definitions and allocations and are documented in the manual all do a check.
Users who know about newdimen
may exploit it, if they so wish, with the caveat that they should know what they're doing. And, much more important, they should not hand a preamble filled with newdimen
and def
to their mates or colleagues who aren't supposed to be TeX gurus and will be thoroughly confused by weird error messages such as Missing $
when trying to print *façon• (just because their friend's preamble had defc{gamma}
, this actually happened).
Is there a difference between newdimen
and newlength
, apart from the check? Yes, but minor: newlength
is a wrapper around plain TeX's newskip
, so it allocates a skip
register rather than a dimen
one. This difference may bite if one doesn't use LaTeX syntax for setting lengths, that is setlength
.
add a comment |
You can create a wrapper around newdimen
that gives you an error in that case.
documentclass{article}
usepackage{etoolbox}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
newcommand{newdimension}[1]{%
ifundef{#1}
{newdimen#1}
{errmessage{command expandafterstring#1 already defined - can't create dimension}}}
begin{document}
$R$
newdimension{R}
R=.4cm
$R$
newdimension{mydim}
mydim=.4cm
showthemydim
end{document}
That'll work. If there's not a native command, I'll accept this.
– Robert Wolfe
Dec 19 '18 at 5:25
As far as I know there is none, sorry...
– AndiW
Dec 19 '18 at 5:28
@AndiW Yes, there is, see my answer.
– Henri Menke
Dec 19 '18 at 5:34
Arrgghh... sometimes you don't think about the most basic things... I'll take the blame...
– AndiW
Dec 19 '18 at 5:36
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f466483%2fwhat-command-should-i-use-to-be-warned-of-this-collision-beforehand%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You should use LaTeX's newlength
and setlength
instead of newdimen
and =
assignment.
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newlengthR
setlengthR{.4cm}
$R$
end{document}
add a comment |
You should use LaTeX's newlength
and setlength
instead of newdimen
and =
assignment.
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newlengthR
setlengthR{.4cm}
$R$
end{document}
add a comment |
You should use LaTeX's newlength
and setlength
instead of newdimen
and =
assignment.
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newlengthR
setlengthR{.4cm}
$R$
end{document}
You should use LaTeX's newlength
and setlength
instead of newdimen
and =
assignment.
documentclass{article}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
begin{document}
$R$
newlengthR
setlengthR{.4cm}
$R$
end{document}
answered Dec 19 '18 at 5:31
Henri Menke
69.9k8156260
69.9k8156260
add a comment |
add a comment |
Yes, it's the same as the problem with def
.
The newdimen
macro comes from plain TeX and it's in LaTeX for historical reasons: in order to ease transition from plain TeX, LaTeX was loaded with a copy of plain TeX, barring a few commands that were reused (line
, for instance).
The only difference between plain TeX's and LaTeX's newdimen
is that the former is outer
and the latter isn't.
outerdefnewdimen{alloc@1dimendimendefinsc@unt} %% <-- plain TeX
defnewdimen{alloc@1dimendimendefinsc@unt} %% <--- LaTeX (up to 2015)
The LaTeX definition has slightly changed in 2015, because a different set of allocation macros was introduced to cope with the extended range of registers afforded by e-TeX.
The alloc@
macro in LaTeX was (and its current variant is) essentially the same as in plain; the dimendef
primitive (the ultimate responsible for assigning the desired meaning to foo
in newdimenfoo
) does no check for definedness of the control sequence.
The LaTeX commands that do definitions and allocations and are documented in the manual all do a check.
Users who know about newdimen
may exploit it, if they so wish, with the caveat that they should know what they're doing. And, much more important, they should not hand a preamble filled with newdimen
and def
to their mates or colleagues who aren't supposed to be TeX gurus and will be thoroughly confused by weird error messages such as Missing $
when trying to print *façon• (just because their friend's preamble had defc{gamma}
, this actually happened).
Is there a difference between newdimen
and newlength
, apart from the check? Yes, but minor: newlength
is a wrapper around plain TeX's newskip
, so it allocates a skip
register rather than a dimen
one. This difference may bite if one doesn't use LaTeX syntax for setting lengths, that is setlength
.
add a comment |
Yes, it's the same as the problem with def
.
The newdimen
macro comes from plain TeX and it's in LaTeX for historical reasons: in order to ease transition from plain TeX, LaTeX was loaded with a copy of plain TeX, barring a few commands that were reused (line
, for instance).
The only difference between plain TeX's and LaTeX's newdimen
is that the former is outer
and the latter isn't.
outerdefnewdimen{alloc@1dimendimendefinsc@unt} %% <-- plain TeX
defnewdimen{alloc@1dimendimendefinsc@unt} %% <--- LaTeX (up to 2015)
The LaTeX definition has slightly changed in 2015, because a different set of allocation macros was introduced to cope with the extended range of registers afforded by e-TeX.
The alloc@
macro in LaTeX was (and its current variant is) essentially the same as in plain; the dimendef
primitive (the ultimate responsible for assigning the desired meaning to foo
in newdimenfoo
) does no check for definedness of the control sequence.
The LaTeX commands that do definitions and allocations and are documented in the manual all do a check.
Users who know about newdimen
may exploit it, if they so wish, with the caveat that they should know what they're doing. And, much more important, they should not hand a preamble filled with newdimen
and def
to their mates or colleagues who aren't supposed to be TeX gurus and will be thoroughly confused by weird error messages such as Missing $
when trying to print *façon• (just because their friend's preamble had defc{gamma}
, this actually happened).
Is there a difference between newdimen
and newlength
, apart from the check? Yes, but minor: newlength
is a wrapper around plain TeX's newskip
, so it allocates a skip
register rather than a dimen
one. This difference may bite if one doesn't use LaTeX syntax for setting lengths, that is setlength
.
add a comment |
Yes, it's the same as the problem with def
.
The newdimen
macro comes from plain TeX and it's in LaTeX for historical reasons: in order to ease transition from plain TeX, LaTeX was loaded with a copy of plain TeX, barring a few commands that were reused (line
, for instance).
The only difference between plain TeX's and LaTeX's newdimen
is that the former is outer
and the latter isn't.
outerdefnewdimen{alloc@1dimendimendefinsc@unt} %% <-- plain TeX
defnewdimen{alloc@1dimendimendefinsc@unt} %% <--- LaTeX (up to 2015)
The LaTeX definition has slightly changed in 2015, because a different set of allocation macros was introduced to cope with the extended range of registers afforded by e-TeX.
The alloc@
macro in LaTeX was (and its current variant is) essentially the same as in plain; the dimendef
primitive (the ultimate responsible for assigning the desired meaning to foo
in newdimenfoo
) does no check for definedness of the control sequence.
The LaTeX commands that do definitions and allocations and are documented in the manual all do a check.
Users who know about newdimen
may exploit it, if they so wish, with the caveat that they should know what they're doing. And, much more important, they should not hand a preamble filled with newdimen
and def
to their mates or colleagues who aren't supposed to be TeX gurus and will be thoroughly confused by weird error messages such as Missing $
when trying to print *façon• (just because their friend's preamble had defc{gamma}
, this actually happened).
Is there a difference between newdimen
and newlength
, apart from the check? Yes, but minor: newlength
is a wrapper around plain TeX's newskip
, so it allocates a skip
register rather than a dimen
one. This difference may bite if one doesn't use LaTeX syntax for setting lengths, that is setlength
.
Yes, it's the same as the problem with def
.
The newdimen
macro comes from plain TeX and it's in LaTeX for historical reasons: in order to ease transition from plain TeX, LaTeX was loaded with a copy of plain TeX, barring a few commands that were reused (line
, for instance).
The only difference between plain TeX's and LaTeX's newdimen
is that the former is outer
and the latter isn't.
outerdefnewdimen{alloc@1dimendimendefinsc@unt} %% <-- plain TeX
defnewdimen{alloc@1dimendimendefinsc@unt} %% <--- LaTeX (up to 2015)
The LaTeX definition has slightly changed in 2015, because a different set of allocation macros was introduced to cope with the extended range of registers afforded by e-TeX.
The alloc@
macro in LaTeX was (and its current variant is) essentially the same as in plain; the dimendef
primitive (the ultimate responsible for assigning the desired meaning to foo
in newdimenfoo
) does no check for definedness of the control sequence.
The LaTeX commands that do definitions and allocations and are documented in the manual all do a check.
Users who know about newdimen
may exploit it, if they so wish, with the caveat that they should know what they're doing. And, much more important, they should not hand a preamble filled with newdimen
and def
to their mates or colleagues who aren't supposed to be TeX gurus and will be thoroughly confused by weird error messages such as Missing $
when trying to print *façon• (just because their friend's preamble had defc{gamma}
, this actually happened).
Is there a difference between newdimen
and newlength
, apart from the check? Yes, but minor: newlength
is a wrapper around plain TeX's newskip
, so it allocates a skip
register rather than a dimen
one. This difference may bite if one doesn't use LaTeX syntax for setting lengths, that is setlength
.
answered Dec 19 '18 at 8:59
egreg
709k8618823165
709k8618823165
add a comment |
add a comment |
You can create a wrapper around newdimen
that gives you an error in that case.
documentclass{article}
usepackage{etoolbox}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
newcommand{newdimension}[1]{%
ifundef{#1}
{newdimen#1}
{errmessage{command expandafterstring#1 already defined - can't create dimension}}}
begin{document}
$R$
newdimension{R}
R=.4cm
$R$
newdimension{mydim}
mydim=.4cm
showthemydim
end{document}
That'll work. If there's not a native command, I'll accept this.
– Robert Wolfe
Dec 19 '18 at 5:25
As far as I know there is none, sorry...
– AndiW
Dec 19 '18 at 5:28
@AndiW Yes, there is, see my answer.
– Henri Menke
Dec 19 '18 at 5:34
Arrgghh... sometimes you don't think about the most basic things... I'll take the blame...
– AndiW
Dec 19 '18 at 5:36
add a comment |
You can create a wrapper around newdimen
that gives you an error in that case.
documentclass{article}
usepackage{etoolbox}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
newcommand{newdimension}[1]{%
ifundef{#1}
{newdimen#1}
{errmessage{command expandafterstring#1 already defined - can't create dimension}}}
begin{document}
$R$
newdimension{R}
R=.4cm
$R$
newdimension{mydim}
mydim=.4cm
showthemydim
end{document}
That'll work. If there's not a native command, I'll accept this.
– Robert Wolfe
Dec 19 '18 at 5:25
As far as I know there is none, sorry...
– AndiW
Dec 19 '18 at 5:28
@AndiW Yes, there is, see my answer.
– Henri Menke
Dec 19 '18 at 5:34
Arrgghh... sometimes you don't think about the most basic things... I'll take the blame...
– AndiW
Dec 19 '18 at 5:36
add a comment |
You can create a wrapper around newdimen
that gives you an error in that case.
documentclass{article}
usepackage{etoolbox}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
newcommand{newdimension}[1]{%
ifundef{#1}
{newdimen#1}
{errmessage{command expandafterstring#1 already defined - can't create dimension}}}
begin{document}
$R$
newdimension{R}
R=.4cm
$R$
newdimension{mydim}
mydim=.4cm
showthemydim
end{document}
You can create a wrapper around newdimen
that gives you an error in that case.
documentclass{article}
usepackage{etoolbox}
usepackage{amsmath, amssymb}
newcommand{R}{mathbb{R}}
newcommand{newdimension}[1]{%
ifundef{#1}
{newdimen#1}
{errmessage{command expandafterstring#1 already defined - can't create dimension}}}
begin{document}
$R$
newdimension{R}
R=.4cm
$R$
newdimension{mydim}
mydim=.4cm
showthemydim
end{document}
answered Dec 19 '18 at 5:21
AndiW
233211
233211
That'll work. If there's not a native command, I'll accept this.
– Robert Wolfe
Dec 19 '18 at 5:25
As far as I know there is none, sorry...
– AndiW
Dec 19 '18 at 5:28
@AndiW Yes, there is, see my answer.
– Henri Menke
Dec 19 '18 at 5:34
Arrgghh... sometimes you don't think about the most basic things... I'll take the blame...
– AndiW
Dec 19 '18 at 5:36
add a comment |
That'll work. If there's not a native command, I'll accept this.
– Robert Wolfe
Dec 19 '18 at 5:25
As far as I know there is none, sorry...
– AndiW
Dec 19 '18 at 5:28
@AndiW Yes, there is, see my answer.
– Henri Menke
Dec 19 '18 at 5:34
Arrgghh... sometimes you don't think about the most basic things... I'll take the blame...
– AndiW
Dec 19 '18 at 5:36
That'll work. If there's not a native command, I'll accept this.
– Robert Wolfe
Dec 19 '18 at 5:25
That'll work. If there's not a native command, I'll accept this.
– Robert Wolfe
Dec 19 '18 at 5:25
As far as I know there is none, sorry...
– AndiW
Dec 19 '18 at 5:28
As far as I know there is none, sorry...
– AndiW
Dec 19 '18 at 5:28
@AndiW Yes, there is, see my answer.
– Henri Menke
Dec 19 '18 at 5:34
@AndiW Yes, there is, see my answer.
– Henri Menke
Dec 19 '18 at 5:34
Arrgghh... sometimes you don't think about the most basic things... I'll take the blame...
– AndiW
Dec 19 '18 at 5:36
Arrgghh... sometimes you don't think about the most basic things... I'll take the blame...
– AndiW
Dec 19 '18 at 5:36
add a comment |
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f466483%2fwhat-command-should-i-use-to-be-warned-of-this-collision-beforehand%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Use LaTeX's
newlength
instead ofnewdimen
.– Henri Menke
Dec 19 '18 at 5:30
by the way, use
theR
instead ofR
if it is a dimen register and you want to typeset its value (in pt units)– jfbu
Dec 19 '18 at 8:06