パイプ | をマクロ \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 を使用して短い verbatim を定義できます。ドキュメントを参照してください。

\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?|まず、これを|「グループの終わり」を意味するように変更することはできませんが、これは最も問題ではありません。 は、\ev3つの文字で構成される文字列として検査されます。普通文字は\verb有効であるため、コマンドとして解釈することはできません。

インラインの逐語的資料に色を付けることが目的であれば、より簡単な方法があります。ここでは 2 つの方法を示します。1 つは単一の色で、\greenverbと同じ構文でマクロを定義する方法です\verb。2 つ目の方法は、色の指定を引数として受け取り、汎用の color 逐語的コマンドを呼び出す を定義します\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}

ここに画像の説明を入力してください

関連情報