Process LaTeX code only if package is loaded The 2019 Stack Overflow Developer Survey Results...

Why didn't the Event Horizon Telescope team mention Sagittarius A*?

Is it safe to harvest rainwater that fell on solar panels?

Getting crown tickets for Statue of Liberty

Did any laptop computers have a built-in 5 1/4 inch floppy drive?

Loose spokes after only a few rides

Ubuntu Server install with full GUI

How to notate time signature switching consistently every measure

Why couldn't they take pictures of a closer black hole?

A word that means fill it to the required quantity

Inverse Relationship Between Precision and Recall

What's the name of these plastic connectors

Why doesn't UInt have a toDouble()?

Are spiders unable to hurt humans, especially very small spiders?

Does HR tell a hiring manager about salary negotiations?

Geography at the pixel level

How to support a colleague who finds meetings extremely tiring?

Old scifi movie from the 50s or 60s with men in solid red uniforms who interrogate a spy from the past

If I score a critical hit on an 18 or higher, what are my chances of getting a critical hit if I roll 3d20?

I am an eight letter word. What am I?

What is the most efficient way to store a numeric range?

Star Trek - X-shaped Item on Regula/Orbital Office Starbases

Worn-tile Scrabble

Is bread bad for ducks?

Kerning for subscripts of sigma?



Process LaTeX code only if package is loaded



The 2019 Stack Overflow Developer Survey Results Are InWhat do makeatletter and makeatother do?Why is the wrong version of a package being loaded?Did I install a package successfully?LaTeX Errors: “RequirePackage or LoadClass in Options Section.” AND “File 'article.cls' not found.”Unload a LaTeX packageKantlipsum installation processApplying options to already loaded packagePretending a package has been loadedPackage won't get loadedusetikzlibrary{positioning} in an expl3 package but PGF Math Error: Unknown function `of'mcode package with java code












4















I would like to create a document used to test diverse packages, and I was wondering if it was possible to use a command so that part of the code is read only if the corresponding package is loaded. I've come up with this but it throws an error which I don't know how to fix.



documentclass{article}
usepackage[utf8]{inputenc}

