~를 포함한 공백을 무시합니다.

~를 포함한 공백을 무시합니다.

\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}

여기에 이미지 설명을 입력하세요

답변4

babel-french v3.5o가 문제(LuaTeX 엔진에만 해당)를 수정했다는 점을 언급하고 싶습니다. 즉, 코딩 하거나 «bla»동일한 출력을 생성합니다.« bla »«~bla~»

\documentclass{article}
\usepackage{fontspec}
\usepackage[french]{babel}
\frenchsetup{og=«, fg=»}
\begin{document}
«bla»  « bla »  «~bla~» \frquote{bla}
\end{document}

인쇄물

여기에 이미지 설명을 입력하세요

관련 정보