如何将管道 | 作为工作命令放入宏 \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它检查下一个字符时更改其类别代码表示“组结束”。因此,在找到另一个实例时,字符的组结束性质将自动禁用逐字模式所需的所有特殊设置。定义为\ev有什么问题|?首先,这|不能改为表示“组结束”,但这是问题中最不重要的:\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}

在此处输入图片描述

相关内容