我的 LaTeX 文档中有一个小型 ASCII 图。
\lstset{literate={↓}{$\downarrow{}$}{1}}
\begin{lstlisting}
-1---2----3-----|
---s---------s--|
↓ ↓
---1*--------3***|
\end{lstlisting}
添加向下箭头已经够难了,但现在---
第二行的 变成了水平线,底行的减号也变大了。尤其是最后一行比它应该的要宽。
我还有另一个看起来更糟糕的:
\begin{lstlisting}
-4--5--7--3----|
---s--s--s--s--|
↓ \-↓ \-↓
---4****5*****3***|
\end{lstlisting}
整个底线都错位了:
我怎样才能使它看起来更像原始 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}