ฉันจะแทรกรหัสลงในเอกสาร LaTeX ได้อย่างไร มีบางอย่างเช่น:
\begin{code}## Heading ##
...
\end{code}
สิ่งเดียวที่ฉันต้องการจริงๆคือการเยื้องและแบบอักษรความกว้างคงที่ การเน้นไวยากรณ์อาจทำได้ดีแม้ว่าไม่จำเป็นต้องใช้แน่นอน
ฉันจะแทรกรหัสลงในเอกสาร LaTeX ได้อย่างไร มีบางอย่างเช่น:
\begin{code}## Heading ##
...
\end{code}
สิ่งเดียวที่ฉันต้องการจริงๆคือการเยื้องและแบบอักษรความกว้างคงที่ การเน้นไวยากรณ์อาจทำได้ดีแม้ว่าไม่จำเป็นต้องใช้แน่นอน
คำตอบ:
ใช้listings
แพ็คเกจ
การกำหนดค่าอย่างง่ายสำหรับส่วนหัว LaTeX (ก่อนหน้า\begin{document}
):
\usepackage{listings}
\usepackage{color}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\lstset{frame=tb,
language=Java,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle={\small\ttfamily},
numbers=none,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{dkgreen},
stringstyle=\color{mauve},
breaklines=true,
breakatwhitespace=true,
tabsize=3
}
\lstset{language=Java}
คุณสามารถเปลี่ยนภาษาเริ่มต้นในช่วงกลางของเอกสารที่มี
ตัวอย่างการใช้งานในเอกสาร:
\begin{lstlisting}
// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;
public class Hello extends JApplet {
public void paintComponent(Graphics g) {
g.drawString("Hello, world!", 65, 95);
}
}
\end{lstlisting}
นี่คือผลลัพธ์:
figure
อาจทำให้ได้ผล
คุณยังสามารถใช้สภาพแวดล้อมคำต่อคำ
\begin{verbatim}
your
code
example
\end{verbatim}
นี่คือวิธีการเพิ่มรหัสแบบอินไลน์:
คุณสามารถเพิ่มโค้ดใกล้เคียงกับที่หรือ{\tt code }
\texttt{ code }
หากคุณต้องการจัดรูปแบบรหัสแบบอินไลน์จะเป็นการดีที่สุดหากคุณต้องการคำสั่งของคุณเอง
\newcommand{\code}[1]{\texttt{#1}}
นอกจากนี้โปรดทราบว่าสามารถบล็อกรหัสจากไฟล์อื่นด้วย
\lstinputlisting[breaklines]{source.c}
breaklines
ไม่จำเป็น แต่ฉันคิดว่ามันมีประโยชน์ โปรดทราบว่าคุณจะต้องระบุ\usepackage{
รายชื่อ }
สำหรับรายการนี้
อัปเดต:แพคเกจรายการยังรวมถึง\lstinline
คำสั่งซึ่งมีคุณลักษณะการเน้นไวยากรณ์เหมือนกับคำสั่ง\lstlisting
และ\lstinputlisting
(ดูคำตอบของ Cloudanger สำหรับรายละเอียดการกำหนดค่า) ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ อีกสองสามรายการนอกจากนี้ยังมีแพ็คเกจมิ้นต์ที่ให้\mintinline
คำสั่ง ชอบ\lstinline
, \mintinline
ให้ไวยากรณ์เดียวกันไฮไลต์เป็นประจำป้องกันรหัสมิ้นต์:
\documentclass{article}
\usepackage{minted}
\begin{document}
This is a sentence with \mintinline{python}{def inlineCode(a="ipsum)}
\end{document}
แพคเกจเฉพาะเช่นminted
ซึ่งต้องอาศัย Pygments เพื่อทำการจัดรูปแบบมีข้อได้เปรียบที่หลากหลายกว่าlistings
แพ็คเกจ อ้างจากminted
คู่มือ
Pygments ให้การเน้นไวยากรณ์ที่เหนือกว่ามากเมื่อเทียบกับแพคเกจทั่วไป ตัวอย่างเช่นรายชื่อจะเน้นเฉพาะสตริงความคิดเห็นและคำหลักเท่านั้น ในทางกลับกัน Pygments สามารถปรับแต่งได้อย่างสมบูรณ์เพื่อเน้นโทเค็นชนิดใด ๆ ที่ภาษาต้นฉบับอาจสนับสนุน ซึ่งอาจรวมถึงลำดับการจัดรูปแบบพิเศษภายในสตริงตัวเลขตัวระบุชนิดต่างๆและโครงสร้างที่แปลกใหม่เช่นแท็ก HTML
-shell-escape
คำสั่งนั้นเป็นสิ่งที่ดีที่สุดคือการปรับเปลี่ยนเล็กน้อยเพื่อสร้างระบบการสร้างและที่แย่ที่สุดไม่สามารถใช้ร่วมกับการตั้งค่าความปลอดภัยของผู้ใช้บางคนได้
ใช้Mintedมิ้นต์
มันเป็นแพ็คเกจที่อำนวยความสะดวกในการเน้นไวยากรณ์ที่แสดงออกใน LaTeX โดยใช้ห้องสมุดPygmentsอันทรงพลัง แพคเกจยังมีตัวเลือกในการปรับแต่งการส่งออกซอร์สโค้ดที่เน้นสีโดยใช้fancyvrb fancyvrb
มันพัฒนาและปรับแต่งได้มากกว่าแพ็คเกจอื่น ๆ !
-shell-escape
อาจดูดสำหรับบางคน
มิ้นต์ทำงานในOverleaf , TeX Live และ MiKTeX
ตัวอย่าง:
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}[mathescape, linenos]{python}
# Note: $\pi=\lim_{n\to\infty}\frac{P_n}{d}$
title = "Hello World"
sum = 0
for i in range(10):
sum += i
\end{minted}
\end{document}
เอาท์พุท:
เนื่องจากยังไม่ได้กล่าวถึงที่นี่จึงอาจคุ้มค่าที่จะเพิ่มอีกหนึ่งตัวเลือกแพ็คเกจspverbatim
(ไม่มีการเน้นไวยากรณ์):
\documentclass{article}
\usepackage{spverbatim}
\begin{document}
\begin{spverbatim}
Your code here
\end{spverbatim}
\end{document}
นอกจากนี้หากไม่จำเป็นต้องเน้นไวยากรณ์ให้ทำแพ็กเกจalltt
:
\documentclass{article}
\usepackage{alltt}
\begin{document}
\begin{alltt}
Your code here
\end{alltt}
\end{document}