แพคเกจ LaTeX สำหรับการเน้นไวยากรณ์ของรหัสในภาษาต่างๆ


164

ฉันกำลังมองหาแพ็คเกจ LaTeX ที่เน้นไวยากรณ์ในรหัส ตัวอย่างเช่นตอนนี้ฉันใช้ verbatim block เพื่อเขียนโค้ด:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

และใช้งานได้ดีในการแสดงรหัสบนเอกสารของฉัน แต่สมมติว่าฉันต้องการเน้นมาร์กอัพ HTML แบบที่ IDE ใช้ในเอกสารเอาต์พุต มีแพ็คเกจที่สามารถช่วยได้หรือไม่?

ฉันต้องการทำสิ่งเดียวกันสำหรับภาษาต่าง ๆ เช่น Java, C #, HTML, CSS และอื่น ๆ


4
lstlistingฉันไม่พอใจกับ มันไม่ได้เน้นรหัส XML เลยและสกรูเมื่อใช้อักขระ Unicode ต่างประเทศ ไม่รองรับจาวาสคริปต์เช่นกัน LGrind สามารถจัดการกับสิ่งเหล่านี้ได้หรือไม่?
webjunkie

คำตอบ:


157

คุณสามารถใช้รายการแพ็คเกจ รองรับภาษาต่าง ๆ มากมายและมีตัวเลือกมากมายสำหรับปรับแต่งผลลัพธ์

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
สิ่งนี้ทำสีตามค่าเริ่มต้นหรือไม่ ฉันไม่เห็นผลลัพธ์สีในการใช้งานการทดสอบของฉันและฉันไม่แน่ใจว่าเป็นข้อผิดพลาดในส่วนของฉันหรือไม่ใช่คุณสมบัติ
Benson

12
ผมพบคำตอบที่นี่: tjansson.dk/?p=419 คุณสามารถใช้คำสั่ง lstset เพื่อตั้งค่าสไตล์ทุกประเภทสำหรับคุณสมบัติที่แตกต่างกัน
Benson

144

หลังจากถามคำถามที่คล้ายกันฉันได้สร้างแพคเกจอื่นซึ่งใช้ Pygments และข้อเสนออื่น ๆ texmentsให้เลือกค่อนข้างน้อยกว่า มันเรียกว่าmintedและค่อนข้างมีเสถียรภาพและใช้งานได้

เพียงเพื่อแสดงมันนี่คือรหัสเน้นด้วยมิ้นต์:

รหัสตัวอย่าง


นี่เป็นงานที่ดีทีเดียว การติดตั้ง Pygments อาจเป็นเรื่องท้าทาย แต่ฉันแน่ใจว่าคนส่วนใหญ่จะยินดีที่จะทำเช่นนั้น
Vincent Ramdhanie

1
@ วินเซ็นต์: แต่น่าเสียดายที่การติดตั้ง Pygments บน Windows นั้นค่อนข้างซับซ้อนในขณะนี้ (ผู้ใช้ต้องปรับPATHตัวแปรและสร้างสคริปต์ cmd) ฉันหวังว่าจะโน้มน้าวให้ผู้ดูแล Pygments ส่งpygmentizeมอบ.exeเสื้อคลุมเพื่อให้ขั้นตอนนี้ง่ายขึ้น
Konrad Rudolph

1
หลังจากลองทั้งรายชื่อและมิ้นต์ / Pygments ฉันตัดสินใจสร้างเสร็จก็ดีกว่า (ยืดหยุ่นมากกว่า) อย่างไรก็ตามมันจะต้องกระโดดข้ามห่วงไปเป็นโหลอัพเกรดเป็น MiKTeX 2.8 ติดตั้ง Python ติดตั้งส่วนประกอบอื่น ๆ เอกสารที่สะสมไว้นั้นไม่ดีและไม่รองรับการทำลายเส้นยาว แต่ในที่สุดฉันก็ได้มันไปแสดงผล Java / XML ในสี Eclipse!jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundasleepful: เอกสารที่เสร็จสิ้นการปรับปรุงอย่างต่อเนื่อง ;-) จริง ๆ แล้วฉันพบว่ามันค่อนข้างกว้างขวาง (แน่นอนฉันลำเอียง) แต่ฉันยินดีที่จะตอบข้อร้องเรียนใด ๆ ในขณะที่มันอยู่ในส่วน "ข้อกำหนด" เป็นที่ยอมรับอย่างยิ่งใหญ่
Konrad Rudolph

