ทั้งหมดข้างต้นแสดงให้เห็นอย่างหนักว่าสามารถสร้างฟังก์ชันที่ดียืดหยุ่น (หรือห้ามใช้งานมากเกินไป) ใน LaTeX !!! (รหัส TeX นั้นดูเหมือนภาษากรีกสำหรับฉัน)
ดีเพียงเพื่อเพิ่มการพัฒนาล่าสุดของฉัน (แม้ว่าจะไม่ยืดหยุ่นเท่า) นี่คือสิ่งที่ฉันเพิ่งใช้ในเอกสารวิทยานิพนธ์ของฉันด้วย
\usepackage{ifthen} % provides conditonals...
เริ่มคำสั่งโดยตั้งค่าคำสั่ง "ทางเลือก" ว่างไว้โดยค่าเริ่มต้น:
\newcommand {\figHoriz} [4] [] {
จากนั้นให้มาโครตั้งค่าตัวแปรชั่วคราว \ temp {} ให้แตกต่างกันไปขึ้นอยู่กับว่าอาร์กิวเมนต์ที่เป็นทางเลือกว่างหรือไม่ สิ่งนี้สามารถขยายไปยังอาร์กิวเมนต์ที่ส่งผ่าน
\ifthenelse { \equal {#1} {} } %if short caption not specified, use long caption (no slant)
{ \def\temp {\caption[#4]{\textsl{#4}}} } % if #1 == blank
{ \def\temp {\caption[#1]{\textsl{#4}}} } % else (not blank)
จากนั้นฉันเรียกใช้แมโครโดยใช้ตัวแปร \ temp {} สำหรับสองกรณี (ในที่นี้จะตั้งค่าคำบรรยายสั้น ๆ ให้เท่ากับคำอธิบายภาพแบบยาวหากผู้ใช้ไม่ได้ระบุ)
\begin{figure}[!]
\begin{center}
\includegraphics[width=350 pt]{#3}
\temp %see above for caption etc.
\label{#2}
\end{center}
\end{figure}
}
ในกรณีนี้ฉันตรวจสอบเฉพาะอาร์กิวเมนต์ "ทางเลือก" เดี่ยวที่ \ newcommand {} ระบุ หากคุณต้องการตั้งค่าให้พูดว่า "ไม่บังคับ" 3 args คุณยังคงต้องส่ง args ว่าง 3 รายการ ... เช่น
\MyCommand {first arg} {} {} {}
ซึ่งค่อนข้างงี่เง่าฉันรู้ แต่นั่นก็เป็นเรื่องที่ฉันจะใช้ LaTeX - มันไม่สมเหตุสมผลเลยเมื่อฉันเริ่มดูรหัส TeX ... ฉันชอบวิธี xparse ของนายโรเบิร์ตสันบางทีฉันอาจจะ จะลองดู ...