LaTeX

Chèn code trong LaTeX rất đơn giản

Bài viết giới thiệu đến các bạn gói lệnh listings giúp chèn code có syntax highlight trong bài viết LaTeX rất đơn giản. Đoạn code sau khi chèn vào văn bản sẽ giống như hình dưới đây

Bạn cần dùng gói lệnh sau (đặt trước \begin{document})

Sau đó phải copy đoạn lệnh sau đặt trước \begin{document }

Tuỳ chọn ngôn ngữ ở ngay dòng language=C++, bạn có thể tham khảo các ngôn ngữ được hỗ trợ ở mục 2.4 trong file pdf này. Dưới đây là những ngôn ngữ phổ biến được Math2IT chọn ra giúp bạn

Nếu muốn chèn một dòng code vào cùng dòng văn bản, bạn dùng câu lệnh sau

Nếu muốn chèn nguyên một đoạn code riêng như hình ở đầu bài, bạn dùng như sau (có thể dùng lồng trong môi trường liệt kê)

Nếu muốn tô màu cho các từ khoá, hãy chọn ngôn ngữ thích hợp, việc tô màu đã có LaTeX lo.

Hình ảnh bìa tham khảo từ FreePik.

Từ khoá tiếng Anh để tìm kiếm bài này : How to insert source code into LaTeX document?
Đinh Anh Thi

Đinh Anh Thi

