มีวิธีใดบ้างที่ฉันสามารถกำหนดตัวแปรใน LaTeX


350

ใน LaTeX ฉันจะกำหนดตัวแปรสตริงที่ใช้เนื้อหาแทนที่จะเป็นตัวแปรใน PDF ที่คอมไพล์ได้อย่างไร

สมมติว่าฉันกำลังเขียนเอกสารเทคโนโลยีบนซอฟต์แวร์และฉันต้องการกำหนดชื่อแพคเกจในคำนำหน้าหรือที่อื่นเพื่อว่าถ้าชื่อเปลี่ยนไปฉันไม่ต้องแทนที่ในหลาย ๆ ที่ แต่ในที่เดียวเท่านั้น .


2
สำหรับเนื้อหาขนาดใหญ่มันมีค่าที่จะพูดถึง \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox )
Immanuel Weihnachten

คำตอบ:


371

เพิ่มคำแนะนำต่อไปนี้ให้กับคุณ:

\newcommand{\newCommandName}{text to insert}

จากนั้นคุณสามารถใช้\newCommandName{}ในข้อความ

สำหรับข้อมูลเพิ่มเติม\newcommandดูได้ที่wikibooks

ตัวอย่าง:

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

เอาท์พุท:

30

31
@DiAlex ระวังเมื่อไม่ใส่เครื่องหมายปีกกาเนื่องจากจะรบกวนช่องว่างหลังข้อความที่แทรก ดูคำถามนี้
jtpereyda

ฉันไม่สามารถให้มันทำงานได้อย่างถูกต้องกับตัวละครที่ไม่ใช่ ASCII ความคิดใด ๆ
lindhe

164

ใช้\defคำสั่ง:

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

โปรดทราบว่า\defแทนที่มาโครที่มีอยู่ก่อนหน้าโดยไม่มีคำเตือนใด ๆ ดังนั้นอาจทำให้เกิดข้อผิดพลาดเล็กน้อยได้ ที่จะเอาชนะนี้อย่างใดอย่างหนึ่งใช้ตัวแปร namespaced เหมือนmy_varหรือถอยกลับไป\newcommand, \renewcommandคำสั่งแทน


10
การใช้\defอาจเป็นปัญหาได้เนื่องจากไม่ตรวจสอบมาโครที่มีอยู่ก่อนหน้า ดูวงกลมที่สองของ LaTeX นรก - เช่นนี้เป็นที่นิยมใช้\newcommand
Ryan Atallah

2
ขอบคุณ @RyanAtallah ได้เพิ่มหมายเหตุเกี่ยวกับเรื่องนี้แล้ว แม้ว่าความหมายของการไม่ได้variableหมายความว่ามันจะมีแนวโน้มที่จะเปลี่ยนแปลง? :)
วาง

4
@plaes คุณกำลังขวา \defแต่ที่ยังคงไม่ได้หมายความว่าคุณต้องการที่จะใช้ แต่ฉันคิดว่ามันเป็นวิธีที่ดีที่สุดที่จะเป็นครั้งแรก "เริ่มต้น" ตัวแปรทั้งหมดที่คุณต้องการที่จะใช้กับ\newcommand(ถึงแม้ว่ามันจะเป็นเพียงด้วย\@empty) \renewcommandแล้วสร้างคำสั่งของคุณในการปรับเปลี่ยนตัวแปรโดยใช้ วิธีนี้จะช่วยให้คุณทราบว่าตัวแปรของคุณออกแล้วหรือไม่เพราะ\newcommandจะทำให้เกิดข้อผิดพลาด (หรืออย่างน้อยก็มีคำเตือน)
Nick2253

4
โปรดทราบว่าใช้\defงานได้กับสิ่งต่าง ๆ ในโหมดคณิตศาสตร์ในขณะที่ใช้\newCommandNameไม่ได้ (เช่น, \def\mathExpression{\pi^2 + \sin x})
Jollywatt

35

สำหรับตัวแปรที่อธิบายถึงระยะทางที่คุณจะใช้\newlength(และจัดการค่ากับ\setlength, \addlength, \settoheight, \settolengthและ\settodepth )

ในทำนองเดียวกันคุณสามารถเข้าถึง\newcounterสิ่งต่าง ๆ เช่นหมายเลขส่วนและตัวเลขซึ่งควรเพิ่มขึ้นทั่วทั้งเอกสาร ฉันเคยใช้อันนี้ในอดีตเพื่อให้ตัวอย่างโค้ดที่แยกตัวเลขของตัวเลขอื่น ๆ ...

นอกจากนี้ยังมีโน้ต\makeboxซึ่งช่วยให้คุณสามารถจัดเก็บเอกสารที่จัดวางไว้เล็กน้อยเพื่อใช้ในภายหลัง (และสำหรับใช้กับ\settolength... )


25
ตัวอย่างการใช้งานง่าย ๆ เช่น\newlength{\hcolw}และ\setlength{\hcolw}{0.47\textwidth}จะมีประโยชน์
trybik

20

หากคุณต้องการใช้งาน\newcommandคุณยังสามารถรวมและกำหนดคำสั่งโดย\usepackage{xspace} \newcommand{\newCommandName}{text to insert\xspace}นี้ช่วยให้คุณสามารถเพียงแค่ใช้มากกว่า\newCommandName\newCommandName{}

สำหรับรายละเอียดเพิ่มเติมhttp://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html


ดูเพิ่มเติมที่tex.stackexchange.com/questions/31091/…
myrdd

1

ฉันคิดว่าคุณอาจต้องการใช้รายการโทเค็นเพื่อการนี้: การตั้งค่ารายการโทเค็น \newtoks\packagename ในการกำหนดชื่อ: ที่จะนำชื่อเข้าออกของคุณ:\packagename={New Name for the package} \the\packagename

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.