冰箱研会长 发表于 2023-3-6 09:59

使用Latex排版ASCII ART

是的, 你没有看错.
本帖的目的就是把装机量巨大的Word, 排版自由度极高的InDesign,

诞生了AA的HTML, 一秒就能正确显示的记事本都放在一边,
用晦涩(?)的Latex排版出字符画.

在2017年有这样的一篇论文: https://nips2017creativity.github.io/doc/ASCII_Art_Synthesis.pdf
作者用了当时崭露头角的深度学习方法, 做出了比较优秀的线稿转ASCII ART模型.
然而, 在向世界展示自己的作品的时候, 因为没有一个排版AA的方案,
作者只能以图片的形式加入AA画.

这种妥协让我哭泣.

从那以后, 为了不让其他人经历类似的悲伤.
用Latex排版ASCII ART就成了我一个小小的执念.
今天, 我的愿望终于实现了.

在三名热心网友的帮助下, 一个可以排版AA的包诞生了.


\ProvidesPackage{jart}
\RequirePackage{fancyvrb}
\RequirePackage{xfp}

\usepackage{fontspec}

\newcommand{\turnoffxecjk}{\xeCJKsetup{xeCJKactive=false}}


\newfontfamily\verbatimfont[%
NFSSFamily       = {myverbatimfont}%
]{aahub.ttf}

\fvset{fontsize=\tiny,xleftmargin=2em}

\newdimen\jart@num
\jart@num=8pt\relax

\newdimen\jart@px
\jart@px=8pt\relax

\DefineVerbatimEnvironment{jart}{Verbatim}{%
formatcom=\turnoffxecjk,%
fontfamily=myverbatimfont,%
numbers=none,%
framesep=0.5em,%
rulecolor=white,%
baselinestretch=\fpeval{\jart@num/\jart@px}%
}


这个包的使用也非常简单, 只需要把这个文件保存为jart.sty, 放在你的tex主文件旁边,
在加入

\usepackage{jart}
之后在jart环境里插入aa画即可.


\begin{jart}
      , - ─ ─ - 、
     /    , - 、_  \
   /   /`′ ヽ \  〉
   〈  // ./'\  ヽ |/
   `' イ l l‐_- ヽト、 ヽ l
     | (| | ひ  fラlヽト{、
     / ハヽ   。′ノ {
   / /r ヘ 弋l-r ´ス. ヽ
  /  / > } }皿r┘ |) }

\end{jart}

注意, 这个包里我用了aahub这个字体, 这个字体可以从 https://font.aahub.org/ 处获取.
下载ttf文件置于sty文件旁边即可.

这个包的原理其实很简单, 我新建立了一个常用于展示代码的verbatim环境,
人工指定了比较合适的字体宽高设置.
这样任何本环境内的字符, 都会以AA画的格式进行排版.

虽然这样说起来很简单, 使用各种Tex命令对一个小白来说真是太困难了.
我手里甚至有一本Latex Companion, 不能说完全理解了, 只能说根本串不起来.
之后好不容易在网友的帮助下跑通了包, 得到了正确的排版.
又发现它和xeCJK(在latex排版中日韩文的最优包之一)不兼容, 我做了一个不可以使用日文的日式ASCII ART排版包.
https://p.sda1.dev/10/58e59c537b2178e18aa4aa17fece76f2/TIM_dg9h6FJyK7.png



但这个问题最终也在有能网友的帮助下解决了.

请看, 一个页良好排版的字符画!
https://p.sda1.dev/10/df487684df209dc4418fd35f8e6c97ab/0001.png


于是从此以后, 再也不会有作者为 "Latex无法排版AA画" 而苦恼了.
私以为我是给AA画做出了卓越的贡献, AA名人堂以后肯定有我一席之地.

Ziaaaa 发表于 2024-10-9 01:25



论坛助手,iPhone

丁兔 发表于 2024-10-9 01:31

有必要挖坟吗
页: [1]
查看完整版本: 使用Latex排版ASCII ART