如何在latex中排版日文ascii藝術?

如何在latex中排版日文ascii藝術?

我正在考慮創建一個包,它提供了一個使用 MS PGothic 來排版一些精美的日語 ASCII 藝術的環境。 MS PGothic 是日文 ASCII 藝術的預設字體。

我的想法是創造一個新的逐字環境。但似乎逐字要求字體是等寬的,同時,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命令,因為它全域更改用於 -type 文字的字體\verb。相反,我定義了 a\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的不是。而且它不是免費的(如自由)。尋找免費的替代品並使用它。

相關內容