LaTeX で日本語の ASCII アートをタイプセットするにはどうすればいいですか?

LaTeX で日本語の ASCII アートをタイプセットするにはどうすればいいですか?

私は、MS PGothic を使用して派手な日本語 ASCII アートをタイプセットする環境を提供するパッケージを作成したいと考えています。MS PGothic は、日本語 ASCII アートのデフォルト フォントです。

私の考えは、新しい verbatim 環境を作成することです。しかし、verbatim ではフォントが等幅である必要があるようですが、MS PGothic はプロポーショナルであり、日本語の ASCII アートをタイプセットするにはフォントがプロポーショナルである必要があります。

私はあちこちで収集した情報をまとめて、いくつかのパッケージを作成しようとしました。そのうちの 1 つは次のようになります。

\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アート

しかし、既存の回答を使用すると次のようになります: ここに画像の説明を入力してください

文字はすべて揃っていますが、比率が間違っています。一部の文字が広くなり、他の文字が右に押しやられています。

結果の 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. このコマンドは-type テキスト\setmonofontに使用されるフォントをグローバルに変更するため、使用しません。代わりに、 を定義して、環境専用にローカルに使用します。\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ありません。また、無料ではありません (自由という意味で)。無料の代替品を探して、それを使用してください。

関連情報