วัตถุประสงค์ของรูปแบบไฟล์“ ASCII พร้อมรูปแบบโอเวอร์”


46

หลังจากดาวน์โหลดซอร์สโค้ดสำหรับ Bash ฉันกำลังค้นหาdocไดเรกทอรีและพบไฟล์ต่อไปนี้:

  • bash.1เป็นปกติtroffไฟล์ที่ใช้ในการสร้างหน้าคน
  • bash.0เป็นเหมือนเวอร์ชันข้อความธรรมดาของ man page - เฉพาะที่มันมี^Hอักขระควบคุม backspaceกระจายอย่างอิสระไปทั่วมัน

อักขระควบคุมเหล่านี้จะไม่แสดงในการเป็นตัวแทนจาก Git เว็บอินเตอร์เฟส แต่ไฟล์จริงสามารถดาวน์โหลดและตรวจสอบในโปรแกรมแก้ไขข้อความเช่น Vim

การรันfileคำสั่งบนbash.0พิมพ์เอาต์พุตต่อไปนี้:

bash.0: ASCII text, with overstriking

ฉันไม่เคยเจอรูปแบบไฟล์นี้มาก่อนและสงสัยว่าจุดประสงค์ของมันคืออะไรและใช้อย่างไร การค้นหาเว็บสำหรับวลี“ ข้อความ ASCII ที่มีการใช้งานเกินเวลา”ไม่ได้ให้ความกระจ่างมากนัก

คำตอบ:


14

การค้นหาเว็บสำหรับ"backspace" และ "overstrike"จะได้ผลลัพธ์ที่ดีกว่า

ไฟล์นี้เป็นหน้าคู่มือ - nroffจัดรูปแบบการใช้ ไฟล์ดังกล่าวมักจะbash.0ถูกสร้างขึ้นและทิ้ง ครู่หนึ่งพวกเขาถูกบันทึกไว้เพื่อลดการทำงานของmanโปรแกรม แทนที่จะ/usr/share/man/man1, /usr/share/man/cat1หน้าคู่มือของคุณจะได้รับการอ่านจาก อ่านคำอธิบายของcatmanตัวอย่างเช่น

nroffเป็นคำสั่ง Unix สำหรับการจัดรูปแบบหน้าคู่มือและไฟล์อื่น ๆ ย้อนกลับไปตอนที่เขียนครั้งแรกมียูทิลิตี้อื่น ๆ อีกหลายตัวแต่ละตัวมีภาษามาร์กอัปของตัวเอง ฉันเคยใช้คนละอย่างน้อยหนึ่งโหล แต่พวกเขาทั้งหมดแก้ปัญหาการพิมพ์ที่เน้นข้อความด้วยวิธีเดียวกัน: ใช้การควบคุมการขนส่ง แบ็คสเปซเห็นได้ชัดเจนเพราะไม่ได้ใช้ในไฟล์ข้อความธรรมดาอื่น ๆ แท็บ , ผลตอบแทนการขนส่ง , สายฟีดและรูปแบบฟีดทั้งหมดมีบทบาทในไฟล์ข้อความธรรมดา (แม้ว่ารูปแบบฟีดที่อยู่ห่างไกลความสำคัญน้อยกว่าที่พวกเขาเดิม)

nroffใช้เพื่อบ่งชี้ถึงขีดเส้นใต้ตัวเอียงและ overstriking เพื่อเป็นตัวแทนของความกล้าหาญ เทคนิคนี้ล้าสมัย: มันมีประโยชน์สำหรับอุปกรณ์ถ่ายเอกสารที่สามารถพิมพ์ได้มากกว่าหนึ่งตัวในตำแหน่งเดียวกัน เทอร์มินัลวิดีโอน้อยมากที่ทำเช่นนั้น ในterminfo(5)นั้นจะเป็น

   over_strike               os     os   terminal can over-
                                         strike

หรือมากกว่านั้นโดยสมบูรณ์ :

หากขั้วoverstrikes (แทนที่จะล้างตำแหน่งเมื่อตัวละครถูกฟาดกว่า) แล้วมันควรจะมี os ความสามารถในการ

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

ในบรรดาวิดีโอเทอร์มินัลที่มีรายชื่อน้อยมากที่มีความสามารถเกินขีด จำกัด ฉันเห็นDEC gt40ซึ่งฉันใช้เป็นเวลาสามปี (1976-1979) ไม่มี Unix ในระบบนั้น (มันรัน RT-11) แต่ฉันเขียนformatter textโดยใช้ข้อความ overstruck ประเภทเดียวกัน ท้ายที่สุดฉันต้องการสำเนาถาวรและเขียนโปรแกรมอรรถประโยชน์เพื่อทำให้สิ่งนั้นเกิดขึ้นเช่นcolบางทีอาจจะ แต่แก้ปัญหาที่เกี่ยวข้อง เทอร์มินัลพิมพ์ช้ามากเมื่อมีข้อความขีดเส้นใต้จำนวนมากจนกระทั่งโปรแกรมของฉันจัดระเบียบข้อความใหม่เพื่อลดปริมาณการสลับระหว่างการเคลื่อนที่ไปข้างหน้า / ถอยหลัง

ด้วยเทอร์มินัลวิดีโอไม่จำเป็นต้องทำเช่นนั้น แต่พวกเขาจะไม่ทำเกินขอบเขต แต่เรามีโปรแกรมที่จดจำการขีดเส้นใต้และแสดงการขีดเส้นใต้หรือมีgroffซึ่งอาจแสดงข้อความสีแทนการขีดเส้นใต้ (และตัวหนา)

