Como compor arte ascii japonesa em látex?

Como compor arte ascii japonesa em látex?

Estou pensando em criar um pacote que forneça um ambiente que use o MS PGothic para compor algumas artes japonesas sofisticadas em ASCII. MS PGothic é a fonte padrão para arte ASCII japonesa.

Meu pensamento é criar um novo ambiente literal. Mas parece que literalmente exige que a fonte seja monoespaçada, enquanto isso, o MS PGothic é proporcional, e a fonte deve ser proporcional para poder compor a arte ASCII japonesa.

Tentei criar alguns pacotes apresentando as informações que coletei aqui e ali. Um deles é como:

\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}

Mas não funciona. Acho que existem alguns erros rudimentares no meu pacote que não consegui ver.

Eu realmente apreciaria se alguém lançasse alguma luz sobre esse assunto. Eu tenho uma cópia do "Latex Companion 2ed", orientações sobre qual capítulo preciso ler são bem-vindas.

Exemplos de arte ASCII composta adequada podem ser vistos aqui:https://aahub.org/ Obrigado antecipadamente.

-

EDITAR 1:Graças à resposta de Niranjan, a questão está quase resolvida. Mencionei que a fonte usada na arte ASCII japonesa deve ser proporcional. Por "proporcional" quero dizer que cada caractere tem largura diferente. Para ilustrar o problema da maravilhosa resposta existente, eu teria que incluir alguns links de imagens externas.

Este é meu arquivo Tex principal usado para compor uma amostra de arte 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}

A mesma arte usada no meu arquivo tex, se formatada corretamente, fica assim: Uma composição tipográfica adequada ASCII ART

Mas usar a resposta existente produz isto: insira a descrição da imagem aqui

Você pode ver que o personagem está todo ali, mas a proporção está errada. Alguns personagens são ampliados, empurrando outros personagens para a direita.

Ao inspecionar o PDF resultante, parece que a largura de cada caractere é fixada em largura total e metade. Espero ter descrito claramente o problema.

-

EDIT 2: Usar outras fontes funciona, como a aahubfonte fornecida aqui:https://fonts.aahub.org/

Responder1

Acho que essa seria uma maneira mais segura de fazer o que você deseja:

\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. Eu não uso o \setmonofontcomando, pois ele altera globalmente a fonte usada para \verbo texto do tipo. Em vez disso, defino a \newfontfamilye uso-o localmente apenas para o seu ambiente.
  2. Como se supõe que este seja um pacote, é sempre aconselhável prefixar as macros específicas do pacote com o nome do pacote, por exemplo, \jartnumem vez de apenas \num. Sempre tornamos as macros de pacotes cada vez mais específicas para os usuários finais. Basicamente, dá mais liberdade para eles, já que agora qualquer um pode usar \def\num{some-interesting-definition}em seus documentos e isso não mudaria nada já jartque temos especificamente o \jartnum.
  3. Sobre o @sinal: Em macros 'internas', ou seja, as macros exigidas apenas pelo pacote, também adicionamos o sinal '@' em algum lugar da macro, convencionalmente após o prefixo do nome do pacote. Então, em vez de \jartnumeu usei \jart@num. Agora, mesmo que algum usuário tente redefinir \jart@numseu código, o LaTeX não aceitará. Eles terão que usar o comando especial \makeatletterpara redefini-lo. Isso basicamente torna seu código mais seguro tanto para o pacote quanto para o usuário final e a codificação se torna mais livre.
  4. Você não pode fazer matemática instantaneamente em LaTeX, ao contrário de algumas linguagens de programação. Você deve iniciar os cálculos, para os quais o LaTeX possui \numexpr. Definimos valores com macros internas e depois aplicamos cálculos sobre eles como \numexprvisto no código.
  5. Você não precisa \NeedsTeXFormat{LaTeX2e}mais da linha hoje em dia.

PS: Não relacionado ao seu código, mas como você está planejando lançar um pacote, tente usar uma fonte que seja distribuída com o TeX Live. O seu msgothic.ttcnão é. Também não é grátis (como na liberdade). Procure uma alternativa gratuita e use-a.

informação relacionada