
\ignorespaces
제목에 모든 것이 나와 있습니다. 공백을 무시 하고 어떻게 ~
?
«bla»
내가 묻는 이유는 우리가 문서를 작성하는 여러 작성자이고 소스 코드(예: , « bla »
및 ) 에 프랑스어 길레메를 입력하는 것과 관련하여 서로 다른 습관을 가지고 있기 때문입니다 . 적절한 정의로 «~bla~»
a를 설정하여 이를 통합하고 싶습니다 .\newunicodechar{«}
클로징 길레메의 경우 \unskip
모든 경우에 효과가 있는 것 같습니다.
답변1
LuaLaTeX 기반 솔루션은 다음과 같습니다. 이는 대부분의 작업을 수행하는 Lua 기능과 Lua 기능을 활성화 및 비활성화하는 몇 가지 LaTeX 유틸리티 매크로를 정의합니다. "활성화"란 "LuaTeX의 콜백에 Lua 함수를 할당하여 process_input_buffer
입력 스트림에서 전처리기 역할을 할 수 있도록 하는 것"을 의미합니다.~ 전에TeX는 일반적인 처리를 시작합니다.
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage[french]{babel} % for "\og" and "\fg" macros
\usepackage[french=guillemets]{csquotes} % for "\enquote" macro
\usepackage{luacode} % for "luacode" environment
%% Lua-side code
\begin{luacode}
function delete_whitespace ( s )
s = s:gsub ( "«[ ~]*" , "\\og " )
s = s:gsub ( "[ ~]*»" , "\\fg " )
-- s = s:gsub ( "[ ~]+([%:%;%?%!])" , "%1" ) -- if needed
return s
end
\end{luacode}
%% LaTeX-side code
\newcommand\DeletewhitespaceOn{\luadirect{luatexbase.add_to_callback (
"process_input_buffer", delete_whitespace , "deletewhitespace" )}}
\newcommand\DeletewhitespaceOff{\luadirect{luatexbase.remove_from_callback (
"process_input_buffer", "deletewhitespace" )}}
\AtBeginDocument{\DeletewhitespaceOn} % enable by default
\begin{document}
\enquote{bla} \og{}bla\fg{} «bla» « bla » «~bla~» «~ bla ~ »
\DeletewhitespaceOff
\enquote{bla} \og{}bla\fg{} «bla» « bla » «~bla~» «~ bla ~ »
\end{document}
답변2
expl3을 사용하면 정말 쉽습니다(비록 관련 기능의 극단적인 일반성으로 인해 성능이 이상적이지 않을 수도 있음).
%! TEX program = lualatex
\documentclass{article}
\usepackage{newunicodechar}
\ExplSyntaxOn
\newunicodechar{×}{123\ignorespaces}
\newunicodechar{≡}{123\peek_regex_remove_once:nT{(\cA\~|\cS\ )+}{}}
\ExplSyntaxOff
\begin{document}
× 456
×~456 %unfortunately does not work
% all of the below works:
≡ 456
≡~456
≡~~456
≡~ ~ 456
\end{document}
여기서 설명하기 위해 관련 없는 유니코드 문자 2개를 사용했습니다.
정규식을 미리 컴파일하면 성능이 약간 최적화될 수 있습니다.
\regex_new:N \l_ysalmon_regex
\regex_set:Nn \l_ysalmon_regex {(\cA\~|\cS\ )+}
\newunicodechar{≡}{123\peek_regex_remove_once:NT\l_ysalmon_regex{}}
(OP의 사용자 이름에 따라 이름이 지정된 변수. 필요한 경우 변경)
함수 군 peek
은 일부 특수한 경우를 올바르게 처리하지 못하지만 매우 드물기 때문에 실제로 구현하는 것이 사실상 불가능합니다.
답변3
오프닝 이후에 있는 것을 제거하는 것보다 닫히는 길레메트 전에 모든 접착제, 커른 및 페널티를 제거하는 것이 쉽습니다.
어쨌든 이것은 꽤 효율적일 것입니다.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{newunicodechar}
\newunicodechar{«}{<<\ignoreallspaces}
\newunicodechar{»}{\removeallspaces~>>}
\ExplSyntaxOn
\NewDocumentCommand{\removeallspaces}{}
{
\int_case:nnT { \lastnodetype }
{
{11}{\unskip}
{12}{\unkern}
{13}{\unpenalty}
}
{\removeallspaces}
}
\NewDocumentCommand{\ignoreallspaces}{}
{
\peek_remove_filler:n { \peek_charcode_remove:NT \c_tilde_str { \ignoreallspaces } }
}
\ExplSyntaxOff
\begin{document}
« ~ a ~~ »
\end{document}