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
根據Mico的回答,我變得更加嚴肅了。由於某種原因,我仍然遇到了一些問題。所以我決定透過一些文章學習一些Lua並在上面進行測試複製品。該網站允許我快速測試和列印內容。
在複製品我迭代了我想要的,直到達到最終設計並測試了以下程式碼:
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`")
我開始從 Mico 他的答案開始工作,因為從我測試過的工作開始複製品程式碼會導致錯誤,而且也更加冗長。儘管如此,它還是有幫助的,因為我學會瞭如何寫 if 語句和函數,而我以前不知道語法。
我做了一個巨大的假設,即不觸發 if 語句中的 return 語句就可以了,並且可以按原樣保留 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" )}}