Apakah ada cara saya dapat mendefinisikan variabel di LaTeX?

350

Di LaTeX, bagaimana saya bisa mendefinisikan variabel string yang isinya digunakan alih-alih variabel dalam PDF yang dikompilasi?

Katakanlah saya sedang menulis dokumen teknologi pada perangkat lunak dan saya ingin mendefinisikan nama paket di pembukaan atau di suatu tempat sehingga jika namanya berubah, saya tidak harus menggantinya di banyak tempat tetapi hanya di satu tempat .

Andrea Giovacchini
sumber
2
Untuk konten yang sangat besar, perlu disebutkan \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ).
Immanuel Weihnachten

Jawaban:

371

tambahkan yang berikut ini untuk Anda pembukaan:

\newcommand{\newCommandName}{text to insert}

Kemudian Anda bisa menggunakannya \newCommandName{}dalam teks

Untuk info lebih lanjut \newcommand, lihat misalnya wikibooks

Contoh:

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

Keluaran:

30
kedua
sumber
31
@DiAlex berhati-hatilah saat menghilangkan kurung kurawal, karena akan mengganggu ruang putih setelah teks yang dimasukkan. Lihat pertanyaan ini .
jtpereyda
Saya tidak bisa menjalankan ini dengan benar dengan karakter non-ascii. Ada ide?
lindhe
164

Gunakan \defperintah:

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

Sadarilah bahwa \defmenimpa makro yang sudah ada sebelumnya tanpa peringatan apa pun dan karena itu dapat menyebabkan berbagai kesalahan halus. Untuk mengatasinya, gunakan variabel namespace seperti my_varatau kembali ke \newcommand, \renewcommandperintah.

plaes
sumber
10
Penggunaan \defbisa menjadi masalah karena tidak memeriksa makro yang sudah ada sebelumnya. Lihat lingkaran kedua neraka LaTeX - karena itu, lebih baik digunakan\newcommand
Ryan Atallah
2
Terima kasih @RyanAtallah menambahkan catatan tentang itu. Padahal, bukankah makna dari variablearti bahwa itu mungkin berubah? :)
pla
4
@plaes Anda benar, tetapi itu tetap tidak berarti Anda ingin menggunakannya \def. Sebagai gantinya, saya pikir itu praktik terbaik untuk pertama-tama "menginisialisasi" semua variabel yang ingin Anda gunakan \newcommand(bahkan jika itu hanya dengan \@empty), dan kemudian buat perintah Anda untuk memodifikasi variabel menggunakan \renewcommand. Ini akan memberi tahu Anda jika variabel Anda sudah keluar, karena \newcommandakan menimbulkan kesalahan (atau setidaknya peringatan).
Nick2253
4
Catatan yang \defberfungsi untuk hal-hal dalam mode matematika, sementara \newCommandNametidak. (Misalnya, \def\mathExpression{\pi^2 + \sin x})
Jollywatt
35

Untuk variabel yang menggambarkan jarak, Anda akan menggunakan \newlength(dan memanipulasi nilai-nilai dengan \setlength, \addlength, \settoheight, \settolengthdan \settodepth).

Demikian pula Anda memiliki akses ke \newcounterhal-hal seperti nomor bagian dan angka yang harus bertambah di seluruh dokumen. Saya telah menggunakan yang ini di masa lalu untuk memberikan contoh kode yang diberi nomor terpisah dari angka-angka lain ...

Yang juga perlu diperhatikan adalah \makeboxAnda dapat menyimpan sedikit dokumen yang sudah disiapkan untuk digunakan kembali nanti (dan untuk digunakan dengan \settolength...).

dmckee --- mantan kucing moderator
sumber
25
Contoh penggunaan sederhana suka \newlength{\hcolw}dan \setlength{\hcolw}{0.47\textwidth}akan bermanfaat.
trybik
20

Jika Anda ingin menggunakan \newcommand, Anda juga bisa memasukkan \usepackage{xspace}dan mendefinisikan perintah dengan \newcommand{\newCommandName}{text to insert\xspace}. Ini dapat memungkinkan Anda untuk hanya menggunakan \newCommandNamedaripada \newCommandName{}.

Untuk detail lebih lanjut, http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html

pengguna1125069
sumber
1

Saya pikir Anda mungkin ingin menggunakan daftar tanda untuk tujuan ini: untuk mengatur daftar tanda \newtoks\packagename untuk menetapkan nama: \packagename={New Name for the package} untuk menempatkan nama menjadi output Anda: \the\packagename.

John Burt
sumber