2009-07-31 5 views
255

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

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

+2

Для огромного контента стоит упомянуть \ savebox (https://en.wikibooks.org/wiki/LaTeX/Boxes#savebox). –

ответ

263

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

\newcommand{\newCommandName}{text to insert} 

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

Для получения дополнительной информации о \newcommand, смотри, например, wikibooks

+10

Вы также можете использовать только '' \ newCommandName'' – dialex

+16

@DiAlex будьте осторожны при опущении фигурных скобок, так как это помешает пробелу после вставленного текста. См. [Этот вопрос] (http://tex.stackexchange.com/q/31091). – jtpereyda

+0

Я не могу заставить это работать правильно с символами, отличными от ascii. Есть идеи? – lindhe

24

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

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

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

+12

Простой пример использования, например '\ newlength {\ hcolw}' и '\ setlength {\ hcolw} {0.47 \ textwidth}', будет полезен. – trybik

136

Использование \def Команда:

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

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

+5

Использование '\ def' может быть проблематичным, поскольку оно не проверяет наличие существующих макросов. См. [Второй круг LaTeX ад] (http://dabacon.org/pontiff/?p = 6101) - как таковой, желательно использовать '\ newcommand' –

+2

. Спасибо @RyanAtallah добавил к этому примечание. Хотя, не означает ли значение «переменная», что оно может измениться? :) – plaes

+4

@plaes Вы правы, но это все еще не означает, что вы хотите использовать '\ def'. Вместо этого я считаю, что лучше всего сначала «инициализировать» все переменные, которые вы хотите использовать с '\ newcommand' (даже если это просто с' \ @ empty'), а затем создайте свою команду для изменения переменной с помощью '\ renewcommand '. Это даст вам знать, если ваша переменная уже завершена, потому что '\ newcommand' выдаст ошибку (или, по крайней мере, предупреждение). – Nick2253

12

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

Более подробно, http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html

1

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