Как набрать японскую 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-искусстве, должен быть пропорциональным. Под «пропорциональным» я подразумеваю, что каждый символ имеет разную ширину. Чтобы проиллюстрировать проблему существующего замечательного ответа, мне пришлось бы включить некоторые внешние ссылки на изображения.

Это мой основной Tex-файл, используемый для набора образца ASCII-арта:

\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команду, так как она глобально изменяет шрифт, используемый для \verb-type текста. Вместо этого я определяю \newfontfamilyи использую его локально только для вашей среды.
  2. Поскольку предполагается, что это пакет, всегда желательно добавлять к макросам, специфичным для пакета, префикс package-name, например, \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— нет. К тому же он не бесплатный (в смысле свободы). Найдите бесплатную альтернативу и используйте ее.

Связанный контент