如何放置管道|作為巨集 \newcommand 中的工作命令

如何放置管道|作為巨集 \newcommand 中的工作命令

我是一個懶惰的人,喜歡經常使用新指令。完成後我將用原始程式碼替換。

我想要\verb|.. 此處文字 的縮寫.. |

但這裡出了問題 - 我不知道如何修復我的程式碼:

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}


\newcommand\bv{\verb|}
\newcommand\ev{|}

\begin{document}
1. Putting \color{green!40!black} \verb| hurz |  \color{black} works 


but: 


2. Putting \bv hurz \ev fails.
\end{document}

由於我不是\TeX巫師,而是初學者,因此非常感謝每一個提示!

我忘記了:在 Linux 上使用 PDFLateX。

問候!

答案1

逐字命令需要在不擴展命令的情況下找到結束字串,因此您無法將其隱藏在\ev命令中。

您可以使用 fancyvrb 來定義簡短的逐字記錄,請參閱文件:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\usepackage{fancyvrb}

\DefineShortVerb{\|}

\begin{document}
Putting |\section{abc} hurz| work
\end{document}

答案2

\verb必須知道在哪裡結束,但同時它必須禁用字元的所有特殊解釋,包括反斜線。

人們可能會認為用細繩 \ev,但是這樣會非常麻煩。使用不在要逐字列印的材料中的單字進行定界要簡單得多。但這是以一種非常間接的方式起作用的。

當 LaTeX 找到\verb它時,它會檢查下一個字元並更改其類別代碼意思是「團體結束」。因此,在找到它的另一個實例時,角色的組尾性質將自動停用逐字模式所需的所有特殊設定。定義\evto 有什麼問題|?首先,這|不能更改為「組結束」的意思,但這是最不重要的問題:\ev將被檢查為由三個組成的字串普通的人物,因為\verb有效!所以它不能被解釋為命令。

如果您的目標是對內聯逐字材料進行著色,則有更簡單的方法。我展示了兩個:一個具有單一顏色,使用\greenverb\verb.第二種方法定義\colorverb將顏色規格作為參數,然後逐字呼叫通用顏色指令。

\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}

\newverbcommand{\greenverb}{\color{green!40!black}}{}

\begin{document}

Putting \greenverb|hurz| works

\end{document}

在此輸入影像描述

如果您需要多種顏色,您可以定義一個通用命令,然後對其進行專門化。請使用比(您的名字、隨機字串或其他任何內容)更詳細的前綴,my以盡量減少衝突的可能性。

\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}

\makeatletter % allow private control sequences
\newverbcommand{\my@colorverb}{\color{\my@verbatimcolor}}{}
\newcommand{\colorverb}[1]{\def\my@verbatimcolor{#1}\my@colorverb}
\makeatother

\newcommand{\greenverb}{\colorverb{green!40!black}}
\newcommand{\blueverb}{\colorverb{blue!80!black}}

\begin{document}

Putting \greenverb|hurz| works

Putting \blueverb|hurz| works

Putting \colorverb{red!80!black}|hurz| works

\end{document}

在此輸入影像描述

答案3

這不是真正的逐字稿,但已經非常接近了。例如,輸入需要支撐平衡。

語法是使用者請求的:\bv....\ev。此外,逐字記錄材料可以包括換行符和段落符(空白行)。

它會產生不正確輸出的一個地方是\bv輸入行以單獨的反斜線結尾\。如果 catcode-1,2 字元已更改,則會出現另一個不正確的輸出...它們將繼續顯示為{},除非採取額外的步驟。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern,tokcycle}
\tokcycleenvironment\myverb
{\addcytoks[1]{\string##1}}
{\addcytoks{\{}\processtoks{##1}\addcytoks{\}}}
{\ifx\par##1\addcytoks{\\}\else\addcytoks[1]{\string##1}\fi}
{\addcytoks[1]{\string##1}}
\makeatletter
\def\bv{\begingroup\obeylines\catcode`\%=12%
  \long\def\tokencycle##1##2##3##4{\begingroup\let\endtokencycle
  \endtokcycraw\aftertokcycle{\the\cytoks\expandafter\endgroup
  \expandafter\endgroup\expandafter\tcenvscope
  \expandafter{\the\cytoks}}\tokcycraw{##1}{##2}{##3}{##4}}%
  \myverb}
\makeatother
\let\ev\endtokcycraw
\begin{document}
\textit{here we} go:
\bv ABc. D &^$% \xyz
\ {ef}g~\\

H#I^_ \ev back t\v{o} normal \today

a
b%
c
\end{document}

在此輸入影像描述

相關內容