ヴィジュネル広場を埋める方法は?
How Fill Vigen Re Square
解決:
一度に1行ずつテーブルに入力します。
documentclass {article} usepackage [table] {xcolor} definecolor {headers} {RGB} {234,232,218} ExplSyntaxOn tl_new:N l_vigenere_body_tl NewDocumentCommand { vigenere} {} {%最初の行を作成 tl_set:Nn l_vigenere_body_tl { hline rowcolor {headers}} tl_put_right:Nx l_vigenere_body_tl { int_step_function:nN {26} vigenere_first:n} tl_put_right:Nn l_vigenere_body_tl {\ hline} int_step tl_put_right:Nn l_vigenere_body_tl { bfseries int_to_Alph:n {## 1}} tl_put_right:Nx l_vigenere_body_tl { int_step_function:nnN {## 1} {## 1 + 25} vigenere_further:n} tl Nn l_vigenere_body_tl {\ hline}} group_begin: setlength { tabcolsep} {0.5pt} sffamily begin {tabular} {| > { columncolor {headers}} c | * {26} c} l_vigenere_body_tl end {tabular} group_end:} cs_new:Nn vigenere_first:n {& exp_not:N bfseries int_to_Alph:n {#1}} cs_new:Nn vigenere_further:n {& int_to_Alph:n { int_mod:nn {#1-1} {26} + 1}} ExplSyntaxOff begin {document} vigenere end {document}
これがLuaLaTeXベースのソリューションです。
documentclass {article} usepackage [letterpaper、margin = 1in] {geometry}%ページパラメータを適切に設定 usepackage {array}%for ' extrarowheight'マクロ usepackage [table] {xcolor} usepackage {luacode} begin { luacode}s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'-i = 1,26の補助関数関数rowprint(t)do tex.sprint('& '.. t:sub(i、i))end tex.sprint(' \\ \ hline ')end-メイン関数function vigenere()tex.sprint(' \ hline ')-ヘッダー行tex.sprint(' \ rowcolor {lightgray} ')for i = 1,26 do tex .sprint( '&\ textbf {\ textsf {' .. s:sub(i、i).. '}}')end tex.sprint( '\\ \ hline')-データ行(AからZへ)t = s for j = 1,26 do t = s:sub(j).. s:sub(1、j-1)tex.sprint( '\ cellcolor {lightgray} \ textbf {\ textsf {'.. t:sub(1,1)..'}} ')rowprint(t)end end end {luacode} begin {document} begin {center} setlength tabcolsep {3pt} setlength extrarowheight {3pt} begin {tabular} {| * {27} c} directlua {vigenere()} end {tabular} end {center} end {document}
を使用してアルファベットを循環する別の方法pgffor:
documentclass {article} usepackage [margin = 1in] {geometry} usepackage {pgffor、xcolor、eqparbox} makeatletter newcommand { ALPH} [1] {% ifnum#1> 26 @Alph { numexpr# 1-26}% else @Alph {#1}% fi} makeatother begin {document} begingroup makeatletter sffamily footnotesize centering fcolorbox {black} {brown!50!white} { eqmakebox [vignere] { vphantom {Q}}}%左上のボックス foreach Char in {1、...、26} {% fcolorbox {black} {brown!50!white} { eqmakebox [vignere] { vphantom {Q} bfseries @Alph { Char}}}%ヘッダー} \ [-1pt] foreach CharA in {0、...、25} {% fcolorbox {black} {brown! 50!white} { eqmakebox [vignere] { vphantom {Q} bfseries @Alph { numexpr CharA + 1}}}%左の列 foreach CharB in {0、...、25} {% fbox { eqmakebox [vignere] { vphantom {Q} ALPH { numexpr CharA + CharB + 1}}}%}%\ [-1pt]} par endgroup end {document}