ฉันจะเขียน [0,1) ในโหมด LaTeX ได้อย่างไรโดยไม่ผิดเพี้ยน


9

เมื่อเขียน LaTeX โดยใช้latex-modeฉันมักจะต้องการเขียน "ช่วงครึ่งเปิด" ในข้อความของฉัน ยกตัวอย่างเช่น[0,1)ซึ่งหมายถึงชุดของตัวเลขทั้งหมดที่มี x0 <= x < 1

น่าเสียดายที่ "ตัวคั่นที่ไม่สมดุล" เหล่านี้ดูเหมือนจะทำให้โปรแกรมแยกวิเคราะห์เยื้องทำให้ข้อความต่อไปนี้ถูกเยื้องไม่เหมาะสมมักลอยไปทางขวา

นี่คือเอกสารตัวอย่าง C-x h M-x indent-regionข้อความด้านล่างเป็นผลหลังจากทำ พฤติกรรมที่ถูกต้องคือให้ย่อหน้าทั้งสองย่อหน้ามีการเว้นวรรค 0 รายการ

\documentclass{article}
\begin{document}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam volutpat
at dui et mattis. Here is a half open interval $[0,1)$.  Proin
  fringilla lectus nec mi tincidunt aliquet. Vestibulum fermentum eu
  neque id egestas. Here is another $[1,2)$.  Nullam et lectus
    convallis, placerat neque non, vehicula nisi.  Fusce imperdiet
    dignissim ante, eget fringilla nisi.

    Integer fermentum nunc eget purus molestie commodo. Integer
    tristique tincidunt odio, vel rutrum diam commodo quis. Fusce a
    aliquet quam. Cras suscipit est et nisl sollicitudin
    iaculis. Aliquam erat volutpat. Phasellus sapien arcu, aliquet ut
    hendrerit in, lobortis nec ante.

\end{document}

ขณะนี้ฉันกำลังแก้ไขสิ่งนี้ด้วยการแฮ็กที่น่าเกลียด: ฉันกำหนดมาโคร LaTeX ที่ขยายออกเป็นไม่มีอะไรและเขียนตัวคั่น "ที่ตรงกัน" ภายในการเรียกใช้แมโครนี้ สิ่งนี้จะทำให้หัวกดกลับมาซิงค์กัน

\documentclass{article}
\newcommand{\ugh}[1]{}
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam volutpat
at dui et mattis. Here is a half open interval $[0,1)$.  Proin
  fringilla lectus nec mi tincidunt aliquet. Vestibulum fermentum eu
  neque id egestas. \ugh{(]} Now on the next line we are back in sync.
Nullam et lectus convallis, placerat neque non, vehicula nisi.  Fusce
imperdiet dignissim ante, eget fringilla nisi.
\end{document}

แต่มันไม่เป็นที่พอใจจริงๆ มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม?

ฉันใช้ GNU Emacs 24.4.1


3
ไม่ตอบคำถามของคุณ แต่คุณคิดว่าจะลอง AUCTeX หรือไม่ มันไม่ได้รับผลกระทบจากข้อบกพร่องเล็ก ๆ น้อย ๆ นี้
Giordano

@giordano: ฉันเคยเห็นมัน พฤติกรรมเริ่มต้นของมันหนักกว่าที่ฉันต้องการมาก ฉันชอบที่จะแก้ไข LaTeX เช่นเดียวกับรหัสและฉันไม่ต้องการให้การเรนเดอร์ in-editor แบบ WYSIWYG อาจเป็นไปได้ที่จะปิดสิ่งเหล่านี้ทั้งหมดและมีประสบการณ์ในการแก้ไขข้อความ แต่มันก็ยังทำให้ AUCTeX ดูเหมือนเกินความเป็นจริง
Nate Eldredge

6
คุณอ้างถึงพฤติกรรมแบบ WYSIWYG ใด เฉพาะฟีเจอร์ดังกล่าวเท่านั้นคือดูตัวอย่างและโหมดโฟลด์และไม่มีฟีเจอร์ใดที่ใช้งานได้ตามค่าเริ่มต้น (คุณไม่จำเป็นต้องโหลดแพ็กเกจที่เกี่ยวข้องเพื่อใช้ AUCTeX) ความแตกต่างหลักระหว่างโหมด AUCTeX และวานิลลา * TeX เป็นกลไกการเติมข้อความอัตโนมัติที่เหนือกว่าเมื่อแทรกมาโครและสภาพแวดล้อม หากคุณให้ความสำคัญกับการเติมข้อความอัตโนมัติ AUCTeX คือหนทางที่จะไป นอกจากนี้ใน AUCTeX คุณต้องแก้ไข * รหัส TeX เสมอไม่มีความเป็นไปได้อื่น ๆ ฉันไม่รู้ว่าทำไมคุณถึงมีความรู้สึกผิด ๆ
Giordano

คำตอบ:


7

ไม่ใช่โซลูชันของ Emacs แต่รหัส LaTeX ของฉันเขียนช่วงเวลาเช่น\halfopen{0}{1}ที่

\newcommand\halfopen[2]{\ensuremath{[#1,#2)}}

การประชุมนี้ผลักดันประเด็นการทรงตัวสู่สถานที่ซึ่งไม่น่าจะทำให้เกิดปัญหาได้ และสามารถค้นหาได้ :-)


2
คุณใช้ทำ(0,1]อะไร
Andrew Swann

@ andrew-swann บางที\openhalfhehehe
Dox

@AndrewSwann\halfclosed
Norman Ramsey

2

ฟังก์ชั่นการเยื้องlatex-indentของlatex-modeชุดไวยากรณ์ตารางtex-latex-indent-syntax-tableและบริการโทรซึ่งในการเปิดสายlatex-find-indentlatex-backward-sexp-1

ไวยากรณ์ของ?\(และ?\)ตั้งค่า"."ซึ่งหมายถึง "เครื่องหมายวรรคตอน" ดังนั้นจึงไม่ใช่ตัวคั่นอีกต่อไป

ดังนั้นการแสดงออกเช่น[0,1)ผลเป็นscan-errorในlatex-backward-sexp-1ซึ่งนำไปสู่พฤติกรรมที่ไม่คาดคิด

คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยเพิ่มสิ่งต่อไปนี้ในไฟล์ init ของคุณ:

(eval-after-load "tex-mode"
    '(progn (modify-syntax-entry ?\( "()" tex-latex-indent-syntax-table)
             (modify-syntax-entry ?\) ")(" tex-latex-indent-syntax-table)))

auctexแต่ผมไม่ทราบว่าผลกระทบเชิงลบของการตั้งค่านี้ตั้งแต่ผมใช้ ดังนั้นคาดว่า ;-) ที่เลวร้ายที่สุด

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