我对列表中的特殊字符感到困惑

我对列表中的特殊字符感到困惑

我正在使用 TeXMaker 制作 LaTeX 文档。所以我已经制作了几个列表块,当出现错误时,我只是新建一行,如下所示:

{ß}{{\ss}}1
{ü}{{\"u}}1
{ä}{{\"a}}1

等等。但现在我尝试了不同的方法来制作如下所示的块,但没有成功。我认为每行开头的符号(如゚ω゚ノ')破坏了我的代码,但我确实需要它们。你能帮我使用它们吗?我需要使用一些包?我也尝试过日语包和数学包,但没有成功。

我正在尝试制作以下列表:

在此处输入图片描述

以下是真实的例子:

\documentclass{article}
\usepackage{listings}
\begin{document}

\medskip
\begin{lstlisting}[caption=THIS IS OK!]
Name.prototype = {
  methodName: function(params){
    var doubleQuoteString = "some text";
    var singleQuoteString = 'some more text';
    // this is a comment
    if(this.confirmed != null
    && typeof(this.confirmed) == 
    Boolean && this.confirmed == true){
      document.createElement('h3');
      $('#system').append("This looks great");
      return false;
    } else {
      throw new Error;
    }
  }
}
\end{lstlisting}

\begin{lstlisting}[caption=BUT THIS IS NOT OK! why?]
||   ゚ω゚ノ = Variavel { valor: undefined }
||   _ = Variavel { valor: 3 }
||   ゚ー゚ = Variavel { valor: 4}
||   o = Variavel { valor: 3}
||   ゚Θ゚ = Variavel { valor: 1}
||   c = Variavel { valor: 0}
||   ゚Д゚ = Variavel {
  valor: 
   { '゚Θ゚': Variavel { valor: 'f'},
     '゚ω゚ノ': Variavel { valor: 'a'},
     '゚ー゚ノ': Variavel { valor: 'd'},
     '゚Д゚ノ': Variavel { valor: 'e'},
     c: Variavel { valor: 'c'},
     o: Variavel { valor: 'o'},
     _: Variavel { valor: [Function: Function]},
     return: Variavel { valor: '\\'},
     '゚Θ゚ノ': Variavel { valor: 'b'}}
\end{lstlisting}

\end{document}

答案1

其中涉及多个问题。

首先,除非您另行通知,否则listings将使用主文档字体。但 Latin Modern 字体系列没有您使用的希腊文、西里尔文和日文字形,因此不会打印任何内容。

我们可以使用包含所有内容的字体。但这是一个奇怪的组合,不太容易找到。相反,我会使用诺托莫诺作为主等距字体。它包含希腊文和西里尔文字形,但不包含日文字形。但是,可以用这些字形替换Noto Sans Mono CJK JP字体。我们这样做:

\usepackage{fontspec}
\usepackage{newunicodechar}
% use Noto Mono as fixed pitch font
\setmonofont{Noto Mono}
% set up fall back font containing the missing Japanese glyphs
\newfontfamily\fallbackfont{Noto Sans Mono CJK JP}
\DeclareTextFontCommand{\textfallback}{\fallbackfont}
\newunicodechar{ー}{\textfallback{ー}}
\newunicodechar{ノ}{\textfallback{ノ}}
\newunicodechar{゚}{\textfallback{゚}}

现在您应该可以看到列表中的所有字形。

但如果你仔细观察,就会发现希腊文、西里尔文和日文字符的位置是错误的。你必须告诉listings他们,这很麻烦。请按如下方式操作:

% fix up positioning of non-ascii characters in listings
\makeatletter
\lst@InputCatcodes
\def\lst@DefEC{%
    \lst@CCECUse \lst@ProcessLetter
      ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
      ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
      ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
      ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
      ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
      ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
      ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
      ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
      %   Θ       ω
      ^^^^0398^^^^03c9%
      %   Д
      ^^^^0414%
      %   ー       ノ       ゚
      ^^^^ff70^^^^ff89^^^^ff9f%
      ^^00}
\lst@RestoreCatcodes
\makeatother

最后它将按预期工作。

也可以使用minted软件包。您仍然需要字体替换功能,但不必费力地将非 ASCII 字符打印到正确的位置。缺点是minted您需要使用标志进行编译-shell-escape,并且必须python安装后端功能。

以下是完整的 MWE:

\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\usepackage{listings}
\usepackage{minted}
\pagestyle{empty}
% use Noto Mono as fixed pitch font
\setmonofont{Noto Mono}
% set up fall back font containing the missing Japanese glyphs
% needed for both listings and minted
\newfontfamily\fallbackfont{Noto Sans Mono CJK JP}
\DeclareTextFontCommand{\textfallback}{\fallbackfont}
\newunicodechar{ー}{\textfallback{ー}}
\newunicodechar{ノ}{\textfallback{ノ}}
\newunicodechar{゚}{\textfallback{゚}}
% fix up positioning of non-ascii characters in listings
% only needed for listings
\makeatletter
\lst@InputCatcodes
\def\lst@DefEC{%
    \lst@CCECUse \lst@ProcessLetter
      ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
      ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
      ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
      ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
      ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
      ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
      ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
      ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
      %   Θ       ω
      ^^^^0398^^^^03c9%
      %   Д
      ^^^^0414%
      %   ー       ノ       ゚
      ^^^^ff70^^^^ff89^^^^ff9f%
      ^^00}
\lst@RestoreCatcodes
\makeatother
\begin{document}

\section*{Using listings}

\lstset{basicstyle=\ttfamily}
\begin{lstlisting}
||   ゚ω゚ノ = Variavel { valor: undefined }
||   _ = Variavel { valor: 3 }
||   ゚ー゚ = Variavel { valor: 4}
||   o = Variavel { valor: 3}
||   ゚Θ゚ = Variavel { valor: 1}
||   c = Variavel { valor: 0}
||   ゚Д゚ = Variavel {
  valor: 
   { '゚Θ゚': Variavel { valor: 'f'},
     '゚ω゚ノ': Variavel { valor: 'a'},
     '゚ー゚ノ': Variavel { valor: 'd'},
     '゚Д゚ノ': Variavel { valor: 'e'},
     c: Variavel { valor: 'c'},
     o: Variavel { valor: 'o'},
     _: Variavel { valor: [Function: Function]},
     return: Variavel { valor: '\\'},
     '゚Θ゚ノ': Variavel { valor: 'b'}}
\end{lstlisting}

\section*{Using minted}

\begin{minted}[fontfamily=tt]{text}
||   ゚ω゚ノ = Variavel { valor: undefined }
||   _ = Variavel { valor: 3 }
||   ゚ー゚ = Variavel { valor: 4}
||   o = Variavel { valor: 3}
||   ゚Θ゚ = Variavel { valor: 1}
||   c = Variavel { valor: 0}
||   ゚Д゚ = Variavel {
  valor: 
   { '゚Θ゚': Variavel { valor: 'f'},
     '゚ω゚ノ': Variavel { valor: 'a'},
     '゚ー゚ノ': Variavel { valor: 'd'},
     '゚Д゚ノ': Variavel { valor: 'e'},
     c: Variavel { valor: 'c'},
     o: Variavel { valor: 'o'},
     _: Variavel { valor: [Function: Function]},
     return: Variavel { valor: '\\'},
     '゚Θ゚ノ': Variavel { valor: 'b'}}
\end{minted}
\end{document}

在此处输入图片描述

相关内容