如何將虛擬字元加入逐字塊的開頭

如何將虛擬字元加入逐字塊的開頭

我試著去理解commandcharsfancyverb 的Verbatim

\documentclass{article}
\usepackage{fancyvrb}

\begin{document}
\phantom{foo}
\begin{Verbatim}[commandchars=\\\!\!]
\phantom{bar}
trait Sys[S <: Sys[S]] {
  type ID <: Ident[S#Tx]
  type Tx
}
\end{Verbatim}
\end{document}

bar}內容逐字列印在第一行。我有三個問題:

  1. 如果我使用\phantom.
  2. 為什麼要包含右花括號?
  3. 我無法使用,commandchars=\\\{\}因為它與列印的程式語言的大括號衝突。所以我用[commandchars=\\\!\!].但是,當我嘗試插入時,\phantom!bar!我收到錯誤\FancyVerbGetLine has an extra }

實際上,我想要實現的只是列印一個行不通的前導空行,而是出現一條半高行。所以我的想法是最簡單的方法是透過添加幻像字元來強制第一行的高度。

答案1

錯誤是在

commandchars=\\\!\!

您必須指定三個清楚的表格中的字元\<char>;第一個將用於代替反斜杠,第二個將用於代替左大括號,第三個將用於代替右大括號。因此像

\documentclass{article}
\usepackage{fancyvrb}

\begin{document}

\begin{Verbatim}[commandchars=\\\!\?]
\phantom!bar?XYZ
trait Sys[S <: Sys[S]] {
  type ID <: Ident[S#Tx]
  type Tx
}
\end{Verbatim}

\end{document}

我添加XYZ只是為了表明幻影受到尊重。一行中的一個本身是沒有用的:只需留一個空白行即可。

在此輸入影像描述

讓我們看看您的範例中會發生什麼。反斜線被定義為也可以在Verbatim區塊中使用以轉義命令。首先將其!等同於{起始組,然後立即將其等同於}結束組。因此,您將無法將多標記參數傳遞給宏,因為您沒有左參數分隔符號。

\phantom{bar}被處理時,\phantom正常執行(反斜線已被賦予其正常含義)並且它找到{前面沒有左參數分隔符號的標記。請記住,我們處於逐字模式! So{被視為 的參數\phantom,它會產生一個相當於字母的空格。然後bar}逐字打印。

你的嘗試

\phantom!bar!

不起作用,因為它相當於,outside Verbatim\phantom}bar}這是非法的。和

commandchars=\\\!\?

\phantom!bar?

我們正在做正常情況下應該做的事情\phantom{bar}

答案2

我了解到許多乳膠命令都存在問題,例如\phantom與命令字元組塊的想法不相容。這裡的解決方法是定義一個無參數幫助指令,如下所示:

\newcommand{\worstLanguageEver}{\phantom{I}}
\begin{Verbatim}[commandchars=\\\$\$]
\worstLanguageEver
trait Sys[S <: Sys[S]] {
  type ID <: Ident[S#Tx]
  type Tx
}

相關內容