Bagaimana Anda membuat perintah dengan argumen opsional di LaTeX? Sesuatu seperti:
\newcommand{\sec}[2][]{
\section*{#1
\ifsecondargument
and #2
\fi}
}
}
Lalu, saya bisa menyebutnya seperti
\sec{Hello}
%Output: Hello
\sec{Hello}{Hi}
%Output: Hello and Hi
latex
optional-arguments
Verhogen
sumber
sumber
Jawaban:
Contoh dari panduan ini :
sumber
Gagasan umum di balik pembuatan "argumen opsional" adalah untuk pertama-tama mendefinisikan perintah perantara yang memindai ke depan untuk mendeteksi karakter apa yang muncul berikutnya dalam aliran token dan kemudian memasukkan makro yang relevan untuk memproses argumen yang muncul dengan tepat. Ini bisa sangat membosankan (walaupun tidak sulit) menggunakan pemrograman TeX generik. LaTeX's
\@ifnextchar
cukup berguna untuk hal-hal seperti itu.Jawaban terbaik untuk pertanyaan Anda adalah menggunakan
xparse
paket baru . Ini adalah bagian dari rangkaian pemrograman LaTeX3 dan berisi fitur luas untuk mendefinisikan perintah dengan argumen opsional yang cukup arbitrer.Dalam contoh Anda, Anda memiliki
\sec
makro yang mengambil satu atau dua argumen yang diperkuat. Ini akan diterapkanxparse
dengan menggunakan hal berikut:Argumen
{ m g }
mendefinisikan argumen\sec
;m
berarti "argumen wajib" dang
"argumen menguatkan opsional".\IfNoValue(T)(F)
kemudian dapat digunakan untuk memeriksa apakah argumen kedua memang ada atau tidak. Lihat dokumentasi untuk jenis argumen opsional lain yang diperbolehkan.sumber
(Hello and ) (Hello and Hi)
Semua hal di atas menunjukkan kesulitan untuk membuat fungsi yang bagus, fleksibel (atau melarang kelebihan beban) di LaTeX !!! (kode TeX itu terlihat seperti Yunani bagi saya)
baik, hanya untuk menambahkan pengembangan saya baru-baru ini (walaupun tidak sefleksibel), inilah yang baru-baru ini saya gunakan dalam dokumen tesis saya, dengan
Mulai perintah, dengan perintah "opsional" dikosongkan secara default:
Saya kemudian meminta makro mengatur variabel sementara, \ temp {}, berbeda tergantung pada apakah argumen opsional kosong atau tidak. Ini bisa diperluas ke argumen yang disahkan.
Kemudian saya menjalankan makro menggunakan variabel \ temp {} untuk dua kasus. (Di sini ia hanya mengatur teks pendek untuk sama dengan teks panjang jika tidak ditentukan oleh pengguna).
Dalam hal ini saya hanya memeriksa argumen "opsional" tunggal yang disediakan oleh \ newcommand {}. Jika Anda mengaturnya untuk, katakanlah, 3 argumen "opsional", Anda masih harus mengirim 3 argumen kosong ... mis.
yang cukup konyol, saya tahu, tapi itu tentang sejauh yang saya akan pergi dengan LaTeX - hanya saja tidak masuk akal begitu saya mulai melihat kode TeX ... Saya suka metode xparse Mr. Robertson, mungkin saya akan mencobanya ...
sumber
Yang Anda butuhkan adalah sebagai berikut:
sumber
x^2+1
ataux^{2+1}
Jadi saya punya pertanyaan, apakah perintah Anda menguji keberadaan kawat gigi? Apakah mungkin membuat perintah LaTeX yang\sec
menghasilkan: "A, b, c dan d" untuk perintah\sec{A}[b,c,d]
, "A and b" untuk\sec{A}[b] and "A" for
\ sec {A} `?\sec{A}[b,c,d]
atau\sec{A}[b]
atau\sec{A}
.Saya memiliki masalah yang sama, ketika saya ingin membuat perintah,
\dx
untuk menyingkat\;\mathrm{d}x
(yaitu menempatkan ruang ekstra sebelum diferensial integral dan memiliki "d" tegak juga). Tetapi kemudian saya juga ingin membuatnya cukup fleksibel untuk memasukkan variabel integrasi sebagai argumen opsional. Saya memasukkan kode berikut di pembukaan.Kemudian
memberikan \ dx dengan argumen opsional
sumber
Inilah upaya saya, itu tidak mengikuti spesifikasi Anda dengan tepat. Tidak sepenuhnya diuji, jadi berhati-hatilah.
sumber