見出し画像

【備忘録】LaTeXで二次元配列を利用し\foreachにて画像を挿入するループをぶん回す



そもそもなぜこんなことをする必要があるのか?\foreachを使って自動的に図を挿入したいからです。以下のような使い方を想定しています。

テーマ名を記述した一次元の配列を以下のように用意する。

\newarray \themaName
\readarray{themaName}{
    オームの法則と抵抗の接続(1) & オームの法則と抵抗の接続(2)
}

挿入したい画像の名前を記述したこのような二次元配列を用意する。

\newcommand{\questionArray}{%
{R5FP1,R4SA1,R4FP1,R3SA1,R3FP1},%
{R5SA1,R5FA1,R4SP1,R4FA1,R3SP1},%
}

んでもってこの文でぶん回す。

\foreach \row in \questionArray{%
    {\huge \themaName(\arabic{themaCounter})}
    \par
    \foreach \img in \row{%
        \begin{figure}[H]
            \centering
            \caption*{\LARGE \img}
            \includegraphics[width=0.9\linewidth]{\img.png}%
        \end{figure}
    }%
    \stepcounter{themaCounter}
    \newpage
}

二次元配列の元データはExcelで生成する。input.txtに張り付けるとタブ区切りのテキストとなっている。これをバッチファイルで加工する。二段階に分けているけどその必要はなし。なんとなくそうしているだけ。

@echo off
setlocal

:: 入力ファイル名(タブ区切りのテキストファイル)
set "inputFile=input.txt"

:: 出力ファイル名(カンマ区切りのCSVファイル)
set "outputFile=input.csv"

:: PowerShellを使ってタブの連続を1つのカンマに置き換える処理を実行
REM powershell -Command "Get-Content '%inputFile%' | ForEach-Object { ($_ -replace '\t+', ',') } | Set-Content '%outputFile%'"
powershell -Command "Get-Content '%inputFile%' | ForEach-Object { ($_ -replace '\t+', ',') -replace ',$', '' } | Set-Content '%outputFile%'"

echo 変換が完了しました: %outputFile%
pause
@echo off
setlocal enabledelayedexpansion

:: 入力ファイルと出力ファイルを設定
set "input_file=input.csv"
set "output_file=output.csv"

:: 出力ファイルを空にする(既存の内容を削除)
echo. > "%output_file%"

:: CSVファイルを1行ずつ読み込む
for /f "tokens=*" %%A in (%input_file%) do (
    :: 各行の前に "{" を追加し、後ろに "," を追加して出力
    echo {%%A},%%>> "%output_file%"
)

echo 処理が完了しました。
pause

output.csvをLaTeXの配列にコピペするだけで二次元配列として使える。

いいなと思ったら応援しよう!