Afrouxe o programa de software, como se este site tivesse um recurso muito interessante. Quando digito crases assim: `` Sou capaz de escrever qualquer palavra de programador nele. Como: someFunction()
.
Como faço isso em LaTeX? Quero um efeito semelhante no pdf de saída.
Tenho certeza de que a pergunta já foi respondida, mas não consigo pensar nos termos de pesquisa corretos para encontrá-la. A caça ao tesouro por termos de pesquisa é real.
Responder1
Aqui está uma solução baseada em LuaLaTeX. Caracteres especiais do TeX, como _
e &
, podem ocorrer entre pares de caracteres de crase.Termo aditivopara incorporar um comentário de acompanhamento do OP: É preciso ter cuidado para não interpretar mal caracteres de crase consecutivos - eles geralmente são usados em documentos TeX e LaTeX para iniciar alguma instância de material citado!
% !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}
Um comentário sobre o tipo de correspondência de padrões executada pela função Lua backticks2tt
parece indicado. O padrão
`(..-)`
é a maneira "não gananciosa" de especificar o padrão "todas as instâncias deum ou mais personagensque são delimitados por caracteres de crase". Para especificar uma correspondência de padrão "ganancioso" de "um ou mais caracteres" em Lua, seria necessário digitar
`.+`
No entanto, uma correspondência de padrões gananciosa não seria apropriada aqui, pois acabaria capturando a string inteira
someFunction()` bb `some_other_Function()
no MWE mostrado acima e alterando-o para
\texttt{\detokenize someFunction()` bb `some_other_Function()}
Claramente, isso não está certo e é por isso que é necessário especificar uma correspondência de padrões não gananciosa.
Responder2
Com base na resposta do Mico fiquei um pouco mais sério. Por algum motivo, ainda tive alguns problemas. Então decidi aprender um pouco de Lua através de alguns artigos e testá-la emRepl.it. O site me permite testar e imprimir coisas rapidamente.
SobreRepl.itEu iterei no que queria até chegar ao design final e testei o seguinte código:
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`")
Comecei a trabalhar a partir da resposta do Mico, pois trabalhando a partir do meu testeRepl.ito código resultou em erros e também foi muito mais detalhado. Ainda assim, ajudou, pois aprendi a escrever instruções e funções if, não conhecia a sintaxe antes.
Eu fiz uma grande suposição de que não acionar a instrução return na instrução if seria bom e deixaria o texto em LaTeX como está (aparentemente está). Imprimir para fins de depuração em LaTeX, mesmo depois de ler alguns artigos, é um mistério para mim.
De qualquer forma, este é o código final que funciona para mim e ignora aspas, mesmo aspas simples!
\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" )}}