ข้อถกเถียงโหมดคณิตศาสตร์ของ Typst: ชุมชนแตกออกเป็นสองฝ่ายหลังมีการเปลี่ยนแปลงตัวแยกวิเคราะห์

ทีมชุมชน BigGo
ข้อถกเถียงโหมดคณิตศาสตร์ของ Typst: ชุมชนแตกออกเป็นสองฝ่ายหลังมีการเปลี่ยนแปลงตัวแยกวิเคราะห์

ในโลกของการจัดเรียงตัวอักษรทางวิทยาศาสตร์ Typst ได้ปรากฏขึ้นเป็นทางเลือกสมัยใหม่แทน LaTeX โดยสัญญาว่าจะมีไวยากรณ์ที่สะอาดตาและประสบการณ์ผู้ใช้ที่ดีกว่า อย่างไรก็ตาม ปัญหาหนึ่งที่ยังคงมีอยู่ได้จุดประกายการถกเถียงอย่างเข้มข้นในหมู่ผู้ใช้และนักพัฒนาอย่างต่อเนื่อง นั่นคือวิธีที่ตัวแยกวิเคราะห์โหมดคณิตศาสตร์จัดการกับนิพจน์เช่น x) และ e^abs(x) ขณะนี้ชุมชนกำลังเผชิญกับคำถามพื้นฐานเกี่ยวกับการออกแบบไวยากรณ์ ความคาดหวังของผู้ใช้ และความเข้ากันได้ย้อนหลัง

ปัญหาหลัก: เมื่อคณิตศาสตร์มีความกำกวม

ข้อโต้แย้งนี้มุ่งเน้นไปที่วิธีที่ตัวแยกวิเคราะห์คณิตศาสตร์ของ Typst ตีความลำดับของตัวอักษรที่ตามด้วยวงเล็บ เมื่อผู้ใช้เขียน x) โดยทั่วไปพวกเขาคาดหวังว่าจะเห็นเพียงตัวอักษร i ปรากฏเป็นตัวห้อย แต่แทนที่ Typst จะแสดงผล itx เป็นตัวห้อย โดยปฏิบัติกับลำดับทั้งหมดเป็นหน่วยเดียว สิ่งนี้เกิดขึ้นเพราะตัวแยกวิเคราะห์ต้องตัดสินใจว่านิพจน์เช่น abs(x) แสดงถึงการเรียกฟังก์ชัน Typst การประเมินค่าฟังก์ชันทางคณิตศาสตร์ หรือการคูณโดยนัย

ปัญหานี้เห็นได้ชัดเป็นพิเศษกับการแนบ — ตัวห้อยและตัวยก ในนิพจน์เช่น e^abs(x) ฟังก์ชันค่าสัมบูรณ์ควรจะเชื่อมโยงอย่างแน่นหนากว่าตัวยก ทำให้มันเทียบเท่ากับ e^(abs(x)) หรือไม่? หรือว่าตัวยกควรจะเชื่อมโยงอย่างแน่นหนากว่า ทำให้เป็น (e^abs)(x)? มนุษย์เข้าใจสิ่งแรกโดยสัญชาตญาณ แต่ตัวแยกวิเคราะห์กลับต่อสู้กับความกำกวมนี้

รู้สึกไร้สาระที่เรื่องนี้เกิดขึ้นในตัวแยกวิเคราะห์ ราวกับว่าคุณสามารถจัดการทุกกรณีด้วยการคาดเดาว่าผู้ใช้หมายถึงอะไรได้ คุณจำเป็นต้องมีการดำเนินการจัดกลุ่ม เช่น {} อย่างน้อยก็เป็นทางเลือกสำรอง

พฤติกรรมโหมดคณิตศาสตร์ปัจจุบันของ Typst:

  • x) แสดงผลเป็น "itx" ตัวห้อยแทนที่จะเป็นแค่ "i"
  • e^abs(x) แสดงผลเป็น e^(abs(x)) เนื่องจากลำดับความสำคัญของการเรียกใช้ฟังก์ชัน
  • การเรียกใช้ฟังก์ชันมีการผูกมัดที่แน่นแฟ้นกว่าตัวห้อย/ตัวยก

ปฏิกิริยาจากชุมชนและแนวทางแก้ไขที่ถูกเสนอ

