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" )}}