Sáng lập Math2IT. Hiện Thi đang là nghiên cứu sinh tại Pháp về chuyên ngành Toán Ứng Dụng. Anh mong muốn tổng hợp và chia sẻ kiến thức Toán thực tế, Khoa học ứng dụng và Tin học thường thức đến tất cả mọi người dưới dạng dễ tiếp cận và tự nhiên nhất.

  • Huy Quang

    Ai giúp em với ạ!! Sao em toàn bị lỗi khi đánh tiếng việt trong môi trường lstlisting vậy.Mọi người có cách gì chỉ em với.Em cám ơn!!

    • Math2IT

      e bị gì cụ thể?

      • Huy Quang

        VÍ dụ như trong đoạn code em muốn chèn vào văn bản latex qua mỗi trường begin{lstlisting}…end{lstlisting} có 1 dòng tiếng việt thì dòng tiếng việt không hiển thị đc và nó báo lỗi ạ.ad biết cách xử lí giúp em với!!

      • Huy Quang

        Mà tiếng anh thì vẫn đc ạ.:(

  • Thi Minh Nhựt

    Phần này tôi biết, tôi có thể trả lời thay được không. Tôi tham khảo từ hướng dẫn trên với đọc thêm tài liệu trong file listings.pdf.

    Bạn khai báo gói lệnh usepackage{listings} (trước begin{document})

    Nếu muốn định dạng code đẹp thì khai báo thêm (đặt dưới usepackage{listings} và trước begin{document})

    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={smallttfamily},
    numbers=none,
    numberstyle=tinycolor{gray},
    keywordstyle=color{blue},
    commentstyle=color{dkgreen},
    stringstyle=color{mauve},
    breaklines=true,
    breakatwhitespace=true,
    tabsize=3
    }

    Ví dụ: file code của bạn là ngôn ngữ Java thì để là language=Java (hoặc thay bằng ngôn ngữ khác).

    * Có 2 cách để chèn phần code của bạn vào tài liệu:

    – Cách 1: Copy toàn bộ đoạn code đó vào môi trường:
    begin{lstlisting}[language=Java]
    Copy toàn bộ đoạn code đặt vào đây
    end{lstlisting}

    – Cách 2: Copy file code đó (ví dụ: example.java) đặt chung thư mục với file tex, rồi dùng lệnh sau để chèn code từ file *.java vào tài liệu:

    lstinputlisting[language=Java]{example.java}

    * Đây là ví dụ: https://www.dropbox.com/sh/01vnx61pdwmanul/AAAD-Lha3TKP2iFX4X5DD3b2a?dl=0

  • LÊ HƯƠNG GIANG

    Em muốn chèn đoạn code này bằng latex nhưng em k làm được anh giúp em được k ạ
    package assignmentdmp;
    import java.util.*;
    /**
    *
    * @author LENOVO
    */
    public class RSAAlgorithm {
    public static int mpmod(int base, int exponent, int modulus) {
    if ((base < 1) || (exponent < 0) || (modulus 0) {
    if ((exponent % 2) == 1) {
    result = (result * base) % modulus;
    }
    base = (base * base) % modulus;
    exponent = (int) Math.floor(exponent / 2);
    }
    return result;
    }

    public static int findd2(int e, int fi) {
    for (int d = 1; d < fi; d++) {
    if ((d * e) % fi == 1) {
    return d;
    }
    }
    return 0;
    }

    public static boolean gcdcheck(int pe, int phi) {
    for (int i = 3; i < pe; i += 2) {
    if (pe % i == 0 && phi % i == 0) {
    return false;
    }
    }
    return true;
    }

    // Primary entry
    public static void main(String[] args) {

    // Define 64 bit versions of p, q and e
    int p, q, e;
    String plaintext;
    // Create a new scanner instance
    Scanner stdIn = new Scanner(System.in);

    // Input the shift value
    while(true){
    int count = 0;

    System.out.println("Enter Value of p (Must a prime number) : ");
    p = stdIn.nextInt();
    stdIn.nextLine();
    for(int i = 1; i <= p; i++){
    if(p % i == 0){
    count++;
    }
    }

    if(count == 2){
    System.out.println("OK.");
    break;
    }
    }

    while(true){
    int count2 = 0;
    System.out.println("Enter Value of q (Must a prime number) : ");
    q = stdIn.nextInt();
    stdIn.nextLine();
    for(int i = 1; i <= q; i++){
    if(q % i == 0){
    count2++;
    }
    }

    if(count2 == 2){
    System.out.println("OK.");
    break;
    }
    }
    // Calculate n and phi
    int n = p * q;
    int phi = (p – 1) * (q – 1);

    // Give the user some output
    System.out.printf("Value of (p, q) : (%d,%d)n", p, q);
    System.out.printf("Value of n, phi(n) : (%d,%d)n", n, phi);

    // Request the value of e
    while(true){
    int count3 = 0;
    // Request the value of e
    System.out.printf("Enter public key e (Must a prime number and 1 < e < %d) :n", n);
    e = stdIn.nextInt();
    stdIn.nextLine();
    for(int i = 1; i <= e; i++){
    if(e % i == 0){
    count3++;
    }
    }
    if(count3 == 2){
    System.out.println("OK.");
    break;
    }

    System.out.printf("Public key (e, n) (%d,%d)n", e, n);
    }
    // Make sure we pass the coprimes test
    if (gcdcheck(e, phi)) {
    System.out.println("Passed gcd check");
    } else {
    // Choice of e fails the test, end the program
    System.out.println("e fails gcd check, please try again");
    return;
    }

    // Save d for decryption
    int d = findd2(e, phi) % n;

    System.out.printf("Private Key (d, n) : (%d ,%d)n", d, n);

    // Enter the plain text
    System.out.print("Enter Plain Text: ");
    plaintext = stdIn.nextLine();

    String cipherText = "";

    for (int k = 0; k < plaintext.length(); k++) {
    // Cipher text
    int m = plaintext.charAt(k) – 65;
    int c = mpmod(m, e, n); // C = M^e mod n

    cipherText += (char) (c + 65);
    }
    System.out.println("Ciphertext is: " +cipherText);

    // Press Enter to convert to the original messeage.

    System.out.print("Press enter to convert Encrypted Text " +cipherText + " to Plaintext: ");
    stdIn.nextLine();
    plaintext = "";

    for (int k = 0; k < cipherText.length(); k++) {
    // Decrypt
    int c = cipherText.charAt(k) – 65;
    int m = mpmod(c, d, n); // M = C^d mod n
    m += 65;
    plaintext += (char) m;
    }
    System.out.println("Plaintext: " + plaintext);
    return;

    }
    }

  • LÊ HƯƠNG GIANG

    em chaò anh ạ . em muốn bỏ một bài code nay vào latex nhưng em thể thể làm được anh hướng dẫn em được không ạ
    package assignmentdmp;
    import java.util.*;
    /**
    *
    * @author LENOVO
    */
    public class RSAAlgorithm {
    public static int mpmod(int base, int exponent, int modulus) {
    if ((base < 1) || (exponent < 0) || (modulus 0) {
    if ((exponent % 2) == 1) {
    result = (result * base) % modulus;
    }
    base = (base * base) % modulus;
    exponent = (int) Math.floor(exponent / 2);
    }
    return result;
    }

    public static int findd2(int e, int fi) {
    for (int d = 1; d < fi; d++) {
    if ((d * e) % fi == 1) {
    return d;
    }
    }
    return 0;
    }

    public static boolean gcdcheck(int pe, int phi) {
    for (int i = 3; i < pe; i += 2) {
    if (pe % i == 0 && phi % i == 0) {
    return false;
    }
    }
    return true;
    }

    // Primary entry
    public static void main(String[] args) {

    // Define 64 bit versions of p, q and e
    int p, q, e;
    String plaintext;
    // Create a new scanner instance
    Scanner stdIn = new Scanner(System.in);

    // Input the shift value
    while(true){
    int count = 0;

    System.out.println("Enter Value of p (Must a prime number) : ");
    p = stdIn.nextInt();
    stdIn.nextLine();
    for(int i = 1; i <= p; i++){
    if(p % i == 0){
    count++;
    }
    }

    if(count == 2){
    System.out.println("OK.");
    break;
    }
    }

    while(true){
    int count2 = 0;
    System.out.println("Enter Value of q (Must a prime number) : ");
    q = stdIn.nextInt();
    stdIn.nextLine();
    for(int i = 1; i <= q; i++){
    if(q % i == 0){
    count2++;
    }
    }

    if(count2 == 2){
    System.out.println("OK.");
    break;
    }
    }
    // Calculate n and phi
    int n = p * q;
    int phi = (p – 1) * (q – 1);

    // Give the user some output
    System.out.printf("Value of (p, q) : (%d,%d)n", p, q);
    System.out.printf("Value of n, phi(n) : (%d,%d)n", n, phi);

    // Request the value of e
    while(true){
    int count3 = 0;
    // Request the value of e
    System.out.printf("Enter public key e (Must a prime number and 1 < e < %d) :n", n);
    e = stdIn.nextInt();
    stdIn.nextLine();
    for(int i = 1; i <= e; i++){
    if(e % i == 0){
    count3++;
    }
    }
    if(count3 == 2){
    System.out.println("OK.");
    break;
    }

    System.out.printf("Public key (e, n) (%d,%d)n", e, n);
    }
    // Make sure we pass the coprimes test
    if (gcdcheck(e, phi)) {
    System.out.println("Passed gcd check");
    } else {
    // Choice of e fails the test, end the program
    System.out.println("e fails gcd check, please try again");
    return;
    }

    // Save d for decryption
    int d = findd2(e, phi) % n;

    System.out.printf("Private Key (d, n) : (%d ,%d)n", d, n);

    // Enter the plain text
    System.out.print("Enter Plain Text: ");
    plaintext = stdIn.nextLine();

    String cipherText = "";

    for (int k = 0; k < plaintext.length(); k++) {
    // Cipher text
    int m = plaintext.charAt(k) – 65;
    int c = mpmod(m, e, n); // C = M^e mod n

    cipherText += (char) (c + 65);
    }
    System.out.println("Ciphertext is: " +cipherText);

    // Press Enter to convert to the original messeage.

    System.out.print("Press enter to convert Encrypted Text " +cipherText + " to Plaintext: ");
    stdIn.nextLine();
    plaintext = "";

    for (int k = 0; k < cipherText.length(); k++) {
    // Decrypt
    int c = cipherText.charAt(k) – 65;
    int m = mpmod(c, d, n); // M = C^d mod n
    m += 65;
    plaintext += (char) m;
    }
    System.out.println("Plaintext: " + plaintext);
    return;

    }
    }

  • Thi Minh Nhựt

    Chào anh,
    Anh cho em hỏi là làm sau để tạo được danh sách code (với tên tiếng Việt giống như “Danh sách bảng, Danh sách hình vẽ”) trong tài liệu? Em dùng lệnh lstlistoflistings thì tạo được danh sách code với tên là “Listings” và tên của đoạn code là “Listing 1.1: …”. Có cách nào để chuyển tất cả các tên được định nghĩa tiếng Anh sang tiếng Việt được không anh? Em sử dụng TexLive.
    Cảm ơn anh.