Я ленивый парень и люблю часто использовать 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}