Remove math mode in macro defined text
I would like to remove the math mode in a text that is not defined directly, but in a macro. Here is my code:
documentclass{book}
begingroup
lccode`~=`$
lowercase{endgroup
def~#1~{ignorespaces}%
}
defremovemath{%
begingroup
catcode`$=active
removemathX
}
defremovemathX#1{%
#1
endgroup
}
edefnomath#1{
removemath{#1}
}
begin{document}
chapter{XXXXXX}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{aaaa}
nomath{aaaa}
end{document}
In this example, the first removemath
works, but the second removemath
and nomath
does not work.
I am not sure why. Is it an expansion problem? Maybe something else?
Can someone suggest a solution?
math-mode expansion
add a comment |
I would like to remove the math mode in a text that is not defined directly, but in a macro. Here is my code:
documentclass{book}
begingroup
lccode`~=`$
lowercase{endgroup
def~#1~{ignorespaces}%
}
defremovemath{%
begingroup
catcode`$=active
removemathX
}
defremovemathX#1{%
#1
endgroup
}
edefnomath#1{
removemath{#1}
}
begin{document}
chapter{XXXXXX}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{aaaa}
nomath{aaaa}
end{document}
In this example, the first removemath
works, but the second removemath
and nomath
does not work.
I am not sure why. Is it an expansion problem? Maybe something else?
Can someone suggest a solution?
math-mode expansion
1
removemath is using catcode changes so will only work at the top level, the characters inaaaa
have already been tokenised so catcode changes have no effect. However it isn't clear why you are using catcode changes, you copuld use a delimited argument on a normal catcode$
.
– David Carlisle
Jan 25 at 22:15
add a comment |
I would like to remove the math mode in a text that is not defined directly, but in a macro. Here is my code:
documentclass{book}
begingroup
lccode`~=`$
lowercase{endgroup
def~#1~{ignorespaces}%
}
defremovemath{%
begingroup
catcode`$=active
removemathX
}
defremovemathX#1{%
#1
endgroup
}
edefnomath#1{
removemath{#1}
}
begin{document}
chapter{XXXXXX}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{aaaa}
nomath{aaaa}
end{document}
In this example, the first removemath
works, but the second removemath
and nomath
does not work.
I am not sure why. Is it an expansion problem? Maybe something else?
Can someone suggest a solution?
math-mode expansion
I would like to remove the math mode in a text that is not defined directly, but in a macro. Here is my code:
documentclass{book}
begingroup
lccode`~=`$
lowercase{endgroup
def~#1~{ignorespaces}%
}
defremovemath{%
begingroup
catcode`$=active
removemathX
}
defremovemathX#1{%
#1
endgroup
}
edefnomath#1{
removemath{#1}
}
begin{document}
chapter{XXXXXX}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
removemath{aaaa}
nomath{aaaa}
end{document}
In this example, the first removemath
works, but the second removemath
and nomath
does not work.
I am not sure why. Is it an expansion problem? Maybe something else?
Can someone suggest a solution?
math-mode expansion
math-mode expansion
asked Jan 25 at 22:12
Peter IvanyiPeter Ivanyi
273
273
1
removemath is using catcode changes so will only work at the top level, the characters inaaaa
have already been tokenised so catcode changes have no effect. However it isn't clear why you are using catcode changes, you copuld use a delimited argument on a normal catcode$
.
– David Carlisle
Jan 25 at 22:15
add a comment |
1
removemath is using catcode changes so will only work at the top level, the characters inaaaa
have already been tokenised so catcode changes have no effect. However it isn't clear why you are using catcode changes, you copuld use a delimited argument on a normal catcode$
.
– David Carlisle
Jan 25 at 22:15
1
1
removemath is using catcode changes so will only work at the top level, the characters in
aaaa
have already been tokenised so catcode changes have no effect. However it isn't clear why you are using catcode changes, you copuld use a delimited argument on a normal catcode $
.– David Carlisle
Jan 25 at 22:15
removemath is using catcode changes so will only work at the top level, the characters in
aaaa
have already been tokenised so catcode changes have no effect. However it isn't clear why you are using catcode changes, you copuld use a delimited argument on a normal catcode $
.– David Carlisle
Jan 25 at 22:15
add a comment |
1 Answer
1
active
oldest
votes
You can remove one formula at a time:
documentclass{book}
makeatletter
newcommand{removemath}[1]{%
expandafterremovemath@#1$$@nil
}
defremovemath@#1$#2$#3@nil{%
#1%
ifrelaxdetokenize{#3}relax
expandafter@gobble
else
expandafter@firstofone
fi
{removemath@#3@nil}%
}
makeatother
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
The same with a regular expression approach:
documentclass{book}
usepackage{xparse}
ExplSyntaxOn
NewDocumentCommand{removemath}{m}
{
peter_removemath:o { #1 }
}
cs_new_protected:Nn peter_removemath:n
{
tl_set:Nn l__peter_removemath_tl { #1 }
regex_replace_all:nnN { $ [^$]* $ } {} l__peter_removemath_tl
l__peter_removemath_tl
}
cs_generate_variant:Nn peter_removemath:n { o }
tl_new:N l__peter_removemath_tl
ExplSyntaxOff
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
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%2f471898%2fremove-math-mode-in-macro-defined-text%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can remove one formula at a time:
documentclass{book}
makeatletter
newcommand{removemath}[1]{%
expandafterremovemath@#1$$@nil
}
defremovemath@#1$#2$#3@nil{%
#1%
ifrelaxdetokenize{#3}relax
expandafter@gobble
else
expandafter@firstofone
fi
{removemath@#3@nil}%
}
makeatother
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
The same with a regular expression approach:
documentclass{book}
usepackage{xparse}
ExplSyntaxOn
NewDocumentCommand{removemath}{m}
{
peter_removemath:o { #1 }
}
cs_new_protected:Nn peter_removemath:n
{
tl_set:Nn l__peter_removemath_tl { #1 }
regex_replace_all:nnN { $ [^$]* $ } {} l__peter_removemath_tl
l__peter_removemath_tl
}
cs_generate_variant:Nn peter_removemath:n { o }
tl_new:N l__peter_removemath_tl
ExplSyntaxOff
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
add a comment |
You can remove one formula at a time:
documentclass{book}
makeatletter
newcommand{removemath}[1]{%
expandafterremovemath@#1$$@nil
}
defremovemath@#1$#2$#3@nil{%
#1%
ifrelaxdetokenize{#3}relax
expandafter@gobble
else
expandafter@firstofone
fi
{removemath@#3@nil}%
}
makeatother
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
The same with a regular expression approach:
documentclass{book}
usepackage{xparse}
ExplSyntaxOn
NewDocumentCommand{removemath}{m}
{
peter_removemath:o { #1 }
}
cs_new_protected:Nn peter_removemath:n
{
tl_set:Nn l__peter_removemath_tl { #1 }
regex_replace_all:nnN { $ [^$]* $ } {} l__peter_removemath_tl
l__peter_removemath_tl
}
cs_generate_variant:Nn peter_removemath:n { o }
tl_new:N l__peter_removemath_tl
ExplSyntaxOff
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
add a comment |
You can remove one formula at a time:
documentclass{book}
makeatletter
newcommand{removemath}[1]{%
expandafterremovemath@#1$$@nil
}
defremovemath@#1$#2$#3@nil{%
#1%
ifrelaxdetokenize{#3}relax
expandafter@gobble
else
expandafter@firstofone
fi
{removemath@#3@nil}%
}
makeatother
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
The same with a regular expression approach:
documentclass{book}
usepackage{xparse}
ExplSyntaxOn
NewDocumentCommand{removemath}{m}
{
peter_removemath:o { #1 }
}
cs_new_protected:Nn peter_removemath:n
{
tl_set:Nn l__peter_removemath_tl { #1 }
regex_replace_all:nnN { $ [^$]* $ } {} l__peter_removemath_tl
l__peter_removemath_tl
}
cs_generate_variant:Nn peter_removemath:n { o }
tl_new:N l__peter_removemath_tl
ExplSyntaxOff
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
You can remove one formula at a time:
documentclass{book}
makeatletter
newcommand{removemath}[1]{%
expandafterremovemath@#1$$@nil
}
defremovemath@#1$#2$#3@nil{%
#1%
ifrelaxdetokenize{#3}relax
expandafter@gobble
else
expandafter@firstofone
fi
{removemath@#3@nil}%
}
makeatother
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
The same with a regular expression approach:
documentclass{book}
usepackage{xparse}
ExplSyntaxOn
NewDocumentCommand{removemath}{m}
{
peter_removemath:o { #1 }
}
cs_new_protected:Nn peter_removemath:n
{
tl_set:Nn l__peter_removemath_tl { #1 }
regex_replace_all:nnN { $ [^$]* $ } {} l__peter_removemath_tl
l__peter_removemath_tl
}
cs_generate_variant:Nn peter_removemath:n { o }
tl_new:N l__peter_removemath_tl
ExplSyntaxOff
begin{document}
newcommandaaaa{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD$^{4}$}--
--removemath{AAA$^{1}$, BBB$^{2}$, CCC$^{3}$, DDD}--
--removemath{AAA$^{1}$, BBB, CCC$^{3}$, DDD}--
--removemath{aaaa}--
end{document}
edited Jan 25 at 23:18
answered Jan 25 at 23:13
egregegreg
717k8619023191
717k8619023191
add a comment |
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.
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%2f471898%2fremove-math-mode-in-macro-defined-text%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
removemath is using catcode changes so will only work at the top level, the characters in
aaaa
have already been tokenised so catcode changes have no effect. However it isn't clear why you are using catcode changes, you copuld use a delimited argument on a normal catcode$
.– David Carlisle
Jan 25 at 22:15