ชุมชน Typst ได้อภิปรายปัญหานี้อย่างต่อเนื่อง across multiple platforms โดยนักพัฒนาได้ยอมรับว่าพฤติกรรมปัจจุบันนั้นเข้าใจได้ยากและขัดกับความคาดหวังของผู้ใช้เป็นอย่างมาก หลายแนวทางแก้ไขได้ปรากฏขึ้นจากการอภิปรายเหล่านี้ ซึ่งแต่ละวิธีมีข้อได้เปรียบเสียเปรียบต่างกัน

ตัวเลือก B การย้อนกลับไปใช้พฤติกรรมของ Typst 0.3 จะทำให้ x) ทำงานตามที่คาดหวัง แต่จะทำให้ e^abs(x) ใช้งานไม่ได้ จำเป็นต้องใช้วงเล็บอย่างชัดเจน ผู้ใช้บางส่วนมองว่าสิ่งนี้เป็นที่ยอมรับได้ โดยระบุว่า Typst engine ทำงานเร็วพอที่ส่วนใหญ่แล้วฉันสามารถรันหน้าต่างพรีวิวที่ซิงค์ไว้ได้ ซึ่งทำให้ข้อผิดพลาดเฉพาะนี้จับได้ง่าย

ข้อเสนออื่นๆ รวมถึงการแยกวิเคราะห์ขณะรันไทม์ (ตัวเลือก C) ซึ่งจะใช้ข้อมูลประเภทเพื่อแก้ไขความกำกวม และ MathAttachCall (ตัวเลือก D) ซึ่งเป็นแนวทางแบบผสม อย่างไรก็ตาม มีความกังวลเกิดขึ้นเกี่ยวกับว่าสิ่งเหล่านี้อาจส่งผลต่อเครื่องมือและการเน้นไวยากรณ์อย่างไร ดังที่ผู้แสดงความคิดเห็นหนึ่งคนระบุไว้ การที่ 'ฉลาด' เกินไปย่อมนำไปสู่ความปวดหัวและความสับสนมากกว่าการมีกฎที่เรียบง่ายและสม่ำเสมอ

โซลูชันที่เสนอ:

  • ตัวเลือก B: ย้อนกลับไปใช้พฤติกรรมของ Typst 0.3 - การแนบที่เข้าใจง่ายแต่การเรียกใช้ฟังก์ชันในเลขยกกำลังจะใช้งานไม่ได้
  • ตัวเลือก C: การแยกวิเคราะห์ขณะรันไทม์ - ใช้ข้อมูลประเภทแต่ทำให้เครื่องมือมีความซับซ้อน
  • ตัวเลือก D: MathAttachCall - แนวทางแบบผสมผสาน รักษาความคลุมเครือบางส่วนไว้
  • ตัวเลือก E: ไวยากรณ์ใหม่ - กำหนดให้ใช้ `` สำหรับฟังก์ชัน Typst ในโหมดคณิตศาสตร์

ความแตกแยกทางวัฒนธรรมในสัญกรณ์คณิตศาสตร์

การอภิปรายเผยให้เห็นถึงความแตกต่างทางวัฒนธรรมที่ลึกซึ้งในวิธีที่ผู้คนตีความสัญกรณ์คณิตศาสตร์ นิพจน์เช่น 1/2(x + y) ถูกตีความแตกต่างกันไปตามธรรมเนียมทางคณิตศาสตร์ ผู้ใช้บางส่วนคาดหวังให้ (x + y) ทั้งหมดอยู่ในตัวส่วน ในขณะที่คนอื่นๆ อ่านมันเป็น (1/2) * (x + y) ความกำกวมนี้มีอยู่แม้จะไม่มีการเกี่ยวข้องของฟังก์ชัน Typst

ผู้แสดงความคิดเห็นหนึ่งคนสังเกตว่า นอกจากนี้ฉันคิดว่ามันเป็นเรื่องของวัฒนธรรม เพราะโดยส่วนตัวฉันจะเข้าใจว่านิพจน์ทั้งหมดเหล่านี้มีเพียงหนึ่งเป็นตัวเศษและส่วนที่เหลืออยู่ด้านล่าง สิ่งนี้ชี้ให้เห็นว่าไม่มีกฎการแยกวิเคราะห์ใดกฎเดียวที่จะทำให้ผู้ใช้ทุกคนพอใจ เนื่องจากสัญกรณ์คณิตศาสตร์เองก็มีความกำกวมโดยธรรมชาติที่ชุมชนต่างๆ แก้ไขแตกต่างกันไป

