Есть ли способ определить переменную в LaTeX?

350

В LaTeX, как я могу определить строковую переменную, содержимое которой используется вместо переменной в скомпилированном PDF?

Допустим, я пишу технический документ по программному обеспечению и хочу определить имя пакета в преамбуле или где-то еще, чтобы в случае изменения его имени мне не приходилось заменять его во многих местах, а только в одном месте. ,

Андреа Джоваччини
источник
2
Для огромного контента стоит упомянуть \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ).
Иммануил Вейнахтен

Ответы:

371

добавьте к преамбуле следующее:

\newcommand{\newCommandName}{text to insert}

Тогда вы можете просто использовать \newCommandName{}в тексте

Для получения дополнительной информации \newcommandсм., Например, викибуки

Пример:

\documentclass{article}
\newcommand\x{30}
\begin{document}
\x
\end{document}

Вывод:

30
второй
источник
31
@DiAlex будьте осторожны, опуская фигурные скобки, так как это приведет к появлению пробела после вставленного текста. Смотрите этот вопрос .
Jtpereyda
Я не могу заставить это работать должным образом с не-ascii символами. Любые идеи?
Линд
164

Используйте \defкоманду:

\def \variable {Something that's better to use as a variable}

Имейте в виду, что \defпереопределяет существующие макросы без каких-либо предупреждений и, следовательно, может вызвать различные незначительные ошибки. Чтобы преодолеть это, используйте вместо этого переменные пространства имен, например, my_varили \newcommandиспользуйте \renewcommandкоманды.

plaes
источник
10
Использование \defможет быть проблематичным, так как оно не проверяет наличие существующих макросов. Посмотрите на второй круг LaTeX-ада - как таковой, его предпочтительно использовать\newcommand
Райан Аталла
2
Спасибо @RyanAtallah добавил примечание об этом. Хотя не означает ли variableэто, что оно может измениться? :)
Plaes
4
@plaes Вы правы, но это еще не значит, что вы хотите использовать \def. Вместо этого я думаю, что лучше всего сначала «инициализировать» все переменные, с которыми вы хотите использовать \newcommand(даже если они только с \@empty), а затем создать команду для изменения переменной с помощью \renewcommand. Это даст вам знать, если ваша переменная уже завершена, потому что \newcommandвыдаст ошибку (или, по крайней мере, предупреждение).
Nick2253
4
Обратите внимание, что \defработает для вещей в математическом режиме, но \newCommandNameне работает. (Например, \def\mathExpression{\pi^2 + \sin x})
Jollywatt
35

Для переменных описания расстояния, можно использовать \newlength(и манипулировать значения с \setlength, \addlength, \settoheight, \settolengthи \settodepth).

Точно так же у вас есть доступ к таким \newcounterвещам, как номера разделов и рисунков, которые должны увеличиваться по всему документу. Я использовал этот в прошлом, чтобы предоставить примеры кода, которые были пронумерованы отдельно от других фигур ...

Также следует отметить, \makeboxчто вы можете хранить немного выложенного документа для последующего повторного использования (и для использования с \settolength...).

dmckee --- котенок экс-модератора
источник
25
Простой пример использования, как \newlength{\hcolw}и \setlength{\hcolw}{0.47\textwidth}было бы полезно.
trybik
20

Если вы хотите использовать \newcommand, вы также можете включить \usepackage{xspace}и определить команду с помощью \newcommand{\newCommandName}{text to insert\xspace}. Это может позволить вам просто использовать, \newCommandNameа не \newCommandName{}.

Для получения более подробной информации, http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html

user1125069
источник
1

Я думаю , что вы , вероятно , хотите использовать маркер список для этой цели: создать маркер список \newtoks\packagename присвоить имя: \packagename={New Name for the package} поставить имя в свой выходной: \the\packagename.

Джон Берт
источник