LaTeX 列表中的 ASCII + Unicode 艺术

LaTeX 列表中的 ASCII + Unicode 艺术

我的 LaTeX 文档中有一个小型 ASCII 图。

\lstset{literate={↓}{$\downarrow{}$}{1}}
\begin{lstlisting}
-1---2----3-----|
---s---------s--|
   ↓         ↓
---1*--------3***|
\end{lstlisting}

添加向下箭头已经够难了,但现在---第二行的 变成了水平线,底行的减号也变大了。尤其是最后一行比它应该的要宽。

图像 1 生成为 PDF

我还有另一个看起来更糟糕的:

\begin{lstlisting}
-4--5--7--3----|
---s--s--s--s--|
   ↓  \-↓   \-↓
---4****5*****3***|
\end{lstlisting}

整个底线都错位了:

图像 2 生成为 PDF

我怎样才能使它看起来更像原始 ASCII?

答案1

大多数字体中的字符宽度并不相同,即“t”可能比字母窄a,因此字体的字符宽度是成比例的。

如果所有字符都应具有相同的宽度,请使用非比例字体,如typewriter已启用的字体(例如 Courier),例如\ttfamily

另外我建议使用inputenc包来提供对unicode字符直接输入的支持(或者使用xelatex然后)来制作UnicodeArt;-)

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}


\lstset{basicstyle={\ttfamily},literate={↓}{$\downarrow{}$}{1}}

\begin{document}


\begin{lstlisting}  
1---2----3-----|
---s---------s--|  
  ↓         ↓  
---1*--------3***|  
\end{lstlisting}

\begin{lstlisting}  
---s---------s--|  
    ↓         ↓  
---1*--------3***|  
\end{lstlisting}
\end{document}

在此处输入图片描述

答案2

listings是一个可行的选择,但存在一些小的对齐问题。以下是使用fancyvrb和常规verbatim环境:

在此处输入图片描述

\documentclass{article}
\usepackage{listings,fancyvrb}
\newcommand{\da}{% down arrow
  \phantom{x}%
  \makebox[0pt][r]{$\downarrow$}}
\begin{document}

\begin{lstlisting}[basicstyle=\ttfamily,literate={↓}{$\downarrow{}$}{1}]
 ---s---------s--|
    ↓         ↓
 ---1*--------3***|
\end{lstlisting}

\begin{Verbatim}[commandchars=\\\{\}]
 ---s---------s--|
    \da         \da
 ---1*--------3***|
\end{Verbatim}

\begin{verbatim}
 ---s---------s--|
    |         |
    v         v
 ---1*--------3***|
\end{verbatim}

\end{document}

答案3

使用xelatex或运行lualatex

\documentclass{article}
\usepackage{fontspec}
\setmonofont{DejaVu Sans Mono}
\usepackage{fancyvrb}
\begin{document}

\begin{Verbatim}[fontsize=\small]
1---2----3--------|
 ---s---------s---|  
    ↓         ↓  
 ---1*--------3***|  
\end{Verbatim}

\bigskip
\begin{Verbatim}[fontsize=\small]  
----s---------s---|  
    ↓         ↓  
----1*--------3***|  
\end{Verbatim}

\end{document}

如果你愿意的话pdflatex可以使用

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{fancyvrb}
\usepackage{newunicodechar}
\newunicodechar{↓}{$\downarrow$}
\begin{document}
[...]
\end[document}

在此处输入图片描述

相关内容