รัน shell command จาก Latex
มีบางกรณีที่เราต้องการผลจากคำสั่ง shell บางอย่างเพื่อเอาไปใส่ในเอกสาร Latex เท่าที่ลองทำดูใช้ code ต่อไปนี้แล้วได้ผล มี comment ที่เกิดจากการเดาล้วนๆประกอบ
ต่อจากนี้ก็เรียก \myout เพื่อเอาผลไปใช้
จริงๆแล้วที่อยากทำคือพยายามจะเอาเลข commit ของ Git ไปใส่ในเอกสารเพื่อจะได้รู้ว่าตอนนี้ commit ไปกี่ทีแล้ว แล้วก็เป็นตัวเลข version ไปในตัว เวลาส่งให้คนอื่นจะได้รู้ว่ามีการอัพเดทหรือไม่ แต่ก่อนเคยเห็น Latex package อยู่ตัวหนึ่งชื่อ svn-multi (มั้ง) สามารถทำอย่างที่บอกได้เลย ไม่ต้องมารันคำสั่งอะไรเองแบบนี้ วิธีของเจ้า package นั้นคือ เขียน string พิเศษอะไรบางอย่างตามที่ svn-multi นิยามไว้แล้ว แล้วมันจะ replace ให้เป็นหมายเลข revision ให้ แต่วิธีนี้รู้สึกว่าต้องมาศึกษากันยาว ยุ่งยาก เลยคิดว่าเขียนเองนิดหน่อยน่าจะเข้าใจง่ายกว่า
code ที่ใช้คือตัวนี้
จากนั้นเอา \rev ไปใช้เพื่อบอกหมายเลข commit ตรง
git log --pretty=format:'..' | wc -w
นี่เอาไว้หาว่า commit ไปแล้วกี่ที ชัดเจนว่ามันเป็นการ hack แบบลวกๆ แต่คิดว่าไม่น่ามีปัญหานะ
สุดท้าย เท่าที่เข้าใจคือปกติแล้ว Latex จะไม่อนุญาตให้รันคำสั่ง shell เพราะอาจเป็นไปได้ที่เราไปโหลดไฟล์ tex ของคนอื่นมาแล้วในนั้นมีการรันคำสั่ง shell แบบที่สร้างความเสียหาย วิธีทำให้ใช้ได้คือเพิ่ม
--shell-escape
เป็น argument ของคำสั่ง latex หรือ pdflatex ตอน compile ซะ แบบนี้
pdflatex --shell-escape doc.tex
หรือ
latex --shell-escape doc.tex
สำหรับคนที่ใช้ Latex editor แบบที่กดปุ่มเดียว compile ให้หมดก็สามารถเพิ่ม argument แบบนี้ได้เช่นกัน เพราะปกติปุ่มแต่ละปุ่มที่ใช้ compile เอกสารจะไปเรียกคำสั่ง command line พวกนี้อยู่แล้ว editor ส่วนใหญ่จะให้แก้คำสั่งเองได้
อ้างอิง