添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
孤独的炒面  ·  Parameter specified ...·  1 年前    · 
迷茫的警车  ·  Flink on yarn ...·  1 年前    · 
风流倜傥的麦片  ·  java.lang.RuntimeExcep ...·  1 年前    · 

代码基础框架

  • 引入 listings 宏包。
  • 引入 xcolor 宏包,设置可选参数为 dvipsnames。
  • 在正文区使用 lstlisting 环境。
\documentclass{ctexart}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
% 正文区
\begin{document}
% lstlisting环境
\begin{lstlisting}  % Python代码
import random
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class FrenchDesk:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
    def __init__(self):
        self._cards = [Card(rank, suit) for rank in self.ranks for suit in self.suits]
    def __len__(self):
        return len(self._cards)
    def __getitem__(self, position):
        return self._cards[position]
desk = FrenchDesk()
\end{lstlisting}
\end{document}
 

注意:以上结果中,代码超出该行时,直接被截断!

设置语言、基础字体族、自动换行

  • 可选参数 language 进行语言设置。
  • 可选参数 basicstyle = \ttfamliy ,设置为打字机字体族。
  • 可选参数 breaklines 进行自动换行。
\documentclass{ctexart}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
% 正文区
\begin{document}
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true % 自动换行
import random
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class FrenchDesk:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
    def __init__(self):
        self._cards = [Card(rank, suit) for rank in self.ranks for suit in self.suits]
    def __len__(self):
        return len(self._cards)
    def __getitem__(self, position):
        return self._cards[position]
desk = FrenchDesk()
\end{lstlisting}
\end{document}

设置语法高亮

1 设置关键字高亮

  • 指定语言后,会有一些默认的关键字。

  • 通过可选参数keywordstyle设置关键字样式。

  • 通过可选参数morekeywords指定更多的关键字。

注意:这里的更多关键字指的是那些在语言中属于关键字,但是没有被 LaTeX 识别。

\documentclass{ctexart}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
% 正文区
\begin{document}
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={} % 设置更多的关键字,用逗号分隔
import random
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class FrenchDesk:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
    def __init__(self):
        self._cards = [Card(rank, suit) for rank in self.ranks for suit in self.suits]
    def __len__(self):
        return len(self._cards)
    def __getitem__(self, position):
        return self._cards[position]
desk = FrenchDesk()
\end{lstlisting}
\end{document}
 

已经顺眼多了!

2 设置强调词高亮

  • 可选参数emph指定强调词。
  • 可选参数emphstyle设置强调词样式。
\documentclass{ctexart}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
% 正文区
\begin{document}
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle={\bfseries\color{Rhodamine}} % 强调词样式设置
import random
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
# 一个叫做 FrenchDesk 的类。a class named FrenchDesk.
class FrenchDesk:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
    def __init__(self):
        self._cards = [Card(rank, suit) for rank in self.ranks for suit in self.suits]
    def __len__(self):
        return len(self._cards)
    def __getitem__(self, position):
        return self._cards[position]
desk = FrenchDesk()
\end{lstlisting}
\end{document}
 

悄悄地在 Python 代码中加了一些注释,但是好像并不美妙。

3 设置注释、字符串样式

  • 可选参数commentstyle设置注释样式。
  • 可选参数stringstyle设置字符串样式。
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
    commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
    stringstyle=\bfseries\color{PineGreen!90!black} % 设置字符串样式
 

其他没有显示的代码不变。

注释间距很奇怪,我们让它紧凑一些。

4 紧凑一些

  • 设置columns=flexible
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
    commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
    stringstyle=\bfseries\color{PineGreen!90!black}, % 设置字符串样式
    columns=flexible
 

注意:注释紧凑的同时,其他代码也紧凑了,但我觉得挺好。

  • 设置可选参数numbers可显示行号,常numbers=left
  • 可选参数numbersep调整行号的具体位置。
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
    commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
    stringstyle=\bfseries\color{PineGreen!90!black}, % 设置字符串样式
    columns=flexible,
    numbers=left, % 显示行号在左边
    numbersep=2em % 设置行号的具体位置
 

太糟糕了!行号怎么这么大!

  • 通过设置可选参数numberstyle=\footnotesize使行号变小。
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
    commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
    stringstyle=\bfseries\color{PineGreen!90!black}, % 设置字符串样式
    columns=flexible,
    numbers=left, % 显示行号在左边
    numbersep=2em, % 设置行号的具体位置
    numberstyle=\footnotesize % 缩小行号
 

感觉很合适。

可以加个边框

  • 设置可选参数frame可以加一个边框,single表示单边框。
% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
    commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
    stringstyle=\bfseries\color{PineGreen!90!black}, % 设置字符串样式
    columns=flexible,
    numbers=left, % 显示行号在左边
    numbersep=2em, % 设置行号的具体位置
    numberstyle=\footnotesize % 缩小行号
    frame=single % 边框
 

或许代码有点太靠边框了。

  • 可选参数framesep改变代码和边框的距离

