如何在乳胶中排版日文ascii艺术?

如何在乳胶中排版日文ascii艺术?

我正在考虑创建一个包,它提供了一个使用 MS PGothic 排版一些精美的日语 ASCII 艺术的环境。MS PGothic 是日语 ASCII 艺术的默认字体。

我的想法是创建一个新的 verbatim 环境。但看起来 verbatim 要求字体是等宽的,而 MS PGothic 是成比例的,字体也必须是成比例的才能排版日文 ASCII 艺术。

我尝试通过收集到的信息来创建一些包。其中一个是这样的:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{jart}[2023/03/05 Japanese ASCII Art]

\RequirePackage{fancyvrb}

% Set the font to MS PGothic
\usepackage{fontspec}
\setmonofont{msgothic.ttc}

% Set character width and line height
\fvset{fontsize=\small,xleftmargin=2em,}
\def\num{18}
\def\px{16}

% Define the "jart" environment
\DefineVerbatimEnvironment{jart}{Verbatim}
{fontfamily=tt,numbers=none,framesep=0.5em,rulecolor=white,baselinestretch=\num/\px}

但它不起作用。我认为我的包中存在一些我没有发现的基本错误。

如果有人能阐明这个问题,我将不胜感激。我有一本《Latex Companion 2ed》,希望有人能指导我该读哪一章。

正确排版的 ASCII 艺术示例可见此处:https://aahub.org/ 提前谢谢。

-

编辑1:感谢 Niranjan 的回答,这个问题几乎解决了。我提到,日语 ASCII 艺术中使用的字体必须是成比例的。“成比例”是指每个字符都有不同的宽度。为了说明现有精彩答案的问题,我必须包含一些外部图像链接。

这是我用来排版示例 ASCII 艺术的主要 Tex 文件:

\documentclass{article}
\usepackage{jart}
\begin{document}
First document. This is a simple example, with no 
extra parameters or packages included.


\begin{jart}
                              ______
                         ,、.- '''"´          ` ' ‐ 、,
                      ,、 ''"                    `' .、
                    ,、 '"          .......................         \
                  /       ..........::::::::::::::::::::::::::::::::::::::::::::::....... ...   ヽ
                /      ....:::::::::::::::;;::::::::::::::::;:::;、r'" \:::::::::::::::::.....::..   ヽ
    .          /      ..::::::::::::::::::::/ `ヽ,:/ノ     \ィ'ヽ:::::::::::::::..   ヽ
    .         /      ..:::::::::::::::::::;、:ィ'    `  ヽ        ヽ  \:::::::::::::..   ',
            , '      ..:::::::::::::::;、r':/,'    .....          ヽ   ヽ::::::::::..  ',
    .      , '      ..::::::::::;、 '" / ,'  / ,、-ヽ          ',    ヽ::::::::.. /
          /      ..::::::::/  /  ,'  //   ヽ.   ヽ    ヽ ',     ヽ::::::::/
         /     ...::::::::/  /    ;   /       ヽ  ヽ  ヽ 丶 ',    ヽ/
        /     ..::::::::::::i゙  /     ,'  i           ヽ ヾ、  ヽ \',    ',
    .   /   ....:::::::::::::::::i../    ,、 ,'   | ,.、----- 、,  ',  ',.\  ヾ' 、ヽ    ',
      /   ..:::::::::::::::::::::/   ,、 '" ,'   |´          ',  !. ‐ヽ ヽ ヾ 、   ',
     / ....::::::::::::::::::::::/  ,、 '".--、i //!. |            ', l   ヽ. ',、. ', ` 、 ',
      \::::::::::::::::::::/ ,、 '" / ,r''''''|〃  | |,.|ィ===ミ、     ', |, -ノ-、  /‐!   | \ ',
       `' 、:.:/ ,、 '" |.  │ ! /~|   l ',            lノ===ミ、 /l |    |   \
        ,、r'ィ"‐-:、;;;_|   ヽ ヽ、|    i ',\\\               { l i lヽ !
       ´       ,'     \ l    .',、'、       ,  \\\!| l  ! ' ,ヽ !
              /       ` l    ',ヽヽ               |!| ヽ .| ',.ヽ!
    .         /         l     ! `ヽ  、_..-、_,   /.ハ. V  ',
             /        ,、 -',    ',‐‐―┐           / /  |   ',
           , '     ,、- '''´   ',    ',    |.        ィ ´  /    |ー-、 ',
          /      l       ',    ',  ト> ‐ <´_!   /   / / ',
        /        ',        ',    ', ├---゙ニi゙、.,,,,,{  /    / / |\ ',
      /   /      ヽ       ',    ',│ ||  ||  ||ヽ     / ト, |  ヽ ヽ
    '"    /        >         ',    ',ヽ. ||  ||  ||:}      /   | l. l   ヽ '
    
\end{jart}

\end{document}

如果排版正确,我的 tex 文件中使用的相同艺术作品将如下所示: 正确排版的 ASCII ART

但使用现有的答案会产生以下结果: 在此处输入图片描述

你可以看到,字符都在那里,但是比例不对。一些字符被加宽了,将其他字符推向了右侧。

通过检查生成的 PDF,似乎每个字符的宽度都固定为全角和半角。我希望我清楚地描述了这个问题。

-

编辑 2:使用其他字体也可以,例如aahub此处提供的字体:https://fonts.aahub.org/

答案1

我认为这将是做你想做的更安全的方法:

\ProvidesPackage{jart}[2023/03/06 Japanese ASCII Art]
\RequirePackage{fancyvrb}
\usepackage{fontspec}
\newfontfamily\verbatimfont[%
  NFSSFamily       = {myverbatimfont}%
]{msgothic.ttc}
\fvset{fontsize=\small,xleftmargin=2em}
\def\jart@num{18}
\def\jart@px{16}
\DefineVerbatimEnvironment{jart}{Verbatim}{%
  fontfamily=myverbatimfont,%
  numbers=none,%
  framesep=0.5em,%
  rulecolor=white,%
  baselinestretch=\numexpr\jart@num/\jart@px\relax
}
  1. 我没有使用该\setmonofont命令,因为它会全局更改用于 -type 文本的字体\verb。相反,我定义一个\newfontfamily并仅在您的环境中本地使用它。
  2. 由于这应该是一个包,因此始终建议在特定于包的宏前面加上包名称,例如,\jartnum而不是仅仅\num。我们总是让包宏越来越具体,以适应最终用户。基本上,它为他们提供了更多的自由,因为现在任何人都可以\def\num{some-interesting-definition}在他们的文档中使用,而且这不会改变任何东西,jart因为我们专门有\jartnum
  3. 关于@符号:在“内部”宏中,即仅由包需要的宏,我们还会在宏中的某个位置添加“@”符号,通常在包名称前缀之后。所以\jartnum我用的是\jart@num。现在,即使某些用户试图\jart@num在他们的代码中重新定义,LaTeX 也不会接受它。他们必须使用特殊命令\makeatletter才能重新定义它。这基本上使您的代码对包和最终用户都更安全,并且编码变得更加自由。
  4. 与某些编程语言不同,您无法在 LaTeX 中即时进行数学运算。您必须启动计算,而 LaTeX 对此有\numexpr。我们使用内部宏定义值,然后像\numexpr代码中看到的那样对它们进行计算。
  5. \NeedsTeXFormat{LaTeX2e}现在你不再需要这条线了。

PS:与您的代码无关,但由于您计划发布软件包,请尝试使用随 TeX Live 一起分发的字体。您的msgothic.ttc不是。而且它不是免费的(如自由)。寻找免费的替代方案并使用它。

相关内容