อ่านเพิ่มเติม:


ขอบคุณสำหรับคำตอบที่ครอบคลุมพร้อมภูมิหลังทางประวัติศาสตร์ที่น่าสนใจ ตอนดึกสำหรับฉันฉันจะอ่านให้ถูกต้องในวันพรุ่งนี้ FWIW ฉันได้อัปเดตคำตอบของคุณเกี่ยวกับการสร้าง man pages ก่อนหน้านี้ในวันนี้เมื่อฉันทำการค้นคว้าครอบครัว formatters text * roff
Anthony G - ความยุติธรรมสำหรับโมนิก้า

43

Overstriking เป็นวิธีการที่ใช้ในnroff(ดูกระดาษ Troff ) เพื่อเสนอความเป็นไปได้ในการพิมพ์มากกว่า ASCII ธรรมดาที่จะอนุญาต:

  • ข้อความตัวหนา (โดยการเขียนทับตัวละครเดียวกัน)
  • ข้อความที่ขีดเส้นใต้ (โดยการเขียนทับ_)
  • สำเนียงและกำกับ ( เช่น éการผลิตโดย overstriking eด้วย)

และสัญลักษณ์อื่น ๆ อีกมากมายตามที่ได้รับอนุญาตจากอุปกรณ์ส่งออกเป้าหมาย

ในไฟล์bashเหล่านี้.0มีการผลิตโดยตรงโดยnroffมีMakefileกฎเช่น

.1.0:
        $(RM) $@
        -${NROFF} -man $< > $@

คุณสามารถดูไฟล์ดังกล่าวได้โดยใช้less; มันจะประมวลผลลำดับการเขียนทับและแทนที่ตามความเหมาะสม:

less bash.0

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

( troffเครื่องเรียงพิมพ์เป้าหมาย)


ขอบคุณสำหรับลิงค์ไปยังคู่มือผู้ใช้ Troff และข้อมูลเกี่ยวกับวิธีการผลิตไฟล์ ในคำถามของฉันฉันยังถามว่าไฟล์เหล่านี้มีวัตถุประสงค์เพื่อใช้อย่างไร ฉันพยายามวิ่งnroff bash.0บนระบบ Ubuntu ของฉัน แต่มันสร้างคำเตือนจำนวนหนึ่งเอาต์พุตนั้นถูกห่อหุ้มอย่างหนักที่ 65 ตัวอักษรและไม่มีการจัดรูปแบบพิเศษ
Anthony G - ความยุติธรรมสำหรับโมนิก้า

1
อาใช่ฉันลืมส่วนนั้น ฉันแก้ไขคำตอบของฉันแล้ว nroffใช้สำหรับสร้างไฟล์เหล่านี้ไม่ใช่เพื่อดู
Stephen Kitt

2
ใช่และนั่นก็เป็นวิธีการman bashทำงานที่ค่อนข้างมาก; มันใช้nroff -manในการประมวลผล.1ไฟล์ (หรือส่วนใดที่เกี่ยวข้อง) ซึ่งเป็นnroffไฟล์ก่อนที่จะให้อาหารกับเพจเจอร์ที่เหมาะสม
Stephen Kitt

5
@Anthony Geoghegan: คิดได้ว่าคุณจะส่งไฟล์นี้ไปยังเครื่องพิมพ์ที่ผลกระทบเช่นเครื่องพิมพ์เดซี่ล้อ จริง ๆ แล้วมันจะพิมพ์อักขระจากนั้นเลื่อนกลับแล้วพิมพ์อักขระอื่นพร้อมผลลัพธ์ตามที่อธิบายไว้ข้างต้น ข้อความที่มีความหนาคล้ายกับ“ เอฟเฟ็กต์คอรัส” ในการประมวลผลเสียง: ตัวอักษรตัวที่สองมีการวางแนวที่ไม่ตรงกับตัวแรกมากไปสู่เส้นที่หนาขึ้น
chirlu

1
@chirlu นั่นเป็นคำอธิบายที่ยอดเยี่ยมเกี่ยวกับวิธีการใช้อักขระควบคุมเพื่อให้ได้เอฟเฟกต์แบบตัวพิมพ์ด้วยฮาร์ดแวร์แบบดั้งเดิม ตอนนี้การใช้ตัวละครเหล่านั้นเหมาะสมมาก หากคุณโพสต์สิ่งนี้เป็นคำตอบฉันสามารถโหวตได้อย่างถูกต้อง แก้ไข: สตีเฟ่นได้รวมไว้แล้วและขยายตัวในเรื่องนี้
Anthony G - ความยุติธรรมสำหรับโมนิก้า

7

และแม้กระทั่งก่อนหน้านี้มันเป็นวิธีการพิมพ์บนเครื่องพิมพ์ลูกกอล์ฟที่ทำงานเหมือนกับเครื่องพิมพ์ดีดเก่าและมีอักขระจำนวน จำกัด ที่สามารถพิมพ์ได้ ดังนั้น nroff ใช้ byte stream ของเครื่องพิมพ์โทรพิมพ์เก่าเพื่อแสดงวิธีการดู 'บนหน้าจอ'


nroffอันที่จริงแล้วถูกออกแบบมาเพื่อพิมพ์บนเครื่องพิมพ์ดีดซึ่งแตกต่างจากเครื่องพิมพ์ดีดที่เป็นtroffเป้าหมาย การใช้หน้าจอสำหรับเอาท์พุทมาในภายหลัง ...
สตีเฟ่น Kitt

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