makeatletter
newcommand{IfPackageLoaded}[3]{@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error:



! LaTeX Error: Can be used only in preamble.

See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...

l.10 IfPackageLoaded{natbib}{natbib loaded}
{natbib not loaded}
Your command was ignored.
Type I <command> <return> to replace it with another command,
or <return> to continue without it.


I also know that the command ltx@ifpackageloaded exists when loading the package ltxcmds but when I try to use it in



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

begin{document}
ltx@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error message:



! Undefined control sequence.
l.11 ltx
@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
The control sequence at the end of the top line
of your error message was never def'ed. If you have
misspelled it (e.g., `hobx'), type `I' and the correct
spelling (e.g., `Ihbox'). Otherwise just continue,
and I'll forget about whatever was undefined.


Can someone please point out what I did wrong?



EDIT: changed documentclass from minimal to article.










share|improve this question









New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 2





    You are missing the makeatletter in your second example. And don't use the minimal class, normally it is too minimal.

    – Ulrike Fischer
    yesterday













  • Read more: tex.stackexchange.com/q/8351/156344

    – JouleV
    yesterday











  • It is said in the ltxcmds documentation that ltx@ifpackageloaded can be used after begin{document} though.

    – lashoun
    yesterday













  • But even then it can only be used if you wrap it in makeatletter...makeatother because it has an @ in its name.

    – moewe
    yesterday













  • Oooh, that's why! I'll try then.

    – lashoun
    yesterday
















4















I would like to create a document used to test diverse packages, and I was wondering if it was possible to use a command so that part of the code is read only if the corresponding package is loaded. I've come up with this but it throws an error which I don't know how to fix.



documentclass{article}
usepackage[utf8]{inputenc}

makeatletter
newcommand{IfPackageLoaded}[3]{@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error:



! LaTeX Error: Can be used only in preamble.

See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...

l.10 IfPackageLoaded{natbib}{natbib loaded}
{natbib not loaded}
Your command was ignored.
Type I <command> <return> to replace it with another command,
or <return> to continue without it.


I also know that the command ltx@ifpackageloaded exists when loading the package ltxcmds but when I try to use it in



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

begin{document}
ltx@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error message:



! Undefined control sequence.
l.11 ltx
@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
The control sequence at the end of the top line
of your error message was never def'ed. If you have
misspelled it (e.g., `hobx'), type `I' and the correct
spelling (e.g., `Ihbox'). Otherwise just continue,
and I'll forget about whatever was undefined.


Can someone please point out what I did wrong?



EDIT: changed documentclass from minimal to article.










share|improve this question









New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 2





    You are missing the makeatletter in your second example. And don't use the minimal class, normally it is too minimal.

    – Ulrike Fischer
    yesterday













  • Read more: tex.stackexchange.com/q/8351/156344

    – JouleV
    yesterday











  • It is said in the ltxcmds documentation that ltx@ifpackageloaded can be used after begin{document} though.

    – lashoun
    yesterday













  • But even then it can only be used if you wrap it in makeatletter...makeatother because it has an @ in its name.

    – moewe
    yesterday













  • Oooh, that's why! I'll try then.

    – lashoun
    yesterday














4












4








4








I would like to create a document used to test diverse packages, and I was wondering if it was possible to use a command so that part of the code is read only if the corresponding package is loaded. I've come up with this but it throws an error which I don't know how to fix.



documentclass{article}
usepackage[utf8]{inputenc}

makeatletter
newcommand{IfPackageLoaded}[3]{@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error:



! LaTeX Error: Can be used only in preamble.

See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...

l.10 IfPackageLoaded{natbib}{natbib loaded}
{natbib not loaded}
Your command was ignored.
Type I <command> <return> to replace it with another command,
or <return> to continue without it.


I also know that the command ltx@ifpackageloaded exists when loading the package ltxcmds but when I try to use it in



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

begin{document}
ltx@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error message:



! Undefined control sequence.
l.11 ltx
@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
The control sequence at the end of the top line
of your error message was never def'ed. If you have
misspelled it (e.g., `hobx'), type `I' and the correct
spelling (e.g., `Ihbox'). Otherwise just continue,
and I'll forget about whatever was undefined.


Can someone please point out what I did wrong?



EDIT: changed documentclass from minimal to article.










share|improve this question









New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I would like to create a document used to test diverse packages, and I was wondering if it was possible to use a command so that part of the code is read only if the corresponding package is loaded. I've come up with this but it throws an error which I don't know how to fix.



documentclass{article}
usepackage[utf8]{inputenc}

makeatletter
newcommand{IfPackageLoaded}[3]{@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error:



! LaTeX Error: Can be used only in preamble.

See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...

l.10 IfPackageLoaded{natbib}{natbib loaded}
{natbib not loaded}
Your command was ignored.
Type I <command> <return> to replace it with another command,
or <return> to continue without it.


I also know that the command ltx@ifpackageloaded exists when loading the package ltxcmds but when I try to use it in



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

begin{document}
ltx@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
end{document}


I get this error message:



! Undefined control sequence.
l.11 ltx
@ifpackageloaded{natbib}{natbib loaded}{natbib not loaded}
The control sequence at the end of the top line
of your error message was never def'ed. If you have
misspelled it (e.g., `hobx'), type `I' and the correct
spelling (e.g., `Ihbox'). Otherwise just continue,
and I'll forget about whatever was undefined.


Can someone please point out what I did wrong?



EDIT: changed documentclass from minimal to article.







packages






share|improve this question









New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday







lashoun













New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked yesterday









lashounlashoun

615




615




New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 2





    You are missing the makeatletter in your second example. And don't use the minimal class, normally it is too minimal.

    – Ulrike Fischer
    yesterday













  • Read more: tex.stackexchange.com/q/8351/156344

    – JouleV
    yesterday











  • It is said in the ltxcmds documentation that ltx@ifpackageloaded can be used after begin{document} though.

    – lashoun
    yesterday













  • But even then it can only be used if you wrap it in makeatletter...makeatother because it has an @ in its name.

    – moewe
    yesterday













  • Oooh, that's why! I'll try then.

    – lashoun
    yesterday














  • 2





    You are missing the makeatletter in your second example. And don't use the minimal class, normally it is too minimal.

    – Ulrike Fischer
    yesterday













  • Read more: tex.stackexchange.com/q/8351/156344

    – JouleV
    yesterday











  • It is said in the ltxcmds documentation that ltx@ifpackageloaded can be used after begin{document} though.

    – lashoun
    yesterday













  • But even then it can only be used if you wrap it in makeatletter...makeatother because it has an @ in its name.

    – moewe
    yesterday













  • Oooh, that's why! I'll try then.

    – lashoun
    yesterday








2




2





You are missing the makeatletter in your second example. And don't use the minimal class, normally it is too minimal.

– Ulrike Fischer
yesterday







You are missing the makeatletter in your second example. And don't use the minimal class, normally it is too minimal.

– Ulrike Fischer
yesterday















Read more: tex.stackexchange.com/q/8351/156344

– JouleV
yesterday





Read more: tex.stackexchange.com/q/8351/156344

– JouleV
yesterday













It is said in the ltxcmds documentation that ltx@ifpackageloaded can be used after begin{document} though.

– lashoun
yesterday







It is said in the ltxcmds documentation that ltx@ifpackageloaded can be used after begin{document} though.

– lashoun
yesterday















But even then it can only be used if you wrap it in makeatletter...makeatother because it has an @ in its name.

– moewe
yesterday







But even then it can only be used if you wrap it in makeatletter...makeatother because it has an @ in its name.

– moewe
yesterday















Oooh, that's why! I'll try then.

– lashoun
yesterday





Oooh, that's why! I'll try then.

– lashoun
yesterday










1 Answer
1






active

oldest

votes


















4














As users Ulrike Fischer and moewe pointed out, this works:



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

makeatletter
newcommand{IfPackageLoaded}[3]{ltx@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}





share|improve this answer










New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 2





    BTW: The [3] is not needed. You can simply use newcommand*{IfPackageLoaded}{ltx@ifpackageloaded}.

    – Schweinebacke
    yesterday













  • @Schweinebacke RIght; also letIfPackageLoadedltx@ifpackageloaded

    – egreg
    yesterday











  • @egreg Yes, because ltx@ifpackageloaded is a simple macro. If it would be, e.g., robust, it could be better to use LetLtxMacro from package letltxmacro. I didn't want to explain all this, so I've only noted about using newcommand* without arguments.

    – Schweinebacke
    yesterday













  • Thanks for the precisions

    – lashoun
    yesterday












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
});


}
});






lashoun is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f484088%2fprocess-latex-code-only-if-package-is-loaded%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









4














As users Ulrike Fischer and moewe pointed out, this works:



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

makeatletter
newcommand{IfPackageLoaded}[3]{ltx@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}





share|improve this answer










New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 2





    BTW: The [3] is not needed. You can simply use newcommand*{IfPackageLoaded}{ltx@ifpackageloaded}.

    – Schweinebacke
    yesterday













  • @Schweinebacke RIght; also letIfPackageLoadedltx@ifpackageloaded

    – egreg
    yesterday











  • @egreg Yes, because ltx@ifpackageloaded is a simple macro. If it would be, e.g., robust, it could be better to use LetLtxMacro from package letltxmacro. I didn't want to explain all this, so I've only noted about using newcommand* without arguments.

    – Schweinebacke
    yesterday













  • Thanks for the precisions

    – lashoun
    yesterday
















4














As users Ulrike Fischer and moewe pointed out, this works:



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

makeatletter
newcommand{IfPackageLoaded}[3]{ltx@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}





share|improve this answer










New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 2





    BTW: The [3] is not needed. You can simply use newcommand*{IfPackageLoaded}{ltx@ifpackageloaded}.

    – Schweinebacke
    yesterday













  • @Schweinebacke RIght; also letIfPackageLoadedltx@ifpackageloaded

    – egreg
    yesterday











  • @egreg Yes, because ltx@ifpackageloaded is a simple macro. If it would be, e.g., robust, it could be better to use LetLtxMacro from package letltxmacro. I didn't want to explain all this, so I've only noted about using newcommand* without arguments.

    – Schweinebacke
    yesterday













  • Thanks for the precisions

    – lashoun
    yesterday














4












4








4







As users Ulrike Fischer and moewe pointed out, this works:



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

makeatletter
newcommand{IfPackageLoaded}[3]{ltx@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}





share|improve this answer










New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.










As users Ulrike Fischer and moewe pointed out, this works:



documentclass{article}
usepackage[utf8]{inputenc}
usepackage{ltxcmds}

makeatletter
newcommand{IfPackageLoaded}[3]{ltx@ifpackageloaded{#1}{#2}{#3}}
makeatother

begin{document}
IfPackageLoaded{natbib}{natbib loaded}{natbib not loaded}
end{document}






share|improve this answer










New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this answer



share|improve this answer








edited yesterday









Schweinebacke

22.5k4577




22.5k4577






New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









answered yesterday









lashounlashoun

615




615




New contributor




lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






lashoun is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 2





    BTW: The [3] is not needed. You can simply use newcommand*{IfPackageLoaded}{ltx@ifpackageloaded}.

    – Schweinebacke
    yesterday













  • @Schweinebacke RIght; also letIfPackageLoadedltx@ifpackageloaded

    – egreg
    yesterday











  • @egreg Yes, because ltx@ifpackageloaded is a simple macro. If it would be, e.g., robust, it could be better to use LetLtxMacro from package letltxmacro. I didn't want to explain all this, so I've only noted about using newcommand* without arguments.

    – Schweinebacke
    yesterday













  • Thanks for the precisions

    – lashoun
    yesterday














  • 2





    BTW: The [3] is not needed. You can simply use newcommand*{IfPackageLoaded}{ltx@ifpackageloaded}.

    – Schweinebacke
    yesterday













  • @Schweinebacke RIght; also letIfPackageLoadedltx@ifpackageloaded

    – egreg
    yesterday











  • @egreg Yes, because ltx@ifpackageloaded is a simple macro. If it would be, e.g., robust, it could be better to use LetLtxMacro from package letltxmacro. I didn't want to explain all this, so I've only noted about using newcommand* without arguments.

    – Schweinebacke
    yesterday













  • Thanks for the precisions

    – lashoun
    yesterday








2




2





BTW: The [3] is not needed. You can simply use newcommand*{IfPackageLoaded}{ltx@ifpackageloaded}.

– Schweinebacke
yesterday







BTW: The [3] is not needed. You can simply use newcommand*{IfPackageLoaded}{ltx@ifpackageloaded}.

– Schweinebacke
yesterday















@Schweinebacke RIght; also letIfPackageLoadedltx@ifpackageloaded

– egreg
yesterday





@Schweinebacke RIght; also letIfPackageLoadedltx@ifpackageloaded

– egreg
yesterday













@egreg Yes, because ltx@ifpackageloaded is a simple macro. If it would be, e.g., robust, it could be better to use LetLtxMacro from package letltxmacro. I didn't want to explain all this, so I've only noted about using newcommand* without arguments.

– Schweinebacke
yesterday







@egreg Yes, because ltx@ifpackageloaded is a simple macro. If it would be, e.g., robust, it could be better to use LetLtxMacro from package letltxmacro. I didn't want to explain all this, so I've only noted about using newcommand* without arguments.

– Schweinebacke
yesterday















Thanks for the precisions

– lashoun
yesterday





Thanks for the precisions

– lashoun
yesterday










lashoun is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















lashoun is a new contributor. Be nice, and check out our Code of Conduct.













lashoun is a new contributor. Be nice, and check out our Code of Conduct.












lashoun is a new contributor. Be nice, and check out our Code of Conduct.
















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.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f484088%2fprocess-latex-code-only-if-package-is-loaded%23new-answer', 'question_page');
}
);

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







Popular posts from this blog

Cannot install PyQt5 The Next CEO of Stack OverflowCannot install tcpreplay 3.4.4cannot...

Kapp-Putsch Acontecimentos | Outros artigos | Menu de navegação

Why did early computer designers eschew integers? The Next CEO of Stack OverflowWhat register...