In LaTeX, how can I define a string variable whose content is used instead of the variable in the compiled PDF?
Let's say I'm writing a tech doc on a software and I want to define the package name in the preamble or somewhere so that if its name changes, I don't have to replace it in a lot of places but only in one place.
add the following to you preamble:
\newcommand{\newCommandName}{text to insert}
Then you can just use \newCommandName{}
in the text
For more info on \newcommand
, see e.g. wikibooks
Example:
\documentclass{article}
\newcommand\x{30}
\begin{document}
\x
\end{document}
Output:
30
Use \def
command:
\def \variable {Something that's better to use as a variable}
Be aware that \def
overrides preexisting macros without any warnings and therefore can cause various subtle errors. To overcome this either use namespaced variables like my_var
or fall back to \newcommand
, \renewcommand
commands instead.
\def
can be problematic as it does not check for preexisting macros. See the second circle of LaTeX hell – as such, it is preferable to use \newcommand
variable
mean that it's liable to change? :)
\def
. Instead, I think it's best practice to first "initialize" all variables that you want to use with \newcommand
(even if it's just with \@empty
), and then create your command to modify the variable using \renewcommand
. This will let you know if your variable already exits, because \newcommand
will throw an error (or at least a warning).
\def
works for things in math mode, while \newCommandName
does not. (E.g., \def\mathExpression{\pi^2 + \sin x}
)
myVar
For variables describing distances, you would use \newlength
(and manipulate the values with \setlength
, \addlength
, \settoheight
, \settolength
and \settodepth
).
Similarly you have access to \newcounter
for things like section and figure numbers which should increment throughout the document. I've used this one in the past to provide code samples that were numbered separatly of other figures...
Also of note is \makebox
which allows you to store a bit of laid-out document for later re-use (and for use with \settolength
...).
\newlength{\hcolw}
and \setlength{\hcolw}{0.47\textwidth}
would be useful.
If you want to use \newcommand
, you can also include \usepackage{xspace}
and define command by \newcommand{\newCommandName}{text to insert\xspace}
. This can allow you to just use \newCommandName
rather than \newCommandName{}
.
For more detail, http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html
I think you probably want to use a token list for this purpose: to set up the token list \newtoks\packagename
to assign the name: \packagename={New Name for the package}
to put the name into your output: \the\packagename
.
This works for me: \newcommand{\variablename}{the text}
For eg: \newcommand\m{100}
So when you type " \m\ is my mark " in the source code,
the pdf output displays as :
100 is my mark
Success story sharing