바벨이나 폴리글로시아가 없는 프랑스어 간격

바벨이나 폴리글로시아가 없는 프랑스어 간격

구성된 언어로 문서를 다시 편집하려면(라틴계 사인 플렉시온), "프랑스어" 구두점 간격이 필요합니다.부작용 없이.

더 구체적으로 말하면, 이중 구두점 앞에 작은 줄바꿈 방지 공백을 원하고, : ; ! ?시작 뒤나 닫는 따옴표(guillemet) 앞에는 줄바꿈하지 않는 일반 공백을 «원합니다 ».

답변1

pdflatex문자의 카테고리 코드 변경을 기반으로 솔루션을 사용할 수 있습니다 .

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
% saving original quotes representation
\let\gll\guillemotleft
\let\glr\guillemotright
% new quotes representation
\def\frenchguillemotleft{\gll~}
\def\frenchguillemotright{~\glr}
{
    \catcode`\:=\active
    \catcode`\;=\active
    \catcode`\?=\active
    \catcode`\!=\active
    \gdef\frenchpunct{%
        \catcode`\:=\active \def:{\thinspace\char`\: }
        \catcode`\;=\active \def;{\thinspace\char`\; }
        \catcode`\?=\active \def?{\thinspace\char`\? }
        \catcode`\!=\active \def!{\thinspace\char`\! }
        \let\guillemotleft\frenchguillemotleft
        \let\guillemotright\frenchguillemotright
    }
}
\def\nofrenchpunct{%
    \catcode`\:=12
    \catcode`\;=12
    \catcode`\?=12
    \catcode`\!=12
    \let\guillemotleft\gll
    \let\guillemotright\glr
}
\begin{document}
french: french; french? french!
«french»

\frenchpunct
french: french; french? french!
«french»

\nofrenchpunct
french: french; french? french!
«french»
\end{document}

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

명령은 \frenchpunct문자 :, ;및 활성화를 만든 다음 원하는 동작에 따라 정의합니다. 문자 앞의 깨지지 않는 얇은 공백입니다 ?. !또한 이 명령은 명령을 재정의하며 \guillemotleft패키지 \guillemotright에 의해 선언됩니다 inputenc.

명령 \nofrencpunct변경이 모두 취소되었습니다.

주목:\frenchpunct명령은 로컬입니다. 따라서 더듬는 문자에 둘러싸여 있으면 {}그룹을 탈퇴한 후에 효과가 사라집니다. 모두 앞에 \nofrenchpunct추가 (또는 의 별칭을 사용 ) 하고 정의 에서만 취소되는 전역 명령이 필요한 경우 :\global\def\gdef\global\def\catcode\let\frenchpunct

\gdef\frenchpunct{%
    \global\catcode`\:=\active \gdef:{\thinspace\char`\: }
    \global\catcode`\;=\active \gdef;{\thinspace\char`\; }
    \global\catcode`\?=\active \gdef?{\thinspace\char`\? }
    \global\catcode`\!=\active \gdef!{\thinspace\char`\! }
    \global\let\guillemotleft\frenchguillemotleft
    \global\let\guillemotright\frenchguillemotright
}

그리고 다음과 같이 동일하게 만듭니다 \nofrenchpunct.

\def\nofrenchpunct{%
    \global\catcode`\:=12
    \global\catcode`\;=12
    \global\catcode`\?=12
    \global\catcode`\!=12
    \global\let\guillemotleft\gll
    \global\let\guillemotright\glr
}

답변2

LuaLaTeX 기반 솔루션은 다음과 같습니다. 이는 french_punctuation_spacing모든 작업을 수행하는 Lua 함수 와 Lua 함수를 활성화 및 비활성화하는 각각 \FrenchPunctuationSpacingOn및 라는 두 개의 LaTeX 유틸리티 매크로로 구성됩니다.\FrenchPunctuationSpacingOff

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

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}  % for 'luacode' environment
\begin{luacode}
function french_punctuation_spacing ( s )
  s = s:gsub ( "[:;!?]" , "\\,%0" )
  s = s:gsub ( "«" , "«~" )
  s = s:gsub ( "»" , "~»" )
  return s
end
\end{luacode}
\newcommand\FrenchPunctuationSpacingOn{\directlua{%
  luatexbase.add_to_callback ( "process_input_buffer",
  french_punctuation_spacing , "frenchpunctuationspacing" )}}
\newcommand\FrenchPunctuationSpacingOff{\directlua{%
  luatexbase.remove_from_callback ( "process_input_buffer",
  "frenchpunctuationspacing" )}}

%\usepackage{fontspec} % optional

\begin{document}
bonjour: monde; oui? non! «aujourd'hui»

\FrenchPunctuationSpacingOn % activate the Lua function
bonjour: monde; oui? non! «aujourd'hui»

\FrenchPunctuationSpacingOff % deactivate the Lua function
bonjour: monde; oui? non! «aujourd'hui»
\end{document}

관련 정보