注意:设置framesep移动是边框而非代码!

% lstlisting环境
\begin{lstlisting}[   % 进行参数设置
	language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
    commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
    stringstyle=\bfseries\color{PineGreen!90!black}, % 设置字符串样式
    columns=flexible,
    numbers=left, % 显示行号在左边
    numbersep=2em, % 设置行号的具体位置
    numberstyle=\footnotesize, % 缩小行号
    frame=single, % 边框
    framesep=1em % 设置边框与代码的距离

把设置移到导言区

  • LaTeX 结构与样式分离,需要避免在正文区进行大量的样式设置。
  • 在导言区,\setlst命令也可以完成对 lstlisting 环境的设置。
\documentclass{ctexart}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
% 在导言区进行样式设置
\lstset{
    language=Python, % 设置语言
	basicstyle=\ttfamily, % 设置字体族
	breaklines=true, % 自动换行
	keywordstyle=\bfseries\color{NavyBlue}, % 设置关键字为粗体,颜色为 NavyBlue
	morekeywords={}, % 设置更多的关键字,用逗号分隔
	emph={self}, % 指定强调词,如果有多个,用逗号隔开
    emphstyle=\bfseries\color{Rhodamine}, % 强调词样式设置
    commentstyle=\itshape\color{black!50!white}, % 设置注释样式,斜体,浅灰色
    stringstyle=\bfseries\color{PineGreen!90!black}, % 设置字符串样式
    columns=flexible,
    numbers=left, % 显示行号在左边
    numbersep=2em, % 设置行号的具体位置
    numberstyle=\footnotesize, % 缩小行号
    frame=single, % 边框
    framesep=1em % 设置代码与边框的距离
% 正文区
\begin{document}
% lstlisting环境
\begin{lstlisting}
import random
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
# 一个叫做 FrenchDesk 的类。a class named FrenchDesk.
class FrenchDesk:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
    def __init__(self):
        self._cards = [Card(rank, suit) for rank in self.ranks for suit in self.suits]
    def __len__(self):
        return len(self._cards)
    def __getitem__(self, position):
        return self._cards[position]
desk = FrenchDesk()
\end{lstlisting}
\end{document}
 

这样也有另外一个好处,正文区的每一个 lstlisting 环境都会被设置上相应的样式。针对于特殊情况,我们也可以在特殊的 lstlisting 对相关属性进行重写。

或许在运行本次例子时,你会感觉代码放在了中间并不宽敞的区域。那是因为默认的版心在中间很小的区域。你可以通过以下方法来设置版心为 A4 纸的 80%:

\usepackage{geometry}
\geometry{a4papter,scale=0.8}
 

本文的所有代码都悄悄地加了此设置。嘻嘻。

LaTeX写东西排代码,记录一下一些代码的格式。目前有C/C++,Python的listing格式。内容转自维基百科、Stack Overflow等地,稍有修改。 C/C++: \lstdefinestyle{customc}{ belowcaptionskip=1\baselineskip, breaklines=true, frame=l, xleftmargin=\parindent...
docker-lstlisting 如何使用它: \begin{lstlisting}[language=docker-compose-2,caption={Example docker-compose.yml},breaklines=true,label={code:compose}] version: '2' services: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {} \end{lstlisting}
Python(htmlBeautiful.py)代码 from bs4 import BeautifulSoup #请先装好bs4包 import sys #用于获取系统参数 def prettifyHtml(): f = open \usepackage{listings} \lstset{ breaklines, % 自动将长的代码行换行排版 extendedchars=false, % 解决代码跨页时,章节标题,页眉等汉字不显示的问题 backgroundc \definecolor{mygreen}{rgb}{0,0.6,0} \definecolor{mygray}{rgb}{0.5,0.5,0.5} \definecolor{mymauve}{rgb}{0.58,0,0.82} \lstset{ backgro \begin{lstlisting} public static class MapClass extends MapReduceBase     implements Mapper {     private final static IntWritable \usepackage { lstbayes } 然后在清单环境或命令之一中使用BUGS , JAGS或Stan作为语言。 例如,要格式化斯坦模型, \ begin{lstlisting } [language=Stan] data { int<lower> J; // number of schools real y[J]; // estimated treatment effects real<lower> sigma[J]; // s.e. of effect estimates parameters { real mu; real<lower> tau; real eta[J]; 对于每门课程(或一组笔记),复制“模板”文件夹。 根据需要编辑文件的“设置”部分。 对于每堂课/笔记会议,制作示例列表块的新副本。 像往常一样在块中输入; 制表符空格和换行符被保留! 要编写方程和数学符号,请将 TeX 格式的数学包含在$符号中。 要编写常规的 LaTeX 代码,请将它们括在~符号中。 示例注释块 \section*{Lecture title} \begin{lstlisting} Main bullet point Sub-point Some LaTeX command ~\LaTeX~ Some math $ \frac{1}{2} $ \end{lstlisting}