Как поместить канал | в качестве рабочей команды в макрос \newcommand

Как поместить канал | в качестве рабочей команды в макрос \newcommand

Я ленивый парень и люблю часто использовать newcommands. После завершения я заменю на оригинальный код.

\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волшебник, а новичок, то любая подсказка будет оценена по достоинству!

Я забыл: работа с PDFLateX на Linux.

С уважением!

решение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}

введите описание изображения здесь

Связанный контент