3
mintedได้รับการติดตั้งและทำงานบนทั้ง ShareLatex และ Overleaf ช่วยตัวเองปวดหัวของการติดตั้ง Pygments;)
grofte

21

ฉันแนะนำPygments Pygmentsยอมรับรหัสในภาษาใด ๆ และไวยากรณ์ของผลลัพธ์จะเน้นรหัส LaTeX มันใช้fancyvrbและแพคเกจสีเพื่อสร้างผลลัพธ์ โดยส่วนตัวแล้วฉันชอบมันมากในแพ็คเกจรายการ ฉันคิดว่าfancyvrbสร้างผลลัพธ์ที่สวยกว่ามาก


1
ในขณะที่ฉันชื่นชมโหราศาสตร์ที่อยู่เบื้องหลังรายชื่อฉันก็เห็นด้วยว่าการแบ่งหน้ามีความสำคัญ: ดีกว่าเน้นการปรับแต่งง่ายขึ้นความสามารถในการผสมไวยากรณ์และความสามารถในการส่งออกไปยังรูปแบบอื่นนอกเหนือจากยางเช่น HTML
Charles Stewart

ในbeamerเอกสารประเภทนี้เห็นได้ชัดว่าเป็นตัวเลือกการทำงานเท่านั้น ทั้งmintedมิได้รวบรวมอย่างถูกต้องกับlistings beamer
Luís de Sousa

ใช่ฉันได้ใช้listingsมีแต่คุณต้องระบุเฟรมที่ที่มีรายชื่อเป็นbeamer [fragile]
Supernormal

11

LGrindทำสิ่งนี้ มันเป็นแพ็คเกจ LaTeX สำหรับผู้ใหญ่ที่มีมาตั้งแต่อาดัมเป็นคาวบอยและมีการสนับสนุนภาษาการเขียนโปรแกรมมากมาย


10

ฉันจะใช้แพคเกจที่สร้างเสร็จดังกล่าวจากนักพัฒนา Konrad Rudolph แทนที่จะเป็นแพ็คเกจรายชื่อแพคเกจรายชื่อนี่คือเหตุผล:

รายการแพคเกจ

แพ็คเกจรายชื่อไม่สนับสนุนสีตามค่าเริ่มต้น ในการใช้สีคุณจะต้องมีชุดสีและกำหนดกฎสีด้วยตัวคุณเองด้วยคำสั่ง\ lstsetตามที่อธิบายไว้สำหรับรหัส matlab ที่นี่ที่นี่

นอกจากนี้แพคเกจรายชื่อไม่ได้ทำงานได้ดีกับ Unicode แต่คุณสามารถแก้ไขปัญหาเหล่านั้นตามที่อธิบายไว้ที่นี่และที่นี่

รหัสต่อไปนี้

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

สร้างภาพต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

แพ็คเกจสำเร็จรูป

แพคเกจเสร็จสิ้นการสนับสนุนสียูนิโค้ดและดูดี อย่างไรก็ตามในการที่จะใช้มันคุณจะต้องมีงูหลาม 2.6 และpygments ใน Ubuntu คุณสามารถตรวจสอบเวอร์ชั่นของไพ ธ อนได้ที่เทอร์มินัล

python --version

และคุณสามารถติดตั้ง pygments ด้วย

sudo apt-get install python-pygments

จากนั้นเมื่อเสร็จสิ้นการโทรไปยัง pygments คุณจะต้องรวบรวมมันด้วย-shell-escapeเช่นนี้

pdflatex -shell-escape yourfile.tex

หากคุณใช้ลาเท็กซ์เอดิเตอร์เช่น TexMaker หรือบางอย่างฉันขอแนะนำให้เพิ่มคำสั่งผู้ใช้เพื่อให้คุณสามารถคอมไพล์ในเอดิเตอร์ได้

รหัสต่อไปนี้

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

สร้างภาพต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่


4

ฉันส่วนใหญ่ใช้ lstlistings ในเอกสาร แต่สำหรับผลสี (สำหรับสไลด์) ฉันใช้ pygments แทน


-1

ฉันขอแนะนำให้กำหนดแพ็คเกจของคุณเองตามรหัสเท็กซัสต่อไปนี้ สิ่งนี้จะช่วยให้คุณมีอิสระอย่างสมบูรณ์ http://ubuntuforums.org/archive/index.php/t-331602.html


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