ความเห็นของชุมชน:

  • ส่วนใหญ่มองว่าพฤติกรรมปัจจุบันไม่ตรงตามสัญชาตญาณ
  • แบ่งออกเป็นสองฝ่ายว่าควรให้ความสำคัญกับความสามารถในการคาดการณ์หรือการแยกวิเคราะห์แบบอัจฉริยะ
  • ความแตกต่างทางวัฒนธรรมในการตีความสัญลักษณ์ทางคณิตศาสตร์ส่งผลต่อความชอบของผู้ใช้
  • ความกังวลเกี่ยวกับความเข้ากันได้แบบย้อนหลังและเส้นทางการโยกย้ายไปยัง LaTeX

เส้นเวลาการพัฒนาและสถานะปัจจุบัน

สถานการณ์ได้พัฒนาอย่างรวดเร็วในช่วงไม่กี่สัปดาห์ที่ผ่านมา Pull request เพื่อนำตัวเลือก B ไปใช้ถูกผนวกเข้ากับโค้ดหลักชั่วครู่หนึ่ง แต่หลังจากนั้นก็ถูกย้อนกลับหลังจากนักพัฒนาค้นพบปัญหาที่ลึกกว่ากับการออกแบบใหม่แบบเก่า ณ สิ้นเดือนตุลาคม 2025 งานยังคงดำเนินต่อไปกับแนวทางใหม่ที่มุ่งสร้างสมดุลระหว่างพฤติกรรมที่เข้าใจง่ายกับความเป็นไปได้ทางเทคนิค

ผู้เขียนบทความต้นฉบับ ซึ่งในตอนแรกสนับสนุนแนวทางการแยกวิเคราะห์ที่ฉลาดกว่า ตอนนี้สนับสนุนตัวเลือก B อย่างแข็งขัน โดยให้เหตุผลว่าทั้ง [ฟังก์ชัน Typst และฟังก์ชันคณิตศาสตร์] ควรมีระดับความสำคัญเท่ากัน เพื่อให้สิ่งต่างๆ คาดเดาได้ ซึ่งแสดงถึงการเปลี่ยนแปลงมุมมองที่สำคัญ โดยยอมรับว่าการคาดเดาได้และความสม่ำเสมออาจมีค่ามากกว่าการพยายามตีความความตั้งใจของผู้ใช้อย่างสมบูรณ์แบบ

มองไปข้างหน้า: อนาคตของคณิตศาสตร์ใน Typst

การถกเถียงที่ยังคงดำเนินอยู่เน้นย้ำถึงความท้าทายในการออกแบบไวยากรณ์คณิตศาสตร์ที่สร้างสมดุลระหว่างประสิทธิภาพกับความเรียบง่าย ในขณะที่ผู้ใช้บางส่วนโหยหาความเข้ากันได้กับ LaTeX แต่คนอื่นๆ ก็ชื่นชอบแนวทางที่สะอาดกว่าของ Typst การแก้ไขปัญหานี้มีแนวโน้มที่จะกำหนดการยอมรับของ Typst ในชุมชนวิชาการและวิทยาศาสตร์ ซึ่งการจัดเรียงตัวอักษรทางคณิตศาสตร์ที่แม่นยำเป็นสิ่งสำคัญ

ดังที่ผู้แสดงความคิดเห็นที่มีมุมมองในแง่ดีคนหนึ่งระบุว่า ฉันชอบบทความที่มีเหตุผลดีและละเอียดถี่ถ้วนเช่นนี้ ซึ่งพิจารณาข้อได้เปรียบเสียเปรียบทั้งหมดแล้ว มันทำให้ฉันมั่นใจในอนาคตของ Typst การอภิปรายอย่างโปร่งใสและการพิจารณาทางเลือกต่างๆ อย่างรอบคอบชี้ให้เห็นว่าไม่ว่าแนวทางแก้ไขใดจะปรากฏออกมา มันจะได้รับการพิจารณาอย่างดี แม้ว่ามันอาจจะไม่เป็นที่พอใจของทุกคนก็ตาม

ทีม Typst ดูเหมือนจะมุ่งมั่นที่จะหาวิธีแก้ปัญหาที่ยั่งยืน แทนที่จะใช้การแก้ไขเร็วๆ เนื่องจากการจัดเรียงตัวอักษรทางคณิตศาสตร์เป็นกรณีการใช้งานหลักของระบบ การทำให้โหมดคณิตศาสตร์ถูกต้องจึงมีความสำคัญอย่างยิ่งต่อความสำเร็จในระยะยาวของ Typst ในฐานะแพลตฟอร์มเอกสารสมัยใหม่

อ้างอิง: The Math Mode Problem