2009-07-31 27 views
255

W LaTeX, w jaki sposób można zdefiniować zmienną łańcuchową, której treść jest używana zamiast zmiennej w skompilowanym pliku PDF?Czy istnieje sposób zdefiniowania zmiennej w LaTeX?

Załóżmy, że piszę dokumentację techniczną dotyczącą oprogramowania i chcę zdefiniować nazwę pakietu w preambule lub gdzieś, aby zmienić jego nazwę, ale nie muszę zastępować go w wielu miejscach, ale tylko w jednym miejscu.

+2

Dla ogromnej zawartości, warto wspomnieć \ savebox (https://en.wikibooks.org/wiki/LaTeX/Boxes#savebox). –

Odpowiedz

263

dodać następujące ty preambule:

\newcommand{\newCommandName}{text to insert} 

Następnie można po prostu użyć \newCommandName{} w tekście

Aby uzyskać więcej informacji na \newcommand, patrz np wikibooks

+10

Można również użyć tylko '' \ newCommandName'' – dialex

+16

@DiAlex należy zachować ostrożność, pomijając nawiasy klamrowe, ponieważ zakłóci to białą spację po wstawionym tekście. Zobacz [to pytanie] (http://tex.stackexchange.com/q/31091). – jtpereyda

+0

Nie mogę tego zrobić, aby działał poprawnie z nie-ascii. Jakieś pomysły? – lindhe

24

Dla zmiennych opisujących odległości, należy użyć \newlength (i manipulować wartości z \setlength, \addlength, \settoheight, \settolength i \settodepth).

Podobnie masz dostęp do \newcounter dla takich rzeczy jak numery sekcji i liczb, które powinny rosnąć w całym dokumencie. Używałem tego w przeszłości do dostarczania próbek kodu, które były ponumerowane oddzielnie od innych figur ...

Należy również zwrócić uwagę na numer \makebox, który umożliwia przechowywanie fragmentu opracowanego dokumentu do późniejszego ponownego wykorzystania (i do użytku z \settolength ...).

+12

Prosty przykład użycia, taki jak '\ newlength {\ hcolw}' i '\ setlength {\ hcolw} {0.47 \ textwidth}' byłby użyteczny. – trybik

136

Użyj polecenia \def:

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

Należy pamiętać, że \def zastępuje istniejącą wcześniej makr bez ostrzeżenia, a zatem mogą powodować różne błędy subtelne. Aby tego uniknąć, należy użyć zmiennych o zmiennej nazw, takich jak my_var lub zamiast tego należy cofnąć się do poleceń \newcommand, \renewcommand.

+5

Używanie '\ def' może być problematyczne, ponieważ nie sprawdza istniejących makr. Zobacz [drugi krąg piekła LaTeX] (http://dabacon.org/pontiff/?p = 6101) - jako takie preferowane jest użycie '\ newcommand'. –

+2

Dzięki @RyanAtallah dodano notatkę na ten temat. Jednak czy znaczenie słowa "zmienna" nie oznacza, że ​​może ulec zmianie? :) – plaes

+4

@plaes Masz rację, ale to nadal nie znaczy, że chcesz użyć '\ def'. Zamiast tego, uważam, że najlepszą praktyką jest najpierw "zainicjować" wszystkie zmienne, których chcesz używać z '\ newcommand' (nawet jeśli jest to tylko z' \ @ empty'), a następnie utworzyć polecenie, aby zmodyfikować zmienną za pomocą '\ renewcommand '. Dzięki temu dowiesz się, czy zmienna już się kończy, ponieważ '\ newcommand' spowoduje błąd (lub przynajmniej ostrzeżenie). – Nick2253

1

myślę prawdopodobnie chcesz skorzystać z listy tokena do tego celu: skonfigurować listę tokena \newtoks\packagename przypisać nazwę: \packagename={New Name for the package} umieścić nazwę na Twój wynik: \the\packagename.

Powiązane problemy