Как по-другому отобразить ключевые слова программирования?

Как по-другому отобразить ключевые слова программирования?

Slack - программа, как и этот сайт, имеет очень приятную функцию. Когда я печатаю обратные кавычки, например: `` Я могу написать в ней любое программистское слово. Например: someFunction().

Как это сделать в LaTeX? Я хочу получить аналогичный эффект в выходном pdf.

Я почти уверен, что на этот вопрос уже есть ответ, но я не могу придумать правильные поисковые термины, чтобы найти его. Охота за мусором для поисковых терминов реальна.

решение1

Вот решение на основе LuaLaTeX. Специальные символы TeX, такие как _и& , могут встречаться между парами символов обратных кавычек.Приложениевключить последующий комментарий OP: необходимо проявлять осторожность, чтобы не допустить неправильной интерпретации последовательных символов обратных кавычек — они обычно используются в документах TeX и LaTeX для инициирования некоторого примера цитируемого материала!

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

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function backticks2tt ( s )
  return ( s:gsub ( "`(..-)`" , "\\texttt{\\detokenize{%1}}" ) )
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback(
  "process_input_buffer", backticks2tt, "backticks2tt" )}}
\usepackage{url}

\begin{document}
aa `someFunction()` bb `some_other_Function()` cc
\end{document} 

Комментарий к типу сопоставления с образцом, который выполняется функцией Lua, backticks2ttкажется, указан. Образец

`(..-)`

это «нежадный» способ указания шаблона «все экземплярыодин или несколько символовкоторые заключены в символы обратных кавычек". Чтобы указать "жадное" сопоставление с образцом "одного или нескольких символов" в Lua, нужно ввести

`.+`

Однако жадный поиск по шаблону здесь неуместен, так как в итоге будет захвачена вся строка.

someFunction()` bb `some_other_Function()

в MWE, показанном выше, и изменив его на

\texttt{\detokenize someFunction()` bb `some_other_Function()}

Очевидно, что это неправильно, и именно поэтому необходимо указать нежадное сопоставление с образцом.

решение2

На основе ответа Мико я стал немного серьезнее. По какой-то причине у меня все еще были некоторые проблемы. Поэтому я решил изучить Lua по некоторым статьям и протестировать его наRepl.it. Сайт позволяет мне быстро тестировать и печатать материалы.

НаRepl.itЯ перебирал все, что хотел, пока не пришел к окончательному варианту и не протестировал следующий код:

function replaceBacktick(input)
  local backtickPattern = "`(..-)`"
  local quotePattern = "`(..-)'"
  isQuoteMatch = input:find(quotePattern)
  if isQuoteMatch == nil then
    print("this is not a quote")
    print( input:gsub(backtickPattern, "\\texttt{" .. input .. "}") )
  else
    print("this is a quote")
  end
end


replaceBacktick( "``the number of correctly identified instances divided by the total number of instances \cite{leong2016} '') and 2.53\% (sensitivity which``")
replaceBacktick("`SomeReactComponent`")

Я начал работать с Мико его ответ, потому что работая с моим провереннымRepl.itкод приводил к ошибкам и также был намного более многословным. Тем не менее, это помогло, так как я научился писать операторы if и функции, я не знал синтаксис до этого.

Я сделал огромное предположение, что не вызывать оператор return в операторе if будет нормально и оставит текст в LaTeX как есть (судя по всему, так и есть). Печать в целях отладки в LaTeX, даже после прочтения некоторых статей, остается для меня загадкой.

В любом случае, это окончательный код, который у меня работает и игнорирует кавычки, даже одинарные!

\usepackage{luacode}
\begin{luacode}
function backticks2tt ( input )
    local isQuoteMatch = input:find("`(..-)'")
    if isQuoteMatch == nil then
        return ( input:gsub ( "`(..-)`" , "\\inlinecode{\\detokenize{%1}}" ) )
    end
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback(
  "process_input_buffer", backticks2tt, "backticks2tt" )}}

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