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

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

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


person Andrea Giovacchini    schedule 31.07.2009    source источник
comment
Для огромного содержания стоит упомянуть \ savebox (en.wikibooks.org/wiki/ LaTeX / Boxes # savebox).   -  person Immanuel Weihnachten    schedule 13.07.2013


Ответы (6)


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

\newcommand{\newCommandName}{text to insert}

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

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

Пример:

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

Выход:

30
person second    schedule 31.07.2009
comment
@DiAlex будьте осторожны, опуская фигурные скобки, так как они будут мешать пустому пространству после вставленного текста. См. этот вопрос. - person jtpereyda; 20.07.2012
comment
Я не могу заставить это работать должным образом с символами, отличными от ascii. Любые идеи? - person lindhe; 15.01.2016
comment
Это не лучший ответ. Команда будет оценивать, когда она вызывается, а не когда она определена. Так что это не переменная в традиционном языковом смысле. Если команда никогда не вызывается, тело команды никогда не будет оцениваться, а если команда вызывается дважды, тело будет оцениваться дважды. - person sijanec; 19.10.2020
comment
Очень поддержано, и это, безусловно, служит целям ОП. Но на самом деле это не переменная. - person myradio; 15.03.2021

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

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

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

person plaes    schedule 06.07.2010
comment
Использование \def может быть проблематичным, поскольку оно не проверяет существующие макросы. См. второй круг ада LaTeX - поэтому предпочтительно использовать \newcommand - person Ryan Atallah; 15.03.2012
comment
Спасибо, @RyanAtallah добавил примечание об этом. Но разве значение variable не означает, что оно может измениться? :) - person plaes; 15.03.2012
comment
@plaes Вы правы, но это еще не значит, что вы хотите использовать \def. Вместо этого я думаю, что лучше всего сначала инициализировать все переменные, которые вы хотите использовать с \newcommand (даже если это просто с \@empty), а затем создать свою команду для изменения переменной с помощью \renewcommand. Это даст вам знать, если ваша переменная уже завершена, потому что \newcommand выдаст ошибку (или, по крайней мере, предупреждение). - person Nick2253; 29.10.2012
comment
Обратите внимание, что \def работает в математическом режиме, а \newCommandName - нет. (Например, \def\mathExpression{\pi^2 + \sin x}) - person Jollywatt; 30.04.2017
comment
использование подчеркивания портит рисунок, который мне пришлось сделать myVar - person alper; 05.03.2021

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

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

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

person dmckee --- ex-moderator kitten    schedule 01.08.2009
comment
Полезны простые примеры использования, такие как \newlength{\hcolw} и \setlength{\hcolw}{0.47\textwidth}. - person trybik; 22.12.2011

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

Подробнее см. http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html.

person user1125069    schedule 30.03.2012

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

person John Burt    schedule 29.11.2017

У меня работает: \ newcommand {\ variablename} {текст}

Например: \ newcommand \ m {100}

Поэтому, когда вы набираете \ m \, это моя отметка в исходном коде,

вывод pdf отображается как:

100 это моя оценка

person Vineetha Vijayan    schedule 29.10.2020